C语言实现行列式计算(展开法)

如下图所示行列式:

程序如下:

#include<stdio.h>
#include<math.h> 
#include<fstream>
#include<iostream>
using namespace std;
double get_num(double ori[][5],int m)//计算m行 行列式的值
{
for(int i=0;i<m;i++)
            {
                for(int j=0;j<m;j++)
                {
                    printf("%.5f\t",ori[i][j]);
                }
                printf("\n");
            } 
        if(m==2)//2阶
            return ori[1][1]*ori[0][0]-ori[1][0]*ori[0][1];
        else if(m==1)
            return ori[0][0];
        else
        {
            /*
             *1.将ori[m-1][m-1]化成1
             * 2.将第m-1列全部化成0(除最后一个)
             * 3.按ori[m-1][m-1]展开  
                */
            double flag = ori[m-1][m-1];
            for(int i = 0;i<m;i++)
                ori[m-1][i] = ori[m-1][i]/ori[m-1][m-1];
            for(int i=0;i<m-1;i++)
                for(int j=0;j<m;j++)
                {
                    ori[i][j] = ori[i][j] - ori[i][m-1]*ori[m-1][j];
                }
            
            return flag*pow(-1,2*m-2)*get_num(ori,m-1);
            
        }
    }
int main()
{
    double p[5][5]={
{3,2,-1,2,0},{7,1,2,5,2},{-2,2,3,1,0},{-4,4,-1,4,0},{16,0,7,15,4}
};
   
    double sum;
    sum = get_num(p,5);
    printf("%.6f",sum);  
    return 0;
}

猜你喜欢

转载自blog.csdn.net/luoshiyong123/article/details/107001892
今日推荐