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系列——多進程/線程數據抓取與網頁請求


