跪求用牛顿迭代法解三元三次非线性方程组,急!! 在线等。。。MATLAB求解要代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跪求用牛顿迭代法解三元三次非线性方程组,急!! 在线等。。。MATLAB求解要代码相关的知识,希望对你有一定的参考价值。

方程组为:x1^3+x1^2-x2+x3-13=0; x2^3+x2^2-x1+2x3-20=0; x3^3+x3^2+2x1-2x2-18=0,其精确解是(2,2,3)参考初值为(1,1,2)
注:x1,x2,x3为未知数,最高三次,而且是方程组。谢谢大家的关注、最好把源代码给出。

参考技术A LS不会,我也不会,LS脸皮厚我就也脸皮厚一点,一同复制一楼玩玩。
function [r,n]=mulNewton(F,x0,eps)
if nargin==2
eps=1.0e-4;
end
x0 = transpose(x0);
Fx = subs(F,findsym(F),x0);
var = findsym(F);
dF = jacobian(F);
dFx = subs(dF,findsym(dF),x0);
r=x0-inv(dFx)*Fx;
n=1;
tol=1;
while tol>eps
x0=r;
Fx = subs(F,findsym(F),x0);
dFx = subs(dF,findsym(dF),x0);
r=x0-inv(dFx)*Fx; %核心迭代公式
tol=norm(r-x0);
n=n+1;
if(n>100000) %迭代步数控制
disp('迭代步数太多,可能不收敛!');
return;
end
end
参考技术B function [r,n]=mulNewton(F,x0,eps)
if nargin==2
eps=1.0e-4;
end
x0 = transpose(x0);
Fx = subs(F,findsym(F),x0);
var = findsym(F);
dF = jacobian(F);
dFx = subs(dF,findsym(dF),x0);
r=x0-inv(dFx)*Fx;
n=1;
tol=1;
while tol>eps
x0=r;
Fx = subs(F,findsym(F),x0);
dFx = subs(dF,findsym(dF),x0);
r=x0-inv(dFx)*Fx; %核心迭代公式
tol=norm(r-x0);
n=n+1;
if(n>100000) %迭代步数控制
disp('迭代步数太多,可能不收敛!');
return;
end
end
相信我,没错
参考技术C function [r,n]=mulNewton(F,x0,eps)
if nargin==2
eps=1.0e-4;
end
x0 = transpose(x0);
Fx = subs(F,findsym(F),x0);
var = findsym(F);
dF = jacobian(F);
dFx = subs(dF,findsym(dF),x0);
r=x0-inv(dFx)*Fx;
n=1;
tol=1;
while tol>eps
x0=r;
Fx = subs(F,findsym(F),x0);
dFx = subs(dF,findsym(dF),x0);
r=x0-inv(dFx)*Fx; %核心迭代公式
tol=norm(r-x0);
n=n+1;
if(n>100000) %迭代步数控制
disp('迭代步数太多,可能不收敛!');
return;
end
end
参考技术D function [r,n]=mulNewton(F,x0,eps)
if nargin==2
eps=1.0e-4;
end
x0 = transpose(x0);
Fx = subs(F,findsym(F),x0);
var = findsym(F);
dF = jacobian(F);
dFx = subs(dF,findsym(dF),x0);
r=x0-inv(dFx)*Fx;
n=1;
tol=1;
while tol>eps
x0=r;
Fx = subs(F,findsym(F),x0);
dFx = subs(dF,findsym(dF),x0);
r=x0-inv(dFx)*Fx;
tol=norm(r-x0);
n=n+1;
if(n>100000)
disp('迭代步数太多,可能不收敛!');
return;
end
end
第5个回答  2011-01-03 1,x=6
2,x=9
3,x=18
总x=84

跪求方程组的解法,在线等

(1)a=x1*(x2)
(2)b=x1*(x3+x4+x5+x6)
(3)c=x1*(0.5x3+x4+0.5x6+0.5x7)
(4)d=x1*(x8+2x5+x9+x7)
(5)e=x1*(x9+x6)
(6)x7*x3=A*x2*x6
(7)x4*x6=B*x2*(x7)^3
(8)x8*x3=C*x5*x6
(9)x2+x3+x4+x5+x6+x7+x8+x9=1

上述10个方程中,a,b,c,d,e,A,B,C,均为常数。
10个方程10个未知数,牛顿迭代,但是我不知道从和下手,请高手帮忙指教解决。十分感谢!
(1)a=x1*(x2)
(2)b=x1*(x3+x4+x5+x6)
(3)c=x1*(0.5x3+x4+0.5x6+0.5x7)
(4)d=x1*(x8+2x5+x9+x7)
(5)e=x1*(x9+x6)
(6)x8*x4=A*x3*x7
(7)x5*x7=B*x3*(x8)^3 (x8的3次方)
(8)x9*x4=C*x6*x7
(9)x2+x3+x4+x5+x6+x7+x8+x9=1

我6-8式子写错了。55555555555,衫木杏子和SNOWHOURSE70121都很有道理。或者告诉我一下具体的算法。我的QQ是496587653,十分感激!!!

(1)把每个方程都变成齐次方程,就是保证方程等号的右边为0。
(2)把每个齐次方程的左边平方相加构成一个目标函数。
(3)用牛顿迭代法求解,使得目标函数达到最小。
比如,

f1 = x1*x2 - a
f2 = x1*(x3+x4+x5+x6) - b
f3 = x1*(0.5x3+x4+0.5x6+0.5x7) - c
f4 = x1*(x8+2x5+x9+x7) - d
f5 = x1*(x9+x6) - e
f6 = x7*x3 - A*x2*x6
f7 = x4*x6 - B*x2*(x7)^3
f8 = x8*x3 - C*x5*x6
f9 = x2+x3+x4+x5+x6+x7+x8+x9 - 1
目标函数为
f(X) = f1^2 + f2^2 + ... + f9^2
X = [x1,x2,...,x9]^T
优化问题为
min_X [f(X)]

用quasi-Newton求解。
因为表达式都有了,可以直接写出f(X)关于X的1阶偏导数向量(梯度)和2阶偏导数矩阵(海森矩阵)。
选一组初值,比如 x1 = x2 = ... = 1.
选定迭代中止条件[迭代次数,梯度模的精度,海森矩阵条件数的界,等等],进行迭代运算。
得到一组解以后,再多换几组初值,继续迭代。

起码,
x1 = 1; x2 = a; x3 = 0; x4 = c; x5 = b - c; x6 = 0; x7 = 0; x8 = d - e - 2(b - c); x9 = e.
是满足9个方程的一组解。

这个方程组顶多有 2^9 = 512 组解。
参考技术A 把所有数都用含有x1表示 参考技术B 我也知道,但是其它的很难写成X1的形式啊,能详细一点阿?我也在试着写,谢谢

csg974 非常感谢你,但是你应该是有的值是用0试出来的吗?没有0的
参考技术C x1=a+2c+d-b
x2=a/(a+2c+d-b)
x3=0
x4=c/(a+2c+d-b)
x5=(b-c)/(a+2c+d-b)
x6=0
x7=0
x8=-(-2c-d+2b+e)/(a+2c+d-b)
x9=e/(a+2c+d-b)
参考技术D 楼上的六级。。。你怎么可以把0 带进去呢?!

X1
X2=a/X1
X4=c/X1-8
X5=(a+b+d)/2X1-1/2
X3=3AaBa/[X1*(c-8X1)]
X7=17*(c-8X1)/6Ba+(c-8X1)*(b-2c-a-d)/6BaX1-Aa/X1
X8=C(a+b+d-X1)*X7/2Aa
X6=17/2+(b-2c-a-d)/2X1-3AaBA/[X1*(c-8X1)]
X9=e/X1-X6

其他的你自己看着办了。。。X8用X7算,X9用X6酸。

师傅。既然这个问题对你这么重要,好歹也把题目看看清楚再贴上来啊!难怪计算这么复杂。。。还有,你的3,4 两式子里面的乘号再写写清楚。还是看不懂
第5个回答  2008-12-11 用克莱姆法则计算吧,将稀疏矩阵推导为三角矩阵就可以解决问题

以上是关于跪求用牛顿迭代法解三元三次非线性方程组,急!! 在线等。。。MATLAB求解要代码的主要内容,如果未能解决你的问题,请参考以下文章

matlab牛顿迭代法急!!(100分悬赏)

牛顿迭代法求解非线性方程组 matlab

如何用牛顿迭代法求解方程

C语言 用牛顿迭代法解方程

MATLAB用牛顿迭代求解非线性方程的程序

matlab中牛顿法编程