Matlab Subscripted Assignment Dimension Mismatch Fminsearch

Bonsoir,

J'aurais besoin de vos lumières concernant la fonction fminsearch de MATLAB.
J'ai une fonction J(a,x,y) à minimiser selon a avec x et y donnés (mais qui reste des paramètres que je peux faire varier suivant le cas étudié).
J'utilise donc la fonction fminsearch de la manière suivante:
fminsearch(@J,X0,options,x,y)

Quand je remplace xs et ys par leurs valeurs (par exemple: fminsearch(@J,X0,options,1,2)) et que je rentre ça dans la fenêtre de commande j'obtiens bien mon a optimal. Cependant je voudrais tracer dans un repère (x,y,z) mes a optimaux en fonction de x et y.
J'écris donc une macro:

X = 1:0.1:10;
Y = 1:0.1:10;
plot3(X,Y,fminsearch(@J,8,OPTI MSET('Tolx',1e-10,'TolFun',1e-10),X,Y,0.5),'b')

Mais quand j'exécute la macro cela ne fonctionne pas et j'obtiens le message d'erreur suivant:

??? Subscripted assignment dimension mismatch.

Error in ==> fminsearch at 205
fv(:,1) = funfcn(x,varargin{:});

Error in ==> Plot at 4
plot3(X,Y,fminsearch(@J,8,OPTI MSET('Tolx',1e-10,'TolFun',1e-10),X,Y,0.5),'b');


Auriez vous une idée ?

Merci d'avance et bonne soirée/nuit.

-----

Fonction fminsearch, Matlab !

Tout ce qui concerne les différents logiciels mathématiques (Matlab, Maxima, Scilab, R, Maple, Mathematica, ...) et les calculatrices scientifiques.

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.
> Préciser le nom du logiciel concerné dans le titre de votre message.






Retourner vers Logiciels mathématiques

 



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

Fonction fminsearch, Matlab !

par Maxinquaye » Lundi 03 Mars 2014, 16:09

Bonjour à tous !

EDIT : Après avoir cherché et avoir essayé sur Matlab, je rencontre un nouveau problème (je ne dois vraiment pas comprendre comment marche fminsearch ...).

Voici le code que j'entre :

Code: Tout sélectionner


Où la fonction fa est la suivante : (fichier fa.m dans le même répertoire)

Code: Tout sélectionner


En gros, ce que je veux c'est tracer la fonction fa (retournée dans la variable z) en fonction de k pour différents omega, et trouver la valeur de k correspondant au minimum de la fonction à chaque fois. Malheureusement, Matlab me renvois l'erreur suivante :

"Subscripted assignment dimension mismatch.

Error in fminsearch (line 191)
fv(:,1) = funfcn(x,varargin{:});"

Je comprends qu'il y a un problème dans la taille de mon vecteur k mais je ne comprends pas d'où ça vient ...

Si jamais quelqu'un n'aurait ne serait-ce qu'une petite idée d'où pourrait provenir le problème je le remercie bien fort
Maxinquaye
Déca-utilisateur
 
Messages: 17
Inscription: Lundi 22 Avril 2013, 18:02
Localisation: Valenciennes
Statut actuel: Post-bac | Doctorat

Haut

Re: Fonction fminsearch, Matlab !

par nirosis » Jeudi 06 Mars 2014, 14:09

bonjour

déjà je ne comprends pas pourquoi tu mets
Code: Tout sélectionner


et un peu plus loin k semble avoir seulement 2 éléments..
Code: Tout sélectionner


[0;0] est ton "initial guess" de la solution...

Ensuite, je n'ai pas testé mais as-tu essayé de mettre :
Code: Tout sélectionner

(en général, on met les paramètres après la variable que l'on ajuste, mais peut-être que cela ne change rien...)

Autre point : ta fonction z = fa(omega,k) devrait retourner un scalaire
Je pense qu'elle retourne un vecteur là, non ? (donc considère la norme au carré de ton vecteur par exemple)

nirosis
Lisez le tutoriel sur LaTeX

nirosis
Administrateur
 
Messages: 1806
Inscription: Samedi 28 Mai 2005, 13:48
Localisation: Orsay, France
Statut actuel: Actif et salarié | Maître de conférence

Haut

Re: Fonction fminsearch, Matlab !

par Maxinquaye » Vendredi 07 Mars 2014, 13:22

Merci de ta réponse mais j'avais finalement réussi à trouver la solution tout seul Le problème ne vient pas des arguments en faîtes, c'est juste qu'il faut passer la fonction que l'on veut traiter avec fminsearch en fonction de type "handle" (type de fonction que je n'avais jamais rencontré avant). J'insère mon code ici des fois que d'autre personnes auraient le même problème que moi (je n'ai trouvé que très peu de réponses intéressantes à mon problème sur google) :

Il faut d'abord définir la/les fonctions à traiter (personnellement je les ai définis dans un fichier matlab à part mais je pense que ça n'est pas nécessaire) :

Exemple :
Code: Tout sélectionner


Ici j'ai enlevé toute la partie du programme qui définie les paramètres KSI, x et y pour alléger la présentation.

Ensuite, il faut passer cette fonction en fonction de type handle (où fct_sym est le nom de la fonction définie plus haut) :

Exemple :
Code: Tout sélectionner


Il faut (d'après ce que j'ai compris) que la fonction n'ait qu'une variable (ici kh), mais elle peut avoir plusieurs paramètres d'entrée (ici omegah). Il est nécessaire de définir les paramètres d'entrée à l'avance, mais il n'est pas nécessaire de définir kh (cependant je ne sais pas quelles valeurs sont prises pour kh ni le pas ...).

Voilà la syntaxe générique : Nom_fonction_handle = @(variable_de_la_fonction)nom_de_la_fonction(argument_d'entrée_1, 2, 3, ...); il faut qu'il n'y est aucun espace !!! (je pense que mon erreur venait peut être de là tout simplement).

Pour tracer une fonction handle, il faut utiliser la fonction ezplot (argument d'entrée : (fct handle à tracer, [début,fin de l'affichage de l'axe des abscisses (correspond à un xlim)]), qui n'admet pas un vecteur en argument d'entrée.

Enfin, il suffit de taper :

Code: Tout sélectionner


et la valeur du minimum de la fonction est retournée dans la variable Nom_variable.

Cependant, j'ai remarqué que la fonction fminsearch ne retourne que le premier minimum d'une fonction (par exemple abs(cos(x)), le fminsearch de cette fonction ne trouve que le premier minimum).

Voilà, en espérant que mon post aidera un jour d'autre personne qui comme moi étaient totalement pommé avec l'utilisation de cette fonction haha !
Maxinquaye
Déca-utilisateur
 
Messages: 17
Inscription: Lundi 22 Avril 2013, 18:02
Localisation: Valenciennes
Statut actuel: Post-bac | Doctorat

Haut

Re: Fonction fminsearch, Matlab !

par nirosis » Vendredi 07 Mars 2014, 20:05

tant mieux si tu as réussi alors.

C'est normal que fminsearch s'arrête sur le 1er minimum. Elle s'arrête au le 1er minimum local trouvé.
Si tu veux avoir d'autres solutions, il faut changer le point de départ...

nirosis
Lisez le tutoriel sur LaTeX

nirosis
Administrateur
 
Messages: 1806
Inscription: Samedi 28 Mai 2005, 13:48
Localisation: Orsay, France
Statut actuel: Actif et salarié | Maître de conférence

Haut

  • [Matlab] Fonction B spline
    par almansi01 » Mercredi 03 Décembre 2008, 18:34
    0
    1442
    par almansi01
    Mercredi 03 Décembre 2008, 18:34
  • [Matlab] Problème de fonction
    par farid1992 » Mardi 26 Avril 2016, 12:06
    1
    487
    par Maxinquaye
    Mardi 26 Avril 2016, 12:32
  • [Matlab/Octave] Approximation de fonction
    par The Duke » Dimanche 30 Mai 2010, 17:33
    4
    823
    par zunzun
    Mercredi 09 Juin 2010, 11:21
  • Fonction barplotxy avec Matlab
    par asma » Mardi 18 Novembre 2014, 21:32
    6
    838
    par tjbtjbtjb
    Vendredi 06 Mars 2015, 16:53
  • Probleme avec Matlab d'une fonction d'inconnu
    par kungfuchicken » Mercredi 21 Mars 2007, 15:50
    2
    1202
    par nirosis
    Mercredi 21 Mars 2007, 23:19

0 Replies to “Matlab Subscripted Assignment Dimension Mismatch Fminsearch”

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *