Newton 法解非线性方程组
- 格式:docx
- 大小:21.85 KB
- 文档页数:2
Newton法解非线性方程组
一.题目重述:编程实现非线性方程组的牛顿解法,并求解如下方程组。
3x1−cos x2x3−0.5=0
x12−81x2+0.12+sin x3+1.06=0
e−x1x2+20x3+10π−3
3
=0
二.算法:
非线性方程组的牛顿法为:给定初始解向量x(0),对于k≥1生成
x(k)=x(k−1)−J x k−1−1F(x(k−1)).
三.编程实现:
这里用MATLAB程序实现,建立三个文件如下:
1.函数F(X)文件
function F =F( X)
F(1,1)=3*X(1)-cos(X(2)*X(3))-0.5;
F(2,1)=X(1)^2-81*(X(2)+0.1)^2+sin(X(3))+1.06;
F(3,1)=exp(-X(1)*X(2))+20*X(3)+(10*pi-3)/3;
end
2.J(X) 函数(即Jacobian矩阵)文件
function F1= F1(X )
F1(1,:)=[3,sin(X(1)*X(2))*X(3),sin(X(1)*X(2))*X(2)];
F1(2,:)=[2*X(1),-162*(X(2)+0.1),cos(X(3))];
F1(3,:)=[exp(-X(1)*X(2))*(-X(2)),exp(-X(1)*X(2))*(-X(1)),20];
end
3.解题脚本文件
文件名zu
%% 牛顿法解非线性方程组
clear;
X0=[0.1;0.1;-0.1];
for i=1:200
X=X0-F1(X0)\F(X0); %这里采用MATLAB的左除方法,避免算逆矩阵X0=X;
end
X
abs(0-F(X)) % 计算误差
四.编程实现结果:
在MATLAB中调用上述解题脚本文件(迭代200次),下图中的zu即为上述解题脚本文件名,而format long 是将MATLAB的显示结果调整为15位数字的形式,结果为
即解为:x1=0.5,x2=0,x3=−0.5236.(上面出现-0.00000000…的原因是由于MATLAB太过于精确,求得x2是一个绝对值非常小的负数,这里可取x2=0).
且误差为:10^-14*(0,0.0222,0.1776),即已达到了10^-14的精度。