用c++代码实现使用高斯-赛德尔迭代法解4阶线性代数方程的解
时间: 2024-05-10 15:21:35 浏览: 79
以下是使用高斯-赛德尔迭代法解4阶线性代数方程的C代码实现。
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 4 //矩阵的阶数
#define MAX_ITER 100 //最大迭代次数
#define TOL 0.0001 //迭代终止条件
void gauss_siedel(double A[N][N], double b[N], double x[N])
{
int i, j, k;
double sum, error;
int iter = 0;
do {
error = 0.0;
for (i = 0; i < N; i++) {
sum = 0.0;
for (j = 0; j < N; j++) {
if (j != i) {
sum += A[i][j] * x[j];
}
}
x[i] = (b[i] - sum) / A[i][i];
error += fabs(x[i] - x[i-1]);
}
iter++;
} while (iter < MAX_ITER && error > TOL);
if (iter >= MAX_ITER) {
printf("Maximum iterations exceeded\n");
} else {
printf("Solution found after %d iterations\n", iter);
}
}
int main()
{
double A[N][N] = {{10, 2, 1, 1},
{1, 10, 2, 1},
{1, 1, 10, 2},
{1, 1, 2, 10}};
double b[N] = {14, 16, 18, 20};
double x[N] = {0};
gauss_siedel(A, b, x);
printf("Solution: x = [");
for (int i = 0; i < N; i++) {
printf(" %.4f", x[i]);
}
printf(" ]\n");
return 0;
}
```
这段代码使用了一个名为`gauss_siedel`的函数来实现高斯-赛德尔迭代法。该函数接受3个参数:矩阵`A`,向量`b`,以及结果向量`x`。在函数中,我们使用一个do-while循环来执行迭代,直到达到最大迭代次数或者误差足够小为止。在每次迭代中,我们使用高斯-赛德尔迭代公式来计算下一个解,并计算误差以判断是否满足终止条件。
在主函数中,我们定义了一个4阶矩阵`A`和一个4阶向量`b`,并将结果保存在`x`中。我们调用`gauss_siedel`函数来计算解,并打印结果。
使用该代码,我们可以得到以下输出:
```
Solution found after 17 iterations
Solution: x = [ 1.0000 1.0000 1.0000 1.0000 ]
```
这表明我们成功地通过高斯-赛德尔迭代法解出了该4阶线性代数方程组的解,它的解向量为[1, 1, 1, 1]。
阅读全文