1. 程式人生 > >黑馬程式設計師___求解多項式

黑馬程式設計師___求解多項式

----------------------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培訓、期待與您交流! ----------------------