Salut,
J'utlise la fonction de minimisation fsolve. Dans une version de mon programme, je veux forcer la fonction fsolve à utiliser ma propre fonction de dérivation "myfun2", qui calcule des différences finies.
Mon problème est le suivant. J'obtiens le signal d'erreur suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 temp_options=optimset('Jacobian','on','OutputFcn',@myfun,'JacobMult',@myfun2); [res1D,fval,exitflag,output,jacobian]=fsolve(objectiveFunction,x1,temp_options);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 ??? Error using ==> rdivide Matrix dimensions must agree. Error in ==> dogleg at 21 gradscal = grad./scalMat; Error in ==> trustnleqn at 186 [d,quadObj,normd,normdscal] = ... Error in ==> fsolve at 377 [x,FVAL,JACOB,EXITFLAG,OUTPUT,msgData]=... Error in ==> mainFun at 186 [res1D,fval,exitflag,output,jacobian]=fsolve(objectiveFunction,x1,temp_options); Error in ==> sample_call_of_computeIntensity at 18 [res3D,a2]=mainFun;
La fonction myfun2 renvoie pourtant bien un vecteur tel que size(myfun2(x))=size(x). Et d'après la doc,avec les options que j'ai précisées dans temp_options, myfun2 DOIT renvoyer un vecteur (de la taille de x) et non une matrice (jacobienne).
Je crois que le souci se trouve dans la contrainte suivante:
la fonction à minimiser doit renvoyer une info "Jinfo" en deuxième argument de sortie qui est ensuite donné en argument à myfun2 (d'après la doc). J'ai choisi une forme pour Jinfo qui n'est cependant pas une matrice carrée jacobienne.. Est-ce que vous pensez que le problème vient de là? C'est à dire , est-ce que Jinfo doit retourner la matrice jacobienne?
Si oui, c'est embêtant car mon but est précisément de contourner le calcul de la matrice jacobienne pour économiser du temps de calcul. C'est pour cela que j'utilise ma propre dérivée.
Ainsi, j'ai deux questions:
1) Quelqu'un sait il pourquoi mon code ne marche pas?
2) Quelqu'un peut il m'expliquer comment utiliser fsolve avec sa propre fonction qui fournit le gradient de la fonction (à minimiser) au point indiqué par fsolve?
merci pour votre attention
Partager