我试图在matlab中求解4个非线性方程。我写了一段代码,但是它没有继续,而另一段代码用的是“解决”,但是在运行了4个小时之后,我自己停止了。我不知道我还能用什么来解决这个问题?完全可以解决吗?
这是我用fsolve和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)];发布于 2015-01-30 18:48:13
听起来这个问题对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)];
endhttps://stackoverflow.com/questions/28234858
复制相似问题