1、用牛顿法求解非线性方程实验七 非线性方程求根一、实验目标1. 掌握常用的非线性方程求根算法(二分法、不动点迭代法与Newton法)及加速技术(Aitken加速与Steffsen加速).2. 会编写计算机程序实现给定迭代函数的迭代算法及其加速;掌握迭代算法的精度控制方法.二、实验问题求代数方程 的实根.三、实验要求1方程有一个实根:. 将方程以下面六种不同方式等价地改写,构造迭代格式,计算 :(a) , (b) , (c) ,(d) (e) , (f) .2. 对每一种迭代格式,编制一个程序进行运算,观察每种格式的敛散情况;用事后误差估计来控制迭代次数,并且输出迭代的次数;观察不同初值的结果.3
2、. 从理论上分析各种格式的收敛性及收敛阶.4. 将收敛较慢的一种格式分别用Atken 方法及 Steffsen 方法加速,通过输出结果了解加速效果.5. 将一种不收敛的方法用Steffsen 方法加速得到收敛的迭代.附录一:数值分析实验报告(模板)【实验课题】 用牛顿迭代法求非线性方程根 【实验目标】明确实验目标1. 掌握常用的非线性方程求根算法(二分法、不动点迭代法与Newton法)及加速技术(Aitken加速与Steffsen加速).2. 会编写计算机程序实现给定迭代函数的迭代算法及其加速;掌握迭代算法的精度控制方法.3探索不同方式改写方程的收敛程度【理论概述与算法描述】1. 牛顿法 设已
3、知方程f(x)=0有近似根 xk,将函数f(x)在点xk展开,有 f(x)=f(xk)+f(xk)(x-xk),于是方程可表示为 f(xk)+f(xk)(x-xk)=0, 这是个线性方程,记其根为x(k+1), 则x(k+1)=xk-f(xk)/f(xk),这就是牛顿迭代法求根.2. 埃特金加速收敛方法 设是根的某个近似值,用迭代一次得,而由微分中值定理,有 其中介于和之间。假设改变不大,近似地取某个近似值L,则有 若将校正值再迭代一次,又得由于将它与前面的式子联立,消去未知的L,有 由此推知 ,记 称为埃特金加速方法。3. 斯特芬森迭代法 将埃特金加速技巧与不动点迭代结合,则可得到如下的迭代
4、法 即为斯特芬森迭代法【实验问题】 1.求代数方程 的实根.2方程有一个实根:. 将方程以下面六种不同方式等价地改写,构造迭代格式,计算 :(a) , (b) , (c) ,(d) (e) , (f) .3. 对每一种迭代格式,编制一个程序进行运算,观察每种格式的敛散情况;用事后误差估计来控制迭代次数,并且输出迭代的次数;观察不同初值的结果.4. 从理论上分析各种格式的收敛性及收敛阶.5. 将收敛较慢的一种格式分别用Atken 方法及 Steffsen 方法加速,通过输出结果了解加速效果.6. 将一种不收敛的方法用Steffsen 方法加速得到收敛的迭代.【实验过程与结果】1. 用matlab
5、编程计算代数方程的根2. 分别编写6个迭代法编程,对结果进行分析【结果分析、讨论与结论】迭代公式1:x1 = 2.0000 1.5000 2.0000 1.5000 2.0000 1.5000 2.0000 1.5000 2.0000 1.5000 2.0000 1.5000 2.0000 1.5000 2.0000 1.5000 2.0000 1.5000 2.0000 1.5000迭代公式2:x2 = 1.0e+142 * 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -1.4947 -Inf -
6、Inf -Inf -Inf -Inf -Inf -Inf -Inf -Inf -Inf迭代公式3:x3 = 2.0000 3.3166 3.8665 4.0743 4.1500 4.1773 4.1871 4.1906 4.1919 4.1923 4.1925 4.1926 4.1926 4.1926 4.1926 4.1926 4.1926 4.1926 4.1926 4.1926迭代公式4:x4 = 2.0000 5.0000 0.2273 -1.6959 -40.3095 0.0031 -1.6667 -22.5018 0.0099 -1.6667 -22.5185 0.0099 -1.
7、6667 -22.5185 0.0099 -1.6667 -22.5185 0.0099 -1.6667 -22.5185迭代公式5:x5 = 2.0000 2.3452 2.2654 2.2819 2.2784 2.2791 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790迭代公式6:x6 = 2.0000 2.3333 2.2806 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2
8、.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790从上述的运算结果可以看出,迭代公式1、2、4不收敛,3虽然收敛,但与其他迭代法的结果差异太大,对5和6分别用埃特金加速和斯特芬森迭代得到结果如下:对于5埃特金加速结果:B = 2.0000 2.2804 2.2791 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 0斯特芬森迭代结果:x = 2.00
9、00 2.1547 2.2792 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790 2.2790对于6埃特金加速结果:B = 2.0000 2.2878 2.2790 2.2790 2.2790 2.2790斯特芬森迭代结果:x = 2.0000 2.1544 2.2838 2.27902.2790从以上结果可以看出,埃特金加速方法和斯特芬森迭代法确实可以加快收敛速度,且在此题的情况下,两种方法的加速效果差不多,但埃特金加
10、速方法较斯特芬森迭代法来说更为简单易理解,运算步骤也少一些,因此对于此题,我们可以选用埃特金加速方法。【附程序】function k,x,da,g= newton(x0,tol)k=1;g1=fun1(x0);g2=fun2(x0);x1=x0-g1/g2;while abs(x1-x0)tol x0=x1; g1=fun1(x0); g2=fun2(x0); k=k+1; x1=x0-g1/g2;endk;x=x1;da=abs(x1-x0)/2;g=fun1(x);endfunction g1=fun1(x)g1=x3-3*x-5;endfunction g2=fun2(x)g2=3*x2
11、-3;endfunction g1=fun1(x)g1=x3-3*x-5;endfunction x=Aitken(A);n=length(A);x=zeros(n,1);t=0;x(1)=A(1);for i=1:n-2 x(i+1)=A(i)-(A(i+1)-A(i)2)/(A(i)-2*A(i+1)+A(i+2);endfunction x=Steffsen(A,B)n=length(B);x=zeros(n,1);x(1)=B(1);for i=2:n x(i)=A(i)-(B(i-1)-A(i)2)/(B(i)-2*B(i-1)+A(i);end%构造迭代算法x=(3*x+5)/(x
12、2)function x=diedai1(x0,tol,N)%x0 是初值,tol为迭代精度,N是迭代最大次数x=zeros(N,1);x(1)=x0;k=1;t=0;while k=N for i=2:N x(i)=(3*x(i-1)/(x(i-1)2); end k=k+1; t=x(i)-x(i-1); if abs(t)=tol break; endend%构造迭代算法x=(x3-5)/3function x=diedai2(x0,tol,N)%x0 是初值,tol为迭代精度,N是迭代最大次数x=zeros(N,1);x(1)=x0;k=1;t=0;while k=N for i=2:
13、N x(i)=(x(i-1)3-5)/3; end k=k+1; t=x(i)-x(i-1); if abs(t)=tol break; endend%构造迭代算法x=(3*x+5)(1/3)function x=diedai3(x0,tol,N)%x0 是初值,tol为迭代精度,N是迭代最大次数x=zeros(N,1);x(1)=x0;k=1;t=0;while k=N for i=2:N x(i)=(3*x(i-1)+5)(1/2); end k=k+1; t=x(i)-x(i-1); if abs(t)=tol break; endend%构造迭代算法x=5/(x2-3)function
14、 x=diedai4(x0,tol,N)%x0 是初值,tol为迭代精度,N是迭代最大次数x=zeros(N,1);x(1)=x0;k=1;t=0;while k=N for i=2:N x(i)=5/(x(i-1)2-3); end k=k+1; t=x(i)-x(i-1); if abs(t)=tol break; endend%构造迭代算法x=sqrt(3+5/x)function x=diedai5(x0,tol,N)%x0 是初值,tol为迭代精度,N是迭代最大次数x=zeros(N,1);x(1)=x0;k=1;t=0;while k=N for i=2:N x(i)=sqrt(3+5/x(i-1); end k=k+1; t=x(i)-x(i-1); if abs(t)=tol break; endend%构造迭代算法x=x-(x3-3*x-5)/(3*(x2-1)function x=diedai6(x0,tol,N)%x0 是初值,tol为迭代精度,N是迭代最大次数x=zeros(N,1);x(1)=x0;k=1;t=0;while k=N for i=2:N x(i)=x(i-1)-(x(i-1)3-3*x(i-1)-5)/(3*(x(i-1)2-1); end k=k+1; t=x(i)-x(i-1); if abs(t)=tol break; endend