- MATLAB金融風險管理師FRM(高階實戰)
- 姜偉生 涂升 李蓉
- 1254字
- 2021-03-26 23:39:51
2.1 切向量和法向量
向量又稱作歐幾里得向量(Euclidean vector)、空間向量(spatial vector)或者幾何向量(geometric vector)。向量通常由大小(magnitude)和方向(direction)兩個元素構成。向量大小又叫作歐幾里得距離(Euclidean distance)、歐幾里得范數(Euclidean norm)或2范數(2-norm),MATLAB對應函數為norm()和vecnorm()。
和起點無關的向量叫作自由向量(free vector),如圖2.1(a)所示;和起點有關的向量被稱作固定向量(fixed vector),如圖2.1(b)所示;方向上沿著某一條特定直線的向量,稱之為滑動向量(sliding vector),如圖2.1(c)所示。

圖2.1 自由向量、固定向量和滑動向量
直線的法向量(normal vector)為垂直于該直線的非零向量,如圖2.2(a)所示。光滑曲線上某點的法向量垂直于曲線上該點處的切線,如圖2.2(b)所示。平面法向量(a normal line to a surface)垂直于平面內任意直線,如圖2.2(c)所示。光滑連續曲面內某點的法向量為曲面該點處切平面(tangent plane)的法向量,如圖2.2(d)所示。
本章用n來表達法向量,而單位法向量(unit nor mal vector)N通過下式獲得:

單位法向量N模為1。

圖2.2 直線、平面和光滑曲面法向量
直線上任意一點的切向量(tangent vector)是和直線相切的非零向量,如圖2.3(a)所示。直線某點處切向量和法向量垂直,即兩者內積為0。圖2.3(b)所示為光滑曲線的切線。三維空間平面上某點的切線有無數條,如圖2.3(c)所示。同樣,如圖2.3(d)所示,光滑曲面上某點的切線有無數條,且都在曲面該點的切平面內。本書一般用τ來表達切向量。單位切向量(unit tangent vector)T通過下式獲得:

單位切向量T模為1。

圖2.3 直線、平面和光滑曲面切向量
向量外積,也叫叉乘(cross product)或向量積(vector product)。向量內積(inner product)或標量積(scalar product)為標量,而向量叉乘結果為向量。a和b的向量積,記作a × b。a × b方向分別垂直于向量a和b,即a × b垂直于向量a和b構成的平面。向量a和b以及a × b構成右手法則,如圖2.4所示,同時在圖中可以看到a × b和b × a方向相反。

圖2.4 向量叉乘右手法則
a × b的模通過下式獲得:

其中,θ為向量a和b的夾角。
如圖2.5(a)所示,空間直角坐標系中三個正交基底向量i(x軸正方向)、j(y軸正方向)和k(z軸正方向)之間滿足向量叉乘關系,如下:


圖2.5 三維空間正交單位向量基底之間關系
圖2.5(b)展示了以上三個等式中i、j和k的前后順序關系。若調換它們的順序,會得到以下三個運算式:

向量與自身叉乘等于0向量,如下:

叉乘運算的常見性質如下:

若用基底向量i、j和k表達向量a和b:

整理向量a和b的叉乘,如下:

則結果為以下行列式值:

下面結合代碼計算兩個向量的叉乘:

a × b結果如下:

b × a結果如下:

MATLAB計算叉乘函數為cross(),圖2.6展示cross()計算叉乘a × b和b × a,并用quiver3() 繪制結果。此外,圖2.6用fill3()函數繪制a和b構造平面。

圖2.6 向量a和b叉乘
以下代碼獲得圖2.6。
B4_Ch1_1.m clear all; close all; clc O = [0, 0, 0]; A = [-2,1,1]; B = [1,-2,-1]; AO = A-O; BO = B-O; cross_prod1 = cross(AO,BO) cross_prod2 = cross(BO,AO) figure( 1) points=[ A' B' O']; h5 = fill3(points(1,:),points(2,:),points(3,:),'b'); h5.EdgeColor = [1 1 1]; h5.FaceAlpha = 0.4; hold on h1 = quiver3(O(1),O(2),O(3),AO(1),AO(2),AO(3)); h2 = quiver3(O(1),O(2),O(3),BO(1),BO(2),BO(3)); h1.AutoScale = 'off'; h2.AutoScale = 'off'; h1.LineWidth = 1; h2.LineWidth = 1; h3 = quiver3(O(1),O(2),O(3),cr oss_prod1(1),cross_prod1(2),cross_prod1(3)); hold on h4 = quiver3(O(1),O(2),O(3),cross_prod2(1),cross_prod2(2),cross_prod2(3)); h3.AutoScale = 'off'; h4.AutoScale = 'off'; h3.LineWidth = 1; h4.LineWidth = 1; daspect([1,1,1]); box on; grid off; view(-45,45) xlabel('x'); ylabel('y'); zlabel('z') hAxis = gca; hAxis.XRuler.FirstCrossoverValue = 0; % X crossover with Y axis hAxis.YRuler.FirstCrossoverValue = 0; % Y crossover with X axis hAxis.ZRuler.FirstCrossoverValue = 0; % Z crossover with X axis hAxis.ZRuler.SecondCrossoverValue = 0; % Z crossover with Y axis hAxis.XRuler.SecondCrossoverValue = 0; % X crossover with Z axis hAxis.YRuler.SecondCrossoverValue = 0; % Y crossover with Z axis