数值分析实验报告_清华大学_非线性方程的解法
- 格式:docx
- 大小:36.09 KB
- 文档页数:6
非线性方程的解法
实验1.算法设计与比较
问题提出:非线性方程组的求解方法很多,基本的思想是线性化。不同的方法效果如何,要靠计算的实践来分析、比较。
实验内容:考虑算法
(1)牛顿法
(2)拟牛顿法
分别编写它们的matlab程序。
实验要求:
(1)用上述方法,分别计算两个例子。在达到精度相同的前提下,比较迭代次数、浮点运算次数和CPU时间等。
1.1程序清单
为使用flops统计浮点运算次数,使用MATLAB5.3版本
%f1.m原函数f1
function y=f(x)
y(1)=12*x(1)-x(2)^2-4*x(3)-7;
y(2)=x(1)^2+10*x(2)-x(3)-8;
y(3)=x(2)^3+10*x(3)-8;
end
%ff1.m原函数f1的雅克比矩阵
function y=ff(x)
y(1,:)=[12,-2*x(2),-4];
y(2,:)=[2*x(1),10,-1];
y(3,:)=[0,3*x(2)^2,10];
end
%f1.m原函数f2
function y=f2(x)
y(1)=3*x(1)-cos(x(2)*x(3)) -1/2;
y(2)=x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06;
y(3)=exp(-x(1)*x(2))+20*x(3)+1/3*(10*pi-3);
end
%ff2.m原函数f2的雅克比矩阵
function y=ff2(x)
y(1,:)=[3,x(3)*sin(x(2)*x(3)),x(2)*sin(x(2)*x(3))];
y(2,:)=[2*x(1),-2*81*(x(2)+0.1),cos(x(3))];
y(3,:)=[-x(2)*exp(-x(1)*x(2)),-x(1)*exp(-x(1)*x(2)),20]; end
%牛顿法(以第一个方程组为例)
clear;
x0=[0,0,0]';
n=10;
tol=1e-6;
x(:,1)=x0;
i=1;u=[1,1,1]';
tic;
while (norm(u)>tol*norm(x(:,i))&(i A=ff1(x(:,i)); b=f1(x(:,i))'; u=-A\b; x(:,i+1)=x(:,i)+u; i=i+1; end; x(:,i) iter=i-1 t=toc %拟牛顿法(以第一个方程组为例) clear; x0=[0,0,0]'; n=10; tol=1e-6; x(:,1)=x0; i=1;p=[1,1,1]'; A=ff1(x(:,1)); tic; while (norm(p)>tol*norm(x(:,i))&(i x(:,i+1)=x(:,i)-A\f1(x(:,i))'; p=x(:,i+1)-x(:,i); q=f1(x(:,i+1))'-f1(x(:,i))'; A=A+(q-A*p)*p'/norm(p,2)^2; i=i+1; end; iter=i-1 t=toc x(:,i) 1.2运行结果 1.2.1第一个方程组 精确解为*T =(0.886020214719037, 0.796444775323146, 0.749479574122230)x 取最大迭代次数n=5000,相对误差限Tol=1e-6 (1)取()(0)1,1,1x T = 牛顿迭代法迭代3次收敛,浮点运算次数为440,每次迭代平均浮点运算次数为147,CPU 耗时t =0(s) 拟牛顿法迭代4次收敛,浮点运算次数为1048,每次迭代平均浮点运算次数为262,CPU 耗时t =0(s) (2)取()(0)000x T =, , 牛顿迭代法迭代4次收敛,浮点运算次数为510,每次迭代平均浮点运算次数为128,CPU 耗时t =1.600e-002(s) 拟牛顿法迭代6次收敛,浮点运算次数为1493,每次迭代平均浮点运算次数为248,CPU 耗时t =1.50e-002(s) (3)取()(0)50,5050x T =, 牛顿迭代法迭代15次收敛,浮点运算次数为2118,每次迭代平均浮点运算次数为141,CPU 耗时t =1.600e-002(s) 拟牛顿法迭代338次收敛,浮点运算次数为88454,每次迭代平均浮点运算次数为262,CPU 耗时t =3.100e-002(s) 1.2.2第二个方程组 精确解为*T =(0.886020214719037, 0.796444775323146, 0.749479574122230)x 取最大迭代次数n=5000,相对误差限Tol=1e-6 (1)取()(0)000x T =, , 牛顿迭代法迭代5次收敛,浮点运算次数为776,每次迭代平均浮点运算次数为155.2,CPU 耗时t =0(s) 拟牛顿法迭代6次收敛,浮点运算次数为1635,每次迭代平均浮点运算次数为273,CPU 耗时t =0(s) (2)取()(0)888x T =, , 牛顿迭代法迭代9次收敛,浮点运算次数为1519,每次迭代平均浮点运算次数为169,CPU 耗时t =0(s) 拟牛顿法迭代21次收敛,浮点运算次数为5924,每次迭代平均浮点运算次数为282,CPU 耗时t =1.600e-002(s) (3)对于离精确解更远的初值(如()(0)101010x T =, ,),在计算中会出现奇异或接近奇异的矩阵,计算结果误差很大或计算根本无法进行下去。 1.3简要分析 (1)牛顿迭代法的收敛阶数高于拟牛顿法。牛顿法收敛速度快,迭代次数少,拟牛顿法收敛速度慢,迭代步数多,这一特点在初始解远离精确解时尤为明显。