2015-06-22 52 views
1

我在下面这样一个非常简单的代码中遇到问题。Matlab fminsearch错误

syms c p; 
y=symfun(c^2+p, [c,p]); 
fminsearch(y, [-1,-1]); 


Error using symfun/subsref (line 113) 
Symbolic function expected 2 inputs and received 1. 

Error in fminsearch (line 191) 
fv(:,1) = funfcn(x,varargin{:}); 

你能帮助我吗?

回答

1

由于fminsearch是一个数字最小化例程,您不需要这里的符号功能。该函数应该有一个输入,但它可以是矢量或矩阵。它的输出必须是数字,而不是符号。使用的正确示例是

fminsearch(@(x) x(1)^2+x(2) , [-1,-1]) 

其中输入是x,具有两个分量x(1)和x(2)的向量。

但你仍然可以通过如下将其转换为数字使用您的象征功能:

syms c p; 
y=symfun(c^2+p, [c,p]); 
fminsearch(@(x) subs(y, {c, p}, {x(1), x(2)}), [-1,-1]) 

顺便说一句,有这个功能没有最低点,因此算法不能收敛。尝试c^2+p^2以获得有意义的输出。

+0

@我不同意谢谢。我已经知道一个正确的函数句柄。但我应该使用'symfun',因为我需要加上函数,例如_f1 + f2_等等。功能手柄不适用于加号。 – kurtkim

+0

对不起,打扰了你,但它仍然给我错误:'未定义的函数'公式'输入参数的类型'双'。 symfun中的错误(第37行) y = y @ sym(formula(x)); sym/subs(行121)中的错误 G = symfun(G,argnames(F)); (y,[c,p],[x(1),x(2)]的错误 fminsearch {:});' – kurtkim

+0

我发布的三行代码与我的机器上完全一样(Matlab R2013a)。没有一行'y = y @ sym(公式(x));'或者在我的代码中,或者在你的问题中。我回答你提出的问题,因为它提出了;我不负责调试其他200行代码。 –