2016-07-08 1 views
0

J'essaie d'utiliser un exemple de fonctions de minimisation, donné dans Matlab docs et exécuté dans Matlab R2016a mais il génère une erreur. Voici l'exemple: enter image description hereMinimisation d'une fonction à trois variables dans Matlab

Ceci est le code que j'ai écrit basé sur ce point:

function b = test_algo(v) 
x = v(1); 
y = v(2); 
z = v(3); 
b = x.^2 + 2.5*sin(y) - z^2*x^2*y^2; 

v = [-0.6 -1.2 0.135]; 
a = fminsearch(@test_algo,v); 

disp('a', a); 

Mais au lieu de résultat attendu que je reçois une erreur:

Not enough input arguments. 

Error in test_algo (line 3) 
x = v(1); 

Toute idée pourquoi? Merci!

Répondre

2

Selon la façon dont vous exécutez votre code, vous devez mettre l'appel de fminsearch dans une fonction distincte:

function test() 

v = [-0.6 -1.2 0.135]; 
a = fminsearch(@test_algo,v); 

disp(a); 

function b = test_algo(v) 
x = v(1); 
y = v(2); 
z = v(3); 
b = x.^2 + 2.5*sin(y) - z^2*x^2*y^2; 

L'exemple ci-dessus fonctionne pour moi, si je mets tout dans un m-file et Execute il.

+0

Génial, merci! – maephisto

0

Vous devez définir la fonction d'objectif test_algo séparément du code qui l'appelle. Puisque vous n'avez pas besoin de beaucoup de code pour définir votre fonction d'objectif, vous pouvez utiliser une fonction anonyme pour la définir:

b = @(v) v(1).^2 + 2.5*sin(v(2)) - v(3)^2*v(1)^2*v(2)^2; 
v0 = [-0.6 -1.2 0.135]; 
a = fminsearch(b,v0); 
disp(a);