原文地址1:https://www.face2ai.com/Math-Linear-Algebra-Chapter-5-3转载请标明出处
Abstract: 本文主要介绍行列式的应用,包括求逆,求面积,求体积,以及叉乘的一些性质
Keywords: Inverses,Cramer’s Rule,Volumes,Determinant,Cross Product
废话已经变成每篇的例行公事了,不过我们还是来嘲笑一下Apple这个“垃圾”公司,憋了三五年搞出来个iPhone x,连个双胞胎都识别不出来,我们国内的各大小厂商随便搞个平面摄像头就搞定的简单任务,apple这么大个公司,用了三维图像都搞不出来,被各大网友嘲笑,其实之前好多VC都问我:“你这个识别双胞胎行不行”,我说,“No”,然后大哥语重心长的对我说“别人xx都能识别,你这个技术不到位啊”,以上对话真实存在,而且发生了好多次,后来我们的宣传口号就是"我们的摄像头亩产1亿斤小麦",哈哈哈。希望业界技术能不断推陈出新,不断再创新高,也祝给为VC投资都有回报,祝那些双胞胎人脸准确率继续攀升。
Cramer应该是行列式研究比较关键的一个人,但绝对不是第一个人,他应该是把行列式单独出来研究的数学家,但是最一开始用行列式解方程的可能是莱布尼兹,所以行列式发明伊始毫无疑问是用来解方程的。Cramer法则也是用来解方程的,顺便也能求个逆什么的。
A x = b Ax=b Ax=b 我们已经研究了有一段时间了,但是我们今天还要继续通过研究旧的知识来得到新的知识,其实数学知识体系应该就是这样的,一开始有几个公理,然后逐渐通过推导,证明, 定义,引申,出来一个完整的数学体系,读陶哲轩的《analysis》和陈希孺的《概率与数理统计》都给人一种这个感觉,很简单的几个公理,能推导出一些列非常惊艳的理论和体系,然后经过我们专家们的努力,变成了各种难度的考试题。
Key Idea:
[ A ] [ x 1 0 0 x 2 1 0 x 3 0 1 ] = [ b 1 a 12 a 13 b 2 a 22 a 23 b 3 a 32 a 33 ] = B 1 \begin{bmatrix} &&\\&A&\\&& \end{bmatrix} \begin{bmatrix} x_1&0&0\\x_2&1&0\\x_3&0&1 \end{bmatrix}= \begin{bmatrix} b_1&a_{12}&a_{13}\\b_2&a_{22}&a_{23}\\b_3&a_{32}&a_{33} \end{bmatrix}=B_1 ⎣⎡A⎦⎤⎣⎡x1x2x3010001⎦⎤=⎣⎡b1b2b3a12a22a32a13a23a33⎦⎤=B1
这个大家应该都理解了,如果按照列空间的模式来看,就是 B ⃗ \vec{B} B 被A矩阵射到列空间,然后为了和谐将 [ 0 1 0 ] \begin{bmatrix}0\\1\\0\end{bmatrix} ⎣⎡010⎦⎤ 和 [ 0 0 1 ] \begin{bmatrix}0\\0\\1\end{bmatrix} ⎣⎡001⎦⎤ 陪射到列空间,然后拼起来就是个矩阵乘矩阵等于矩阵了,这样有个非常不错的效果就是 [ x 1 0 0 x 2 1 0 x 3 0 1 ] \begin{bmatrix}x_1&0&0\\x_2&1&0\\x_3&0&1\end{bmatrix} ⎣⎡x1x2x3010001⎦⎤ 这货的行列式是 x 1 x_1 x1 ,那就可以了,利用行列式的性质,两边去行列式就有了
d e t ( A ) d e t ( [ x 1 0 0 x 2 1 0 x 3 0 1 ] ) = d e t ( A ) x 1 = d e t ( [ b 1 a 12 a 13 b 2 a 22 a 23 b 3 a 32 a 33 ] ) = d e t ( B 1 ) x 1 = d e t ( B 1 ) d e t ( A ) det(A)det(\begin{bmatrix}x_1&0&0\\x_2&1&0\\x_3&0&1\end{bmatrix}) =det(A)x_1\\ =det(\begin{bmatrix}b_1&a_{12}&a_{13}\\b_2&a_{22}&a_{23}\\b_3&a_{32}&a_{33}\end{bmatrix}) =det(B_1)\\ x_1=\frac{det(B_1)}{det(A)} det(A)det(⎣⎡x1x2x3010001⎦⎤)=det(A)x1=det(⎣⎡b1b2b3a12a22a32a13a23a33⎦⎤)=det(B1)x1=det(A)det(B1)
这样就有了 x 1 x_1 x1 ; x 2 x_2 x2 类似:
d e t ( A ) d e t ( [ 1 x 1 0 0 x 2 0 0 x 3 1 ] ) = d e t ( A ) x 2 = d e t ( [ a 11 b 1 a 13 a 21 b 2 a 23 a 31 b 3 a 33 ] ) = d e t ( B 2 ) x 2 = d e t ( B 2 ) d e t ( A ) det(A)det(\begin{bmatrix}1&x_1&0\\0&x_2&0\\0&x_3&1\end{bmatrix}) =det(A)x_2\\ =det(\begin{bmatrix}a_{11}&b_1&a_{13}\\a_{21}&b_2&a_{23}\\a_{31}&b_3&a_{33}\end{bmatrix}) =det(B_2)\\ x_2=\frac{det(B_2)}{det(A)} det(A)det(⎣⎡100x1x2x3001⎦⎤)=det(A)x2=det(⎣⎡a11a21a31b1b2b3a13a23a33⎦⎤)=det(B2)x2=det(A)det(B2)
按照这个方式可以完整的求出 x ⃗ \vec{x} x ,这个就Cramer’s Rule的思想描述,前提是det(A)不等于0,完整描述:
x 1 = d e t ( B 1 ) d e t ( A ) x 2 = d e t ( B 2 ) d e t ( A ) ⋮ x n = d e t ( B n ) d e t ( A ) x_1=\frac{det(B_1)}{det(A)}\\ x_2=\frac{det(B_2)}{det(A)}\\ \vdots\\ x_n=\frac{det(B_n)}{det(A)} x1=det(A)det(B1)x2=det(A)det(B2)⋮xn=det(A)det(Bn)
观察下计算量: O ( d e t ( A ) ) = n ! O(det(A))=n! O(det(A))=n! , O ( d e t ( B i ) ) = n ! O(det(B_i))=n! O(det(Bi))=n! (i=1,2…n) 所以总计算量 ( n + 1 ) ! (n+1)! (n+1)! 如果n=10,计算量过百万次,并且飞速增长,于是得出结论,别管是计算机还是人,这个法则适合矩阵小的时候,大了不适合。
从上面的解方程可以很自然的引申到求逆,稍加改装就行了:
[ A ] [ x 11 x 12 x 13 x 21 x 22 x 23 x 31 x 32 x 33 ] = [ 1 0 0 0 1 0 0 0 1 ] \begin{bmatrix} &&\\&A&\\&& \end{bmatrix} \begin{bmatrix} x_{11}&x_{12}&x_{13}\\ x_{21}&x_{22}&x_{23}\\ x_{31}&x_{32}&x_{33} \end{bmatrix}= \begin{bmatrix} 1&0&0\\0&1&0\\0&0&1 \end{bmatrix} ⎣⎡A⎦⎤⎣⎡x11x21x31x12x22x32x13x23x33⎦⎤=⎣⎡100010001⎦⎤
这个改装的不明显?那好我再把它打碎一些:
[ A ] [ x 11 0 0 x 21 1 0 x 31 0 1 ] = [ 1 a 12 a 13 0 a 22 a 23 0 a 32 a 33 ] = B 1 \begin{bmatrix} &&\\&A&\\&& \end{bmatrix} \begin{bmatrix} x_{11}&0&0\\ x_{21}&1&0\\ x_{31}&0&1 \end{bmatrix}= \begin{bmatrix} 1&a_{12}&a_{13}\\0&a_{22}&a_{23}\\0&a_{32}&a_{33} \end{bmatrix}=B_1 ⎣⎡A⎦⎤⎣⎡x11x21x31010001⎦⎤=⎣⎡100a12a22a32a13a23a33⎦⎤=B1
怎么样,这样清晰了吧,我们还是用Cramer法则,得到的 x 11 = d e t ( I 1 ) d e t ( A ) x_{11}=\frac{det(I_1)}{det(A)} x11=det(A)det(I1) 这个就是Cramer法则的公式的带入,如果没看懂,请回到上一小节,接着我们分析下矩阵 [ 1 a 12 a 13 0 a 22 a 23 0 a 32 a 33 ] = I 1 \begin{bmatrix}1&a_{12}&a_{13}\\0&a_{22}&a_{23}\\0&a_{32}&a_{33}\end{bmatrix}=I_1 ⎣⎡100a12a22a32a13a23a33⎦⎤=I1 这个矩阵厉害的地方在于他的行列式等于第一个元素1的cofactor,即 d e t ( B 1 ) = C 11 = ∣ a 22 a 23 a 32 a 33 ∣ det(B_1)=C_{11}=\begin{vmatrix}a_{22}&a_{23}\\a_{32}&a_{33}\end{vmatrix} det(B1)=C11=∣∣∣∣a22a32a23a33∣∣∣∣,厉害不厉害,那么 x 11 = d e t ( B 1 ) d e t ( A ) x_{11}=\frac{det(B_1)}{det(A)} x11=det(A)det(B1) 也就是 x 11 = C 11 d e t ( A ) x_{11}=\frac{C_{11}}{det(A)} x11=det(A)C11 同理可以推出 x 21 = C 12 d e t ( A ) x_{21}=\frac{C_{12}}{det(A)} x21=det(A)C12 , x 31 = C 13 d e t ( A ) x_{31}=\frac{C_{13}}{det(A)} x31=det(A)C13
那么这么继续下去(这里跳过了基本步骤,不明白可以回到Cramer 法则,一毛一样的过程),得到了 A − 1 A^{-1} A−1 :
A i j − 1 = C j i d e t ( A ) A^{-1}_{ij}=\frac{C_{ji}}{det(A)} Aij−1=det(A)Cji
这个就是矩阵求逆的公式,我记得我当时学的时候这个公式老师写在黑板上,然后就让我们套着这个公式做算数练习了(MDZZ)。。
上面的公式可以反过来证明一下:
[ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] [ C 11 C 12 C 13 C 21 C 22 C 23 C 31 C 32 C 33 ] = [ d e t ( A ) 0 0 0 d e t ( A ) 0 0 0 d e t ( A ) ] \begin{bmatrix} a_{11}&a_{12}&a_{13}\\ a_{21}&a_{22}&a_{23}\\ a_{31}&a_{32}&a_{33} \end{bmatrix} \begin{bmatrix} C_{11}&C_{12}&C_{13}\\ C_{21}&C_{22}&C_{23}\\ C_{31}&C_{32}&C_{33} \end{bmatrix}= \begin{bmatrix} det(A)&0&0\\ 0&det(A)&0\\ 0&0&det(A) \end{bmatrix} ⎣⎡a11a21a31a12a22a32a13a23a33⎦⎤⎣⎡C11C21C31C12C22C32C13C23C33⎦⎤=⎣⎡det(A)000det(A)000det(A)⎦⎤
这里等于det(A)的点我们就不算了,因为是公式,我们只算为0的点,比如 [ a 21 a 22 a 23 ] \begin{bmatrix}a_{21}&a_{22}&a_{23}\end{bmatrix} [a21a22a23] 这个行向量,和 [ C 11 C 21 C 31 ] \begin{bmatrix}C_{11}\\C_{21}\\C_{31}\end{bmatrix} ⎣⎡C11C21C31⎦⎤ 相乘 a 21 C 11 + a 22 ∗ C 12 + a 23 ∗ C 13 a_{21}C{11}+a_{22}*C_{12}+a_{23}*C_{13} a21C11+a22∗C12+a23∗C13 ,因为C也是从矩阵A构建出来的,我们给他来个大还原
[ a 21 a 22 a 23 a 21 a 22 a 23 a 31 a 32 a 33 ] \begin{bmatrix} a_{21}&a_{22}&a_{23}\\ a_{21}&a_{22}&a_{23}\\ a_{31}&a_{32}&a_{33} \end{bmatrix} ⎣⎡a21a21a31a22a22a32a23a23a33⎦⎤
这个矩阵的行列式就是 a 21 C 11 + a 22 ∗ C 12 + a 23 ∗ C 13 a_{21}C{11}+a_{22}*C_{12}+a_{23}*C_{13} a21C11+a22∗C12+a23∗C13 很明显更两行相等,就是说行列式值为0
一个不错的例题,如果cofactors都不是0,那么行列式一定非零么?答案当然是否定的,因为行列式最后是对cofactor加权求和的。
三角行的面积底乘以高除以2,小学版本的面积,升级以后的就是类似于用正弦函数在已知一个角和这个角的两条边的情况下, S = a b ⋅ s i n ( θ ) S=ab \cdot sin(\theta) S=ab⋅sin(θ) 这个应该算是比较高级的,但是我们分析下这两种常用的公式,里面需要用到的信息是什么?底乘以高,这里明显有两个长度,但是高隐藏了一个角度就是90度这个角至关重要,第二个ab是两条边的长度,和一个角度;也就是说求三角形面积,两个长度和一个角度是必不可少的,或者你也可以知道三个长度,根据余弦定理可以求出角。
回顾下向量,向量有方向,有长度,那么两个向量是不是就能求出三角行的面积?答案是肯定的,用前面的知识也很好求出,但是下面我们将学会一种很有趣的求法,没错,用行列式求面积:
如果一个三角形的三个顶点是 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) , ( x 2 , y 2 ) (x_2,y_2) (x2,y2) , ( x 3 , y 3 ) (x_3,y_3) (x3,y3) 那么三角形的面积是:
A r e a = ∣ x 1 y 1 1 x 2 y 2 1 x 3 y 3 1 ∣ Area=\begin{vmatrix} x_1&y_1&1\\x_2&y_2&1\\x_3&y_3&1 \end{vmatrix} Area=∣∣∣∣∣∣x1x2x3y1y2y3111∣∣∣∣∣∣
你可以把它记做公式或者怎么样,但是我觉得没必要,具体的证明?我不想写了,因为证明就是计算行列式,最后结果与其他方法算出来的相同,然后证毕。
下面的证明是非常有趣的一种方法,没有计算,而是巧妙的利用行列式的性质。
我们定义行列式的时候并不是上来就给力计算公式,而是规定了三个性质,通过这三个基本性质逐步形成了行列式的其他性质以及计算公式,再推广到应用,那么我们可以继续这种方法来把三角形的面积推广到平行四边形,对于平行四边形面积的性质:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rXitM3Rk-1592544291488)(https://tony4ai-1251394096.cos.ap-hongkong.myqcloud.com/blog_images/Math-Linear-Algebra-Chapter-5-3/性质3.png)]
如果不明白A是什么,A是像三角形那个行列式一样,各顶点组合出来的。
这样的话就能证明行列式就是面积,具体是谁的面积,就是以各行为坐标,圈起来的图形的面积。
比如2x2的矩阵就是平行四边形的以原点为一个顶点,另外两个点是矩阵的行,推广到体积同样成立,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sz1jGziE-1592544291495)(https://tony4ai-1251394096.cos.ap-hongkong.myqcloud.com/blog_images/Math-Linear-Algebra-Chapter-5-3/体积.png)]
这里就不再继续描述了,因为大道理就上面的三条性质。
下面我们要正式回应一下本章开头提出的懵逼场景2(点击查看),也就是二重积分转换成极坐标的那个带入问题,其实问题的根源在于对于 d A = d x d y dA=dxdy dA=dxdy 是一种简单的形式,或者叫做一个结果,他求的是矩形面积,忽略了其中角度的关系,原始的 d A dA dA 应该是一个行列式比如对于直角坐标系,对x和y求二重微分
d x = 1 d x + 0 d y dx=1dx+0dy dx=1dx+0dy 以及 d x = 0 d x + 1 d y dx=0dx+1dy dx=0dx+1dy 那么写成矩阵形式就是下面的样子
d A = d e t ( [ d x 0 0 d y ] [ 1 0 0 1 ] ) dA= det(\begin{bmatrix}dx&0\\0&dy\end{bmatrix} \begin{bmatrix} 1&0\\0&1 \end{bmatrix}) dA=det([dx00dy][1001])
也就是说我们要把坐标系的基矩阵也跟在后面,而前面是变量之间的微分关系(这个微分关系叫做雅克比矩阵)这个矩阵最后算出来的是一个伸缩比例,什么的伸缩比例?因为你已经把积分的单元改变了,之前那个dA和现在的dA不是一个同一个大小了,而是多了一个比例系数,以及两种不同积分元。
如果我们对积分变量进行代换,原变量为 x ⃗ = x 1 , x 2 , … , x n \vec{x}=x_1,x_2,\dots ,x_n x=x1,x2,…,xn 换元后的变量是 y ⃗ = y 1 , y 2 , … , y n \vec{y}=y_1,y_2,\dots ,y_n y=y1,y2,…,yn 并且满足 x = A y x=Ay x=Ay 那么 d x ⃗ = J ( A ) d y ⃗ d\vec{x}=J(A)d\vec{y} dx=J(A)dy
雅克比矩阵J(A):
J = [ ∂ x 1 y 1 … ∂ x 1 y n ∂ x 2 y 1 … ∂ x 2 y n ⋮ ∂ x n y 1 … ∂ x n y n ] J=\begin{bmatrix} \frac{\partial x_1}{y_1}&\dots&\frac{\partial x_1}{y_n}\\ \frac{\partial x_2}{y_1}&\dots&\frac{\partial x_2}{y_n}\\ &\vdots&\\ \frac{\partial x_n}{y_1}&\dots&\frac{\partial x_n}{y_n} \end{bmatrix} J=⎣⎢⎢⎢⎢⎡y1∂x1y1∂x2y1∂xn……⋮…yn∂x1yn∂x2yn∂xn⎦⎥⎥⎥⎥⎤
然后根据行列式性质,两边同时行列式,就得到了新的积分元了,雅克比行列式提供了一个伸缩比例
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZpEln7R-1592544291497)(https://tony4ai-1251394096.cos.ap-hongkong.myqcloud.com/blog_images/Math-Linear-Algebra-Chapter-5-3/polar.png)]
积分元的大小明显发生了变换,伸缩比例就是雅克比行列式的值。
Cross Product与dot Product相对应,其结果是个新的向量而不是一个值,Cross的定义:
u × v = ∣ i j k u 1 u 2 u 3 v 1 v 2 v 3 ∣ u \times v = \begin{vmatrix} i&j&k\\ u_1&u_2&u_3\\ v_1&v_2&v_3 \end{vmatrix} u×v=∣∣∣∣∣∣iu1v1ju2v2ku3v3∣∣∣∣∣∣
得到的矩阵和u和v都正交,证明?
直接乘进去就有了
∣ i j k u 1 u 2 u 3 v 1 v 2 v 3 ∣ = i C 11 − j C 12 + k C 13 \begin{vmatrix} i&j&k\\ u_1&u_2&u_3\\ v_1&v_2&v_3 \end{vmatrix} =i C_{11}-j C_{12}+k C_{13} ∣∣∣∣∣∣iu1v1ju2v2ku3v3∣∣∣∣∣∣=iC11−jC12+kC13
那么进行dot product就有:
⟨ C 11 , − C 12 , C 13 ⟩ ⋅ ⟨ u 1 , u 2 , u 3 ⟩ = ∣ u 1 u 2 u 3 u 1 u 2 u 3 v 1 v 2 v 3 ∣ = 0 \langle C_{11},-C_{12},C_{13}\rangle \cdot \langle u_1,u_2,u_3\rangle = \begin{vmatrix} u_1&u_2&u_3\\ u_1&u_2&u_3\\ v_1&v_2&v_3 \end{vmatrix}=0 ⟨C11,−C12,C13⟩⋅⟨u1,u2,u3⟩=∣∣∣∣∣∣u1u1v1u2u2v2u3u3v3∣∣∣∣∣∣=0
同理可以得到v,所以两个向量的cross product与这两个向量组成的平面垂直,方向满足右手定则(这个google下自己比划)
那么总结下Cross的性质
根据上一节和这一节的对比,连个向量的cross等于这两个向量为边的平行四边形面积,也就是说
∣ u × v ∣ = ∣ u ∣ ∣ v ∣ s i n ( θ ) |u \times v| =|u||v|sin(\theta) ∣u×v∣=∣u∣∣v∣sin(θ)
方向满足右手定则。
推广到三维
( u × v ) ⋅ w = ∣ w 1 w 2 w 3 u 1 u 2 u 3 v 1 v 2 v 3 ∣ = v o l u m e (u \times v)\cdot w= \begin{vmatrix} w_1&w_2&w_3\\ u_1&u_2&u_3\\ v_1&v_2&v_3 \end{vmatrix}=volume (u×v)⋅w=∣∣∣∣∣∣w1u1v1w2u2v2w3u3v3∣∣∣∣∣∣=volume
这个就是前面的简单推广,大家可以自己研究一下
这篇没想到这么长,从早上写到下午,有问题请大家指出。。明天继续。。