用C语言解线性方程组
时间: 2023-09-04 21:11:00 浏览: 54
解线性方程组的方法有很多种,其中比较常见的有高斯消元法和LU分解法。以下我将用C语言实现高斯消元法来解一个n元线性方程组。
假设我们要解以下方程组:
```
a11 * x1 + a12 * x2 + ... + a1n * xn = b1
a21 * x1 + a22 * x2 + ... + a2n * xn = b2
...
an1 * x1 + an2 * x2 + ... + ann * xn = bn
```
则可以将其表示成增广矩阵的形式:
```
a11 a12 ... a1n | b1
a21 a22 ... a2n | b2
... ... ... ... ...
an1 an2 ... ann | bn
```
下面是用C语言实现高斯消元法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
int main() {
int n;
double a[MAX_SIZE][MAX_SIZE+1], x[MAX_SIZE];
printf("请输入未知数的个数n:");
scanf("%d", &n);
printf("请输入增广矩阵的系数:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j <= n; j++) {
scanf("%lf", &a[i][j]);
}
}
// 高斯消元
for (int i = 0; i < n-1; i++) {
for (int j = i+1; j < n; j++) {
double ratio = a[j][i] / a[i][i];
for (int k = i+1; k <= n; k++) {
a[j][k] -= ratio * a[i][k];
}
}
}
// 回带求解
for (int i = n-1; i >= 0; i--) {
x[i] = a[i][n] / a[i][i];
for (int j = i-1; j >= 0; j--) {
a[j][n] -= a[j][i] * x[i];
a[j][i] = 0;
}
}
// 输出解向量
printf("方程组的解为:\n");
for (int i = 0; i < n; i++) {
printf("x%d = %.2f\n", i+1, x[i]);
}
return 0;
}
```
在这个程序中,首先要输入未知数的个数n和增广矩阵的系数a。然后使用高斯消元法将增广矩阵化为上三角矩阵,最后使用回带求解法求解出x的值并输出。需要注意的是,如果在高斯消元的过程中发现某行的对角线元素为0,则需要交换该行和下面某行的位置,以保证高斯消元的正确性。