文档库

最新最全的文档下载
当前位置:文档库 > 数值分析实验报告_清华大学_非线性方程的解法

数值分析实验报告_清华大学_非线性方程的解法

非线性方程的解法

实验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)牛顿迭代法的收敛阶数高于拟牛顿法。牛顿法收敛速度快,迭代次数少,拟牛顿法收敛速度慢,迭代步数多,这一特点在初始解远离精确解时尤为明显。

(2)随着函数的复杂性增加,使用差商近似导数可以使拟牛顿法每一步的计算量相对减小,在本实验中的两个方程组中这一特点没并没有充分显现。但也可以观察到,第二个方程组较第一个更复杂,同时,拟牛顿法每一步迭代的浮点运算次数与牛顿法之比,随函数复杂性的增加而减小。

(2)牛顿迭代法需要满足系数方程一阶可导的要求才可使用,拟牛顿法不要求可导。

(3)两种方法都说明,初值取得越接近精确解,计算的迭代次数越小。