何为迭代法
一、何为迭代法
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。利用迭代算法解决问题,需要做好以下三个方面的工作:
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;
}
♥希望能给大家一点帮助哦,别忘了点赞!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)