黑馬程式設計師___求解多項式
阿新 • • 發佈:2019-01-02
----------------------android培訓、java培訓、期待與您交流! ----------------------
/** * 求多項式方程的一個近似解 * f(x) = 2x^3 -x^2 -25x-12; * 求解思路: * 設r是方程f(x)=0的根,選取x0作為r初始近似值, * 過點(x0,f(x0)做曲線y=f(x)的切線L,L的方程為y=f(x0)+df(x0)(x-x0), * 求出L與x軸交點的橫座標x1=x0-f(x0)/df(x0),稱x1為r的一次近似值, * 過點(x1,f(x1))做曲線y=f(x)的切線, * 並求該切線與x軸的橫座標x2=x1-f(x1)/df(x1)稱x2為r的二次近似值, * 重複上述過程,得r的近似值序列{Xn},其中Xn+1=Xn-f(Xn)/df(Xn), * 稱為r的n+1次近似值 */ public class NewtonIterationToSolveEquation { private double f(double x){ return 2*Math.pow(x, 3) - Math.pow(x, 2) - 25*x - 12; } private double df(double x){ return 6*Math.pow(x, 2) - 2*x -25; } private double answer(double t){ double x , x0 , y , dy; x = t; x0 = 0; while(Math.abs(x - x0) >= 1e-5){ x0 = x; y = f(x);//原函式 dy = df(x);//導函式 x = x0 - y/dy; } return x0; } public static void main(String[] args) { NewtonIterationToSolveEquation nitse = new NewtonIterationToSolveEquation(); //傳入一個非零常數即可得到一個近似解。
System.out.println(nitse.answer(1));//-0.49999999992372396 接近-1/2
System.out.println(nitse.answer(2));//-3.0000010996411954 接近-3
System.out.println(nitse.answer(3));//4.000000000430927 接近4
}
}
---------------------- android培訓、java培訓、期待與您交流! ----------------------