2015-06-23 2 views
1

Я использую этот код:Matlab fminsearch используя 'symfun'

y1=symfun(c^2+p^2, [c,p]); 
y2=matlabFunction(y1) 
[x,fval]=fminsearch(y2, [0 0]) 

но он возвращает

Ошибка с помощью makeFhandle/@(c,p)c.^2+p.^ 2
Недостаточно входных аргументов.

Ошибка в fminsearch (строка 191)
fv (:, 1) = funfcn (x, varargin {:});

Как я могу обойти это?

Обратите внимание, что я использую symfun, а не функцию-handle, потому что я добавляю несколько функций.

ответ

0

Я рекомендую посмотреть документацию для fminsearch и, в частности, приведенный multi-dimensional examples. Выходной сигнал y2 от matlabFunction не отвечает этим требованиям. Вы можете изменить его вручную или можете попробовать опцию 'Vars' (как в this example). Вам необходимо указать свою первоначальную догадку как вектор-столбца, но ваш пример может быть переписан как:

syms c p; 
y1 = symfun(c^2+p^2, [c,p]); 
y2 = matlabFunction(y1,'Vars',{[c;p]}) 
[x,fval] = fminsearch(y2, [0;0]) 

, который, конечно, возвращает нулевое решение [0;0] в этом случае.

+0

Спасибо за ваш продуманный ответ. Это хорошо работает. Хорошего дня! – kurtkim