【概述】
牛顿中值法可用于工程上解一些难于直接求解的方程,如2^x=5-x,其核心思想是取两个端点的中值,再取中值的结果,若结果大于零则让末端取中值,如结果小于零则让始端取中值,然后不断重复这一过程,直到结果的绝对值小于一定精度,便认为此结果为方程的近似解。
以下程序仅仅用了16步便得到了较高精度的近似解。
【代码】
package test240716; /** * 牛顿中值法求2^x=5-x的根 * @author 逆火 * */ public class Test { public static void main(String[] args) { double start=1; double end =3; double result=99; int idx=0; while(Math.abs(result)>0.00001){ double mid=(start+end)/2; result=Math.pow(2,mid)-5+mid;//解析式 idx++; System.out.println("#"+idx+".strat="+format(start)+" mid="+format(mid)+" end="+format(end)+" result="+format(result)); if(result>0){ end=mid; }else{ start=mid; } } System.out.println("使用牛顿中值法求得2^x=5-x的近似解="+end); } /** * 返回保留五位小数的字符串 * @param d * @return */ public static String format(double d){ java.text.DecimalFormat df =new java.text.DecimalFormat("#0.00000"); return df.format(d); } }
【输出】
#1.strat=1.00000 mid=2.00000 end=3.00000 result=1.00000 #2.strat=1.00000 mid=1.50000 end=2.00000 result=-0.67157 #3.strat=1.50000 mid=1.75000 end=2.00000 result=0.11359 #4.strat=1.50000 mid=1.62500 end=1.75000 result=-0.29058 #5.strat=1.62500 mid=1.68750 end=1.75000 result=-0.09152 #6.strat=1.68750 mid=1.71875 end=1.75000 result=0.01026 #7.strat=1.68750 mid=1.70312 end=1.71875 result=-0.04082 #8.strat=1.70312 mid=1.71094 end=1.71875 result=-0.01533 #9.strat=1.71094 mid=1.71484 end=1.71875 result=-0.00255 #10.strat=1.71484 mid=1.71680 end=1.71875 result=0.00385 #11.strat=1.71484 mid=1.71582 end=1.71680 result=0.00065 #12.strat=1.71484 mid=1.71533 end=1.71582 result=-0.00095 #13.strat=1.71533 mid=1.71558 end=1.71582 result=-0.00015 #14.strat=1.71558 mid=1.71570 end=1.71582 result=0.00025 #15.strat=1.71558 mid=1.71564 end=1.71570 result=0.00005 #16.strat=1.71558 mid=1.71561 end=1.71564 result=-0.00005 #17.strat=1.71561 mid=1.71562 end=1.71564 result=0.00000 使用牛顿中值法求得2^x=5-x的近似解=1.7156219482421875