何为迭代法
一、何为迭代法
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。利用迭代算法解决问题,需要做好以下三个方面的工作:a.确定迭代变量(本题可设 x[x+1]为x、x1为x[n])b.建立迭代关系式(本题为 X[n+1]=(X[n]+a/X[n])/2)c.对迭代过程加以控制(本题为 while(fabs(x-x1)>1E-5))
二、何为牛顿迭代法
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。公式即为 X[n+1]=(X[n]+a/X[n])/2
有了上述准备我们就可以来做题了,话不多说,附上代码:
#include"stdio.h"#include"math.h"int main(){int a;double x=1.0,x1;scanf("%d",&a);while(fabs(x-x1)>1e-5) //判断结束条件{x1=x;x=(x1+a/x1)/2;}printf("%0.3lf",x);return 0;}
但在这里我还想给大家拓展一下:
hearts;我们已经介绍过牛顿迭代法是一般用来近似求解方程的,与之对应的还有二分法求解。比较典型的例题是求该方程的根:2X^3-4X^2+3X-6=0
1. 用牛顿迭代法求下面方程在1.5附近的根:2x^3-4x^2+3x-6=0
#include<stdio.h>#include<math.h>int main(){int i=0;double x1=1.5,x2=0;//迭代初值while (fabs(x2-x1)>=1e-5){x1=x1-(2*x1*x1*x1-4*x1*x1+3*x1-6)/(6*x1*x1-8*x1+3);x2=x1-(2*x1*x1*x1-4*x1*x1+3*x1-6)/(6*x1*x1-8*x1+3);i++;printf("第%d次迭代 x1=%9.8f\tx2=%9.8f\n",i,x1,x2);}printf("\nx=%9.8f\t共迭代:%d次\n",x2,i);return 0;}
2.用二分法求下面方程在(-10,10)之间的根:2x^3-4x^2+3x-6=0
#include <stdio.h>#include <math.h>int main(){float left,right,mid;float fleft, fright,fmid;left=-10.;right=10.;mid=(left+right)/2;fmid=2*mid*mid*mid-4*mid*mid+3*mid-6;while(fabs(fmid)>1e-6){fleft=2*left*left*left-4*left*left+3*left-6;fright=2*right*right*right-4*right*right+3*right-6;if(fleft*fmid>0)left=mid;elseright=mid;mid=(left+right)/2;fmid=2*mid*mid*mid-4*mid*mid+3*mid-6;}printf("%.2f\n",mid);return 0;}
♥希望能给大家一点帮助哦,别忘了点赞!!!
浙公网安备 33010602011771号