首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用matlab求解非线性方程组

用matlab求解非线性方程组
EN

Stack Overflow用户
提问于 2015-01-30 11:24:29
回答 1查看 2K关注 0票数 0

我试图在matlab中求解4个非线性方程。我写了一段代码,但是它没有继续,而另一段代码用的是“解决”,但是在运行了4个小时之后,我自己停止了。我不知道我还能用什么来解决这个问题?完全可以解决吗?

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)];
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-30 18:48:13

听起来这个问题对fsolve来说太棘手了,或者你的开始猜测很糟糕。但是,如果您想使用参数化的匿名函数,那么您拥有的代码看起来很好:

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28234858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档