牛顿迭代法

设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y = f(x)的切线L,L的方程为y = f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标 x1 = x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y = f(x)的切线,并求该切线与x轴交点的横坐标 x2 = x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n)) /f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式

相关习题:

《C程序设计》(第三版)6.12

《C程序设计教程》 5.12

Solution by Mutoo:

// 求 f(x)=2x^3-4x^2+3x-6 在1.5 附近的根

Code:
  1. #include<stdio.h>  
  2. #include<math.h>  
  3.   
  4. double F(double x) // 构造方程  
  5. {  
  6.     return 2*pow(x,3)-4*pow(x,2)+3*x-6;    // f(x)=2x^3-4x^2+3x-6  
  7. }  
  8.   
  9. double f(double x) // 构造方程的导数(用于求斜率)  
  10. {  
  11.     return 6*pow(x,2)-8*x+3;    //f'(x)=6x^3-8x+3  
  12. }  
  13.   
  14. /********** 
  15. 切线:(y-y0)=k(x-x0) 
  16. 移项:x = x0 - y0/k 
  17. 其中: 
  18. k=f'(x) 
  19. y0=f(x) 
  20. **********/  
  21.   
  22. void main()  
  23. {  
  24.     double X0,Xn;  
  25.     X0 = Xn = 1.5; // 初始值  
  26.     do  
  27.     {  
  28.         X0 = Xn;  
  29.         Xn = X0-F(X0)/f(X0);  
  30.     }while(fabs(F(Xn))>10e-6); // 误差指导  
  31.     printf("root=%lf/n",Xn);  
  32. }  

 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值