当前位置:文档之家› 牛顿迭代法实验报告

牛顿迭代法实验报告

用牛顿迭代法求非线性方程的根
一、 实验题目
求方程()013=--=x x x f 在5.1附近的根。

二、 实验引言
(1)实验目的
1. 用牛顿迭代法求解方程的根
2. 了解迭代法的原理
3. 改进和修缮迭代法
(2)实验意义
牛顿迭代法就是众多解非线性方程迭代法中比较普遍的一种,求解方便实用。

三、 算法设计
(1)基本原理
给定初始值0x ,ε为根的容许误差,η为()x f 的容许误差,N 为迭代次数的容许值。

1.如果()0='x f 或迭带次数大于N ,则算法失败,结束;否则执行2.
2.计算()()
0001x f x f x x '-=. 3.若ε<-21x x 或()η<1x f ,则输出1x ,程序结束;否则执行4.
4.令10x x =,转向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)<e) then 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。

相关主题