以下是一个用C语言编写的求逆矩阵的示例代码:

#include <stdio.h>

#define N 3

// 交换两行
void swapRows(double matrix[N][N], int r1, int r2) {
    for (int i = 0; i < N; i++) {
        double temp = matrix[r1][i];
        matrix[r1][i] = matrix[r2][i];
        matrix[r2][i] = temp;
    }
}

// 将某一行的元素乘以一个非零标量
void scaleRow(double matrix[N][N], int r, double scalar) {
    for (int i = 0; i < N; i++) {
        matrix[r][i] *= scalar;
    }
}

// 将某一行的元素乘以一个非零标量后加到另一行上
void addScaledRow(double matrix[N][N], int r1, int r2, double scalar) {
    for (int i = 0; i < N; i++) {
        matrix[r2][i] += scalar * matrix[r1][i];
    }
}

// 求逆矩阵
void inverseMatrix(double matrix[N][N], double inverse[N][N]) {
    // 初始化逆矩阵为单位矩阵
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            if (i == j) {
                inverse[i][j] = 1.0;
            } else {
                inverse[i][j] = 0.0;
            }
        }
    }

    // 初等行变换
    for (int i = 0; i < N; i++) {
        // 如果当前列的对角元素为0,则交换行
        if (matrix[i][i] == 0.0) {
            int r;
            for (r = i + 1; r < N; r++) {
                if (matrix[r][i] != 0.0) {
                    break;
                }
            }
            if (r == N) {
                printf("矩阵不可逆。\n");
                return;
            }
            swapRows(matrix, i, r);
            swapRows(inverse, i, r);
        }

        // 将对角元素调整为1
        double scalar = 1 / matrix[i][i];
        scaleRow(matrix, i, scalar);
        scaleRow(inverse, i, scalar);

        // 将其他行的元素消为0
        for (int r = 0; r < N; r++) {
            if (r != i) {
                scalar = -matrix[r][i];
                addScaledRow(matrix, i, r, scalar);
                addScaledRow(inverse, i, r, scalar);
            }
        }
    }
}

// 打印矩阵
void printMatrix(double matrix[N][N]) {
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            printf("%.2f ", matrix[i][j]);
        }
        printf("\n");
    }
}

int main() {
    double matrix[N][N] = {{2, -1, 0},
                           {-1, 2, -1},
                           {0, -1, 2}};
    double inverse[N][N];

    inverseMatrix(matrix, inverse);
    printf("原矩阵:\n");
    printMatrix(matrix);
    printf("逆矩阵:\n");
    printMatrix(inverse);

    return 0;
}

该代码使用了高斯-约旦消元法来求解逆矩阵。在 inverseMatrix 函数中,首先将逆矩阵初始化为单位矩阵,然后进行初等行变换,将原矩阵转换为上三角矩阵,并将逆矩阵相应地进行相同的行变换。最后,将上三角矩阵转换为对角矩阵,得到逆矩阵。在进行初等行变换时,如果当前列的对角元素为0,则交换行,以避免除以0的错误。如果无法找到非零元素进行交换,则矩阵不可逆

写一个求逆矩阵的c语言代码

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

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