Prblème Matlab: fmincon

Résolu
Jaouad -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
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
A voir également:

7 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
Donne nous ta fonction alors, et l'appel à fmincon.
1
FouadSami Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
***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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
FouadSami Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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
FouadSami Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
FouadSami Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 835
 
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
FouadSami Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
FouadSami Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299 > FouadSami Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
 
cf 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
Sacabouffe Messages postés 9427 Date d'inscription   Statut Membre Dernière intervention   1 835
 
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