使用eigen库:
求行列式:
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main()
{
Matrix2d c;
c << , ,
, ;
//转置、伴随
std::cout<<c<<std::endl<<std::endl;
std::cout<<"转置\n"<<c.transpose()<<std::endl<<std::endl;
std::cout<<"伴随\n"<<c.adjoint()<<std::endl<<std::endl;
//逆矩阵、行列式
std::cout << "行列式: " << c.determinant() << std::endl;
std::cout << "逆矩阵\n" << c.inverse() << std::endl;
}
【其他】
用C语言解决:求任意阶(n阶)矩阵的行列式https://baike.1688.com/doc/view-d3171824.html
/* 用C语言解决:求任意阶(n阶)矩阵的行列式值 */
#include <stdio.h>
#include <math.h> void getarray(int n);
void showarray(int n);
double getresult(int n);
double array[][];/*设矩阵不超过10阶,可更改*/ int main()
{
int n;
double result;
printf("
Please input the Array size n:");
scanf("%d",&n);
getarray(n);
showarray(n);
result=getresult(n);
printf("
Result=%f
",result);
system("pause");
return ;
} void getarray(int n)
{
int row,col;
for(row=;row<n;row++)
{
printf("
Please input line %d:",row+1);
for(col=;col<n;col++)
scanf("%lf",&array[row][col]);
}
} void showarray(int n)
{
int row,col;
printf("
A=");
for(row=;row<n;row++)
{
for(col=;col<n;col++)
printf(" %f",array[row][col]);
printf("
");
}
} double getresult(int n)
{
double temp,result=1.0;
int switchtime=,flag=;
int row,nextrow,col,stemp;
for(row=;row<n-;row++)
{
nextrow=row+;
if(array[row][row]==)/* 开始处理第一列,如果行列式第一行第一个数为零,要交换行 */
{ while(array[nextrow][row]==)
{
nextrow++; /* 如果行列式第二行第一个数为零,行增加继续寻找非零数值的行 */
if(nextrow==n)/* 如果遍历完行列式行列式第一列元素都为零,退出while循环 */
{ flag=;
break;
}
}
if(flag==) /* 退出while循环后回到for(row=0;row<n-1;row++)行加1?*/
continue; /* 从array[row][row]==0知列也相应加1,开始处理第二列 */
switchtime++; /* 每交换一次行,行列式符号变化1次,统计变化次数 */
for(col=;col<n;col++) /* 交换非零行到行列式顶部 */
{
stemp=array[row][col];
array[row][col]=array[nextrow][col];
array[nextrow][col]=stemp;
}
}
for(nextrow=row+;nextrow<n;nextrow++)
{ /* 类似高斯消去法,消第一行下各行第一列数值到零*/
temp=array[nextrow][row]/array[row][row];
for(col=;col<n;col++)
array[nextrow][col]+=-temp*array[row][col];/* 化行列式为上三角行列式形式 */
}
}
showarray(n);
for(row=;row<n;row++)
result*=array[row][row];
if(switchtime%)
return -result;
else
return result;
}