(四)悟说几个特殊矩阵及矩阵函数

news2024/11/14 10:32:50

  上一期介绍了矩阵的出现源于解线性方程组。但是,矩阵出现之后,就犹如打开了潘多拉的盒子,会产生许多魔法。

1 旋转矩阵

我们知道用矩阵左乘某个向量,相当于对该向量做线性变换。那么是否有一种矩阵,能让向量旋转?例如,让二维平面上的向量 a ⃗ = [ 1 1 ] \vec{a}= \begin{bmatrix} 1 \\ 1 \end{bmatrix} a =[11]逆时针旋转 3 0 ∘ 30^ \circ 30
我们从基的角度来思考这个问题,如果我们能找到一个基,这个基与自然基相比,逆时针旋转了 3 0 ∘ 30^\circ 30,那么用这个基去左乘向量 a ⃗ \vec{a} a ,是不是就把 a ⃗ \vec{a} a 逆时针旋转了 3 0 ∘ 30^\circ 30,得到向量 b ⃗ \vec{b} b ,如下图所示。

在这里插入图片描述

图-1

图-1中,向量 c 1 ⃗ \vec{c_1} c1 c 2 ⃗ \vec{c_2} c2 是自然基 e 1 ⃗ \vec{e_1} e1 e 2 ⃗ \vec{e_2} e2 逆时针旋转 3 0 ∘ 30^\circ 30后得到的新基。那么,现在有个问题,怎么求使自然基旋转 θ \theta θ度后的新基 c 1 ⃗ \vec{c_1} c1 c 2 ⃗ \vec{c_2} c2
自然基 e 1 ⃗ \vec{e_1} e1 e 2 ⃗ \vec{e_2} e2 旋转 θ \theta θ度得到新基 c 1 ⃗ \vec{c_1} c1 c 2 ⃗ \vec{c_2} c2 ,也就是 e 1 ⃗ \vec{e_1} e1 c 1 ⃗ \vec{c_1} c1 夹角为 θ \theta θ e 2 ⃗ \vec{e_2} e2 c 2 ⃗ \vec{c_2} c2 夹角为 θ \theta θ。所以,我们可以用向量余弦相似度来求。
先假设 c 1 ⃗ = ( x 1 , x 2 ) T \vec{c_1}= (x_1, x_2)^T c1 =(x1,x2)T c 2 ⃗ = ( y 1 , y 2 ) T \vec{c_2} =(y_1, y_2)^T c2 =(y1,y2)T,由余弦相似度公式可得
{ e 1 ⃗ ⋅ c 1 ⃗ ∥ e 1 ⃗ ∥ ∥ c 1 ⃗ ∥ = x 1 x 1 2 + x 2 2 = c o s θ e 2 ⃗ ⋅ c 2 ⃗ ∥ e 2 ⃗ ∥ ∥ c 2 ⃗ ∥ = y 2 y 1 2 + y 2 2 = c o s θ (1) \begin{cases} \frac{\vec{e_1} \cdot \vec{c_1} }{\parallel \vec{e_1} \parallel \parallel \vec{c_1} \parallel} = \frac{x_1} {\sqrt{x_1^2 + x_2^2} }=cos\theta \\ \\ \frac{\vec{e_2} \cdot \vec{c_2} }{\parallel \vec{e_2} \parallel \parallel \vec{c_2} \parallel} = \frac{y_2} {\sqrt{y_1^2+y_2^2}} = cos\theta \end{cases} \tag{1} e1 ∥∥c1 e1 c1 =x12+x22 x1=cosθe2 ∥∥c2 e2 c2 =y12+y22 y2=cosθ(1)

观察式(1),要使等式成立,是不是只要令 x 1 2 + x 2 2 = 1 , x 1 = cos ⁡ θ , x 2 = sin ⁡ θ \sqrt{x_1^2+x_2^2}=1, x_1=\cos \theta, x_2=\sin \theta x12+x22 =1,x1=cosθ,x2=sinθ,就可以满足第一个等式;再令 y 1 2 + y 2 2 = 1 , 则 y 2 = cos ⁡ θ , y 1 = − sin ⁡ θ \sqrt{y_1^2+y_2^2}=1, 则y_2=\cos \theta, y_1=-\sin \theta y12+y22 =1,y2=cosθ,y1=sinθ,就可以满足第二个等式。此时 c 1 ⃗ = [ x 1 x 2 ] \vec{c_1}=\begin{bmatrix} x_1 \\ x_2 \end{bmatrix} c1 =[x1x2] c 2 ⃗ = [ y 1 y 2 ] \vec{c_2}=\begin{bmatrix} y_1 \\ y_2 \end{bmatrix} c2 =[y1y2]正好正交(两向量垂直)。

于是,我们得到
( c 1 ⃗ c 2 ⃗ ) = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] (2) \begin{pmatrix} \vec{c_1} & \vec{c_2} \end{pmatrix}=\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \tag{2} (c1 c2 )=[cosθsinθsinθcosθ](2)

除了零向量,其它向量只要用式(2)这个矩阵左乘,就可以将向量逆时针旋转 θ \theta θ度,是不是很神奇。所以,我们把式(2)这个神奇的矩阵叫作旋转矩阵。
如果是按顺时针旋转,则应左乘下面这个矩阵
( c 1 ⃗ c 2 ⃗ ) = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] (3) \begin{pmatrix} \vec{c_1} & \vec{c_2} \end{pmatrix}=\begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix} \tag{3} (c1 c2 )=[cosθsinθsinθcosθ](3)

不知道你们有没用过矢量作图软件,软件有个功能是绕着线段某个端点旋转,这条线段的两个端点都不在原点。这种情况要怎么计算旋转后的坐标。如下图所示

在这里插入图片描述

图-2

即,令线段AB绕着A点逆时针旋转 θ \theta θ度至C点,求C点的坐标。
我没有开发过这类软件,如果说的不对或者还有更好的方法,欢迎朋友们在评论区留言。我是这样想的,首先,用终点坐标B减去起点坐标A,得到有向线段 A B ⃗ \vec{AB} AB 的向量表示 ( 1 , 1 ) T (1, 1)^T (1,1)T;然后,用式(2)中的旋转矩阵左乘向量,如式(4)所示

[ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ 1 1 ] = [ cos ⁡ θ − sin ⁡ θ cos ⁡ θ + sin ⁡ θ ] (4) \begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix} \begin{bmatrix} 1 \\ 1 \end{bmatrix}= \begin{bmatrix} \cos\theta - \sin\theta \\ \cos\theta + \sin\theta \end{bmatrix} \tag{4} [cosθsinθsinθcosθ][11]=[cosθsinθcosθ+sinθ](4)

最后,将式(4)右侧的向量加上A点坐标,即
[ cos ⁡ θ − sin ⁡ θ + 1 cos ⁡ θ + sin ⁡ θ + 1 ] (5) \begin{bmatrix} \cos\theta - \sin\theta + 1 \\ \cos\theta + \sin\theta + 1 \end{bmatrix} \tag{5} [cosθsinθ+1cosθ+sinθ+1](5)

式(5)中的向量就是C点坐标。

2 伸缩矩阵

假设有一条有向线段 A B ⃗ \vec{AB} AB 沿着B点方向延长了 A B ⃗ \vec{AB} AB 一倍的长度至点C,如下图所示,求C点坐标。
在这里插入图片描述

图-3

与上述方法一样,我们先将终点B的坐标减去起点A的坐标,得到有向线段 A B ⃗ \vec{AB} AB 的向量表示。然后,用这个矩阵 [ 2 0 0 1 ] \begin{bmatrix} 2 & 0 \\ 0 & 1 \end{bmatrix} [2001]左乘向量,即
[ 2 0 0 1 ] [ 1 0 ] = [ 2 0 ] (5) \begin{bmatrix} 2 & 0 \\ 0 & 1 \end{bmatrix} \begin{bmatrix} 1 \\0 \end{bmatrix}= \begin{bmatrix} 2 \\ 0 \end{bmatrix} \tag{5} [2001][10]=[20](5)

最后,将式(5)右侧的向量加上A点坐标,得到C点坐标 ( 3 , 1 ) T (3, 1)^T (3,1)T。左乘的这个矩阵给它一个名称,叫作伸缩矩阵。
这里我们也可以不用伸缩矩阵。因为是改变向量的长度,方向不变,所以还有一种更简单的方法就是直接用2乘以向量 [ 1 , 0 ] T [1, 0]^T [1,0]T,即

2 ⋅ [ 1 0 ] = [ 2 0 ] 2 \cdot \begin{bmatrix} 1 \\ 0 \end{bmatrix}= \begin{bmatrix} 2 \\ 0 \end{bmatrix} 2[10]=[20]

3 镜像矩阵

假设,如下图所示,有一个平行四边形ABCD要沿着直线 y = x y=x y=x翻转,翻转后的平行四边形为$A^\prime D^\prime C^\prime B^\prime $。
在这里插入图片描述

图-4

假设上图中点A、B、C、D的坐标分别为 ( a 1 , a 2 ) , ( b 1 , b 2 ) , ( c 1 , c 2 ) , ( d 1 , d 2 ) (a_1, a_2), (b_1, b_2), (c_1, c_2), (d_1, d_2) (a1,a2),(b1,b2),(c1,c2),(d1,d2),现在要求点 A ′ A^\prime A B ′ B^\prime B C ′ C^\prime C D ′ D^\prime D的坐标。
因为两个平行四边形的四个点关于 y = x y=x y=x对称,所以,各点的 x , y x,y x,y坐标对调一下就是镜像点的坐标。因此,可用矩阵
[ 0 1 1 0 ] \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} [0110]左乘点A、B、C、D的坐标,得到点 A ′ A^\prime A B ′ B^\prime B C ′ C^\prime C D ′ D^\prime D坐标。

[ 0 1 1 0 ] [ a 1 b 1 c 1 d 1 a 2 b 2 c 2 d 2 ] = [ a 2 b 2 c 2 d 2 a 1 b 1 c 1 d 1 ] (6) \begin{bmatrix} 0 & 1 \\ 1 & 0 \\ \end{bmatrix} \begin{bmatrix} a_1 & b_1 & c_1 & d_1 \\ a_2 & b_2 & c_2 & d_2 \end{bmatrix}= \begin{bmatrix} a_2 & b_2 & c_2 & d_2 \\ a_1 & b_1 & c_1 & d_1 \end{bmatrix} \tag{6} [0110][a1a2b1b2c1c2d1d2]=[a2a1b2b1c2c1d2d1](6)

上式中,矩阵 [ 0 1 1 0 ] \begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix} [0110]能使点A、B、C、D做关于直线 y = x y=x y=x的镜像变换,所以可称它为镜像矩阵。

4 矩阵函数

最后说说关于矩阵函数这个概念。我们通常用 A x = b \bold{Ax}=\bold{b} Ax=b表示线性方程组,如果把等号右侧的 b \bold{b} b替换为 y \bold{y} y,即 y = A x \bold{y}=\bold{Ax} y=Ax,它就是矩阵函数。式中的 x \bold{x} x y \bold{y} y代表一组自变量和一组因变量,自变量与因变量之间的关系蕴含在 A \bold{A} A里边。下面,我们一起看看矩阵 A \bold{A} A、自变量 x \bold{x} x、因变量 y \bold{y} y之间具体是什么关系。

A = [ a 11 a 12 a 21 a 22 ] , x = [ x 1 x 2 ] , y = [ y 1 y 2 ] \bold{A}=\begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix},\bold{x}=\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}, \bold{y}=\begin{bmatrix} y_1 \\ y_2 \end{bmatrix} A=[a11a21a12a22],x=[x1x2],y=[y1y2]

[ y 1 y 2 ] = [ a 11 a 12 a 21 a 22 ] [ x 1 x 2 ] (7) \begin{bmatrix} y_1 \\ y_2 \end{bmatrix}= \begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} \tag{7} [y1y2]=[a11a21a12a22][x1x2](7)
即,
{ y 1 = a 11 x 1 + a 12 x 2 y 2 = a 21 x 1 + a 22 x 2 (8) \begin{equation} \left\{ \begin{array}{c} y_1=a_{11}x_1 + a_{12}x_2 \\ y_2=a_{21}x_1 + a_{22}x_2 \end{array} \right. \end{equation} \tag{8} {y1=a11x1+a12x2y2=a21x1+a22x2(8)

从式(8)可以看出,因变量 y 1 y_1 y1与自变量 x 1 , x 2 x_1, x_2 x1,x2都有关系,也就是 y 1 y_1 y1与所有的自变量都有关系。同样的, y 2 y_2 y2与所有的自变量都有关系。但是 y 1 y_1 y1只与矩阵 A \bold{A} A的第一行有关系, y 2 y_2 y2只与矩阵 A \bold{A} A的第二行有关系。

假设某椭圆 E \mathfrak{E} E的参数方程为 { x = 2 cos ⁡ α y = sin ⁡ α , 0 ⩽ α ⩽ 2 π \begin{cases} x=2\cos \alpha \\ y=\sin \alpha \end{cases}, \quad 0\leqslant \alpha \leqslant 2\pi {x=2cosαy=sinα,0α2π.
令式(7)中的 x 1 = 2 cos ⁡ α , x 2 = sin ⁡ α x_1=2\cos\alpha, \quad x_2=\sin \alpha x1=2cosα,x2=sinα,再令式(7)中的 [ a 11 a 12 a 21 a 22 ] \begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix} [a11a21a12a22]等于式(2)中的旋转矩阵,即

[ a 11 a 12 a 21 a 22 ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] \begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix}= \begin{bmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{bmatrix} [a11a21a12a22]=[cosθsinθsinθcosθ]

则有
[ y 1 y 2 ] = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] [ 2 cos ⁡ α sin ⁡ α ] , 0 ⩽ α ⩽ 2 π (9) \begin{bmatrix} y_1 \\ y_2 \end{bmatrix}= \begin{bmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{bmatrix} \begin{bmatrix} 2\cos \alpha \\ \sin \alpha \end{bmatrix}, \qquad 0 \leqslant \alpha \leqslant 2\pi \tag{9} [y1y2]=[cosθsinθsinθcosθ][2cosαsinα],0α2π(9)
那么,式(9)所示的矩阵函数表示的是椭圆 E \mathfrak{E} E逆时针旋转 θ \theta θ度后的椭圆。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端项目代理到本地调试

我们在项目开发中,有时mock数据不能满足我们的需求,可以考虑把线上地址运行在本地代码上进行开发调试,也就是所谓的代理 这里推荐使用的工具是 whistle SwitchyOmega 1. 首先在chrome浏览器中安装插件SwitchyOmega 下载地址 CrxDL - 下载…

Git - 初识版本库

版本库也叫仓库,英文名 repository。 ‍ 创建版本库 之前我们说了版本库的概念: 存储版本的地方(存放各个版本之间差异的地方),通常称为版本库。通常版本库是以文件(夹)的形式存放在磁盘上&a…

【数据结构初阶】排序算法(上)插入排序与选择排序

文章目录 1.排序概念及运用1. 1 概念1. 2 运用1.3 常见排序算法 2. 插入排序2. 1 直接插入排序2. 2 希尔排序2. 2. 1 希尔排序的时间复杂度 3. 选择排序3. 1 直接选择排序3. 2 堆排序3. 3 Top-K问题 1.排序概念及运用 1. 1 概念 排序:所谓排序,就是使一…

小米2025届软件开发工程师(C/C++/Java)(编程题AK)

选择题好像也是25来个 编程题 T1 题目描述 小明喜欢解决各种数学难题。一天,他遇到了一道有趣的题目:他需要帮助他的朋友们完成一个排序任务。小明得到两个长度为 n 的数组a[]和b[]。他可以在两个数组对应位置进行交换,即选定一个位置 i &#xff0c…

PCL 求八叉树的体素中心

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 八叉树构建 2.1.2 获取体素中心 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长期更新&#xf…

注意力机制篇 | YOLOv8改进之在C2f模块引入EffectiveSE注意力模块 | 基于SE注意力

前言:Hello大家好,我是小哥谈。EffectiveSE(Effective Squeeze-Excitation) 是一种改进的通道注意力模块,其目的是在保持模型性能的同时减少计算复杂性和信息丢失。它基于原始的 Squeeze-Excitation (SE) 模块,但通过一些关键的改进来提高效率。🌈 目录 🚀1.基…

前端——flex布局

flex布局——弹性布局 传统布局: 浮动 定位 行内块等 1. flex布局 方法简单 不需要计算 能自动分配父级里面的子元素排版 对齐方式等等 >flex布局 可以适应不同屏幕布局 2. flex布局使用 - 给父级盒子 display: flex 开启弹性盒模型 - 子元素就会默…

栈的基本概念和及具体实现

今天给大家介绍一下栈的基本概念及实现!话不多说,立即开始! 1.栈的概念: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的…

计算机网络--TCP、UDP抓包分析实验

计算机网络实验 目录 实验目的 实验环境 实验原理 1、UDP协议 2、TCP协议 实验具体步骤 实验目的 1、掌握使用wireshark工具对UDP协议进行抓包分析的方法,掌握UDP协议的报文格式,掌握UDP协议校验和的计算方法,理解UDP协议的优缺点&am…

vant van-pull-refresh + van-list实现list列表支持搜索和下拉刷新

1 介绍 在使用 van-pull-refresh van-list实现list列表下拉刷新时遇到几个问题在这里进行一个总结。 2 出现的问题 问题一:当van-pull-refresh van-list组合使用时,下拉刷新会调用两个加载图标。 解答:去除van-pull-refresh加载图标&…

leetcode-189:轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4…

快讯:腾讯轻量服务器四周年,最低一折续费,还有免费升配

最近腾讯云轻量服务器四周年庆开始了,免费升级配置,续费服务器最低一折。 最低一折续费: 持有多久的轻量服务器决定续费几折,已经持有四年就是一折,三年1.5折以此类推。 免费升级配置: 2-4-5免费升级到…

String类常用的方法

源代码: 输出结果:

Linux 之 logrotate 【日志分割】

简介 logrotate 是一个用于管理日志文件的工具。它可以自动对日志文件进行轮转、压缩、删除等操作,以防止日志文件无限增长占用过多磁盘空间。logrotate 通常作为一个守护进程定期运行,也可以通过 cron 任务来调度执行 工作原理 按照配置文件中的规则…

【Mysql多数据源实现读写分离的几种方案】

文章目录 一.什么是MySQL 读写分离二.读写分离的几种实现方式(手动控制)1.基于Spring下的AbstractRoutingDataSource1.yml2.Controller3.Service实现4.Mapper层5.定义多数据源6.继承Spring的抽象路由数据源抽象类,重写相关逻辑7. 自定义注解WR,用于指定当…

客户端数JSON据库SQL操作功能实现代码-———未来之窗行业应用跨平台架构

一、前端json结构化查询优点 以下是前端本地化查询的一些优点: 1. 快速响应:无需通过网络请求从服务器获取数据,查询结果能够立即返回,提供了几乎零延迟的用户体验,使应用更加流畅和响应迅速。 2. 离线可用性&#x…

9.4 Linux_I/O_访问目录、文件属性

访问目录 1、打开关闭目录 打开目录函数声明如下: //1.直接打开指定路径的目录文件 DIR *opendir(const char *name); //2.先用open打开目录文件,再用该函数访问目录文件 DIR *fdopendir(int fd); 返回值:成功返回指向打开的目录文件的结…

ELK-05-skywalking监控SpringCloud服务日志

文章目录 前言一、引入依赖二、增加日志配置文件三、打印日志四、skywalking网页查询链路五、日志收集5.1 修改logback-spring.xml5.2 重启SpringCloud服务并请求test接口5.3 查看skywalking网页的Log 总结 前言 基于上一章节,现在使用skywalkin监控SpringCloud服务…

JWT令牌技术介绍及使用

一、JWT介绍 JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务…

D. Determine Winning Islands in Race (cf div2,dp、图论最短路)

D. Determine Winning Islands in Race 思路: bfs找到E到达每个点的最短时间t[i]。 如果E要超过B&#xff0c;那么一定要借助辅助桥&#xff0c;从而获胜。 假设有u->v的辅助桥&#xff0c;E能通过这个桥超过B的条件是: s>u 且 t[v] < v-s 即 s的取值要为[u1,v-t[v]-…