行列式

行列式的概念

记一个n×nn \times nn×n行列式为:

D=∥a11a12...a1na21a22...a2n............an1an2...ann∥D=\left\| \begin{matrix} a_{11} & a_{12} & ... & a_{1n} \\ a_{21} & a_{22} & ... & a_{2n} \\ ... & ... & ... & ... \\ a_{n1} & a_{n2} & ... & a_{nn} \end{matrix} \right\| D=∥∥∥∥∥∥∥∥​a11​a21​...an1​​a12​a22​...an2​​............​a1n​a2n​...ann​​∥∥∥∥∥∥∥∥​

计算结果为:

∑(−1)ta1p1a2p2a3p3...anpn\sum (-1)^t a_{1p_1}a_{2p2}a_{3p_3}...a_{np_n}∑(−1)ta1p1​​a2p2​a3p3​​...anpn​​

其中t是排列p1,p2...pnp_1,p_2...p_np1​,p2​...pn​的逆序对个数。

也可以记忆一下,二阶行列式是a11a22−a12a21a_{11}a_{22}-a_{12}a_{21}a11​a22​−a12​a21​。

行列式的求法

性质1:交换行列式的两行,行列式的值会变成它的相反数。

证明:比如交换第i行和第j行,那么行列式由∑(−1)t1...aipi...ajpj...\sum (-1)^{t_1}...a_{ip_i}...a_{jp_j}...∑(−1)t1​...aipi​​...ajpj​​...变成了∑(−1)t2...ajpj...aipi...\sum (-1)^{t_2}...a_{jp_j}...a_{ip_i}...∑(−1)t2​...ajpj​​...aipi​​...,相当于把每一个排列都交换了两个元素,这样这个排列的逆序对数奇偶性一定会改变:

若只看每个数前面比其大的数,如果pi&gt;pjp_i&gt;p_jpi​>pj​,那么在pjp_jpj​前面比其大的数的个数减1,而原来在pjp_jpj​前面,现在不在的比pjp_jpj​大的数,如果比pip_ipi​大,则无影响。否则它们前面失去了一个比它们大的pip_ipi​,个数都减1,而pjp_jpj​失去了它们,个数也减一,相当于奇偶性不变.pi&lt;pjp_i&lt;p_jpi​<pj​可以视作考虑每个数后面的比其小的数的个数,也同理。

那么每个t1t_1t1​一定和t2t_2t2​奇偶性不同。
性质2:某一行乘以一个相同的数,加在另一行上,行列式不变。

证明:相当于变成∑x(−1)ta1p1a2p2a3p3...anpn\sum x(-1)^t a_{1p_1}a_{2p2}a_{3p_3}...a_{np_n}∑x(−1)ta1p1​​a2p2​a3p3​​...anpn​​,由于行列式系数为正的项数和为负的相等,所以答案不变。

性质3:

D=∥a1100...0a21a220...0...............an1an2an3...ann∥=∏aiiD=\left\| \begin{matrix} a_{11} &amp; 0 &amp;0 &amp;... &amp; 0 \\ a_{21} &amp; a_{22} &amp;0 &amp;... &amp; 0 \\ ... &amp; ... &amp; ... &amp; ...&amp;... \\ a_{n1} &amp; a_{n2} &amp; a_{n3} &amp;... &amp; a_{nn} \end{matrix} \right\|=\prod a_{ii} D=∥∥∥∥∥∥∥∥​a11​a21​...an1​​0a22​...an2​​00...an3​​............​00...ann​​∥∥∥∥∥∥∥∥​=∏aii​
性质4:某一行同时乘以一个相同的数,行列式也要乘以那个数。

由上述性质,我们可以得到一种类似于高斯消元的求矩阵行列式的方法(例题:spoj-DETER3):

#include<bits/stdc++.h>
using namespace std;
#define LL long long
int n;LL p,a[205][205];
LL work() {LL re=1;for(int j=1;j<=n;++j) {int id=j; while(id<=n&&!a[id][j]) ++id;if(id>n) return 0;if(id!=j) swap(a[j],a[id]),re=-re;for(int i=j+1;i<=n;++i)while(a[i][j]) {LL t=a[j][j]/a[i][j];for(int k=j;k<=n;++k) a[j][k]=(a[j][k]-a[i][k]*t)%p;swap(a[j],a[i]),re=-re;}re=(re*a[j][j])%p;}return (re%p+p)%p;
}
int main() {while(~scanf("%d%lld",&n,&p)) {for(int i=1;i<=n;++i)for(int j=1;j<=n;++j) scanf("%lld",&a[i][j]),a[i][j]%=p;printf("%lld\n",work());}return 0;
}

按行(列)展开

余子式:一个行列式去掉它的第i行和第j列得到的行列式称为它的余子式,记做MijM_{ij}Mij​

代数余子式:aij=(−1)i+jMija_{ij}=(-1)^{i+j}M_{ij}aij​=(−1)i+jMij​

行列式等于它的任一行(列)各元素与其对应的代数余子式乘积之和,即

D=ai1Ai1+ai2Ai2+...+ainAin(i=1,2...n)D=a_{i1}A_{i1}+a_{i2}A_{i2}+...+a_{in}A_{in} (i=1,2...n)D=ai1​Ai1​+ai2​Ai2​+...+ain​Ain​(i=1,2...n)

D=a1jA1j+a2jA2j+...+anjAnj(j=1,2...n)D=a_{1j}A_{1j}+a_{2j}A_{2j}+...+a_{nj}A_{nj}(j=1,2...n)D=a1j​A1j​+a2j​A2j​+...+anj​Anj​(j=1,2...n)

这就是行列式按行(列)展开法则,可以简化行列式计算.

伴随矩阵:第i行j列为矩阵A的aija_{ij}aij​的矩阵被称为A的伴随矩阵,记做A∗A^{*}A∗

应用

HDU5852

对于两个棋子的情况,如果路径不相交,则方案数为Cb1−a1+n−1n−1×Cb2−a2+n−1n−1C_{b_1-a_1+n-1}^{n-1} \times C_{b_2-a_2+n-1}^{n-1}Cb1​−a1​+n−1n−1​×Cb2​−a2​+n−1n−1​,如果相交,则可以看其最下面的一个交点,交换该交点后的路径,可以把一个相交的关系看作两条从a1a_1a1​到b2b_2b2​和从a2a_2a2​到b1b_1b1​的路径,方案数为Cb2−a1+n−1n−1×Cb1−a2+n−1n−1C_{b_2-a_1+n-1}^{n-1} \times C_{b_1-a_2+n-1}^{n-1}Cb2​−a1​+n−1n−1​×Cb1​−a2​+n−1n−1​。

而多条路径相交的情况,则考虑容斥。那么相当于终点被打乱了,成为一个排列。而奇排列(逆序数为奇数的排列)一定是由一个从1到n的排列经过奇数次元素两两交换得到的(自己证),因此原问题可以转化为一个行列式问题。

此外,交这道题千万不要用C++,请用G++,不然会超时(别问我是怎么知道的)

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define LL long long
const LL mod=1000000007;
int n,m,T;LL inv[200005],fac[200005];
int a[105],b[105];LL t[105][105];
LL ksm(LL x,LL y) {LL re=1;for(;y;x=x*x%mod,y>>=1) if(y&1) re=re*x%mod;return re;
}
void init() {fac[0]=inv[0]=1;for(LL i=1;i<=200000;++i) fac[i]=fac[i-1]*i%mod;inv[200000]=ksm(fac[200000],mod-2);for(int i=200000-1;i>=1;--i) inv[i]=inv[i+1]*(i+1)%mod;
}
LL C(LL d,LL u) {if(u>d) return 0;return fac[d]*inv[u]%mod*inv[d-u]%mod;
}
LL work() {LL re=1;for(int j=1;j<=m;++j) {int id=j; while(id<=m&&!t[id][j]) ++id;if(id>m) return 0;if(id!=j) swap(a[id],a[j]),re=-re;LL kl=ksm(t[j][j],mod-2);for(int i=j+1;i<=m;++i)if(t[i][j]) {re=re*kl%mod;//第i行乘t[j][j],相当于将行列式的值扩大了t[j][j]倍for(int k=m;k>=j;--k)t[i][k]=(t[i][k]*t[j][j]%mod-t[j][k]*t[i][j]%mod+mod)%mod;}re=(re*t[j][j])%mod;}return (re%mod+mod)%mod;
}
int main() {init(),scanf("%d",&T);while(T--) {scanf("%d%d",&n,&m);for(int i=1;i<=m;++i) scanf("%d",&a[i]);for(int i=1;i<=m;++i) scanf("%d",&b[i]);for(int i=1;i<=m;++i)for(int j=1;j<=m;++j) t[i][j]=C(n-1+b[i]-a[j],n-1);printf("%lld\n",work());}return 0;
}

矩阵相关

矩阵的逆

使得矩阵AA−1=IAA^{-1}=IAA−1=I(I是单位矩阵)的A−1A^{-1}A−1为AAA的逆矩阵,且A−1A=EA^{-1}A=EA−1A=E
A−1=1∣A∣A∗A^{-1}=\frac{1}{|A|} A^{*}A−1=∣A∣1​A∗

矩阵的秩

在矩阵中任取kkk行kkk列,这些行列的交点处的元素取出来,不改变它们的相对位置,构成的一个行列式,称为该矩阵的kkk阶余子式。如果一个矩阵A的任一rrr阶子式不为000,而所有r+1r+1r+1阶子式为000,则rrr称为AAA的秩。

矩阵的秩等于阶数最大的非零余子式的阶数。

矩阵的特征值

若对于矩阵AAA,存在一个向量α\alphaα和一个实数λ\lambdaλ使得Aα=λαA\alpha=\lambda \alphaAα=λα则称α\alphaα为AAA的特征向量,λ\lambdaλ为AAA的特征值。

那么根据∣λI−A∣=0|\lambda I-A|=0∣λI−A∣=0可以解方程求出特征值,进而求出特征向量。

行列式与矩阵相关与应用相关推荐

  1. 矩阵迹的性质_矩阵(含逆)的迹、行列式关于矩阵自身的导数计算与Maple验证...

    常见神经网络在计算相邻层权重关系式时,矩阵对矩阵求导所涉及的维度拼接操作对理论萌新往往不太友好:对于数据型为矩阵的最小二乘问题,尽管迹对矩阵求导操作十分实用但很多人仍习惯于逐项计算偏导.本文避开&qu ...

  2. 【线性代数】一、行列式和矩阵

    一.行列式 文章目录 一.行列式 1.1 行列式性质 1.2 余子式 行列式按照行列展开的展开公式 一.行列式求解 1.用行列式 2.用矩阵 3.用特征值 1.3 行列式计算 一.具体形行列式 (1) ...

  3. 【应用C】C语言实现行列式与矩阵的运算系统(+源代码)

    文章目录 01 - 行列式和矩阵 1.1 - 行列式定义 1.2 - 矩阵定义 02 - 基本运算 2.1 - 行列式基本运算 2.2 - 矩阵基本运算 03 - 数据结构 04 - 结果测试 4.1 ...

  4. 2020年李永乐线性代数强化笔记-行列式与矩阵

    2020年李永乐线性代数强化笔记-行列式与矩阵 写在前面:矩阵的秩的知识 在向量那章讲解 若需要,请移步:2020年李永乐线性代数强化笔记-向量 文章目录 1 行列式 2 矩阵 1 行列式 2 矩阵 ...

  5. 李永乐线性代数手写笔记-行列式与矩阵

    李永乐线性代数基础知识,整理放在博客上面,方便自己复习查看. 概览请移步李永乐线性代数2020年基础课手写笔记汇总 文章目录 一 行列式 二 矩阵 一 行列式 二 矩阵

  6. Python之数据分析(Numpy的矩阵相关操作、ufunc泛化函数对象)

    文章目录 一.矩阵相关操作 二.ufunc统一泛化函数 一.矩阵相关操作 1.三种构造矩阵的方法 np.matrix(二维容器, copy=True) 一参为可被解释为矩阵的二维容器,比如二维数组.二 ...

  7. Mantel test: 两个矩阵相关关系的检验

    转载 http://blog.sina.com.cn/s/blog_4b678be40100o464.html Mantel test 是对两个矩阵相关关系的检验,由Nathan Mantel在197 ...

  8. 常用的行列式和矩阵的性质

    常用的行列式和矩阵的性质

  9. 矩阵相关操作和矩阵快速幂

    矩阵相关操作和矩阵快速幂 矩阵基本运算以及快速幂模板 POJ - 3070. Fibonacci Hdu - 1757A. Simple Math Problem Codeforces - 185A. ...

  10. 总结利用秩为1的矩阵相关矩阵的秩的计算问题

    总结利用秩为1的矩阵相关矩阵的秩的计算问题 @(线性代数) 对于一个秩为1的矩阵,常常给定的是一个列向量与自己的转置之积. http://blog.csdn.net/u011240016/articl ...

最新文章

  1. OpenCV 静态链接 libstdc++
  2. 向安卓模拟器中添加文件
  3. c语言 串口中断服务函数,GCC-AVR 编写中断服务函数的注意事项
  4. VTK修炼之道57:图形基本操作进阶_点云配准技术(LandMark标记点算法和坐标系显示方法)
  5. 某系统有6台输出设备 有多个进程均需要使用2台_从零开始学K8s: 2.开发与部署方式的演变...
  6. 汽车电子传感器科普:激光雷达 毫米波雷达 超声波雷达
  7. android生成aar无效,android studio生成aar包并在其他工程引用aar包的方法
  8. 在后台增加一个查询条件
  9. ASP.NET - 网页重定向 Response.Redirect()
  10. 《QTreeView表项实现排序的2种方式》:系列教程之九
  11. pcie gen3 bios设置_性价比无敌or搞笑? A卡传统回来了!(附刷bios教程)
  12. 基于spss的非线性回归(non-linear regression)
  13. 一个疯狂的地下市场--支付牌照的买卖
  14. (实战)决策树例子+画图
  15. css 屏幕背景图片 img.html
  16. Windows Azure 成为业内首家被授权为 FedRAMP JAB P-ATO 的供应商
  17. 推荐mac os 下更改键盘映射软件KeyRemap4MacBook
  18. 适合旅游时住的各地旅馆 超级便宜,绝对实用,谢谢分享!有好东西大家共享!
  19. Linux ssh 端口修改
  20. Metasploit的简单应用

热门文章

  1. 量化投资学习-30:股性与人性,从傅里叶变换谈谈股市大V的操作风格的观察
  2. 后端知识点:互联网中B端客户和C端客户的区别
  3. 电脑是linux下安装win7,Linux下安装win7
  4. Python 五角星的画法 five star
  5. 安装的photoshop cs2为什么一进去就说我的用户名、组织、或序列号无效或错误???
  6. 如何使用代理服务器上网
  7. 清华大学计算机系2016名单,清华大学2016年自主招生北京考生入选名单汇总
  8. 小葵花妈妈课堂开课了:《Runnable、Callable、Future、RunnableFuture、FutureTask 源码分析》
  9. 写HTML为什么骨架生成不了,HTML骨架
  10. 英特尔科技论坛 北京登场