计算方法——迭代法、牛顿法求解方程组

时间:2023-01-07 23:04:08

迭代法:给定一个 方程 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;
}