在 matlab 中求解非线性方程组

solve a system of nonlinear equations in matlab

我正在尝试在 matlab 中求解 4 个非线性方程。 我使用 fsolve 编写了一个代码,但未能继续,并使用 solve 编写了另一个代码,但在 运行 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);

我的函数:

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)];

听起来这个问题对 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