列主元素消去法、雅克比迭代法的C语言代码
时间: 2023-10-31 20:04:18 浏览: 91
C语言实现列主元消去法
列主元素消去法(高斯消元法)的C语言代码:
```
#include <stdio.h>
void gauss_elimination(double A[][MAXN], double B[], int n)
{
int i, j, k, maxi;
double maxa, t;
for (i = 0; i < n; ++i) {
// 找到第i列中绝对值最大的元素
maxi = i;
maxa = fabs(A[i][i]);
for (j = i + 1; j < n; ++j) {
if (fabs(A[j][i]) > maxa) {
maxa = fabs(A[j][i]);
maxi = j;
}
}
// 交换第i行和第maxi行
for (j = i; j <= n; ++j) {
t = A[i][j];
A[i][j] = A[maxi][j];
A[maxi][j] = t;
}
// 消元
for (j = i + 1; j < n; ++j) {
t = A[j][i] / A[i][i];
for (k = i; k <= n; ++k) {
A[j][k] -= t * A[i][k];
}
}
}
// 回带
for (i = n - 1; i >= 0; --i) {
for (j = i + 1; j < n; ++j) {
B[i] -= A[i][j] * B[j];
}
B[i] /= A[i][i];
}
}
```
雅可比迭代法的C语言代码:
```
#include <stdio.h>
void jacobi_iteration(double A[][MAXN], double B[], double X[], int n, double eps)
{
int i, j, k;
double sum, maxd;
do {
maxd = 0;
for (i = 0; i < n; ++i) {
sum = B[i];
for (j = 0; j < n; ++j) {
if (i != j) {
sum -= A[i][j] * X[j];
}
}
sum /= A[i][i];
if (fabs(sum - X[i]) > maxd) {
maxd = fabs(sum - X[i]);
}
X[i] = sum;
}
} while (maxd > eps);
}
```
其中,MAXN 是矩阵的最大维度,eps 是迭代的精度要求。
阅读全文