IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

[fsolve] utilisation d'une dérivée propre


Sujet :

MATLAB

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut [fsolve] utilisation d'une dérivée propre
    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.

    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);
    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
    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

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut début de réponse
    Effectivement, on peut jouer sur la matrice Jinfo, qui est le second argument que la fonction à minimiser doit renvoyer dans la cas d'une dérivée fournie par l'utilisateur.
    J'ai changé la taille de Jinfo en lui attribuant la taille qu'aurait la matrice jacobienne. Dans ce cas, l'algorithme se termine sans erreur.

    Cependant, même en insérant codant correctement la fonction, indiquée comme argument de "JacobMult" dans la structure d'options "optimset", myfun2 dans mon cas, l'algorithme fsolve ne semble pas prendre en compte ma dérivée de la fonction à minimiser.

    Quelqu'un a t il une idée?

    merci

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2009
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 94
    Points : 85
    Points
    85
    Par défaut PS
    PS: l'algorithme sans erreur.... sans " erreur système" !. Mais le résultat est quand même absurde!! cèst ce que je voulais dire! l'algorithme ne tient pas compte de ma dérivée et semble utiliser la matrice Jinfo sus-décrite incohérente

Discussions similaires

  1. [Débutant(e)] JSP utilisation static....une autre
    Par tcgenrecom dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 01/03/2004, 15h27
  2. utilisation d'une variable globale
    Par ZZ dans le forum ASP
    Réponses: 3
    Dernier message: 03/12/2003, 19h11
  3. Utilisation d'une variable sur plusieurs unités
    Par Yamaneko dans le forum Langage
    Réponses: 2
    Dernier message: 05/06/2003, 11h23
  4. Utilisation d'une dll écrite en delphi 5 dans VB6
    Par Jean-Louis dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 09h19
  5. Réponses: 4
    Dernier message: 05/06/2002, 14h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo