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++中计算矩阵的行列式C++中计算矩阵的行列式

/* 用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

原文链接: https://www.cnblogs.com/wxl845235800/p/9027005.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/273727

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午11:49
下一篇 2023年2月14日 下午11:50

相关推荐