1. 程式人生 > >點乘和叉乘及其物理意義(C++STL實現)

點乘和叉乘及其物理意義(C++STL實現)

  1. 一些錯誤觀念的澄清,比如數學意義上的點積叉積並不對應matlab程式中的.*(按位相乘)和*(矩陣乘法)

  2. 內積的物理意義

    • 一種向量到標量的對映
    • 兩向量的夾角的計算
    • 兩向量是否正交的判斷
    • 兩向量的相似性(similarity)的度量
  3. 叉積的意義

  4. 如何使用C++語言(STL容器,運算子過載):

    • 表示向量
    • 計算內積
    • 計算叉積
    • 計算模長
    • 計算兩向量的夾角
    • 計算點到直線的距離

prerequisites

內積(inner product)

又叫點乘,點積(dot product),數量積,顧名思義得到的是一個標量(scalar)。

  • 代數定義

向量x=[x1,x2,,xn

]y=[y1,y2,,yn]的內積定義為:

xy=inxiyi=x1y1+x2y2++xnyn

也即:內積等於向量的對應位相乘再相加,如果從函式的觀點來看的話,即是兩個向量相互作用得到一個標量。

內積對相互作用的兩個向量x,y的長度也即各自所含元素的個數是沒有限制的。這點不同於向量叉積,叉積所要的向量長度最高為3.

  • 幾何定義

歐式空間中,向量是一個同時擁有長度和方向的幾何物件。向量x的長度記為x,兩個向量的內積定義為:

xy=xycosθ

θ標識著兩向量的夾角。可見當向量正交時,θ=90xy=0
當向量y被歸一化為長度為1的單位向量時,x

y=xcosθ,我們來考察x,y均為二維的情形:


這裡寫圖片描述

如上圖所示,此時二者的內積表示的恰是其中一個向另外一個的投影,投影長度越小,說明二者的夾角越大,反之亦然。當兩向量同時歸一化為1時,此時內積的定義為:xy=cosθ,內積越大,說明兩者夾角越小,也間接地說明兩者也就越相似,故在許多機器學習的演算法,常用餘弦相似性來度量兩特徵向量的逼近程度。內積既然能夠表徵兩向量的夾角,自然判斷兩向量是否正交(值為0)就更不在話下了。

叉積

又叫叉乘(cross product)或者外積,它的計算結果是一個向量而非標量。叉積所在的向量與參與運算的兩個向量都正交,也即正交於原來的兩個向兩邊所決定的平面,也即兩向量所決定的平面的法向量可通過計算叉積的方式得以確定。當參與運算的兩向量是平行的兩個向量時,得到的叉積為0,也即可通過計算叉積的方式判斷兩向量是否平行。

代數定義

  • 二維時
x×y=x1y2x2y1
  • 三維時

這裡寫圖片描述

根據如圖的計算方法可得:

u×v====iu1v1ju2v2ku3v3(u2v3i+u3v1j+u1v2k)(u3v2i+u1v3j+u2v1k)(u2v3u3v2)i+(u3v1u1v3)j+(u1v2u2v1)k(u2v3u3v2,u3v1u1v3,u1v2u2v1)

幾何定義

相關推薦

及其物理意義C++STL實現

一些錯誤觀念的澄清,比如數學意義上的點積和叉積並不對應matlab程式中的.*(按位相乘)和*(矩陣乘法) 內積的物理意義 一種向量到標量的對映 兩向量的夾角的計算 兩向量是否正交的判斷 兩向量的相似性(similarity)的度量 叉積的意義 如何使用C+

順序表的建立初始化過程詳解C語言實現

順序表存放資料的特點和陣列這種資料型別完全吻合,因此順序表的實現使用的是陣列。需要注意的是,使用陣列實現順序表時,一定要預先申請足夠大的記憶體空間,避免因儲存空間不足,造成資料溢位,導致不必要的程式錯誤甚至崩潰。 在建立順序表時,除了預先申請記憶體空間,還需要實時記錄順序表的長度和順序表本身申請的記憶體大

樹層次遍歷C語言實現

經過兩天長時間的學習, 通過研究佇列以及二叉樹的相關性質,終於寫出了二叉樹的層次遍歷。 該實現的核心就是使用佇列,每次把訪問到的節點的左右子樹放到佇列裡面去,出隊的時候同樣操作! 感謝@原來如此 , @AlexMok ,兩位同學,在小組相互學習的過程中收穫良

矩陣的

https://blog.csdn.net/u013066730/article/details/57462299 https://blog.csdn.net/u012609509/article/details/70230204   矩陣的叉乘: a =    &nbs

四元數向量相乘,向量間的

四元數和向量相乘    Quaternion.Euler(x,y,z) 返回一個繞x軸旋轉x度再繞y軸旋轉y度再繞z軸旋轉z度的Quaternion,因此Quaternion.Euler(0,90,0)返回一個繞y軸旋轉90度的旋轉操作. Quaternion作用於Vect

高精度乘法高精高精C語言實現

原始碼&註釋 #include <stdio.h> #include <string.h> char s[10000],ss[10000]; int a[10000],b[10000],c[10000]; int len,l

碼海拾遺:二樹的遍歷遞歸實現

code out pos 高度 tor 個數 htc alt include   二叉樹是一種特殊的樹結構:每個節點最多有兩個子節點。   二叉樹的性質:   (1)二叉樹第i層的節點數目最多為 2{i-1} (i≥1)。   (2)深度為k的二叉樹至多有2{k}-1個結點

LeetCode 560. 為K的子陣列C++、python

給定一個整數陣列和一個整數 k,你需要找到該陣列中和為 k 的連續的子陣列的個數。 示例 1 : 輸入:nums = [1,1,1], k = 2 輸出: 2 , [1,1] 與 [1,1] 為兩種不同的情況。 說明 : 陣列的長度為 [1, 20,0

C語言實現線性表歸併_含原始碼執行結果_資料結構C語言版

採用動態分配順序儲存結構實現 採用單鏈表結構實現 1.採用動態分配實現 #include<stdio.h> #include<stdlib.h> #define LIST_INIT_SIZE 100 #define LISTINCREM

資料結構C語言實現:判斷兩棵二樹是否相等,bug求解

判斷兩棵二叉樹是否相等。 遇到了bug,求大神幫忙!!! C語言原始碼: #include <stdio.h> #include <stdlib.h> #include <malloc.h> #define OK 1 #define

求一個矩陣中的馬鞍c語言實現

資料結構中的求一個矩陣的馬鞍點 請編寫一個完整的程式,如果矩陣A中存在這樣的一個元素A[i,j]滿足條件A[i,j]是第i行的值最小的元素,且又是第j列中最大的元素,則稱之為該矩陣的一個馬鞍點。 程式碼如下: #include<stdio.h> #d

資料結構之 二查詢樹C語言實現

資料結構之 二叉查詢樹 1. 二叉查詢樹的定義 二叉查詢樹(binary search tree)是一棵二叉樹,或稱為二叉搜尋樹,可能為空;一棵非空的二叉查詢樹滿足一下特徵: 每個元素有一個關鍵字,並且任意兩個元素的關鍵字都不同;因此,所有的關鍵字都是唯

資料結構之二排序樹C語言實現

一、基本概念1.二叉排序樹        二叉排序樹(Binary sort tree,BST),又稱為二叉查詢樹,或者是一棵空樹;或者是具有下列性質的二叉樹:        (1)若它的左子樹不為空,則左子樹上所有節點的值均小於它的根節點的值;        (2)若它的右

資料結構—二C語言實現

以下所有內容來自網易雲課堂——資料結構(小甲魚版) 對於樹來說,一旦可以指明他的分支數,那麼就可以用連結串列來實現了 二叉樹是應用廣泛的樹,因為現實世界大部分模型都只包含0,1這兩種情況,非常適合用二叉樹 如下: typedef struct BiNode {

大整數的四則運算C語言實現2——大整數的加法減法運算

斷斷續續調了好久個演算法的程式碼終於除錯好了,廢話不多說了,直接說思路,然後上程式碼。上一篇文章介紹了大整數的輸入的處理,包括接收方式、儲存方式、前導零的處理等內容。本文接著上一篇的內容。簡述大整數加減運算的思路。首先對於加法運算,存在以下四種情況:             

二分查詢遞迴非遞迴實現c語言實現

#include<stdio.h>++ int seeqSearch(int a[],int n,int k){     int i=n-1;     for(;i>=0;i--){//遍歷陣列         if(a[i]==k){//找到對應的陣列

資料結構之 AVL樹平衡二C語言實現

AVL樹(平衡二叉樹) 1. AVL樹定義和性質 AVL(Adelson-Velskii和Landis發明者的首字母)樹時帶有平衡條件的二叉查詢樹。 二叉查詢樹的效能分析: 在一顆左右子樹高度平衡情況下,最優的時間複雜度為O(log2n),這與這半

樹的建立與遍歷c語言實現

#include <stdio.h> #include <stdlib.h> typedef int ElemType; //這裡用int 作為樹結點的資料 typedef

第4章第1節練習題1 二樹的基本操作遞迴實現

二叉樹的遞迴遍歷 所謂二叉樹的遍歷,本質上就是沿某條搜尋路徑訪問樹中的每個結點,使得每個節點均被訪問一次,而且僅被訪問一次。 由二叉樹的基本定義可以知道,遍歷一顆二叉樹首先必須決定對根結點(N),左子樹(L),右子樹(R)的訪問順序,按照先遍歷左孩子再遍歷右

【深度學習數學基礎】向量內積外積、向量積概念及幾何意義解讀

1. 點乘 向量的點乘,也叫向量的內積、數量積,對兩個向量執行點乘運算,就是對這兩個向量對應位一一相乘之後求和的操作,點乘的結果是一個標量。 對於向量a和向量b: