迭代法在程序设计中也是一种常见的递推方法,即:给定一个原始值,按照某个规则计算一个新的值,
然后将这个计算出的新值作为新的变量值带入规则中进行下一步计算,在满足某种条件后返回最后的
计算结果;牛顿迭代法是用于多项式方程求解根的方法,在只有笔和纸的年代,这个方法给了人们一个
无限逼近多项式方程真实解的重要思路,牛顿也太牛了.....
求解f(x)=0的解,用牛顿迭代法步骤如下:
1、在y=f(x)这个函数上任取一点(x0,f(x0)),在这个点上做曲线y=f(x)的切线L,可以计算出
切线L的表达式为y=f(x0)+f~(x0)(x-x0),这里f~(x0)表示L在点(x0,f(x0))处的斜率
2、得出了切线L的表达式,我们就可以计算出L与X轴相交点的值x1=x0-f(x0)/f~(x0),此时
x1要比x0更接近f(x)曲线与x轴相交点的真实值
3、将刚才得出的x1带入到f(x)函数中,得到点(x1,f(x1)),再在点(x1,f(x1))出做曲线f(x)的
切线,同样会得到新的切线的表达式:y=f(x1)+f~(x1)(x-x1),将得出的切线与X周相交,同样
会得到相交点的值x2=x1-f(x1)/f~(x1)
4、重复以上计算,会得出一个计算规则:,这个是真实值的n+1次近似值。
可以如下图近似表示。
根据以上描述,设计一个求解X~2-C=0的正根的方程,X~2表示X的平方,先得出迭代公式:;
设计代码如下:
public static void main(String[] args){
System.out.println(calculate(2.0,2.0,0,1e-15));
System.out.println(calculate(2.0,1e-15));
}
public static double calculate(double c,double x,double y,double precision){
y=(x+c/x)/2;
if(Math.abs(x-y)>precision){
x=y;
y=(x+c/x)/2;
return calculate(c,x,y,precision);
}
return x;
}
public static double calculate(double c,double precision){
double x=c,y=(x+c/x)/2;
while(Math.abs(x-y)>precision){
x=y;
y=(x+c/x)/2;
}
return x;
}
从以上代码可以看出,迭代用法是首先给定一个初始值,然后按照某种规则进行计算,将得出的计算结果重新带入规则进行再次计算,
直到满足某个条件退出程序。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?