牛顿迭代法实验报告
- 格式:doc
- 大小:131.50 KB
- 文档页数:5
用牛顿迭代法求非线性方程的根
一、 实验题目
求方程013xxxf在5.1附近的根。
二、 实验引言
(1)实验目的
1. 用牛顿迭代法求解方程的根
2. 了解迭代法的原理
3. 改进和修缮迭代法
(2)实验意义
牛顿迭代法就是众多解非线性方程迭代法中比较普遍的一种,求解方便实用。
三、 算法设计
(1)基本原理
给定初始值0x,为根的容许误差,为xf的容许误差,N为迭代次数的容许值。
1.如果0xf或迭带次数大于N,则算法失败,结束;否则执行2.
2.计算0001xfxfxx.
3.若21xx或1xf,则输出1x,程序结束;否则执行4.
4.令10xx,转向1.
(2)流程图
四、 程序设计
program nndd01
implicit none
real,parameter::e=0.005
real,parameter::n=9
real::x1
real::x0=1.5
integer::k
real,external::f,y
do k=1,9
if (y(x0)==0) then
write(*,*)"失败"
else
x1=x0-f(x0)/y(x0)
if (abs(x1-x0) write(*,*)k,x1 else x0=x1 end if end if end do end function f(x) implicit none real::f real::x f=x*x*x-x-1 return end function function y(x) implicit none real::y real::x y=3*x*x-1 return end function 五、 求解结果 3 1.324718 4 1.324718 5 1.324718 6 1.324718 7 1.324718 8 1.324718 9 1.324718 六、 算法评价及讨论 1. 在求解在1.5处附近的根,不难发现在输入区间左端值为1时需要迭代6次,而输入区间左端值为1.5时,却只要4次。初值更接近方程根时,迭代次数越少。 2. 在实验中,都是选取的区间左端值作为初次迭代值,而没有用到右端,应该设置左右端值作为迭代初值,比较它们的迭代次数,这样可以得到更少的迭代次数。 3. 在编写代码过程中,有几点疑惑,左右两端的导数是否会影响迭代次数,也就是选取哪个端点值迭代的问题。 4. 怎么样求出方程所有的根,在根的附近,得到解后程序就结束运行,如何将方程所有的根找出。 5. 怎么进一步加速迭代将是牛顿法进一步需要改进的问题。 6. 迭代过程中,导数值比较小,会导致误差比较大,如何规避。 附: 二分法程序 program erfenfa implicit none real::a =1.0000 real ::b=1.5000 real, parameter :: k=0.0050 real x, y1,f, y2 write(*,*)"a=, b=" read(*,*) a , b do while (b-a>k) y1=a*a*a-a-1 x=(a+b)/2 f=x*x*x-x-1 y2=f if(y1*y2>0) then a=x else b=x end if write(*,*) x , y2 end do stop end 一般迭代法程序 program main implicit none real::x0 integer::k real::x1 integer,parameter::N=9 real,external::f k=0 x0=1.5 do while (k<=N) k=k+1 write(*,*) k,x0 x0=f(x0) end do end function f(x) real::x,f f=(x+1)**(real(1)/real(3)) return end