行列式计算的两种方法
#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
*/
行列式计算的两种方法相关推荐
- DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练、预测
DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练.预测 导读 利用python的numpy计算库,进行自定义搭建2层神经网络TwoLayerN ...
- QT时间差计算的两种方法代码
QT时间差计算的两种方法 提供两种方法,直接贴出代码供参考,主要用到函数secsTo,toTIme_t(): #include <qdatetime.h>#include <wind ...
- 基尼系数计算的两种方法:python实现 简单高效
使用两种方法,通过python计算基尼系数. 在sql中如何计算基尼系数,可以查看我的另一篇文章.两篇文章取数相同,可以结合去看. 文章中方法1的代码来自于:(加入了一些注释,方便理解).为精确计算. ...
- html闰年计算方法,闰年计算的两种方法
说起闰年,估计一些朋友会很糊涂.好像隔个一两年就有闰年,结果闰来闰去,闰得头都快大了.到底什么是闰年?闰年该怎么计算呢? 实际上,闰年是公历的一个计算方式,也就是常说的阳历,或者叫西历也可以.在我国的 ...
- 请描述定时器初值的计算方式_单片机C语言编程中定时器初值计算的两种方法...
单片机C语言编程中,定时器的初值对于初学者真的是比较不好计算,因此我总结了以下几种方法. 第1种方法: #define FOSC 11059200L //晶振的频率 #define TIMS (655 ...
- nn.Dataparallel pytorch 平行计算的两种方法
1. nn.Dataparallel 多GPU加速训练 原理: 模型分别复制到每个卡中,然后把输入切片,分别放入每个卡中计算,然后再用第一块卡进行汇总求loss,反向传播更新参数. 第一块卡占用的内存 ...
- 多项式计算的两种方法(包含秦九韶公式)
写程序计算给定多项式在定点处的值 普通写法 double f(int n, double a[], double x) {int i;double p = a[0];for(i=1; i<=n; ...
- 年龄php,PHP根据生日计算年龄两种方法(周岁)
温馨提示:本文共1429个字,读完预计4分钟. 1.计算年龄 functionhowOld($birth) { list($birthYear, $birthMonth, $birthDay) = e ...
- 现代密码学3.1--定义计算安全的两种方法
现代密码学3.1--定义计算安全的两种方法 三种安全性定义 定义计算安全的两种方法 具体方法/concrete approach 渐进方法/asyptotic approach "高效/PP ...
最新文章
- 聚类分析在用户行为中的实例_序列模式挖掘在用户行为分析中的应用
- Java企业微信开发_00_源码及资源汇总贴
- apache2 cgi配置
- MAVEN项目环境搭建
- IOS开发笔记17-Object-C中的继承
- mybatis中的TypeHandler设计与实现
- 模拟投掷硬币100次
- python中的模块原则_python 的模块与包
- 探寻用户自定义定时任务的实践方案
- [css] 如何给文字的color设置渐变
- 2019年Java程序设计讲课笔记目录
- GPU基准测试显示:苹果A15芯片比A14芯片快13.7%
- Boosting AdaBoost
- 国足 国奥 国青有什么区别
- 2019pythonqq机器人_基于Python来开发一个QQ机器人, 原来这么简单!
- 线索二叉树的前序、中序
- c语言编译器不支持c99,Visual Studio2013的C语言编译器对C99标准的支持情况
- 步进电机驱动技术1:基于TMC2660的步进电机驱动
- 基于STM32的多普勒雷达测速
- 史上最全的团队文档协作及管理工具盘点,看看哪款适合你
热门文章
- 通过修改注册表提升SSD性能(Intel 5系列芯片组)
- 2011百度之星初赛B圆环
- [Hibernate]在VS2010中应用NHibernate 3.2与MySQL
- JavaScript之作用域链
- 批量mergeinto
- ThinkPHP 数据库表结构处理类(简单实用)
- 《jQuery与JavaScript入门经典》——第 1 章 动态Web编程简介 1.1理解Web服务器浏览器范式...
- 教你用netstat-实践案例
- ABP源码分析三十:ABP.RedisCache
- MySQL 5.7.2 发布,增强性能和可扩展性