使用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<<"轉置\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][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; }