Prblème Matlab: fmincon
Résolu
Jaouad
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Fmincon matlab
- Gnu octave matlab - Télécharger - Édition & Programmation
- Programmer avec MATLAB ✓ - Forum Matlab
- Termes de Matlab ✓ - Forum Matlab
- Problème diffusion matlab - Forum Matlab
- Boucle for matlab - Forum Matlab
7 réponses
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 )
[ 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 )
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+
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+
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
- 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
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 ?
affiche la taille pour être sur.
Si tu utilise LogGarch_Norm directement est-ce que l'erreur apparaît ?
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 !
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 !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut
Je passe juste vite fait pour signaler un truc que je comprends pas trop...
message 0
Bonne soirée
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
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^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.
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
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
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