一些錯誤觀念的澄清,比如數學意義上的點積
和叉積
並不對應matlab程式中的.*
(按位相乘)和*
(矩陣乘法)
內積的物理意義
叉積的意義
如何使用c++語言(stl容器,運算子過載):
又叫點乘,點積(dot product),數量積,顧名思義得到的是乙個標量(scalar)。 向量
x=[x
1,x2
,…,x
n]和y=[
y1,y
2,…,
yn] 的內積定義為:x⋅
y=∑i
nxiy
i=x1
y1+x
2y2+
⋯+xn
yn也即:內積等於向量的對應位相乘再相加,如果從函式的觀點來看的話,即是兩個向量相互作用得到乙個標量。
內積對相互作用的兩個向量x,歐式空間中,向量是乙個同時擁有長度和方向的幾何物件。向量y 的長度也即各自所含元素的個數是沒有限制的。這點不同於向量叉積,叉積所要的向量長度最高為3.
x 的長度記為∥x
∥,兩個向量的內積定義為:x⋅
y=∥x
∥∥y∥
cosθ
θ標識著兩向量的夾角。可見當向量正交時,θ=
90∘,x⋅y
=0。
當向量y
被歸一化為長度為1的單位向量時,x⋅
y=∥x
∥cos
θ,我們來考察x,
y 均為二維的情形:
如上圖所示,此時二者的內積表示的恰是其中乙個向另外乙個的投影,投影長度越小,說明二者的夾角越大,反之亦然。當兩向量同時歸一化為1時,此時內積的定義為:x⋅
y=co
sθ,內積越大,說明兩者夾角越小,也間接地說明兩者也就越相似,故在許多機器學習的演算法,常用余弦相似性來度量兩特徵向量的逼近程度。內積既然能夠表徵兩向量的夾角,自然判斷兩向量是否正交(值為0)就更不在話下了。
又叫叉乘(cross product)或者外積,它的計算結果是乙個向量而非標量。叉積所在的向量與參與運算的兩個向量都正交,也即正交於原來的兩個向兩邊所決定的平面,也即兩向量所決定的平面的法向量可通過計算叉積的方式得以確定。當參與運算的兩向量是平行的兩個向量時,得到的叉積為0,也即可通過計算叉積的方式判斷兩向量是否平行。x×
根據如圖的計算方法可得:u×
v===
=∣∣∣
∣iu1
v1ju
2v2k
u3v3
∣∣∣∣
(u2v
3i+u
3v1j
+u1v
2k)−
(u3v
2i+u
1v3j
+u2v
1k)(
u2v3
−u3v
2)i+
(u3v
1−u1
v3)j
+(u1
v2−u
2v1)
k(u2
v3−u
3v2,
u3v1
−u1v
3,u1
v2−u
2v1)
x×y=∥x∥
∥y∥s
inθn
⃗ n⃗
表示叉積方向上的單位向量。
中學知識告訴我們三角形的面積計算公式為: s=
∥x∥∥
y∥si
nθ2=
∥z∥h
2 其中θ
表示的是x,
y 之間的夾角,由以上兩個公式我們可得到三角形的高
或者點到其所對的邊的距離
,也即點到直線的距離,的計算公式: h=
∥x×y
∥/∥z
∥
typedef
vector
vec;
vec operator-(const vec& x, const vec& y)
為了形式的簡單,我們在c++中以*
表示內積,以^
表示叉積,分別對二者進行運算子過載:
double
operator*(const vec& x, const vec& y)
// 三維的情況
vec operator^(const vec& x, const vec& y)
; // uniform initialization, c++11新特性
}// 二維就姑且返回其模長吧
double twodcrossprod(const vec& x, const vec& y)
double norm(const vec& x)
#define pi 3.14159265358979323846
// 弧長向弧度的轉換
double todegree(double val)
double angle(const vec& x, const vec& y)
// x0, x1, x2 分別表示三角形的三個頂點的座標
// 這裡計算的是點x0到x1和x2構成的直線的距離
double
distance(const vec& x0, const vec& x1, const vec& x2)
客戶端程式:
int main(int, char**)
, y;
vec z = x^y; // 計算叉乘
copy(z.begin(), z.end(), ostream_iterator(cout, " "));
cout
<< endl;
// 0 0 1
vec alpha, beta;
cout
<< angle(alpha, beta) << endl;
// 45
vec x0, x1, x2;
cout
<< distance(x0, x1, x2) << endl;
// 1/sqrt(2)
return
0;}
點乘和叉乘
目錄 定義 點乘公式 點乘幾何意義 叉乘公式 叉乘幾何意義,問題 我知道向量乘分為叉乘和點乘,矩陣乘不分什麼叉乘和點乘吧?如果存在各是什麼?線性代數上沒有,但在一些高階書上也有人提矩陣的叉乘,點乘.不能理解 矩陣也可構成乙個空間,也就是可以作為向量,自然也就有內積 點乘 外積 叉乘 定義方式一致.向...
點乘和叉乘
點乘,也叫向量的內積 數量積。顧名思義,求下來的結果是乙個數。向量a 向量b a b cos 在物理學中,已知力與位移求功,實際上就是求向量f與向量s的內積,即要用點乘。叉乘,也叫向量的外積 向量積。顧名思義,求下來的結果是乙個向量,記這個向量為c。向量c 向量a 向量b a b sin 向量c的方...
點乘和叉乘
向量是由n個實數組成的乙個n行1列 n 1 或乙個1行n列 1 n 的有序陣列 向量的點乘,也叫向量的內積 數量積,對兩個向量執行點乘運算,就是對這兩個向量對應位一一相乘之後求和的操作,點乘的結果是乙個標量。對於向量a和向量b a和b的點積公式為 要求一維向量a和向量b的行列數相同。點乘的幾何意義是...