7.1 矩阵-数学定义

在线性代数中, 矩阵就是以形式组织的矩形数字块。矩阵是向量的数组。

7.1.1 矩阵的维度和记法

矩阵的维度被定义为它包含了多少行和多少列。一个\(r \times c\)矩阵有r行, c列。下面是一个\(4 \times 3\)矩阵的例子:
\(\begin{bmatrix} 4 & 0 & 12 \\ -5 & 4 & 3 \\ 12 & -4/3 & -1 \\ 1/2 & 18 & 0 \\ \end{bmatrix}\)

黑色大写字母表示矩阵,如:MAR。需要引用矩阵的分量时,采用下标法,常用对应的斜体小写字母。如下\(3 \times 3\)矩阵所示:
\(\begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{bmatrix}\)

7.1.2 方阵

行数和列数相同的矩阵称为方阵
方阵的对角线元素就是方阵中行号和列号相同的元素。

对角矩阵

所有非对角线元素都是0,如:
\(\begin{bmatrix} 3 & 0 & 0 \\ 0 & -5 & 0 \\ 0 & 0 & 2 \\ \end{bmatrix}\)

单位矩阵

\(n\)维单位矩阵记作\(I_n\),是\(n \times n\)矩阵,对角线元素都为1,其他元素为0。如,\(3 \times 3\)单位矩阵:
\(I_3 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}\)

7.1.3 向量做为矩阵使用

矩阵的行数和列数可以是任意正整数,当然也包括1。一个\(n\)维向量能被当作\(1 \times n\)矩阵或\(n \times 1\)矩阵。\(1 \times n\)矩阵称为行向量,\(n \times 1\)矩阵称为列向量。如:
\(\begin{bmatrix}1 & 2 & 3\end{bmatrix} \begin{bmatrix} 1\\ 2\\ 3\end{bmatrix}\)

7.1.4 转置

一个\(r \times c\)矩阵\(M\)。\(M\)的转置记作\(M^T\),是一个\(c \times r\)矩阵(\(M_{ij}^T = M_{ji}\)),即沿着矩阵的对角线翻折。
\(\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \\ \end{bmatrix}^T = \begin{bmatrix} 1 & 4 & 7 & 10\\ 2 & 5 & 8 & 11\\ 3 & 6 & 9 & 12 \\ \end{bmatrix}\)

行列向量之间的转换

\(\begin{bmatrix}x & y & z\end{bmatrix}^T = \begin{bmatrix} x\\ y\\ z\end{bmatrix}\) \(\begin{bmatrix}x & y & z\end{bmatrix} = \begin{bmatrix} x\\ y\\ z\end{bmatrix}^T\)

基本原理

  • 对任意矩阵\(M\), \((M^T)^T = M\)
  • 对于任意对角矩阵\(D\), 都有\(D^T = D\),包括单位矩阵\(I\)也是如此。

7.1.5 标量和矩阵的乘法

矩阵\(M\)和标量\(k\)相乘,结果是一个和\(M\)维数相同的矩阵。记法如下:

\(kM = k \begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \\ \end{bmatrix} = \begin{bmatrix} km_{11} & km_{12} & km_{13} \\ km_{21} & km_{22} & km_{23} \\ km_{31} & km_{32} & km_{33} \\ \end{bmatrix}\)

7.1.6 矩阵乘法

\(C = AB\)
\(c_{ij} = \displaystyle\sum_{k=1}^na_{ik}b_{kj}\)

如:
\(AB = \begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \\ \end{bmatrix} \begin{bmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \\ \end{bmatrix} = \begin{bmatrix} a_{11}b_{11} + a_{12}b_{21} & a_{11}b_{12} + a_{12}b_{22} \\ a_{21}b_{11} + a_{22}b_{21} & a_{21}b_{12} + a_{22}b_{22} \\ \end{bmatrix}\)

乘法规则

  • \(MI = IM = M\)
  • 不满足交换律:\(AB \ne BA\)
  • 结合律:\((AB)C = A(BC)\)
  • 与标量的结合律:\((kA)B = k(AB) = A(kB)\)
  • 转置: \((AB)^T = B^TA^T\)

7.2 矩阵 - 几何解释

一般来说,方阵能描述任意线性变换

\(\begin{bmatrix}1 \\ -3 \\ 4 \\ \end{bmatrix} = \begin{bmatrix}1 \\ 0 \\ 0 \\ \end{bmatrix} + \begin{bmatrix}0 \\ -3 \\ 0 \\ \end{bmatrix} + \begin{bmatrix}0 \\ 0 \\ 4 \\ \end{bmatrix}\)

一般来说:任意向量\(v\)都能写为“扩展”形式:
\(v=\begin{bmatrix}x \\ y \\ z \\ \end{bmatrix} = \begin{bmatrix}x \\ 0 \\ 0 \\ \end{bmatrix} + \begin{bmatrix}0 \\ y \\ 0 \\ \end{bmatrix} + \begin{bmatrix}0 \\ 0 \\ z \\ \end{bmatrix}\)

\(v=\begin{bmatrix}x \\ y \\ z \\ \end{bmatrix} = x\begin{bmatrix}1 \\ 0 \\ 0 \\ \end{bmatrix} + y\begin{bmatrix}0 \\ 1 \\ 0 \\ \end{bmatrix} + z\begin{bmatrix}0 \\ 0 \\ 1 \\ \end{bmatrix}\)
注意,右边的单位向量就是\(x,y,z\)轴,用向量重写上面的等式,分别用\(p, g, r\)定义为指向\(+x, +y, +z\)方向的单位向量
\(v = xp + yp + zr\)

将向量表示为基向量的线性组和

用三个向量\(p, q, r\)来构建一个\(3 \times 3\)的矩阵\(M\),可以得到如下公式

\(M=\begin{bmatrix}p \\ q \\ r \\ \end{bmatrix} = \begin{bmatrix}p_x & p_y & p_z \\ q_x & q_y & q_z \\ r_x & r_y & r_z \\ \end{bmatrix}\)

用一个向量乘以该矩阵,得到:
\(\begin{bmatrix}x & y & z\end{bmatrix}\begin{bmatrix}p_x & p_y & p_z \\ q_x & q_y & q_z \\ r_x & r_y & r_z \\ \end{bmatrix} = \begin{bmatrix}xp_x + yq_x + zr_x & xp_y + yq_y + zr_y & xp_z + yq_z + zr_z\end{bmatrix} = xp + yq + zr\)

如果把矩阵的行解释为坐标系的基向量,那么乘以该向量就相当于执行了一次坐标转换。若有\(aM = b\),我们就可以说,\(M\)将\(a\)转换到\(b\)。

3d数学 7 矩阵的更多相关文章

  1. 3D数学 ---- 矩阵和线性变换[转载]

    http://blog.sina.com.cn/s/blog_536e0eaa0100jn7c.html 一般来说,方阵能描述任意线性变换.线性变换保留了直线和平行线,但原点没有移动.线性变换保留直线 ...

  2. 3D数学读书笔记——矩阵基础

     本系列文章由birdlove1987编写,转载请注明出处.    文章链接:http://blog.csdn.net/zhurui_idea/article/details/24975031   矩 ...

  3. 3D数学读书笔记——矩阵基础番外篇之线性变换

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...

  4. 3D数学的实际应用

    以前自己在学习三维程序开发时并没有在意3D数学在程序中的重要作用,但在实际工作中逐渐发现:自己忽视了3D数学的作用,我们实际开发工作总要求模型准确的变换,而不是强调渲染有多炫,那是游戏,如果是仿真程序 ...

  5. Unity3D for VR 学习(6): 再次温故知新-3D数学

    一年前,系统学习过3D数学,并记录了一篇博客<C#程序员整理的Unity 3D笔记(十):Unity3D的位移.旋转的3D数学模型>. 一年后,再次温习之. 坐标系:Unity3D使用左手 ...

  6. OpenGL编程(八)3D数学与坐标变换

    笛卡尔坐标 一维坐标系 以一个点为原点,选定一个方向为正方向(相反的方向为反方向),以一定的距离为标尺建立一维坐标系.一维坐标系一般应用于描述在一维空间中的距离. 举个例子:一维坐标系好比一条拉直的电 ...

  7. 3d数学总结帖

    3d数学总结帖,以下是对3d学习过程中数学知识的简单总结 角度值和弧度制的互转 Deg2Rad 角度A1转弧度A2 => A2=A1*PI/180 Rad2Deg 弧度A2转换角度A1 => ...

  8. Unity3D之空间转换学习笔记(三):3D数学

    3D数学基础 向量 向量可以看做具有方向和大小的一条线段. 比如:我们如果用点A减去点B,则可以得到一个向量,该向量的方向为点B面向点A的方向,而大小为两点的距离.这个方法在游戏开发中经常用到,比如我 ...

  9. 3D数学学习笔记——笛卡尔坐标系

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24601215 1.3D数学 ...

随机推荐

  1. cstring 转 string

    都通过基本类型来转换即可:CString可以转换为基本类型LPCTSTR,LPCTSTR根据项目编码可以是const char*或者const wchar_t*:string可以用c_str()转换为 ...

  2. 在centos安装 sql server

    主要参考官方文档https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-red-hat

  3. SQL一对多取子表最新记录的所有字段(ROW_NUMBER()OVER()函数的应用)

    ROW_NUMBER()OVER() 参数1:分组字段 PARTITION BY   ..,..,....  可选 参数2:排序字段 ORDER BY .. DESC  必须 实例: 根据Confir ...

  4. Xcode 插件因为UUID原因不能使用解决办法

    Xcode 经常因为一些原因不能使用,需要重新在  ~/Library/Application Support/Developer/Shared/Xcode/Plug-ins目录下对每一个插件包下的p ...

  5. SprinMVC接收参数乱码解决篇

    1.Spring 默认的字符编码格式为iso-8859-1,为此Spring专门提供了字符过滤器org.springframework.web.filter.CharacterEncodingFilt ...

  6. springcloud(七): 使用Feign调用Eureka Server客户端服务

    当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻. ...

  7. centos7安装opennms-17.0.0

    https://blog.csdn.net/jiangzhexi/article/details/52036858 http://www.jb51.net/os/RedHat/281470.html

  8. Hibernate数据缓存攻略

    目录 第一章 缓存策略概述 第二章 hibernate不使用缓存的问题 第三章 一级缓存介绍 第四章 二级缓存 第五章 一二级缓存对比及总结 源代码: https://github.com/weili ...

  9. Android: Could not find com.android.support:support-v4:21.0.0

    安装Android Support Repository即可解决这个问题.

  10. POJ 3311

    设dp状态为dp[i][j]为当前访问过的结点状态为i且当前停留点为j时的最短路径.用二进制存存储访问过的状态,访问过为1,否则为0. #include <iostream> #inclu ...