求区间(2,3)的一个解,精确到小数点后8位算法
首先是要判断该区间是否有解,这里使用数学中的定义,f(a)\*f(b)<0
,则在a与b之间有解,咱们从2开始,逐渐加0.1,与f(3)相乘,判断二者之积是否为0,便可知道是否有解code
有解的话咱们就能够继续下一步了,先设置一个数值min,从f(2)开始,一次加上0.1,寻找f(x)最小数值时候的x的值,以此x的值缩小范围,继续重复以前的步骤,通过屡次循环以后,便可找到精度较大的xorm
double a,b; System.out.println("输入上限"); Scanner scanner = new Scanner(System.in); a = scanner.nextInt(); System.out.println("输入下限"); b = scanner.nextInt(); scanner.close(); boolean isHave = false;//false无解 for(double i = a;i<=b;i=i+0.1){ if(fun(i)*fun(b)<=0){ isHave = true; break; } } if(isHave){ System.out.println("有解"); int k = 1; double y,c = 0.1,min=100,x1=0;//min赋值一个较大的初值 while(k<=8){ for(double x=a;x<=b;x=x+c){ //System.out.println(x); y = fun(x); if(Math.abs(y)<min){ min = Math.abs(y); x1 = x; } } c = c/10; //System.out.println(c); a = x1-5*c; b = x1+5*c; k++; } DecimalFormat fm = new DecimalFormat("0.00000000"); System.out.println(fm.format(x1)); }else{ System.out.println("无解"); } public static double fun(double x){ return 2*Math.pow(x, 2)*Math.pow(Math.sin(x), 7)+3*Math.pow(x, 0.5)*Math.cos(x)-Math.exp(x)/5; }