2016-01-30 3 views
0

Я хочу оптимизировать функцию с параметрами в matlab. Вот как я это делаю с функцией, когда я хочу оптимизировать только один параметр:Функции анонимуса в matlab

fminsearch(@(x) fun(x, 3, 1, 2, 3),2); 

Он отлично работает. Однако, когда я хочу, чтобы оптимизировать два параметра моей функции:

fminsearch(@(x, y) fun(x, y, 1, 2, 3),[2,2]); 

Я получаю следующее сообщение об ошибке:

Error using test>@(x,y)fun(x,y,1,2,3) (line 7)

Not enough input arguments.

Я не понимаю, что случилось с моим кодом. Это похоже на то, что Mathworks предлагает для моей проблемы: http://www.mathworks.com/help/matlab/ref/fminsearch.html

Вот пример с веб-сайта:

function f = myfun(x,a) 
f = x(1)^2 + a*x(2)^2; 
x = fminsearch(@(x) myfun(x,a),[0,1]) 

Это именно то, что я делаю с моей функции весело, тем не менее, это Безразлично» т работы. Зачем?

+2

Это не то, что вы делаете *, MathWorks использует '@ (x)', в то время как вы используете '@ (x, y)' в поле 'fminsearch' – Adriaan

ответ

3

fminsearch всегда принимает функцию с одним входом, ваш двойной вход, как @Adriaan noted. Если у вас несколько параметров, используйте вход с массивом до fminsearch, но только один. Это именно то, что делает пример: передача @(x) myfun(x,a) с параметром a (не видно fminsearch) и массивx.

Вы должны вызвать вашу функцию как

fminsearch(@(x) fun(x(1), x(2), 1, 2, 3),[2,2]); 

, чтобы прилипать к синтаксису ожидаемого fminsearch.

Реализация fminsearch и связанные с ним функции таковы, что они смотрят на начальные параметры ([2,2]), и они заключают количество параметров из размеров этой переменной. Следовательно, массивы того же размера всегда подаются в вашу анонимную функцию как единую входную переменную.

+0

Бонусные баллы за упоминание меня, хотя я не знаю ничего о функциях: D – Adriaan

Смежные вопросы