C++中計算矩陣的行列式


使用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; 
} 
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM