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.

Fonction fminsearch, Matlab !

Messagepar 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
clear all;
close all;

k= 0.1 : 0.1 : 1000;

f = 10^6;
omega = 2*pi*f;

Xa = fminsearch(@(k) fa(omega,k),[0;0]);


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

Code: Tout sélectionner
function z = fa(omega,k)

rho = 903;
mu = 36*10^6;
lambda = 1.95*10^3*10^6;
nu = 0.491;
E = 107.3*10^6;
h = 10^-2;

cL = sqrt((lambda + 2*mu)/rho);
cT = sqrt(E*(1-nu)/(rho*(nu+1)*(1-2*nu)));

OMEGA = omega*h/cT;
KSI = k*h;

x = sqrt(OMEGA^2-KSI.^2);
y = sqrt(OMEGA^2*(cT/cL)^2-KSI.^2);

z = (KSI.^2-x.^2).^2.*sin(y).*cos(x)+4.*x.*y.*KSI.^2.*cos(x).*sin(y);

end


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

Publicité

Re: Fonction fminsearch, Matlab !

Messagepar nirosis » Jeudi 06 Mars 2014, 14:09

bonjour

déjà je ne comprends pas pourquoi tu mets
Code: Tout sélectionner
k= 0.1 : 0.1 : 1000;


et un peu plus loin k semble avoir seulement 2 éléments..
Code: Tout sélectionner
,[0;0]


[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
fa(k,omega)

(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
Administrateur
 
Messages: 1806
Inscription: Samedi 28 Mai 2005, 13:48
Localisation: Orsay, France
Statut actuel: Actif et salarié | Maître de conférence

Re: Fonction fminsearch, Matlab !

Messagepar 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
function z = fs(omegah,kh)

z = (KSI.^2-x.^2).^2.*sin(y).*cos(x)+4.*x.*y.*KSI.^2.*cos(x).*sin(y);
z = abs(real(z));

end


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
 S = @(kh)fct_sym(omegah,kh);


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
Nom_variable = fminsearch(S,point de départ de la recherche);


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

Re: Fonction fminsearch, Matlab !

Messagepar 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
Administrateur
 
Messages: 1806
Inscription: Samedi 28 Mai 2005, 13:48
Localisation: Orsay, France
Statut actuel: Actif et salarié | Maître de conférence


Retourner vers Logiciels mathématiques

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités