C语言迭代法求根.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言迭代法求根 ①源程序 #includesrdio.h main() /*定义变量类型。*/ {double a,x0,x1; printf(求一个实数a的平方根x1\n); /*do-while循环: 满足条件 a=0时,执行循环输入实数a。不满足条件a=0时,退出循环,即保证了a0。*/ do scanf(%lf,a); while(a=0); /*赋初值给x1。*/ x1=a/2.0; /*do-while 循环: 满足条件(误差1e-6)时,则继续循环迭代。 不满足条件(误差1e-6)时,则停止循环迭代。 */ do {x0=x1; x1=(x0+a/x0)/2.0;} /*平方根迭代公式,用牛顿迭代法求得。*/ while((x1-x0)1e-6||(x1-x0)-1e-6); /*迭代误差为1e-6,即e的负6次方,约等于2.71821的负6次方为0.000001。*/ printf(%f的平方根是%\n,a,x1); } ~ ②牛顿迭代法 曲线:y=f(x1) 曲线外一点:(x0,f(x0)) 过点做曲线切线,切线的斜率: f(x1)=(y-f(x0))/(x1-x0) 当y=f(x1)=x1^2,即为平方函数时: 2x1=(x1^2-x0^2)/(x1-x0) 2x1^2-2x1x0=x1^2-x0^2 x1^2-2x1x0=-x0^2 x1^2+x0^2=2x1x0 a+x0^2=2x1x0 x1=(x0+a/x0)/2 即求得平方根迭代公式。 牛顿迭代法求方程根 【项目描述】 编写程序,用牛顿迭代法求方程的根。方程为: ax3+bx2+cx+d=0 系数a,b,c,d由用户输入,求x在1附近的一个实根。 牛顿迭代法的公式: x=x0-f(x0)/f’(x0) 迭代到|x-x0|=0.00001时结束。 【项目分析】 如图所示,我们求f(x)的根,先找到一个点xn,在f(xn)处求导得到了它的切线。只要这个切线的斜率不为0,我们会得到它与x轴的交点。我们将这个交点作为下一个取值,也就是点xn+1。重复上述过程进行迭代,就可以得到一个足够接近的方程的解。 ? 在点(xn,f(xn)处作切线,它的斜率是f’(xn),截距f(xn),得到切线方程: y=f’(xn)(x-xn)+f(xn) 解这个方程可以得到: xn+1=xn-f(xn)/f’(xn) 【算法设计】 【编写程序】 def solution(a,b,c,d): x=1.5 x0=x f=a*x0**3+b*x0**2+c*x0+d fd=3*a*x0**2+b*x0+c x=x0-f/fd while abs(x-x0)=1e-5: x0=x f=a*x0**3+b*x0**2+c*x0+d fd=3*a*x0**2+b*x0+c x=x0-f/fd return x a,b,c,d=map(int,input().split()) x=solution(a,b,c,d) print(方程的根为:x=%.6f%x)

文档评论(0)

企业管理 + 关注
实名认证
服务提供商

计算机三级持证人

从事多年企业管理、在团队建设、员工培训、营销提升、组织架构有多自己的经验,希望在这个平台分享及帮助更多的公司或企业!

领域认证该用户于2023年05月09日上传了计算机三级

1亿VIP精品文档

相关文档