首页 > 其他分享 >【回归本源】1.2-向量点乘

【回归本源】1.2-向量点乘

时间:2023-03-09 17:12:10浏览次数:56  
标签:cos another 1.2 self 矩阵 vector 本源 向量

书接上文,麦子带大家简单看了下向量是什么以及向量的加减法,到目前为止所有的结论都是很直观的,但是讲到向量的乘法时我们遇到了两个问题:

两个向量相乘是个什么含义呢?

两个向量相乘,结果是个标量呢?还是个向量呢?如果是向量,方向是指向哪儿的呢?

从第二个问题我们能看出一些端倪,这并不是一个很简单的问题。但是如果仅仅是要使用向量之间的乘法,不去太过在意做法来源的话,就能很轻易地讲完。(关于做法来源,大家可以在学会矩阵以及理解矩阵与空间转换关系之后去看下3Blue1Brown线性代数系列第7、第8集)

对于3D空间而言,我们会有两种向量相乘的做法:

点乘

叉乘

其中点乘的做法对任意维度都适用,但叉乘仅适用与3D或7D的情况。如果你对7D的叉乘感兴趣,请自行阅读《Cross Products of Vectors in Higher Dimensional Euclidean Spaces》(麦子我没接触过)

今天我们先来讲讲点乘。

注:这篇里部分地方会用到矩阵,我们还没讨论过,我会在有矩阵的段落开头加上(*)做为标记,对矩阵不熟的朋友可以之后返回来看,但是不会也并不影响阅读。

点乘(Dot Product)

点乘的结果会是一个标量,同时可以看成一个向量在另一个向量方向上的投影长度与另一个向量长度相乘。听起来拗口啊,但是看到数学表达式应该就很清楚了。

v→⋅u→=|v→||u→|cos(θ)

其中

θ

是两个向量之间的夹角,因此

(|u→|cos(θ))

就是向量

u→

在向量

v→

方向上的投影长度,之后这个长度再与

|v→|

进行最平常的相乘。同理,也可以认为

(|v→|cos(θ))

v→

u→

方向上的投影长度。

<img src="https://pic3.zhimg.com/v2-21ad0a239747efe0926d6844d7b596c6_b.jpg" data-caption="" data-size="normal" data-rawwidth="1367" data-rawheight="1000" class="origin_image zh-lightbox-thumb" width="1367" data-original="https://pic3.zhimg.com/v2-21ad0a239747efe0926d6844d7b596c6_r.jpg"/>

 

如果

v→=(

vx

vy

vz

)

u→=(

ux

uy

uz

)

,那么我们还可以用如下方法进行点乘计算:

v→⋅u→=vxux+vyuy+vzuz=∑i∈(x,y,z)viui

值得一提的是,为什么这两种表达方式是向等的呢?这里给大家看个三角形应该可以简要说明下这个问题。

<img src="https://pic1.zhimg.com/v2-0c7b26c6c8823cef80a046fa4131b344_b.jpg" data-caption="" data-size="normal" data-rawwidth="1661" data-rawheight="1000" class="origin_image zh-lightbox-thumb" width="1661" data-original="https://pic1.zhimg.com/v2-0c7b26c6c8823cef80a046fa4131b344_r.jpg"/>

 

如图所示,这个三角形由三个向量包围而成,

v→

u→

以及

(v→−u→)

余弦定理(不记得这个定理了,可以看看文章最下面)告诉我们

|v→−u→|

2

=|v→|

2

+|u→|

2

2

|v→||u→|cos(θ)

相信你已经看到了点乘结果的那一部分了,接下来就是一些基本数学操作了。回顾下上一篇文章中我们提过

|v→|=(∑i∈(x,y,z)vi

2

)

1

2

爱XR的麦子:回归本源系列1.1-向量简介13 赞同 · 6 评论文章

 

由此我们就有了

∑i∈(x,y,z)(vi−ui)

2

=∑i∈(x,y,z)vi

2

+∑i∈(x,y,z)ui

2

2

|v→||u→|cos(θ)

 

⇒∑i∈(x,y,z)vi

2

2

viui+ui

2

=∑i∈(x,y,z)vi

2

+∑i∈(x,y,z)ui

2

2

|v→||u→|cos(θ)

 

⇒−

2

∑i∈(x,y,z)viui=−

2

|v→||u→|cos(θ)

最后就是我们想要的点乘公式了:

v→⋅u→=∑i∈(x,y,z)viui=|v→||u→|cos(θ)

希望你也能看出来,整个证明流程实际上并不只限于3D。

 

(*) 如上一讲提到过的,在计算机中常把向量之间的操作直接看成矩阵操作。熟悉矩阵的朋友应该一眼就看出来,这个点乘可以被看成

v→⋅u→≡vTu

这样的矩阵操作。(不熟悉的朋友也没事,快讲到了)

 

点乘也具有一些很重要但是不难想到的性质,可以自己去思考下为啥它们是对的

v→⋅u→=u→⋅v→

(av→)⋅u→=a(v→⋅u→)

v→⋅(u→+w→)=v→⋅u→+v→⋅w→

v→⋅v→=|v→|

2

|v→⋅u→|≤|v→||u→|

留意下第四点,它直接来源于一个向量自己在自己方向的投影自然还是它自己。同时也说明

cos(θ)

和点乘的大小也反应了两个向量有多“平行”。两个向量越“平行“,绝对值越大;反之,两个向量越“垂直”,绝对值越小

这也是为什么点乘在物理里也是无处不在,最直接的例子就是初中物理里强调过的

平行于物体移动方向的力做功:

dW=F→⋅dx→=(Fcos(θ))dx

<img src="https://pic3.zhimg.com/v2-141ba77da3f38685ff1ea32631c835a2_b.jpg" data-caption="" data-size="normal" data-rawwidth="1805" data-rawheight="1000" class="origin_image zh-lightbox-thumb" width="1805" data-original="https://pic3.zhimg.com/v2-141ba77da3f38685ff1ea32631c835a2_r.jpg"/>

 

虽然那个时候还没讲点乘,但是也能看出这个概念并不是很遥远。

 

关于点乘最后讲两个点。如果你就是想知道一个向量在另一个向量方向的投影向量,怎么办?相信你能很自然地告诉我,

v→

u→

方向上的投影就是

projuv→=(v→⋅u^)u^=v→⋅u→|u→|

2

u→

同时

v→

垂直于

u→

方向的向量就可以用

v→

projuv→

的差值来得到

perpuv→=v→−projuv→

没看出来的小伙伴最好自己画画图看看。

(*) 最后,关于投影向量可以用矩阵一步到位地求出来,有兴趣的小伙伴可以自己试一试

projuv→=

1

|u→|

2

[

ux

2

uxuy

uxuz

uxuy

uy

2

uyuz

uxuz

uyuz

uz

2

][

vx

vy

vz

]

 

继续补下Python那Class

class vector_3d(object):

    def __init__(self, x, y, z, ifTransposed=False):

        # 默认是竖向量

        super(vector_3d, self).__init__()

        self.x = x

        self.y = y

        self.z = z

        self.ifTransposed = ifTransposed

 

# ......

    

    def dot(self, another_vector):

        assert type(another_vector) is Vector_3d

        assert another_vector.ifTransposed == False

        return  self.x * another_vector.x + \

                self.y * another_vector.y + \

                self.z * another_vector.z

 

    def proj(self, project_to):

        assert type(project_to) is Vector_3d

        return self.dot(project_to)/abs(project_to) * project_to.unit()

 

    def perp(self, perpendicular_to):

        assert type(perpendicular_to) is Vector_3d

        return self - self.proj(perpendicular_to)

这次可以试下向量点乘的性质了。

好了,点乘的介绍就到这里了,明天将会继续更新叉乘,有兴趣的小伙伴可以点个收藏。

 

这里就是再补充下余弦定理,

c

2

=a

2

+b

2

2

abcos(θ)

嘛,这个证明还是很简单的了,任意一三角形,三边分别为

a

b

c

,角

θ

a

b

两边的夹角。如图做垂线:

<img src="https://pic2.zhimg.com/v2-59f43f4e533e9664f1f698f70b090c91_b.jpg" data-caption="" data-size="normal" data-rawwidth="1639" data-rawheight="1000" class="origin_image zh-lightbox-thumb" width="1639" data-original="https://pic2.zhimg.com/v2-59f43f4e533e9664f1f698f70b090c91_r.jpg"/>

 

右侧的小三角形做勾股定理

c

2

=(a

 

sin(θ))

2

+(b−a

 

cos(θ))

2

 

=a

2

sin

2

(θ)+b

2

2

a

 

b

 

cos(θ)+a

2

cos

2

(θ)

 

=a

2

(sin

2

(θ)+cos

2

(θ))+b

2

2

a

 

b

 

cos(θ)

于是就有了我们的余弦定理

 

 

 

from:  https://zhuanlan.zhihu.com/p/342622957

 

标签:cos,another,1.2,self,矩阵,vector,本源,向量
From: https://www.cnblogs.com/im18620660608/p/17199198.html

相关文章

  • Word2vec之情感语义分析实战(part3)--利用分布式词向量完成监督学习任务
    引言这篇博客将基于前面一篇博客Part2做进一步的探索与实战。demo代码与数据:传送门单词的数值化表示前面我们训练了单词的语义理解模型。如果我们深入研究就会发......
  • 灰色预测+支持向量机预测财政收入
    本案例按照1994年我国财政体制改革后至2013年的数据进行分析并预测未来两年财政收入变化情况。主要按照财政收入分析预测模型流程进行原始数据为1995年至2015年企业的13个......
  • K8S CKA 1.26 模拟环境 实验环境(一键导入) Kubernetest v1.26题库
    K8SCKA1.26考试环境,按照CKA最新原题搭建的,模拟环境已集成考题,可直接模拟练习,做题实操。资料包含:2023年3月最新题库+答案解析+考试笔记+模拟环境+技术支持+在线辅导答疑......
  • delphi 11.2 配置Linux 开发环境
    转自https://www.cnblogs.com/xalion/p/16858230.htmldelphi11.2配置Linux开发环境1.rockylinux9 命令行: mvlibpython3.solibpython3.so_  ln-s/......
  • python 安装最新版3.11.2 for centos
    目录Python安装前的准备参考官方文档openssl下载地址openssl安装python的安装遇到的一些坑Python安装前的准备sudoyumupdate&&sudoyuminstall-yopenssl-deve......
  • 数据结构1.2
    一、简述本节介绍一下单调队列及其一些应用。二、单调队列单调队列就是队列元素满足单调性的一类数据结构,主要用于解决滑动窗口类的问题,即维护一个区间的最值,在应用时时......
  • k8s1.26.1集群搭建
    安装containerd和kubeadm,kubelet,kubectl/etc/yum.repo.d/docker-ce.repo内容如下:[docker-ce-stable]name=DockerCEStable-$basearchbaseurl=https://download.do......
  • 11.1/2 鼠标显示问题(harib08a)11.2 实现画面外的支持(harib08b)
    11.1鼠标显示问题(harib08a)存在问题:​ 在harib07d中鼠标移动到最右侧后就不能再往右移了解决办法:将if(mx>binfo->scrnx-16){mx=binfo->scrnx-16;}if(......
  • K8S 1.20 弃用 Docker 评估之 Docker 和 OCI 镜像格式的差别
    背景2020年12月初,Kubernetes在其最新的Changelog中宣布,自Kubernetes1.20之后将弃用Docker作为容器运行时。弃用Docker带来的,可能是一系列的改变,包括不限于:......
  • Eigen矩阵/向量操作
    应知应会Eigen中矩阵和向量相加,没有Python中的广播机制Eigen中的索引时是小括号()而不是方括号[],不同于python中的numpy参考资料官网文档:https://eigen.tuxfamily.o......