2016-07-08 4 views
0

Я пытаюсь использовать пример минимизации функций, указанных в документах Matlab и запускать их в Matlab R2016a, но он дает ошибку. Вот пример: enter image description hereМинимизация функции трех переменных в Matlab

Это код, который я написал на его основе:

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

Но вместо ожидаемого результата я получаю сообщение об ошибке:

Not enough input arguments. 

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

Любая идея, почему? Благодаря!

ответ

2

В зависимости от того, как выполнить свой код, вы должны поместить вызов fminsearch в отдельную функцию:

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; 

Приведенный выше пример работает для меня, если я ставлю все в м-файл и выполнить Это.

+0

Удивительный, спасибо! – maephisto

0

Вам необходимо определить объектную функцию test_algo отдельно от кода, который вызывает это. Поскольку для определения целевой функции вам не требуется много кода, вы можете использовать анонимную функцию:

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); 
Смежные вопросы