怎样编译一个程序计算n阶矩阵的逆矩阵

C语言怎样编译一个程序来计算并输出n阶矩阵的逆矩阵,麻烦各位帮帮忙,谢谢各位!

回答:可以参考这篇文章:https://blog.csdn.net/baidu_41922078/article/details/124351331

img

// N是二维数组的大小
// a是转化前的数组
// b为转化后的数组

#include<iostream>
#include<math.h>
#define N 3

using namespace std;

void matrix_inverse(double(*a)[N], double(*b)[N]);

int main()
{
    int i, j;
    double a[N][N] = { 1,2,3,2,5,4,3,7,9 };
    double b[N][N] = { 0 };

    matrix_inverse(a, b);  //求逆函数

    cout << "the inverse matrix is :\n";
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            cout << " " << b[i][j] << "\t";
        }
        cout << "\n";
    }
    return 0;
}


void matrix_inverse(double(*a)[N], double(*b)[N])
{
    using namespace std;
    int i, j, k;
    double max, temp;
    // 定义一个临时矩阵t
    double t[N][N];
    // 将a矩阵临时存放在矩阵t[n][n]中
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            t[i][j] = a[i][j];
        }
    }
    // 初始化B矩阵为单位矩阵
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            b[i][j] = (i == j) ? (double)1 : 0;
        }
    }
    // 进行列主消元,找到每一列的主元
    for (i = 0; i < N; i++)
    {
        max = t[i][i];
        // 用于记录每一列中的第几个元素为主元
        k = i;
        // 寻找每一列中的主元元素
        for (j = i + 1; j < N; j++)
        {
            if (fabs(t[j][i]) > fabs(max))
            {
                max = t[j][i];
                k = j;
            }
        }
        //cout<<"the max number is "<<max<<endl;
        // 如果主元所在的行不是第i行,则进行行交换
        if (k != i)
        {
            // 进行行交换
            for (j = 0; j < N; j++)
            {
                temp = t[i][j];
                t[i][j] = t[k][j];
                t[k][j] = temp;
                // 伴随矩阵B也要进行行交换
                temp = b[i][j];
                b[i][j] = b[k][j];
                b[k][j] = temp;
            }
        }
        if (t[i][i] == 0)
        {
            cout << "\nthe matrix does not exist inverse matrix\n";
            break;
        }
        // 获取列主元素
        temp = t[i][i];
        // 将主元所在的行进行单位化处理
        //cout<<"\nthe temp is "<<temp<<endl;
        for (j = 0; j < N; j++)
        {
            t[i][j] = t[i][j] / temp;
            b[i][j] = b[i][j] / temp;
        }
        for (j = 0; j < N; j++)
        {
            if (j != i)
            {
                temp = t[j][i];
                //消去该列的其他元素
                for (k = 0; k < N; k++)
                {
                    t[j][k] = t[j][k] - temp * t[i][k];
                    b[j][k] = b[j][k] - temp * b[i][k];
                }
            }

        }

    }
}