03 矩阵与线性变换

2023-11-05 10:45
文章标签 03 矩阵 线性变换

本文主要是介绍03 矩阵与线性变换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

矩阵与线性变换

  • 线性变换
  • 如何用数值描述线性变换
  • 特殊的线性变换
  • 反过来看
  • 总结

这是关于3Blue1Brown "线性代数的本质"的学习笔记。

线性变换

如果一个变换具有以下两个性质,我们就称它是线性的:

  • 一是直线在变换后仍然保持为直线
  • 二是原点必须保持固定

总的来说,线性变换是“保持网格线平行且等距分布”的变换

如何用数值描述线性变换

只需记录两个基向量 i ⃗ \vec{i} i j ⃗ \vec{j} j 变换后的位置。可以用 i ⃗ \vec{i} i j ⃗ \vec{j} j 变换后的位置,推断任意向量出变换后的位置。
在这里插入图片描述

图1 线性变换

在这里插入图片描述

图2 线性变换举例

如图2所示,假设 i ⃗ \vec{i} i j ⃗ \vec{j} j 变换后分别为 [ 1 , − 2 ] T [1, -2]^{T} [1,2]T [ 3 , 0 ] T [3, 0]^{T} [3,0]T,则任意向量 [ x , y ] T [x, y]^{T} [x,y]T的变换结果如图2所示。

即:一个二维线性变换仅由四个数字完全确定,变换后 i ⃗ \vec{i} i 的两个坐标和变换后 j ⃗ \vec{j} j 的两个坐标。把这两组坐标写入一个矩阵中,如图3所示。
在这里插入图片描述

图3 线性变换矩阵

这个矩阵的第一列就是变换后 i ⃗ \vec{i} i 的两个坐标,第二列就是变换后 j ⃗ \vec{j} j 的两个坐标。
在这里插入图片描述
在这里插入图片描述

图4 线性变换矩阵一般形式

更一般的情况,如图4所示。
把第一列 [ a , c ] T [a,c]^{T} [a,c]T看作是变换后的第一个基向量,把第二列 [ b , d ] T [b,d]^{T} [b,d]T看作是变换后的第二个基向量,则任意向量 [ x , y ] T [x, y]^{T} [x,y]T的变换过程和结果如图4所示。

矩阵的列就是变换后的基向量,矩阵向量乘法就可以看作它们的线性组合。

特殊的线性变换

坐标系 x y x y xy的基向量分别为 i ⃗ \vec{i} i (绿色箭头)、 j ⃗ \vec{j} j (红色箭头)。我们将这个坐标系 x y x y xy逆时针旋转90°,这样, i ⃗ \vec{i} i 落在了坐标 ( 0 , 1 ) (0,1) 01上, j ⃗ \vec{j} j 落在了坐标 ( − 1 , 0 ) (-1,0) 10上,如图5所示。
在这里插入图片描述

图5 整个空间逆时针旋转90°

这样,任意向量 [ x , y ] T [x, y]^{T} [x,y]T旋转90°之后的结果都可以利用这个矩阵计算出来。

还有一种特殊的线性变换是“剪切”。如图6所示,变换后 i ⃗ \vec{i} i 不变, j ⃗ \vec{j} j 落在了坐标 ( 1 , 1 ) (1,1) 11上。。

图6 剪切变换

反过来看

给定一个变换矩阵 [ 1 3 2 1 ] \begin{bmatrix} \ 1 & 3 \\ \ 2 & 1 \\ \end{bmatrix} [ 1 231]
这就相当于 i ⃗ \vec{i} i 变换后落在(1,2)上, j ⃗ \vec{j} j 变换后落在(3,1)上,空间其他部分随二者一起移动,以保持网格线平行且等距分布。如图7所示。
在这里插入图片描述

图7 根据给定矩阵旋转

如果变换后的 i ⃗ \vec{i} i j ⃗ \vec{j} j 是线性相关的,如图8所示,变换后的 i ⃗ \vec{i} i j ⃗ \vec{j} j 在一条直线上。
在这里插入图片描述

图8 线性相关变换
这个线性相关变换将整个二维空间压缩到它们所在的直线上,也就是,两个线性相关向量张成的空间是一维空间。

总结

线性变换是操纵空间的一种手段,它保持网格线平行且等距分布,并保持原点不动。

这种变换只需要几个数字就能描述清楚,这些数字就是变换后基向量的坐标,以这些坐标为列所构成的矩阵为我们提供了一种描述线性变换的语言,而矩阵向量乘法是计算线性变换作用于给定向量的一种途径,如图4所示。

这里重要的一点是,每当你看到一个矩阵时,你都可以把它解读为对空间的一种特定变换

这篇关于03 矩阵与线性变换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/349325

相关文章

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

Vue day-03

目录 Vue常用特性 一.响应更新 1. 1 v-for更新监测 1.2 v-for就地更新 1.3 什么是虚拟DOM 1.4 diff算法更新虚拟DOM 总结:key值的作用和注意点: 二.过滤器 2.1 vue过滤器-定义使用 2.2 vue过滤器-传参和多过滤器 三. 计算属性(computed) 3.1 计算属性-定义使用 3.2 计算属性-缓存 3.3 计算属

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x

【线性代数】正定矩阵,二次型函数

本文主要介绍正定矩阵,二次型函数,及其相关的解析证明过程和各个过程的可视化几何解释(深蓝色字体)。 非常喜欢清华大学张颢老师说过的一段话:如果你不能用可视化的方式看到事情的结果,那么你就很难对这个事情有认知,认知就是直觉,解析的东西可以让你理解,但未必能让你形成直觉,因为他太反直觉了。 正定矩阵 定义 给定一个大小为 n×n 的实对称矩阵 A ,若对于任意长度为 n 的非零向量 ,有 恒成

python科学计算:NumPy 线性代数与矩阵操作

1 NumPy 中的矩阵与数组 在 NumPy 中,矩阵实际上是一种特殊的二维数组,因此几乎所有数组的操作都可以应用到矩阵上。不过,矩阵运算与一般的数组运算存在一定的区别,尤其是在点积、乘法等操作中。 1.1 创建矩阵 矩阵可以通过 NumPy 的 array() 函数创建。矩阵的形状可以通过 shape 属性来访问。 import numpy as np# 创建一个 2x3 矩阵mat

【UVA】10003-Cutting Sticks(动态规划、矩阵链乘)

一道动态规划题,不过似乎可以用回溯水过去,回溯的话效率很烂的。 13988658 10003 Cutting Sticks Accepted C++ 1.882 2014-08-04 09:26:49 AC代码: #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include

算法练习题17——leetcode54螺旋矩阵

题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。  代码 import java.util.*;class Solution {public List<Integer> spiralOrder(int[][] matrix) {// 用于存储螺旋顺序遍历的结果List<Integer> result = new ArrayList