用gauss-seidel迭代法生成C语言代码,要求输入方程组的阶数,矩阵A的元素和常向量b的元素
时间: 2023-07-15 12:15:34 浏览: 109
以下是使用Gauss-Seidel迭代法求解线性方程组的C语言代码,其中输入方程组的阶数n,矩阵A的元素和常向量b的元素。
```
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_ITER 1000 // 最大迭代次数
#define EPSILON 0.00001 // 精度
int main()
{
int n, i, j, k, iter;
double **A, *x, *b, *x_new, sum, error;
printf("请输入方程组的阶数n:");
scanf("%d", &n);
// 动态分配内存
A = (double **)malloc(n * sizeof(double *));
for (i = 0; i < n; i++) {
A[i] = (double *)malloc(n * sizeof(double));
}
x = (double *)malloc(n * sizeof(double));
b = (double *)malloc(n * sizeof(double));
x_new = (double *)malloc(n * sizeof(double));
// 输入矩阵A的元素
printf("请输入矩阵A的元素:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%lf", &A[i][j]);
}
}
// 输入常向量b的元素
printf("请输入常向量b的元素:\n");
for (i = 0; i < n; i++) {
scanf("%lf", &b[i]);
}
// 初始化x向量
for (i = 0; i < n; i++) {
x[i] = 0;
}
// 迭代求解
for (iter = 1; iter <= MAX_ITER; iter++) {
error = 0;
for (i = 0; i < n; i++) {
sum = 0;
for (j = 0; j < n; j++) {
if (j != i) {
sum += A[i][j] * x[j];
}
}
x_new[i] = (b[i] - sum) / A[i][i];
error += fabs(x_new[i] - x[i]);
x[i] = x_new[i];
}
if (error < EPSILON) {
printf("迭代次数为%d\n", iter);
printf("方程组的解为:\n");
for (i = 0; i < n; i++) {
printf("%lf\n", x[i]);
}
break;
}
}
if (iter > MAX_ITER) {
printf("迭代失败\n");
}
// 释放内存
for (i = 0; i < n; i++) {
free(A[i]);
}
free(A);
free(x);
free(b);
free(x_new);
return 0;
}
```
阅读全文