如何在Matlab中用'n'变量(二次多项式)求解'n'(非线性)方程组?

时间:2013-03-17 13:03:08

标签: matlab

可以在Matlab中用'n'变量(2级或1级)求解'n'(无线性)方程组吗?

你能给我一个例子吗?

我尝试使用fsolve功能但出现下一个错误:

??? Error using ==> feval Undefined function or method 'ecuaciones' for input arguments of type 'double'.

example with fsolve

编辑:

我有一个名为'ecuaciones.m'的文件,其中包含下一个内容:

function [f]=ecuaciones(x)

f(1)=x(1) + x(2) + x(3) + 2*x(4) -1,905;
f(2)=2*x(3) + 3*x(4) + x(5) + x(6) - 3,922;
f(3)=x(1) + 2*x(2) + x(4) + x(5) + x(6) - 1,961;
f(4)=1,961*x(3) + x(3)*x(5) - x(2)*x(3) - 0,02834*(x(5)^2);
f(5)=9,32845*(x(3)^2) - x(4)*x(6);
f(6)=61,4723*x(1)*x(6) - x(2)*x(5);


J = zeros (n,n);

J =

[ 1, 1, 1, 2, 0, 0]
[ 0, 0, 0, 0, 0, 0]
[ 0, 0, 2, 3, 1, 1]
[ 1, 2, 0, 1, 1, 1]
[ 0, -x3, x5 - x2 + 1961/1000, 0, x3 - (1417*x5)/25000, 0]
[ 0, 0, (2625725246496519*x3)/140737488355328, -x6, 0, -x4]
[ (8651457105425229*x6)/140737488355328, -x5, 0, 0, -x2, (8651457105425229*x1)/140737488355328];

然后,在Matlab控制台中我尝试:

>> x0=[1,1,1,1,1,1];
>> [x,feval,flag]=fsolve('ecuaciones',x0);

1 个答案:

答案 0 :(得分:2)

使用功能句柄

 >> x = fsolve( @ecuaciones, x0 );

您需要确保ecuaciones.m在matlab的路径中。

<强>更新
为了更好的收敛,你可能也想计算雅可比矩阵 在您的情况下,雅可比行列式是nn矩阵,J(l,k)f(l) wrt x(k) {{点的偏导数1}} 即可。
您需要修改x以返回两个输出,第一个输出为ecuaciones.m,第二个输出为f

J

您可以致电function [f J] = ecuaciones( x ) f(1)=x(1) + x(2) + x(3) + 2*x(4) -1,905; f(2)=2*x(3) + 3*x(4) + x(5) + x(6) - 3,922; f(3)=x(1) + 2*x(2) + x(4) + x(5) + x(6) - 1,961; f(4)=1,961*x(3) + x(3)*x(5) - x(2)*x(3) - 0,02834*(x(5)^2); f(5)=9,32845*(x(3)^2) - x(4)*x(6); f(6)=61,4723*x(1)*x(6) - x(2)*x(5); J = [... 1, 1, 1, 2, 0, 0;... 0, 0, 0, 0, 0, 0;... 0, 0, 2, 3, 1, 1;... 1, 2, 0, 1, 1, 1;... 0, -x3, x5 - x2 + 1961/1000, 0, x3 - (1417*x5)/25000, 0;... 0, 0, (2625725246496519*x3)/140737488355328, -x6, 0, -x4;... (8651457105425229*x6)/140737488355328, -x5, 0, 0, -x2, (8651457105425229*x1)/140737488355328];

fsolve