#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define N 100
using namespace std;
int a[N][N];
double aa[N][N];
int n;/**********************************************************/
//求行列式的值:是所有取自不同行不同列的n个元素的乘积
int d[N];
int tmpd[N];
int dd[N];
int vis_column[N];//是否在同一列
int inverse;//逆序数的个数
int ans = 0;
void merger(int ld, int rd){if(ld >= rd) return;int mid=(ld+rd)>>1;merger(ld,mid);merger(mid+1, rd);int i=ld, j=mid+1, k=0;while(i<=mid && j<=rd){int col1 = (tmpd[i]-1)%n+1;int col2 = (tmpd[j]-1)%n+1;if(col1 < col2){dd[++k] = tmpd[i++];} else {dd[++k] = tmpd[j++];inverse += mid-i+1; }}while(i<=mid) dd[++k] = tmpd[i++];while(j<=rd) dd[++k] = tmpd[j++];memcpy(tmpd+ld, dd+1, sizeof(int)*(k));
}void determinantValue(int row){if(row>n){inverse=0; int tmp = 1;for(int k=1; k<=n; ++k){int i = (d[k]-1)/n+1;int j = (d[k]-1)%n+1;tmp *= a[i][j];}memcpy(tmpd, d, sizeof(int)*(n+1));merger(1, n);if(inverse&1) ans-=tmp;else ans+=tmp;return;}for(int col=1; col<=n; ++col)if(!vis_column[col]){vis_column[col]=1;d[row] = (row-1)*n + col;determinantValue(row+1);vis_column[col]=0;}
}
/**********************************************************//**********************************************************/
//以列主元方法,将行列式转变成上三角矩阵double determinantValueA(){int sign = 1;double ret = 0.0;for(int i=1; i<=n; ++i){double maxVal = aa[i][i];int j = i;for(int k=i+1; k<=n; ++k)//寻找这一列中的元素值的最大值 if(maxVal < aa[k][i]){maxVal = aa[k][i];j = k;}if(j!=i){sign = -sign;for(int k=1; k<=n; ++k){//交换两行 double tmp = aa[i][k];aa[i][k] = aa[j][k];                 aa[j][k] = tmp;}}if(maxVal < 1e-10)//最大值为0,也就是意味这对角线上的元素有0出现 return ret;for(int k=i+1; k<=n; ++k){double b = aa[k][i]/aa[i][i];for(int c=1; c<=n; ++c) aa[k][c] -= b*aa[i][c];}}ret = 1.0;for(int i=1; i<=n; ++i)ret*=aa[i][i];return ret;
}/**********************************************************/
int main() {
//    cin>>n;
//    for(int i=1; i<=n; ++i)
//        for(int j=1; j<=n; ++j)
//            cin>>a[i][j];
//    determinantValue(1);
//    cout<<ans<<endl;cin>>n;for(int i=1; i<=n; ++i)for(int j=1; j<=n; ++j)cin>>aa[i][j];cout<<determinantValueA()<<endl;return 0;
}
/*
3 4 5 11
5 4 9
3 2 12
-11 21 29
2 0 0 0
2 0 0
0 2 0
0 0 2
1 2 3 4
*/

行列式计算的两种方法相关推荐

  1. DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练、预测

    DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练.预测 导读 利用python的numpy计算库,进行自定义搭建2层神经网络TwoLayerN ...

  2. QT时间差计算的两种方法代码

    QT时间差计算的两种方法 提供两种方法,直接贴出代码供参考,主要用到函数secsTo,toTIme_t(): #include <qdatetime.h>#include <wind ...

  3. 基尼系数计算的两种方法:python实现 简单高效

    使用两种方法,通过python计算基尼系数. 在sql中如何计算基尼系数,可以查看我的另一篇文章.两篇文章取数相同,可以结合去看. 文章中方法1的代码来自于:(加入了一些注释,方便理解).为精确计算. ...

  4. html闰年计算方法,闰年计算的两种方法

    说起闰年,估计一些朋友会很糊涂.好像隔个一两年就有闰年,结果闰来闰去,闰得头都快大了.到底什么是闰年?闰年该怎么计算呢? 实际上,闰年是公历的一个计算方式,也就是常说的阳历,或者叫西历也可以.在我国的 ...

  5. 请描述定时器初值的计算方式_单片机C语言编程中定时器初值计算的两种方法...

    单片机C语言编程中,定时器的初值对于初学者真的是比较不好计算,因此我总结了以下几种方法. 第1种方法: #define FOSC 11059200L //晶振的频率 #define TIMS (655 ...

  6. nn.Dataparallel pytorch 平行计算的两种方法

    1. nn.Dataparallel 多GPU加速训练 原理: 模型分别复制到每个卡中,然后把输入切片,分别放入每个卡中计算,然后再用第一块卡进行汇总求loss,反向传播更新参数. 第一块卡占用的内存 ...

  7. 多项式计算的两种方法(包含秦九韶公式)

    写程序计算给定多项式在定点处的值 普通写法 double f(int n, double a[], double x) {int i;double p = a[0];for(i=1; i<=n; ...

  8. 年龄php,PHP根据生日计算年龄两种方法(周岁)

    温馨提示:本文共1429个字,读完预计4分钟. 1.计算年龄 functionhowOld($birth) { list($birthYear, $birthMonth, $birthDay) = e ...

  9. 现代密码学3.1--定义计算安全的两种方法

    现代密码学3.1--定义计算安全的两种方法 三种安全性定义 定义计算安全的两种方法 具体方法/concrete approach 渐进方法/asyptotic approach "高效/PP ...

最新文章

  1. 聚类分析在用户行为中的实例_序列模式挖掘在用户行为分析中的应用
  2. Java企业微信开发_00_源码及资源汇总贴
  3. apache2 cgi配置
  4. MAVEN项目环境搭建
  5. IOS开发笔记17-Object-C中的继承
  6. mybatis中的TypeHandler设计与实现
  7. 模拟投掷硬币100次
  8. python中的模块原则_python 的模块与包
  9. 探寻用户自定义定时任务的实践方案
  10. [css] 如何给文字的color设置渐变
  11. 2019年Java程序设计讲课笔记目录
  12. GPU基准测试显示:苹果A15芯片比A14芯片快13.7%
  13. Boosting AdaBoost
  14. 国足 国奥 国青有什么区别
  15. 2019pythonqq机器人_基于Python来开发一个QQ机器人, 原来这么简单!
  16. 线索二叉树的前序、中序
  17. c语言编译器不支持c99,Visual Studio2013的C语言编译器对C99标准的支持情况
  18. 步进电机驱动技术1:基于TMC2660的步进电机驱动
  19. 基于STM32的多普勒雷达测速
  20. 史上最全的团队文档协作及管理工具盘点,看看哪款适合你

热门文章

  1. 通过修改注册表提升SSD性能(Intel 5系列芯片组)
  2. 2011百度之星初赛B圆环
  3. [Hibernate]在VS2010中应用NHibernate 3.2与MySQL
  4. JavaScript之作用域链
  5. 批量mergeinto
  6. ThinkPHP 数据库表结构处理类(简单实用)
  7. 《jQuery与JavaScript入门经典》——第 1 章 动态Web编程简介 1.1理解Web服务器浏览器范式...
  8. 教你用netstat-实践案例
  9. ABP源码分析三十:ABP.RedisCache
  10. MySQL 5.7.2 发布,增强性能和可扩展性