在matlab中求解非线性方程组

时间:2015-01-30 11:24:30

标签: matlab nonlinear-functions

我试图在matlab中解决4个非线性方程。  我使用fsolve编写了一个代码,但它没有继续进行,并使用求解写了另一个代码,但运行了4个小时后没有结果我自己停止了。 我不知道还能用什么来解决它? 它可以解决吗?

这是我用fsolve编写的代码 x和y是向量,n是该向量的长度等于1200.nu是等于1196的自由度。 p(1),p(2)...和p(4)是未知数

x = data1(:,1);
y = data1(:,2);
n = length(x);

p0 = [0 0 0 0];

options = optimset('Display','iter');
[p,fval] = fsolve(@myfunc,p0,options);

MYFUNC:

function F = myfunc(p)
global x y n

r = y-p(1)*x.^3-p(2)*x.^2-p(3)*x-p(4);

F = [sum(x.^3)-(n-4-2)*sum(x.^3./r);
     sum(x.^2)-(n-4-2)*sum(x.^2./r);
     sum(x.^1)-(n-4-2)*sum(x.^1./r);
     sum(x.^0)-(n-4-2)*sum(x.^0./r)];

1 个答案:

答案 0 :(得分:0)

对于fsolve来说问题太僵硬了,或者你的初始猜测很差。但是,如果你想使用参数化的匿名函数,你看到的代码看起来很好:

x = data1(:,1);
y = data1(:,2);
n = length(x);

p0 = [0 0 0 0];

options = optimset('Display','iter');
[p,fval] = fsolve(@(p) myfunc(p,x,y,n),p0,options);

然后myfunc

function F = myfunc(p,x,y,n)

r = y-p(1)*x.^3-p(2)*x.^2-p(3)*x-p(4);

F = [sum(x.^3)-(n-4-2)*sum(x.^3./r);
     sum(x.^2)-(n-4-2)*sum(x.^2./r);
     sum(x.^1)-(n-4-2)*sum(x.^1./r);
     sum(x.^0)-(n-4-2)*sum(x.^0./r)];
end