网站大量收购独家精品文档,联系QQ:2885784924

牛顿迭代法实验报告.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用牛顿迭代法求非线性方程的根 实验题目 求方程在附近的根。 实验引言 (1)实验目的 用牛顿迭代法求解方程的根 了解迭代法的原理 改进和修缮迭代法 (2)实验意义 牛顿迭代法就是众多解非线性方程迭代法中比较普遍的一种,求解方便实用。 算法设计 (1)基本原理 给定初始值,为根的容许误差,为的容许误差,N为迭代次数的容许值。 如果或迭带次数大于N,则算法失败,结束;否则执行2. 计算. 若或,则输出,程序结束;否则执行4. 令,转向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.5处附近的根,不难发现在输入区间左端值为1时需要迭代6次,而输入区间左端值为1.5时,却只要4次。初值更接近方程根时,迭代次数越少。 在实验中,都是选取的区间左端值作为初次迭代值,而没有用到右端,应该设置左右端值作为迭代初值,比较它们的迭代次数,这样可以得到更少的迭代次数。 在编写代码过程中,有几点疑惑,左右两端的导数是否会影响迭代次数,也就是选取哪个端点值迭代的问题。 怎么样求出方程所有的根,在根的附近,得到解后程序就结束运行,如何将方程所有的根找出。 怎么进一步加速迭代将是牛顿法进一步需要改进的问题。 迭代过程中,导数值比较小,会导致误差比较大,如何规避。 附: 二分法程序 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-ak) y1=a*a*a-a-1 x=(a+b)/2 f=x*x*x-x-1 y2=f if(y1*y20) 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

您可能关注的文档

文档评论(0)

annylsq + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档