一、何为迭代法
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。利用迭代算法解决问题,需要做好以下三个方面的工作:
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;
else
right=mid;
mid=(left+right)/2;
fmid=2*mid*mid*mid-4*mid*mid+3*mid-6;
}
printf("%.2f\n",mid);
return 0;
}
♥希望能给大家一点帮助哦,别忘了点赞!!!
标签:right,迭代,何为,mid,迭代法,x1,left From: https://www.cnblogs.com/lb2410625342/p/17022185.html