GS迭代算法c语言
时间: 2023-07-26 09:19:03 浏览: 110
GS(Gauss-Seidel)迭代算法是一种求解线性方程组的方法,在c语言中的实现可以参考以下示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_ITER 1000 // 最大迭代次数
#define TOL 1.0e-12 // 精度要求
int main()
{
int n = 3; // 线性方程组的阶数
int i, j, k;
int iter = 0; // 迭代次数
double** A; // 系数矩阵
double* b; // 常数向量
double* x; // 解向量
double* x_new; // 新解向量
double resid; // 残量
// 分配内存
A = (double**)malloc(n * sizeof(double*));
for (i = 0; i < n; i++) {
A[i] = (double*)malloc(n * sizeof(double));
}
b = (double*)malloc(n * sizeof(double));
x = (double*)malloc(n * sizeof(double));
x_new = (double*)malloc(n * sizeof(double));
// 初始化系数矩阵和常数向量
A[0][0] = 2; A[0][1] = 1; A[0][2] = -1; b[0] = 8;
A[1][0] = -3; A[1][1] = -1; A[1][2] = 2; b[1] = -11;
A[2][0] = -2; A[2][1] = 1; A[2][2] = 2; b[2] = -3;
// 初始化解向量
for (i = 0; i < n; i++) {
x[i] = 0.0;
x_new[i] = 0.0;
}
// 迭代求解
do {
iter++;
for (i = 0; i < n; i++) {
x_new[i] = b[i];
for (j = 0; j < n; j++) {
if (i != j) {
x_new[i] -= A[i][j] * x_new[j];
}
}
x_new[i] /= A[i][i];
}
resid = 0.0;
for (k = 0; k < n; k++) {
resid += fabs(x_new[k] - x[k]);
x[k] = x_new[k];
}
} while (resid > TOL && iter < MAX_ITER);
// 输出结果
printf("Solution:\n");
for (i = 0; i < n; i++) {
printf("x%d = %.14f\n", i+1, x[i]);
}
printf("Iterations: %d\n", iter);
// 释放内存
for (i = 0; i < n; i++) {
free(A[i]);
}
free(A);
free(b);
free(x);
free(x_new);
return 0;
}
```
这段代码通过一个具体的线性方程组的例子演示了GS迭代算法的求解过程,其中MAX_ITER和TOL分别表示最大迭代次数和精度要求,A是系数矩阵,b是常数向量,x是解向量,x_new是新解向量,resid是残量。在迭代过程中,首先通过一次循环计算出新解向量,然后计算残量,如果满足精度要求或者迭代次数已达到最大值,则结束迭代。最后输出求解结果和迭代次数,并释放内存。
阅读全文