8.Python趣味数学笔记:点积和叉积

liftword2周前 (06-10)技术文章3

向量相乘分为:点积(例如:)和叉积(例如:),对于数来说,这些符号意思都是表示数字相乘,但是对于向量来说,却表示完全不同的操作。

点积

点积(也叫内积)是对两个向量的运算,返回一个标量。点积适用于二维、三维等任意维度的向量,可以用来测量向量之间的“对齐程度”。

计算公式:

假设:

表示的几何含义:

向量投影到向量所在的直线(三维是平面),投影长度乘上向量的长度。

余弦函数图:

利用计算公式,我们可以得到:

两向量的夹角和一个向量在另一个向量上面的投影;一般来说,点积越大,两向量夹角越小,彼此越靠近

如果两个向量的夹角小于90°,则向量的点积为正;如果夹角大于90°,则向量的点积为负;如果夹角等于90°,则向量的点积为0。

Bash
from math import acos,sqrt,radians,degrees,pi
#求向量的点积
def dot(u,v):
    return sum([c1*c2 for c1,c2 in zip(u,v)])
#向量的长度
def length(v):
    return sqrt(sum([item**2 for item in v]))
#求两个向量的夹角
def angle_between(u,v):
    return acos(dot(u,v)/(length(u)*length(v)))

举例:,夹角22.6°

,夹角=90°

,夹角132.2°

叉积

叉积(也叫向量积)以两个三维向量作为输入,其输出是另一个三维向量。它与点积的相似之处在于,输入向量的长度和相对方向决定了输出;不同之处在于,它的输出不仅有大小,还有方向。

计算公式:

假设:

表示的几何含义:

长度等于向量和向量所形成的平行四边形的面积;

方向垂直于两个向量所张成的平面,满足右手定则。

利用计算公式,我们可以得到:

一个垂直于两个向量所张成平面的向量;根据该向量可以判断方向。

举例:计算向量的叉积。

Bash
#计算向量积
def cross_product(u,v):
    ux,uy,uz=u
    vx,vy,vz=v
    return (uy*vz-uz*vy,uz*vx-ux*vz,ux*vy-uy*vx)
#(0, 0, 3)
print(cross_product((1,1,0),(-2,1,0)))

解决问题

1.如何理解点积的几何意义?

设向量,向量,终点分别为:,原点为O,夹角为

在△OAB中,由余弦定理得:

利用距离公式对这个等式稍作处理:

去括号、合并:

2.叉积和行列式有什么关系?

向量和向量的叉积,形式上使用行列式可以表示为:

三维空间中,3 * 3矩阵的行列式是:三个向量所形成的平行六面体的有向体积(绝对值是体积,但需要根据方向判定其正负号)。这并非真正的叉积,但很接近。

假设我们把第一个向量看作变量,输入向量,通过矩阵的行列式可以计算出一个数,这个数就代表我们的输入向量与所组成的平行六面体的有向体积。

上面的函数是线性的,所以我们可以将上面的行列式过程表示成一个变换过程:

当线性变换是从多维到一维时,线性变换过程又可以表示为点积形式:

可以求解出向量的坐标:

所以,问题其实变换为了,找到一个向量,使得和某个向量求点积的结果,等于对应的三维方阵行列式的值(即和向量所组成的平行六面体的有向体积)。

左边是一个点积,相当于把上投影,然后投影长度和的长度相乘。

右边平行六面体的体积,可以拆解为:底面积 * 高。底面积可以认为是所组成的平行四边形的面积,高的话是在垂直于所张成的平面的方向上的分量的长度。

点积 = 的长度*上投影的长度

体积 = 所组成的平行四边形的面积 * 在垂直于所张成的平面的方向上的分量的长度

根据二者相等,可以认为的长度是所组成的平行四边形的面积,的方向垂直于所张成的平面。

这样我们的就找到了,而就是我们要找的叉积的结果。

相关文章

学会这个Python编程范式,让你的代码质量提升10倍!

函数式编程作为一种重要的编程范式,强调使用函数来解决问题,避免改变状态和可变数据。在Python这门多范式编程语言中,函数式编程的概念和技术正在被越来越多的开发者所接受和应用。不可变性作为函数式编程的...

Python 基础:如何编写阶乘程序

什么是阶乘,你为什么应该关心?如果你是 Python 新手,你可能已经听说过“阶乘”这个术语。但它是怎么回事,为什么它很重要呢?一个数的阶乘(表示为n!)就是从 1 到n所有正整数的乘积。例如:5!...

用 python 的柏林噪声库(noise)实现随机行走

柏林噪声太神奇了,最近在看一本 processing 的书,里面讲到随机行走,就想着能不能在 pygame 里实现,查了一通,发现案例很少,有个 noise 库,直接 pip install 还报错,...

OpenAI久违发了篇「正经」论文:线性布局实现高效张量计算

机器之心报道编辑:PandaOpenAI 发论文的频率是越来越低了。如果你看到了一份来自 OpenAI 的新 PDF 文件,那多半也是新模型的系统卡或相关增补文件或基准测试,很少有新的研究论文。至于原...

零基础Python完全自学教程14:Python中的序列知识详解

欢迎你来到站长学堂,学习站长在线出品的在线课程《零基础Python完全自学教程》今天给大家分享的是第14课《Python中的序列知识详解》。本节课主要内容有:序列索引、序列切片、序列相加、序列相乘、序...