用C语言写出包含解出线性方程组的所有情况的通用算法
时间: 2023-12-10 14:42:57 浏览: 98
三种线性方程组求解方法的串行算法,和并行算法。包含高斯消元法,LU分解法,追赶法。
5星 · 资源好评率100%
以下是一个用C语言实现的通用线性方程组求解算法:
```c
#include <stdio.h>
int main() {
int n; // 矩阵行数和列数
printf("请输入矩阵的行数和列数n:");
scanf("%d", &n);
double matrix[n][n+1]; // 增广矩阵
// 输入矩阵
printf("请输入增广矩阵:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n+1; j++) {
scanf("%lf", &matrix[i][j]);
}
}
// 高斯消元
for (int k = 0; k < n-1; k++) {
for (int i = k+1; i < n; i++) {
double factor = matrix[i][k] / matrix[k][k];
for (int j = k; j < n+1; j++) {
matrix[i][j] -= factor * matrix[k][j];
}
}
}
// 判断是否有唯一解或无解
if (matrix[n-1][n-1] == 0 && matrix[n-1][n] != 0) {
printf("无解\n");
return 0;
} else if (matrix[n-1][n-1] == 0 && matrix[n-1][n] == 0) {
printf("有无数解\n");
return 0;
}
// 回代求解
double x[n];
x[n-1] = matrix[n-1][n] / matrix[n-1][n-1];
for (int i = n-2; i >= 0; i--) {
double sum = 0;
for (int j = i+1; j < n; j++) {
sum += matrix[i][j] * x[j];
}
x[i] = (matrix[i][n] - sum) / matrix[i][i];
}
// 输出结果
printf("方程的解为:\n");
for (int i = 0; i < n; i++) {
printf("x%d = %lf\n", i+1, x[i]);
}
return 0;
}
```
这个算法的基本思路是先用高斯消元将增广矩阵化为上三角矩阵,再用回代求解出方程的解。在高斯消元的过程中,如果出现某一行的主元素为0且该行的常数项不为0,则方程无解;如果出现某一行的主元素为0且该行的常数项也为0,则方程有无数解。
阅读全文