使用eigen库:
求行列式:
#include <iostream> #include <Eigen/Dense> using namespace std; using namespace Eigen; int main() { Matrix2d c; c << 1, 2, 3, 4; //转置、伴随 std::cout<<c<<std::endl<<std::endl; std::cout<<"转置 "<<c.transpose()<<std::endl<<std::endl; std::cout<<"伴随 "<<c.adjoint()<<std::endl<<std::endl; //逆矩阵、行列式 std::cout << "行列式: " << c.determinant() << std::endl; std::cout << "逆矩阵 " << 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][10];/*设矩阵不超过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 0; } void getarray(int n) { int row,col; for(row=0;row<n;row++) { printf(" Please input line %d:",row+1); for(col=0;col<n;col++) scanf("%lf",&array[row][col]); } } void showarray(int n) { int row,col; printf(" A="); for(row=0;row<n;row++) { for(col=0;col<n;col++) printf(" %f",array[row][col]); printf(" "); } } double getresult(int n) { double temp,result=1.0; int switchtime=0,flag=0; int row,nextrow,col,stemp; for(row=0;row<n-1;row++) { nextrow=row+1; if(array[row][row]==0)/* 开始处理第一列,如果行列式第一行第一个数为零,要交换行 */ { while(array[nextrow][row]==0) { nextrow++; /* 如果行列式第二行第一个数为零,行增加继续寻找非零数值的行 */ if(nextrow==n)/* 如果遍历完行列式行列式第一列元素都为零,退出while循环 */ { flag=1; break; } } if(flag==1) /* 退出while循环后回到for(row=0;row<n-1;row++)行加1?*/ continue; /* 从array[row][row]==0知列也相应加1,开始处理第二列 */ switchtime++; /* 每交换一次行,行列式符号变化1次,统计变化次数 */ for(col=0;col<n;col++) /* 交换非零行到行列式顶部 */ { stemp=array[row][col]; array[row][col]=array[nextrow][col]; array[nextrow][col]=stemp; } } for(nextrow=row+1;nextrow<n;nextrow++) { /* 类似高斯消去法,消第一行下各行第一列数值到零*/ temp=array[nextrow][row]/array[row][row]; for(col=0;col<n;col++) array[nextrow][col]+=-temp*array[row][col];/* 化行列式为上三角行列式形式 */ } } showarray(n); for(row=0;row<n;row++) result*=array[row][row]; if(switchtime%2) return -result; else return result; }