如下图所示行列式:
程序如下:
#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;
}