1. 一些错误观念的澄清,比如数学意义上的点积叉积并不对应matlab程序中的.*(按位相乘)和*(矩阵乘法)

  2. 内积的物理意义

    • 一种向量到标量的映射
    • 两向量的夹角的计算
    • 两向量是否正交的判断
    • 两向量的相似性(similarity)的度量
  3. 叉积的意义

  4. 如何使用C++语言(STL容器,运算符重载):

    • 表示向量
    • 计算内积
    • 计算叉积
    • 计算模长
    • 计算两向量的夹角
    • 计算点到直线的距离

prerequisites

内积(inner product)

又叫点乘,点积(dot product),数量积,顾名思义得到的是一个标量(scalar)。

  • 代数定义

向量x=[x1,x2,…,xn]x=[x_1, x_2, \ldots, x_n]和y=[y1,y2,…,yn]y=[y_1, y_2, \ldots, y_n]的内积定义为:

x⋅y=∑inxiyi=x1y1+x2y2+⋯+xnyn

x\cdot y=\sum_i^nx_iy_i=x_1y_1+x_2y_2+\dots+x_ny_n

也即:内积等于向量的对应位相乘再相加,如果从函数的观点来看的话,即是两个矢量相互作用得到一个标量。

内积对相互作用的两个向量x,yx,y的长度也即各自所含元素的个数是没有限制的。这点不同于向量叉积,叉积所要的向量长度最高为3.

  • 几何定义

欧式空间中,向量是一个同时拥有长度和方向的几何对象。向量xx的长度记为∥x∥\|x\|,两个向量的内积定义为:

x⋅y=∥x∥∥y∥cosθ

x\cdot y=\|x\|\|y\|cos\theta

θ\theta标识着两向量的夹角。可见当向量正交时,θ=90∘\theta = 90^\circ,x⋅y=0x\cdot y = 0。
当向量yy被归一化为长度为1的单位向量时,x⋅y=∥x∥cosθx\cdot y=\|x\|cos\theta,我们来考察x,yx,y均为二维的情形:

如上图所示,此时二者的内积表示的恰是其中一个向另外一个的投影,投影长度越小,说明二者的夹角越大,反之亦然。当两向量同时归一化为1时,此时内积的定义为:x⋅y=cosθx\cdot y = cos\theta,内积越大,说明两者夹角越小,也间接地说明两者也就越相似,故在许多机器学习的算法,常用余弦相似性来度量两特征向量的逼近程度。内积既然能够表征两向量的夹角,自然判断两向量是否正交(值为0)就更不在话下了。

叉积

又叫叉乘(cross product)或者外积,它的计算结果是一个向量而非标量。叉积所在的向量与参与运算的两个向量都正交,也即正交于原来的两个向两边所决定的平面,也即两向量所决定的平面的法向量可通过计算叉积的方式得以确定。当参与运算的两向量是平行的两个向量时,得到的叉积为0,也即可通过计算叉积的方式判断两向量是否平行。

代数定义

  • 二维时
x×y=x1y2−x2y1

x\times y = x_1y_2-x_2y_1

  • 三维时

根据如图的计算方法可得:

u×v====∣∣∣∣iu1v1ju2v2ku3v3∣∣∣∣(u2v3i+u3v1j+u1v2k)−(u3v2i+u1v3j+u2v1k)(u2v3−u3v2)i+(u3v1−u1v3)j+(u1v2−u2v1)k(u2v3−u3v2,u3v1−u1v3,u1v2−u2v1)

\begin{eqnarray} \begin{split} \textbf{u}\times \textbf{v}=& \begin{vmatrix} \textbf {i} & \textbf{j} & \textbf{k} \\ u_1 & u_2 & u_3 \\ v_1 & v_2 & v_3 \end{vmatrix}\\ =&(u_2v_3\textbf{i}+u_3v_1\textbf{j}+u_1v_2\textbf{k})-(u_3v_2\textbf{i}+u_1v_3\textbf{j}+u_2v_1\textbf{k})\\ =&(u_2v_3-u_3v_2)\textbf{i}+(u_3v_1-u_1v_3)\textbf{j}+(u_1v_2-u_2v_1)\textbf{k}\\ =&(u_2v_3-u_3v_2, u_3v_1-u_1v_3, u_1v_2-u_2v_1) \end{split} \end{eqnarray}

几何定义

x×y=∥x∥∥y∥sinθn⃗ 

x\times y = \|x\|\|y\|sin\theta \vec{n}

n⃗ \vec{n}表示叉积方向上的单位向量。

中学知识告诉我们三角形的面积计算公式为:

S=∥x∥∥y∥sinθ2=∥z∥h2

S=\dfrac{\|x\|\|y\|sin\theta}{2}=\dfrac{\|z\|h}{2}
其中 θ\theta表示的是 x,yx, y之间的夹角,由以上两个公式我们可得到 三角形的高或者 点到其所对的边的距离,也即点到直线的距离,的计算公式:

h=∥x×y∥/∥z∥

h=\|x\times y\|/\|z\|

C++ STL实现

  • 向量的定义:
typedef vector<double> Vec;
  • 矩阵减法
Vec operator-(const Vec& x, const Vec& y)
{assert(x.size() == y.size());// #include <cassert>Vec tmp;for(size_t i = 0; i < x.size(); ++i)tmp.push_back(x[i] - y[i]);return tmp;         // 返回局部变量的拷贝
}
  • 内积和叉积的定义

为了形式的简单,我们在C++中以*表示内积,以^表示叉积,分别对二者进行运算符重载:

double operator*(const Vec& x, const Vec& y)
{assert(x.size() == y.size());       // #include <cassert>double sum = 0.;for (size_t i = 0; i < x.size(); ++i)sum += x[i]*y[i];return sum;
}// 三维的情况
Vec operator^(const Vec& x, const Vec& y)
{assert(x.size() == y.size() && x.size() == 3);return Vec{x[1]*y[2]-x[2]*y[1], x[2]*y[0]-x[0]*y[2],x[0]*y[1]-x[1]*y[0]};// uniform initialization, C++11新特性
}// 二维就姑且返回其模长吧
double twoDCrossProd(const Vec& x, const Vec& y)
{return x[0]*y[1]-x[1]*y[0];
}
  • 模长或者范数的计算
double norm(const Vec& x)
{double val = 0.;for(auto elem: x)val += elem*elem;return sqrt(val);   // #include <cmath>
}
  • 向量夹角的计算
#define PI 3.14159265358979323846
// 弧长向弧度的转换
double toDegree(double val)
{return val*180/PI;
}double angle(const Vec& x, const Vec& y)
{return toDegree(acos(x*y/norm(x)/norm(y)));// x*y, 计算二者的内积
}
  • 点到直线的距离
// x0, x1, x2 分别表示三角形的三个顶点的坐标
// 这里计算的是点x0到x1和x2构成的直线的距离
double distance(const Vec& x0, const Vec& x1, const Vec& x2)
{return twoDCrossProd(x1-x0, x2-x0)/norm(x1-x2);
}

客户端程序:

int main(int, char**)
{Vec x{1, 0, 0}, y{0, 1, 0};Vec z = x^y;        // 计算叉乘copy(z.begin(), z.end(), ostream_iterator<double>(cout, " "));cout << endl;// 0 0 1Vec alpha{1, 0}, beta{1, 1};cout << angle(alpha, beta) << endl;// 45Vec x0{0, 0}, x1{1, 0}, x2{0, 1};   cout << distance(x0, x1, x2) << endl;// 1/sqrt(2)return 0;
}

点乘和叉乘及其物理意义(C++STL实现)相关推荐

  1. 视觉SLAM小知识——叉乘的物理意义

    物理意义:两个向量a,b的叉乘仅在三维空间有意义,表示一个与向量a和向量b都垂直的向量,叉乘的模等于以向量a,b为边的平行四边形面积. 向量n是叉乘方向的单位向量,角度为向量a,b的夹角. 当夹角为0 ...

  2. 内积和外积的物理意义-数学

    内积和外积的物理意义 Persistently关注 2018.07.31 14:28:46字数 277阅读 6,276 向量的内积 ab=ab cos(θ) 向量a和b的长度之积再乘以它们之间的夹角的 ...

  3. 矩阵相关概念的物理意义

    参考链接: 矩阵乘法的本质是什么? 条件数 病态矩阵与条件数(&& 与特征值和SVD的关系) 矩阵的物理意义: https://blog.csdn.net/NightkidLi_911 ...

  4. 奇异值的物理意义是什么?强大的矩阵奇异值分解(SVD)及其应用

    作者:郑宁 链接:https://www.zhihu.com/question/22237507/answer/53804902 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  5. 频谱中负频率的物理意义(二)

    1.频率的概念就是从机械旋转运动来的,定义为角速度,对于周期运动,角速度也就是角频率.通常 θ以反时针为正,因此转动的正频率是反时针旋转角速度,负频率就是顺时针旋转角速度.这就是它的物理意义,正.负号 ...

  6. 卷积的定义及其物理意义_高等数学入门——高阶导数的定义及其物理意义

    系列简介:这个系列文章讲解高等数学的基础内容,注重学习方法的培养,对初学者不易理解的问题往往会不惜笔墨加以解释.在内容上,以国内的经典教材"同济版高等数学"为蓝本,并对具体内容作了 ...

  7. 奇异值的物理意义是什么?

    作者:知乎用户链接:https://www.zhihu.com/question/22237507/answer/53804902 来源:https://www.zhihu.com/question/ ...

  8. 图像傅立叶变换的物理意义

    原文:http://blog.csdn.net/dadaadao/article/details/6093882 傅立叶变换可以看做拉普拉斯变换的特殊形式.拉氏变换就是将原时域函数乘上一个与 σ相关的 ...

  9. 【数字信号处理】序列傅里叶变换 ( 傅里叶变换物理意义 | 反应信号在整个数字角频率上的能量分布 )

    文章目录 一.傅里叶变换物理意义 一.傅里叶变换物理意义 x(n)x(n)x(n) 序列 的 傅里叶变换 X(ejω)X(e^{j\omega})X(ejω) 的 物理意义 : 傅里叶变换 : 根据 ...

最新文章

  1. PHP的Smarty
  2. 10所“双一流”入选!一批国家自然科学基金立项名单公示
  3. Oral English 1: A topic about public transportaion in Chicago.
  4. 电子商务(六)-作业题解-第3章
  5. 递归 算例一(求一个简单嵌套字典的深度)
  6. crt中 新建的连接存储在哪_LCD发展至今仍然没有完胜CRT显示器,“老玩家”为你现身说法...
  7. 201771010137 赵栋 《第十二周学习总结》
  8. TCP的定时器系列 — 零窗口探测定时器(有图有代码有真相!!!)
  9. codeforces——Little Pony and Sort by Shift
  10. android 运动目标检测_MindSpore应用案例:AI对篮球运动员目标的检测
  11. 田园主义创始人发布致歉声明:测算失误导致热量差异
  12. 通信原理电子版_2021届通信工程专业保研经历分享+个人经验总结
  13. 操作系统课程设计之磁盘调度系统的设计与实现c语言
  14. mac上SCRT中文变问号的处理方式,亲测有效
  15. 英语句子划分表示符号使用规则
  16. 麒麟操作系统产业化项目落户天津
  17. java生日祝福程序代码_生日快乐代码
  18. python效验车辆VIN码小程序
  19. dual功能计算机,dual是什么意思车上的-功能介绍须知
  20. win8输入法图标不见了

热门文章

  1. (转)Managed DirectX +C# 开发(入门篇)(七)
  2. MFC 教程【6_应用程序的退出 】
  3. Python 之 变量的基本使用
  4. HSQL转换成MapReduce过程
  5. Spark利用(idea+maven+scala)创建wordcount打包jar并在spark on yarn上运行——Spark的开发
  6. p12解析流程_iOS证书及描述文件制作流程详解
  7. linux压缩隐藏文件,Linux下查看压缩文件内容的10种方法(小结)
  8. qq发文件大小上限_微信再两个放大招!网友:QQ可以卸载了?
  9. C语言解决累加和累乘问题
  10. 第八届蓝桥杯第二题等差素数列