fminsearch错误:DOUBLE无法将输入表达式转换为双数组

时间:2015-09-22 08:03:03

标签: matlab symbolic-math function-handle fminsearch

我在优化练习中遇到问题。我试图在matlab中使用fminsearch()来解决它。运行代码时会生成以下错误:

  

从sym转换为double时发生以下错误:错误   使用symengine(第59行)DOUBLE无法转换输入表达式   成双阵列。如果输入表达式包含符号   变量,使用VPA。

     

fminsearch出错(第190行)fv(:,1)= funfcn(x,varargin {:});

     

优化错误(第22行)sol2 = fminsearch(J,x0);

我使用的脚本如下所示。 f是最小化问题,其中g1& g2是约束。 p在那里,以便我可以稍后将其转换为for循环。

syms x1 x2 x3 x4;
syms p;

f = x1.^4 - x3.^2 + x1*x3 + x2*x4 - 5*x2 + 3;
g1 = x1.^2 + x2.^2 + x3.^2 + x4.^2 - 1;
g2 = x1 + x3 - 1;

x0 = [2 2 2 2];
p = 3;

J = @(x1,x2,x3,x4) sym(f + p * g1.^2 + g2.^2);
sol2 = fminsearch(J, x0);

此Stackoverflowpost具有相同的问题,但在另一个角度来看。根据这篇文章,它可能是一个有效的方式分配问题。我尝试了几种不同的方法来解决我的问题。我已经尝试了matlabFunction()并将该函数放在一个单独的文件中。

If the input expression contains a symbolic variable, use the VPA function instead?

提前感谢您的帮助。

0 个答案:

没有答案