【代码+详解】算法题 : 二分法求函数零点

❗❗❗必看:
下列题我全部都使用 Java 语言写的,并且均可以提交成功,获得Accepted 结果的. 如果代码和详解看了之后,对答案有任何疑问,都可以在评论区提出来,我都会一个一个回答.

❗❗❗感谢大家的支持,如果喜欢我的博客,关注 点赞 收藏 评论一波,非常感谢!!!

题目:二分法求函数零点

有函数:

f(x) = x^5 - 15 * x^4+ 85 * x^3- 225 * x^2+ 274 * x - 121

已知 f(1.5) > 0 , f(2.4) < 0 且方程 f(x) = 0 在区间 [1.5,2.4] 有且只有一个根,请用二分法求出该根。

Input

无。

Output

该方程在区间[1.5,2.4]中的根。要求四舍五入到小数点后6位。

代码

import java.util.*;
import java.util.Scanner;
//f(x) = x^5 - 15 * x^4+ 85 * x^3- 225 * x^2+ 274 * x - 121
public class Main03{
	//先把函数模拟出来
	public static double f(double mid) {
		return Math.pow(mid,5)-15*Math.pow(mid,4)+85*Math.pow(mid,3)-225*Math.pow(mid,2)+274*mid-121;
	}
	    public static void main(String[] args) {
	    	double a = 1.5;//左边边界
	    	double b = 2.4;//右边边界
	    	double precision = 1e-7;//精确值
	    	//调用求根的方法
	    	double root = findRoot(a,b,precision);
	    	System.out.print(root);

	    }
	    
	    //计算根的方法
	    public static double findRoot(double a,double b,double precision) {
	    	double mid = 0.0;
	    	
	    	while((b-a)>precision) {//如果规定精度以内都无法找到根就可以结束找了
	    		mid = (a+b)/2;//mid每次都要更新
	    		if(f(mid)==0.0) {
	    			break;//直接结束了,因为mid就已经符合要求了
	    		}else if(f(a)*f(mid)<0) {
	    			b = mid;
	    		}else {
	    			a = mid;
	    		}
	    		
	    	}
	    	return Math.round(mid*1e6)/1e6;
	    }
	}

初步思路

通过不断地将区间一分为二,找到函数 ( f(x) ) 在给定区间内的零点。

具体步骤

  1. 定义函数

    • 模拟函数 ( f(x) ) 的表达式: ( f(x) = x^5 - 15x^4 + 85x^3 - 225x^2 + 274x - 121 )。
  2. 初始化边界和精度

    • 左边界 a = 1.5
    • 右边界 b = 2.4
    • 精度 precision = 1e-7
  3. 求根方法

    • 计算区间中点 mid: mid = (a + b) / 2
    • 根据函数值判断根的位置:
      • 如果f(mid) == 0.0,则 mid 就是根。
      • 如果 f(a) * f(mid) < 0,说明根在左半区间 [a, mid],更新右边界 b = mid。
      • 否则,根在右半区间 [mid, b],更新左边界 a = mid。
    • 重复上述过程,直到 (b - a) <= precision,表示找到的根在精度范围内。
  4. 返回结果

    • 将找到的根 mid 四舍五入到小数点后6位: Math.round(mid * 1e6) / 1e6

总结方法

二分法通过不断缩小区间范围,逐步逼近函数的零点。关键是每次迭代都将当前区间分为两半,并根据函数值判断根所在的区间。这个方法适用于在确定的区间内有且只有一个根的单调函数。通过严格控制区间的精度,可以保证结果的准确性,适合求解数值精确度要求高的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值