用C语言编程求解一个非齐次线性方程组的解
非齐次线性方程组的一般形式为:
a11x1 + a12x2 + ... + a1nxn = b1 a21x1 + a22x2 + ... + a2nxn = b2 ... am1x1 + am2x2 + ... + amnxn = bm
其中,a11、a12、...、amn和b1、b2、...、bm都是已知数,x1、x2、...、xn是未知数。
解非齐次线性方程组可以使用矩阵运算的方法,即将系数矩阵与未知数向量组成的列矩阵相乘,得到一个列矩阵,再与右侧的常数向量组成的列矩阵相减,得到一个新的列矩阵。最后,将这个新的列矩阵转换为一个行向量,就得到了非齐次线性方程组的解。
下面是使用C语言编写的程序:
#include <stdio.h>
#define MAX_SIZE 100
int main() { int n, m; double a[MAX_SIZE][MAX_SIZE], b[MAX_SIZE], x[MAX_SIZE], tmp; int i, j, k;
printf("请输入非齐次线性方程组的行数和列数:");
scanf("%d%d", &m, &n);
printf("请输入非齐次线性方程组的系数矩阵:\n");
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
scanf("%lf", &a[i][j]);
}
}
printf("请输入非齐次线性方程组的常数向量:\n");
for (i = 0; i < m; i++) {
scanf("%lf", &b[i]);
}
// 高斯消元法求解
for (k = 0; k < n; k++) {
if (a[k][k] == 0) {
printf("无法求解\n");
return 0;
}
for (i = k+1; i < m; i++) {
tmp = a[i][k] / a[k][k];
for (j = k+1; j < n; j++) {
a[i][j] -= tmp * a[k][j];
}
b[i] -= tmp * b[k];
}
}
// 回带求解
for (i = n-1; i >= 0; i--) {
x[i] = b[i];
for (j = i+1; j < n; j++) {
x[i] -= a[i][j] * x[j];
}
x[i] /= a[i][i];
}
// 输出解
printf("方程组的解为:\n");
for (i = 0; i < n; i++) {
printf("x%d = %lf\n", i+1, x[i]);
}
return 0;
}
注意:此程序采用高斯消元法求解非齐次线性方程组,需要保证系数矩阵的每一行都不全为0,否则程序会出错
原文地址: https://www.cveoy.top/t/topic/fhiR 著作权归作者所有。请勿转载和采集!