08.叉乘
本文的主要內容:叉乘的計算方式,幾何含義和詳細證明.
1.叉乘的計算公式
[v1,v2,v3]x[w1,w2,w3] = [[ v2w3 - v3w2],[-v1w3 + v3w1],[ v1w2 - v2w1]]
import sympy as sp v1,v2,v3,w1,w2,w3 = sp.symbols("v1,v2,v3,w1,w2,w3") M1 = sp.Matrix([v1,v2,v3]) M2 = sp.Matrix([w1,w2,w3]) M3 = M1.cross(M2)#cross叉乘 M3 #Matrix([[ v2*w3 - v3*w2],[-v1*w3 + v3*w1],[ v1*w2 - v2*w1]]) M3.subs([[v1,1],[v2,2],[v3,3],[w1,4],[w2,5],[w3,6]]) #Matrix([[-3], [ 6], [-3]]) import numpy as np M1 = np.matrix([1,2,3]) M2 = np.matrix([4,5,6]) np.cross(M1,M2) #array([[-3, 6, -3]])
2.叉乘的幾何意義
叉乘:也叫向量積,外積,叉積,矢積。對於2個3維向量的叉乘,結果是一個和已有兩個向量都垂直的向量,方向符合右手定則。
如果我們有3個三維向量,第1個是未知向量 =[x,y,z],第2個是已知向量 = [v1,v2,v3],第3個是已知向量 = [w1,w2,w3],這三個向量構成的平行六面體設為F,設M1=[[x,v1,w1],[y,v2,w2],[z,v3,w3]].
F的體積為 , 等於det(M1)的絕對值:
因為x,y,z是未知的,所以我們歸納M1的行列式為x,y,z作為變數的表達式.
import sympy as sp x,y,z,v1,v2,v3,w1,w2,w3 = sp.symbols("x,y,z,v1,v2,v3,w1,w2,w3") M1 = sp.Matrix([[x,v1,w1],[y,v2,w2],[z,v3,w3]]) M1.det().factor(x,y,z) #factor 提取變數 #結果為:x*(v2*w3 - v3*w2) + y*(-v1*w3 + v3*w1) + z*(v1*w2 - v2*w1)
det(M1) = x*(v2*w3 - v3*w2) + y*(-v1*w3 + v3*w1) + z*(v1*w2 - v2*w1)
體積 =|det(M1)|=|x*(v2*w3 - v3*w2) + y*(-v1*w3 + v3*w1) + z*(v1*w2 - v2*w1)|
當 為右手定則的拇指一側(偏差<=90°)時, =det(M1),否則- =det(M1).
[注意上面用了一個技巧,本來 是為食指, 為中指, 為拇指的,但是經過旋轉(不經過變換),相對下圖其實 就是拇指方向(而不是反方向),可以動手旋轉一下]
假設: 為垂直於 平面的向量,| |等於和構成的面積,右手定則的拇指方向為 方向.
根據點乘公式可知, .
因為 垂直於 平面, 為在上的投影,所以 為立體F在 平面的高,又因為| |為 構成的面積.
可得 =高*面積 = =|det(M1)|.
嘗試去除公式中的絕對值,我們希望得到 =det(M1):
(1)當為右手定則的拇指一側(偏差<=90°)時, >=0, =det(M1),此時 夾角<=90°,則 =det(M1)= ,
(2)當為右手定則的拇指不同側的時, <0,- =det(M1),此時 夾角大於90°,- =det(M1)= .
綜上, =det(M1) = x*(v2*w3 - v3*w2) + y*(-v1*w3 + v3*w1) + z*(v1*w2 - v2*w1),
因為 =[x,y,z],可得 = [v2*w3 - v3*w2,-v1*w3 + v3*w1,v1*w2 - v2*w1]= x .
幾何含義:
結合叉乘的計算公式, x =[v2*w3 - v3*w2,-v1*w3 + v3*w1,v1*w2 - v2*w1]= .
所以叉乘的實質為求得 x 右手定則拇指方向的向量,其長度為 x 構成的面積.
幾何含義為:可以引入一個向量(如這裡的 ),這個向量點乘 後的絕對值為三個向量構成的平行六面體的體積,其中 x = .
下一節的內容鏈接為:
袁傑雄:09.基變換[python線性變換]推薦閱讀:
※Python實現PCA降維
※《機器學習實戰》學習總結(五)——Logistic回歸
※flowpy語法特性總覽和二進位包
※Python練習第一題,在圖片上加入數字
※左手用R右手Python系列——多進程/線程數據抓取與網頁請求