迭代法:给定一个 方程 f(x) = 0 ,可以用多种方式来构造它的等价方程 x = p(x) ,取定根的一个近似值 X0,构造序列:
Xk+1 = p(Xk) ( k = 0, 1 , 2 , .....).
迭代法算法 :
1. 给定初始值 X0 和精度要求 e ,以及最大循环次数 K
2. 计算 Xk+1 = p(Xk) .
3. | Xk+1 - Xk | < e ,如果成立则说明达到精度要求,输出 Xk+1 ,否则重复 2
具体例子:
求 x*x*x - 3*x + 1 = 0 , 在 0.5 附近的根,要求精确到第四位小数。
根据迭代法原理我们可以得到 : x = (x*x*x + 1)/3, 初始值为 X0 = 0.5 ,精度 e = 0.0001.
具体代码:
public static double Diedai(double X0 , double e){
int k = 0;
double X = X0;
while( k < 1000){
k++;
double tp = X;
X = (tp*tp*tp + 1)/3;
if(Math.abs(X - tp) >= e){
System.out.println("第" + k + "次迭代: x = " + X);
}
else break;
}
System.out.print("第 " + k + "次迭代: x = ");
return X;
}
牛顿法:
还是用上面的例子 x*x*x - 3*x + 1 = 0 进行分析:f(x) = x*x*x - 3*x + 1 ,对其进行求导 f`(x) = 3*x*x - 3 。
1. Xk+1 = Xk - f(Xk)/f`(Xk)
2. 如果 | Xk+1 - Xk | < e 那么输出 Xk+1 ,否则重复 1 的操作。
具体代码:
public static double Newton(double X0,double e){
int k = 0;
double X = X0;
while( k < 1000){
k++;
double tp = X;
X = tp - (tp*tp*tp - 3*tp + 1)/(3*tp*tp - 3);
if(Math.abs(X - tp) >= e){
System.out.println("第" + k + "次迭代: x = " + X);
}
else
break;
}
System.out.print("第 " + k + "次迭代: x = ");
return X;
}