高斯消去法解方程组 c语言
时间: 2023-05-08 10:01:53 浏览: 245
用高斯消去法求方程组的解
4星 · 用户满意度95%
高斯消去法又叫高斯-约旦消元法,是一种线性方程组求解的方法,其原理是通过初等变换将线性方程组转化为三角形矩阵,再通过回代求解得到方程的解。
在C语言中,我们可以使用数组存储线性方程组的系数矩阵和右端向量。具体步骤如下:
1、输入线性方程组的系数矩阵和右端向量,存入数组中。
2、遍历每一行,找到该行系数矩阵中当前列的最大值,将该行与系数矩阵第一行交换位置,并将右端向量也进行相同的交换。
3、对系数矩阵进行消元,使得该列以下的数均为0。具体方法是将该列以下每一行的第一项系数变为0,同时将右端向量也相应地更新。
4、重复2-3步骤,直到将系数矩阵转化为三角形矩阵。
5、通过回代求解得到方程组的解。
代码如下:
```
#include <stdio.h>
void Gauss(double a[][101], double b[], int n)
{
int i, j, k, maxrow;
double temp, max;
for (i = 0; i < n; i++) {
//找到系数矩阵当前列的最大值所在的行,将该行与第i行交换位置
maxrow = i;
max = a[i][i];
for (j = i + 1; j < n; j++) {
if (a[j][i] > max) {
max = a[j][i];
maxrow = j;
}
}
if (maxrow != i) {
for (j = 0; j < n; j++) {
temp = a[i][j];
a[i][j] = a[maxrow][j];
a[maxrow][j] = temp;
}
temp = b[i];
b[i] = b[maxrow];
b[maxrow] = temp;
}
//消元
for (j = i + 1; j < n; j++) {
temp = a[j][i] / a[i][i];
for (k = i + 1; k < n; k++) {
a[j][k] -= temp * a[i][k];
}
b[j] -= temp * b[i];
a[j][i] = 0;
}
}
//回代求解
for (i = n - 1; i >= 0; i--) {
temp = b[i];
for (j = i + 1; j < n; j++) {
temp -= a[i][j] * b[j];
}
b[i] = temp / a[i][i];
}
}
int main()
{
double a[101][101], b[101];
int n, i, j;
printf("请输入线性方程组的未知数个数:\n");
scanf("%d", &n);
printf("请输入系数矩阵:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%lf", &a[i][j]);
}
}
printf("请输入右端向量:\n");
for (i = 0; i < n; i++) {
scanf("%lf", &b[i]);
}
Gauss(a, b, n);
printf("方程组的解为:\n");
for (i = 0; i < n; i++) {
printf("%f ", b[i]);
}
return 0;
}
```
阅读全文