随笔 - 77  文章 - 1 评论 - 10 阅读 - 68913
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

  还是用迭代法求解一个方程题,f(x)=0,如果f(x1)<0,f(x2)>0,如果f(x)是连续的,则在x1和x2

之间一定有一个值x~,使得f(x~)=0。首先用步骤描述解题框架:

1、任意找两个点x1、x2,使得f(x1)<0,f(x2)>0

2、计算x1、x2的中间点的值mid=(x1+x2)/2

3、计算f(mid),如果f(mid)>0,则最终的结果值在 x1,mid之间,将x2赋值为mid,继续1、2、3、4步骤;

如果f(mid)<0,则最终的结果值在mid,x2之间,将x1赋值为mid,继续1,2,3,4步骤

4、计算|x1-x2|是否小于某个精确度值,如果小于的话直接返回mid值,表示在该精确度范围内已经找到了

近似的解了。

如下图 f(x)=x^2-5的方程图,按照上述步骤计算f(x)=0的解

 

 

首先f(0)<0,f(4)>0,就选定0、4为初始的x1,x2来计算解,精确度定位1e-9,代码如下:

public static void main(String[] args){
System.out.println(calculate(0,4,1e-9));
}
public static double calculate(double x1,double x2,double precision){
double mid=(x1+x2)/2;
while(Math.abs(x1-x2)>precision){
if(calculate(x2)*calculate(mid)>0){
x2=mid;
}else{
x1=mid;
}
mid=(x1+x2)/2;
}
return mid;
}
public static double calculate(double x){
return 2*x*x-5;
}

输出结果:1.58113883016631

 

总结:迭代就是先确定一个值为初始值,然后以这个初始值为新的变量带入计算规则,将计算出的再作为新

的变量带入计算规则(函数,也就是方程),最后满足条件的话直接返回结果。

posted on   Judy518  阅读(193)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2017-08-30 Java运行时数据区
点击右上角即可分享
微信分享提示