Prblème Matlab: fmincon

Résolu
Bonjour,

J'ai un problème avec la fonction fmincon de matlab, j'ai le message d'erreur suivant:

??? Error using ==> fmincon
FMINCON cannot continue because user supplied objective function failed with the following error:
Error using ==> LogGarch_Student
Too many output arguments.

Pourtant ma fonction LogGarch_Student ne retourne qu'un seul scalaire!

Merci pour votre aide
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. Contributeur
    Salut.
    Donne nous ta fonction alors, et l'appel à fmincon.
    1
    1. ***je suis nouveau sur le forum, j'ai peut être pas envoyer la réponse là où il fallait ! ***

      Bonjour Char Snipeur,

      - L'appel à fmincon est le suivant (dans une boucle):

      [ coefficient( i , : ) , LogLik , verif( i ) , OUTPUT ] = fmincon( 'LogGarch_Norm' , condini ,[],[],[],[],LB,UB,[],OPTIONS ) ;

      - La fonction à optimiser est:

      [ loglikelihood ] = LogGarch_Norm( parameter )

      avec : loglikelihood = ( nobs / 2 ) * log( 2 * pi ) + 0.5 * sum( log( h ) ) + 0.5 * sum( ( ( rdt - m ) .^ 2 ) ./ h )

      parameter = [ m a0 a1 b1 ]

      a0 a1 et b1 interviennent dans h

      rdt est une variable globale définie dans un autre programme ( un vecteur nobs*1)

      Bien cordialement.

      Jaouad
      0
  2. Contributeur
    J'avoue que j'en reste un peu dubitatif... Deux tests à te proposer :
    [ coefficient( i , : ) , LogLik , verif( i ) , OUTPUT ] = fmincon( @LogGarch_Norm , condini ,[],[],[],[],LB,UB,[],OPTIONS ) ;
    D'après l'exemple trouvé sur le site matlab, et une déclaration de fonction sans crochet :
    loglikelihood = LogGarch_Norm( parameter )
    1
    1. J'ai essayé ta proposition, mais ça ne change rien !

      Ce qui est étonnant c'est que lorsque je laisse tomber les contraintes et j'optimise avec fminsearch, le problème ne se pose pas, mais sans les contraintes c'est autre chose.

      Je vais continuer à chercher de mon côté, j'espère que ce n'est pas un problème interne à matlab. j'ai découvert qu'il a une faille (0^0=1) mais j'ai pas envie d'en trouver d'autres.

      Merci quand même pour ton aide

      A+
      0
  3. Bonjour Char Snipeur,

    - L'appel à fmincon est le suivant (dans une boucle):

    [ coefficient( i , : ) , LogLik , verif( i ) , OUTPUT ] = fmincon( 'LogGarch_Norm' , condini ,[],[],[],[],LB,UB,[],OPTIONS ) ;

    - La fonction à optimiser est:

    [ loglikelihood ] = LogGarch_Norm( parameter )

    avec : loglikelihood = ( nobs / 2 ) * log( 2 * pi ) + 0.5 * sum( log( h ) ) + 0.5 * sum( ( ( rdt - m ) .^ 2 ) ./ h )

    parameter = [ m a0 a1 b1 ]

    a0 a1 et b1 interviennent dans h

    rdt est une variable globale définie dans un autre programme ( un vecteur nobs*1)

    Bien cordialement.

    Jaouad
    0
    1. Contributeur
      LogGarch_Norm doit retourner un scalaire, es tu tu sur que c'est le cas ? comme tu dit que rdt est un vecteur...
      affiche la taille pour être sur.
      Si tu utilise LogGarch_Norm directement est-ce que l'erreur apparaît ?
      0
      1. Ce n'est pas le fait que rdt soit un vecteur qui pose problème, parce que je fait, après transformation, la somme de ses éléments et donc j'ai un scalaire.

        j'ai bien exécuté la fonction LogGarcj_Norm toute seule et elle me retourne un scalaire ( valeur négative avec virgule).

        Merci Char Snipeur pour tes efforts !
        0
    2. Salut

      Je passe juste vite fait pour signaler un truc que je comprends pas trop...

      message 0
      Error using ==> LogGarch_Student
      Too many output arguments.
      message 2
      [ coefficient( i , : ) , LogLik , verif( i ) , OUTPUT ] = fmincon( 'LogGarch_Norm' , condini ,[],[],[],[],LB,UB,[],OPTIONS ) ;
      
      - La fonction à optimiser est:
      
      [ loglikelihood ] = LogGarch_Norm( parameter )
      Y a comme un truc pas cohérent...

      Bonne soirée
      0
      1. Salut Sacabouffe,

        Tu dis qu'il y a une incohérence. T'as raison, LogGarch_Norm ou LogGarch_Student !!!

        Ce sont deux fonctions objectif. Je voulais optimiser l'une l'autre.

        Merci pour la remarque.
        0
    3. Contributeur
      Bien vu Sacabouffe !
      0^0 = 1... pour toi ça devrais donné quelle valeur ? moi, je dirai 1 ou NAN au pire. Si tu dit 0^0 c'est zéro multiplier par zéro zéro fois (c'est à dire que tu ne fais rien), tu as bien 1.
      0
      1. A non Char Snipeur, 0^0 ne fait pas 1. Preuve: 0^0 = 0^(a-a) = 0^(a) / 0^(a) = 0/0 qui indéfini, donc NaN.

        Pour une fois t'as pas raison ;)
        0
      2. Contributeur
        @FouadSamicf message de sacabouffe.
        Avec ta démonstration, si tu pose b=0^a
        b/b=1;
        Ce que je dis, c'est que si 0^0 ne donne pas NaN, une des meilleurs valeurs pour continuité, c'est 1.
        0
    4. Salut

      Comme ça avant de le faire, j'aurais dit que Matlab donnerait NaN vu qu'en toute rigueur c'est pas défini (exp(0*(log(0)), je note log la fonction logarithme népérien pour garder la cohérence avec Matlab), mais après avoir essayé, il donne 1. Donc apparemment la définition de 0^0 pour Matlab a été prise comme celle du prolongement par continuité en 0 de la fonction x^x.
      lim_{x→0} x*log(x)=0
      Donc
      lim_{x→0} exp(x*log(x))=1

      Bonne journée
      0