什么是矩阵?

  前一阵找工作的时候,经常有人问我数学怎么样。有些问的比较笼统,有些问的比较具体。比如有个人问我,你了解矩阵吗?我说不了解。在看《3D数学基础》之前,矩阵给我的感觉就跟黑客帝国差不多。为此我特意上easyicon下了个matrix的图标当头像,感觉就是酷。那到底矩阵是什么?

  如果现在有人问我,你了解矩阵吗?我会说,矩阵是坐标系变换的有力工具。通常使用三乘三矩阵来描述线性变换,使用四乘四矩阵来描述仿射变换。矩阵的行向量实际上是经过转换的坐标系单位向量。我们可以通过矩阵定义从一个坐标系到另一个坐标系的变换。使用A坐标系的单位向量乘以该变换矩阵,得到的就是变换后的坐标系的单位向量。

  通过上述定义,可以看出来和矩阵做乘法的是向量。其实向量也可以看做是一种矩阵,行向量是一乘三矩阵,列向量是三乘一矩阵。使用一个向量和三乘三矩阵做乘法,相当于在三个方向上对该向量进行变换。先从简单的算起。假设矩阵由三个基向量p,q,r(基向量就是+x,+y,+z方向上的单位向量)组成,那么任意向量[x,y,z]乘以该矩阵[p,q,r],等于xp+yq+zr。再使用基向量乘以任意矩阵,发现[1,0,0]乘以任意矩阵M,得到的是M的第一行。换句话说,只有矩阵的第一行能影响到X轴基向量,因此可以把矩阵的每一行解释为对不同轴的变换。我们可以通过计算基向量的变换来计算不同变换的矩阵。通过想象变换后的基向量是理解矩阵的一个好办法。

  三乘三矩阵能够用来表达线性变换。什么是线性变换?不包括平移的变换是线性变换,包括平移的是仿射变换。线性变换包括旋转、缩放、镜像、切变、投影等,其中镜像、投影相当于在某个方向上进行值为-1和值为0的缩放,而切变则指的是取出某一个坐标,对这个坐标的值乘以某个因子,再分别他加到其他坐标上去。对于一个三维坐标,可以乘以两个因子分别加到另两个坐标,对二维坐标自然是乘以一个因子加到另一个坐标上去。那么对于一个四乘四矩阵,可以用第四维坐标乘以三个不同的因子分别加到x,y,z坐标上,这样就能表示仿射变换了。其实这种应用还是在三维的范围内,不是四维坐标的仿射。

  矩阵还包括很多知识,比如正交矩阵,行列式,矩阵的逆,透视矩阵等等,行列式是为了求逆,而求行列式又要用到代数余子式。正交矩阵包括旋转和镜像,透视矩阵的原理相当于小孔成像,可以通过四乘四矩阵的第四列来实现。四乘四矩阵的第四行向量则是用来进行仿射变换,各有用途,其实都是为了三维坐标系变换服务,只是利用了一些数学技巧而已。此外,矩阵还可以用来描述角位移,也就是旋转矩阵,由于旋转是正交的,因此矩阵的逆就是矩阵的转置,很容易就求出反向变换来,这是他的优势。

  矩阵的具体实现涉及到很多公式,最好自己照着公式推导一下,才能更好的理解矩阵。我也是初学者,先简单的总结一下,以后用到的时候,就不至于完全抓瞎。

  

时间: 2024-10-10 06:38:27

什么是矩阵?的相关文章

矩阵乘法的Strassen算法详解

题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ p. 值得一提的是,矩阵乘法满足结合律和分配率,但并不满足交换律,如下图所示的这个例子,两个矩阵交换相乘后,结果变了: 下面咱们来具体解决这个矩阵相乘的问题. 解法一.暴力解法 其实,通过前面的分析

*C#(WPF)--矩阵拖动和矩阵动画(拖动展开,不足动画效果)

最近在研发新的项目,遇到了一个桌面模式下的难点--展开动画.之前动画这方面没做过,也许很多人开始做的时候也会遇到相关问题,因此我把几个重点及实际效果图总结展示出来: 我的开发环境是在VS2017下进行的,这个工具条主要功能是:一个工具条,可进行拖拉.可进行拖拉展开,可在拖动之后不足展开并反向继续展开剩下的部分: 一.[拖动]   拖动的核心代码是通过矩阵进行定位和拖动的,定位是以父容器为模板的.以下是核心代码(及效果图): 1 /// <summary> 2 /// 这里TitleBar代指最

矩阵快速幂刷题系列

来源自http://blog.csdn.net/chenguolinblog/article/details/10309423 hdu 1575 Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5587    Accepted Submission(s): 4200 Problem Description A为一个方阵,则Tr

51nod 1137 矩阵乘法

基本的矩阵乘法 中间for(int j=0;i<n;i++)  //这里写错了   应该是j<n 晚上果然  效率不行 等会早点儿睡 //矩阵乘法 就是 两个矩阵 第一个矩阵的列 等与 第二个矩阵的行相同 // 然后ans[i][j] += a[i][k] * b[k][j]; #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 150; int n; ll a[ma

2017中国大学生程序设计竞赛 - 网络选拔赛 HDU 6155 Subsequence Count 矩阵快速幂

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6155 题意: 题解来自:http://www.cnblogs.com/iRedBean/p/7398272.html 先考虑dp求01串的不同子序列的个数. dp[i][j]表示用前i个字符组成的以j为结尾的01串个数. 如果第i个字符为0,则dp[i][0] = dp[i-1][1] + dp[i-1][0] + 1,dp[i][1] = dp[i-1][1] 如果第i个字符为1,则dp[i][1

POJ3233 构造子矩阵+矩阵快速幂

题意:给你矩阵A,求S=A+A^1+A^2+...+A^n sol:直接把每一项解出来显然是不行的,也没必要. 我们可以YY一个矩阵: 其中1表示单位矩阵 然后容易得到: 可以看出这个分块矩阵的左下角那块就可以得到要求的解S 我们取这一块,再减去一个单位矩阵1即可. 为了保持右下角一直是1,所以右上的位置必须是0,由于需要不断移位,所以1是必要的,A是必要的,所以第一列保证移位, 第二列保证保留1,因此我们能成功构造出.... 这个题还可以根据等比矩阵的性质来进行求解...后面补(x

矩阵乘法

矩阵加法就是相同位置的数字加一下,矩阵减法也类似 矩阵乘以一个常数,就是所有位置都乘以这个数 矩阵乘以矩阵 计算规则是,第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积相加( 2 x 1 + 1 x 1),得到结果矩阵左上角的那个值3 矩阵的本质就是线性方程式,两者是一一对应关系.如果从线性方程式的角度,理解矩阵乘法就毫无难度.下面是一组线性方程式 矩阵的最初目的,只是为线性方程组提供一个简写形式 下面是严格的证明.有三组未知数 x.y 和 t,

hdu 5015 233 Matrix (矩阵快速幂)

题意: 有一种矩阵,它的第一行是这样一些数:a  0,0 = 0, a 0,1 = 233,a 0,2 = 2333,a 0,3 = 23333... 除此之外,在这个矩阵里, 我们有 a i,j = a i-1,j +a i,j-1( i,j ≠ 0).现在给你 a 1,0,a 2,0,...,a n,0, 你能告诉我a n,m 是多少吗? n,m(n ≤ 10,m ≤ 10 9)输出 a n,m mod 10000007. 思路:首先我们观察n和m的取值范围,会发现n非常小而m却非常大,如果

矩阵乘法&lt;简单总结&gt;

原理:矩阵相乘最重要的方法是一般矩阵乘积.它只有在第一个矩阵的 行数 和第二个矩阵的 列数 相同时才可进行.若A为m×n矩阵,B为n×p矩阵,则他们的乘积AB会是一个m×p矩阵. 若A=    a    b    c        d    e    f        g    h    i    B=    A    D        B    E        C    F    A*B=CC=    aA+bB+cC    aD+bE+cF        dA+eB+fC    dD+eE

算法提高 矩阵乘法 区间dp

问题描述 有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要将它们依次相乘,只能使用结合率,求最少需要多少次运算. 两个大小分别为p*q和q*r的矩阵相乘时的运算次数计为p*q*r. 输入格式 输入的第一行包含一个整数n,表示矩阵的个数. 第二行包含n+1个数,表示给定的矩阵. 输出格式 输出一个整数,表示最少的运算次数. 样例输入 3 1 10 5 20 样例输出 150 数据规模和约定 1<=n<=1000, 1<=ai<=1