java用高斯消元法求残差
时间: 2024-02-28 17:29:31 浏览: 20
以下是Java代码实现高斯消元法求残差:
```
public class GaussElimination {
public static void main(String[] args) {
// 定义系数矩阵和常数向量
double[][] A = {{2, 1, -1}, {-3, -1, 2}, {-2, 1, 2}};
double[] b = {8, -11, -3};
// 求解方程 Ax = b
double[] x = solve(A, b);
// 计算残差
double[] r = residual(A, b, x);
// 输出结果
System.out.println("解向量:");
for (double xi : x) {
System.out.printf("%.2f ", xi);
}
System.out.println();
System.out.println("残差向量:");
for (double ri : r) {
System.out.printf("%.2f ", ri);
}
System.out.println();
}
// 高斯消元求解线性方程组
public static double[] solve(double[][] A, double[] b) {
int n = A.length;
// 将系数矩阵和常数向量合并
double[][] Ab = new double[n][n + 1];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
Ab[i][j] = A[i][j];
}
Ab[i][n] = b[i];
}
// 高斯消元过程
for (int i = 0; i < n - 1; i++) {
// 将第i列的主元素移到第i行
int maxRowIndex = i;
for (int j = i + 1; j < n; j++) {
if (Math.abs(Ab[j][i]) > Math.abs(Ab[maxRowIndex][i])) {
maxRowIndex = j;
}
}
swapRows(Ab, i, maxRowIndex);
// 消元过程
for (int j = i + 1; j < n; j++) {
double factor = Ab[j][i] / Ab[i][i];
for (int k = i; k < n + 1; k++) {
Ab[j][k] -= factor * Ab[i][k];
}
}
}
// 回代过程
double[] x = new double[n];
for (int i = n - 1; i >= 0; i--) {
double sum = 0;
for (int j = i + 1; j < n; j++) {
sum += Ab[i][j] * x[j];
}
x[i] = (Ab[i][n] - sum) / Ab[i][i];
}
return x;
}
// 交换矩阵的两行
public static void swapRows(double[][] A, int i, int j) {
double[] temp = A[i];
A[i] = A[j];
A[j] = temp;
}
// 计算残差
public static double[] residual(double[][] A, double[] b, double[] x) {
int n = A.length;
double[] r = new double[n];
for (int i = 0; i < n; i++) {
double sum = 0;
for (int j = 0; j < n; j++) {
sum += A[i][j] * x[j];
}
r[i] = b[i] - sum;
}
return r;
}
}
```
在上面的代码中,`solve()`方法实现了高斯消元求解线性方程组,`residual()`方法计算了残差。在`main()`方法中,我们构造了一个系数矩阵和常数向量,求解线性方程组,然后输出解向量和残差向量。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)