LearnGL - 06.2 - Matrix - 矩阵03 - 逆矩阵、行列式、伴随矩阵、余子式、代数余子式、练习

本文深入探讨矩阵概念,包括行列式、逆矩阵、伴随矩阵、余子式及代数余子式,详解其计算方法与实际应用,尤其在3D图形学中的坐标变换与还原。


LearnGL - 学习笔记目录

本人才疏学浅,如有什么错误,望不吝指出。

上些篇:

这一篇:了解 行列式(determinant)逆矩阵(inverse)伴随矩阵(adjugate、adjoint)余子式(cofactor、minor)代数余子式(algebraic cofactor、minor)


逆矩阵-inverse matrix

在计算机3D图形学中,在实现一些特殊功能的时候,特别是一些坐标还原,或重构成其他坐标时,都可能会用到逆矩阵。

一个变换矩阵可以将我们传入的向量(组)变换到此变换矩阵中的另一个坐标系中,如果我们要撤销这些变换呢,那么就需要逆过来变换,这个逆变换的矩阵,就叫:逆矩阵。

我们都知道,标量乘以标量,如: 1 × n = n 1 \times n = n 1×n=n,就是1乘以任意数,等于那个数的本身。

同样在矩阵中也有类型的,如: I ⋅ M = M I\cdot M=M IM=M I I I是单位矩阵(左上角到右下角都是1,其余都是0的方阵)乘以任意矩阵都等于那个矩阵的本身。

1 × n = n 1 \times n = n 1×n=n,同是 1 n ⋅ n = 1 \frac{1}{n}\cdot n=1 n1n=1,而这个 1 n \frac{1}{n} n1就是n的倒数。

同样的也有: M − 1 ⋅ M = M ⋅ M − 1 = I M^{-1}\cdot M=M \cdot M^{-1}=I M1M=MM1=I,而这其中的 M − 1 M^{-1} M1就是 M M M的逆矩阵。

在求逆矩阵时,需要用到行列式的功能。


行列式-determinant

先来讲一下,determinant - 矩阵行列式(这里我觉得中文翻译的理解不好),为啥要一个“式”字结尾,感觉会误导很多人,可以参考这篇文章的讲解:行列式determinant到底是个啥?,其实 determinant 就是求一个矩阵的N个轴(N个列向量,N>0,范围:1,2,…,n)围起来的空间大小(一维)、面积(二维)、体积(三维)、无法描述的变换空间大小(大于三维),最终的值是一个标量,注意:行列式结果是一个标量,并不是什么式子、也不是向量。

所以可以理解,它就是表述一个变换的包围空间的大小。

变换:

  • 一维中,假设一个2,就是可以把某个东西可以变大2倍的变换数值,它的determinant就是2,长度。
  • 二维中,假设 x → ( 0.5 , 0 ) y → ( 0 , 2 ) \overrightarrow x(0.5,0) \overrightarrow y(0,2) x (0.5,0)y (0,2),就是可以让一个存在于二维下的数值对象(a,b)可以让它在 x → ( 0.5 , 0 ) y → ( 0 , 2 ) \overrightarrow x(0.5,0) \overrightarrow y(0,2) x (0.5,0)y (0,2) 的变换后的结果: [ x → y → ∣ ∣ ] ⋅ ( a b ) → [ 0.5 0 0 2 ] ⋅ ( a b ) = ( 0.5 ⋅ a 2 ⋅ b ) \begin{bmatrix} \overrightarrow x & \overrightarrow y\\ |&| \end{bmatrix} \cdot \left(\begin{matrix}a\\b\end{matrix}\right) \rightarrow \begin{bmatrix} 0.5 & 0 \\ 0 & 2 \end{bmatrix} \cdot \left(\begin{matrix}a\\b\end{matrix}\right) = \left(\begin{matrix}0.5\cdot a\\2\cdot b\end{matrix}\right) [x y ](ab)[0.5002](ab)=(0.5a2b),相当于把a缩小一倍,b放大一倍。它的determinant就是0.5*2=1面积。
  • 同理三维中的是体积。

但上面都是比较理想的变换矩阵,就是他们的每列向量之间都是垂直的(正交的)所以求他们围起来空间,直接向量它们的向量长度就可以了。

但是如果他们不是垂直的(正交的),这个时候就需要将每个轴之间x,y,z分量上有参差的量围成的空间给减去,才能得到最终的空间。
在这里插入图片描述

如上图,a(a1,a2),b(b1,b2)向量就是不互相垂直的,黄色就是a(a1,a2)与b(b1,b2)向量x,y分量上参差的分量围起来的面积,着黄色部分的面积就是整个长方形需要减去的面积,最终得到的面积就是a,b向量围起来的平行四边形的面积。

也可以从百度百科中的:矩阵行列式的公式: d e t ( a b c d ) = a d − b c det\left(\begin{matrix} a & b \\ c & d \end{matrix}\right) =ad-bc det(acbd)=adbc 来发现一些线索。

如果b,c为零呢? d e t ( a b c d ) = a d − b c → d e t ( a 0 0 d ) = a d − 0 = a d det\left(\begin{matrix} a & \color{#ff0000}b \\ \color{#ff0000}c & d \end{matrix}\right) =ad-{\color{#ff0000}bc}\rightarrow det\left(\begin{matrix} a & \color{#ff0000}0 \\ \color{#ff0000}0 & d \end{matrix}\right) =ad-{\color{#ff0000}0}=ad det(acbd)=adbcdet(a00d)=ad0=ad,那就是向量(a,0)与向量(0,d)垂直了,前者平行于x轴,后者平行于y轴,这时面积就等于ad了,如下图
在这里插入图片描述在这里插入图片描述

所以 行列式就是求变换矩阵的轴包围的一个空间大小,只不过在这个二维空间单位是面积,三维就是体积了,一维就是长度。

假设有矩阵A: [ a b c d ] \begin{bmatrix} a & b\\ c & d \end{bmatrix} [acbd]

det(A),或是矩阵A的行列式 又或是记作 ∣ A ∣ |A| A,那么: d e t ( A ) = ∣ A ∣ = a d − b c det(A)=|A|=ad-bc det(A)=A=adbc

那么矩阵A的逆矩阵,记作 A − 1 A^{-1} A1,那么 A − 1 = 1 ∣ A ∣ ⋅ [ d − b − c a ] = 1 a d − b c ⋅ [ d − b − c a ] A^{-1}=\frac{1}{|A|}\cdot\begin{bmatrix}d & -b \\ -c & a\end{bmatrix}=\frac{1}{ad-bc}\cdot\begin{bmatrix}d & -b \\ -c & a\end{bmatrix} A1=A1[dcba]=adbc1[dcba]

暂且我们不管这个矩阵 [ d − b − c a ] \begin{bmatrix}d & -b \\ -c & a\end{bmatrix} [dcba]是怎么来的,它看起来就像是a与d交换,b,c添加负数了。这个矩阵叫作:伴随矩阵。后面再详细的搬运一波内容。

这个是2X2矩阵的逆矩阵,我们可以验证一下:


那么继续逆矩阵的内容

有一个矩阵A:
A = [ a b c d ] = [ 8 − 2 4 6 ] A=\begin{bmatrix}a & b \\ c & d\end{bmatrix}=\begin{bmatrix}8 & -2 \\ 4 & 6\end{bmatrix} A=[acbd]=[8426]

A的逆矩阵为:
A − 1 = 1 a d − b c ⋅ [ d − b − c a ] A^{-1}=\frac{1}{ad-bc}\cdot\begin{bmatrix}d & -b \\ -c & a\end{bmatrix} A1=adbc1[dcba]
A − 1 = 1 8 ⋅ 6 − ( − 2 ) ⋅ 4 ⋅ [ 6 − ( − 2 ) − 4 8 ] A^{-1}=\frac{1}{8\cdot 6-(-2)\cdot 4}\cdot\begin{bmatrix}6 & -(-2) \\ -4 & 8\end{bmatrix} A1=86(2)41[64(2)8]
A − 1 = 1 48 + 8 ⋅ [ 6 2 − 4 8 ] A^{-1}=\frac{1}{48+8}\cdot\begin{bmatrix}6 & 2 \\ -4 & 8\end{bmatrix} A1=48+81[6428]
A − 1 = 1 56 ⋅ [ 6 2 − 4 8 ] A^{-1}=\frac{1}{56}\cdot\begin{bmatrix}6 & 2 \\ -4 & 8\end{bmatrix} A1=561[6428]
A − 1 = [ 6 ⋅ 1 56 2 ⋅ 1 56 − 4 ⋅ 1 56 8 ⋅ 1 56 ] A^{-1}=\begin{bmatrix}6\cdot \frac{1}{56} & 2 \cdot \frac{1}{56} \\ -4 \cdot \frac{1}{56} & 8 \cdot \frac{1}{56}\end{bmatrix} A1=[6561456125618561]
A − 1 = [ 6 56 2 56 − 4 56 8 56 ] A^{-1}=\begin{bmatrix}\frac{6}{56} & \frac{2}{56} \\ -\frac{4}{56} & \frac{8}{56}\end{bmatrix} A1=[566564562568]

OK,现在计算得 A − 1 = [ 6 56 2 56 − 4 56 8 56 ] A^{-1}=\begin{bmatrix}\frac{6}{56} & \frac{2}{56} \\ -\frac{4}{56} & \frac{8}{56}\end{bmatrix} A1=[566564562568],然将与 A = [ 8 − 2 4 6 ] A=\begin{bmatrix}8 & -2 \\ 4 & 6\end{bmatrix} A=[8426]相乘,结果看看是否等于 I I I

A − 1 ⋅ A = I A^{-1}\cdot A = I A1A=I

[ 6 56 2 56 − 4 56 8 56 ] ⋅ [ 8 − 2 4 6 ] = [ 1 0 0 1 ] \begin{bmatrix}\frac{6}{56} & \frac{2}{56} \\ -\frac{4}{56} & \frac{8}{56}\end{bmatrix} \cdot \begin{bmatrix}8 & -2 \\ 4 & 6\end{bmatrix}=\begin{bmatrix}1 & 0 \\ 0 & 1\end{bmatrix} [566564562568][8426]=[1001]

[ 6 ⋅ 8 56 + 2 ⋅ 4 56 6 ⋅ ( − 2 ) 56 + 2 ⋅ 6 56 − 4 ⋅ 8 56 + 8 ⋅ 4 56 − 4 ⋅ ( − 2 ) 56 + 8 ⋅ 6 56 ] = [ 1 0 0 1 ] \begin{bmatrix}\frac{6 \cdot 8}{56} + \frac{2 \cdot 4}{56} & \frac{6 \cdot (-2)}{56} + \frac{2 \cdot 6}{56} \\ -\frac{4\cdot 8}{56} + \frac{8\cdot 4}{56} & -\frac{4\cdot (-2)}{56} + \frac{8 \cdot 6}{56}\end{bmatrix} =\begin{bmatrix}1 & 0 \\ 0 & 1\end{bmatrix} [5668+56245648+5684566(2)+5626564(2)+5686]=[1001]

[ 48 56 + 8 56 − 12 56 + 12 56 − 32 56 + 32 56 8 56 + 48 56 ] = [ 1 0 0 1 ] \begin{bmatrix}\frac{48}{56} + \frac{8}{56} & \frac{-12}{56} + \frac{12}{56} \\ -\frac{32}{56} + \frac{32}{56} & \frac{8}{56} + \frac{48}{56}\end{bmatrix} =\begin{bmatrix}1 & 0 \\ 0 & 1\end{bmatrix} [5648+5685632+56325612+5612568+5648]=[10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值