非齐次线性方程组的一般形式为:

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,否则程序会出错

用C语言编程求解一个非齐次线性方程组的解

原文地址: https://www.cveoy.top/t/topic/fhiR 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录