矩阵高级算法
⑴ matlab 矩阵算法
你所说的可能是指MATLAB的向量化运算(Vectorization)吧?
MATLAB顾名思义,本来就是为向量或矩阵运算设计的,所以很多场合,如果能够使用向量化运算,就应尽量避免使用显式循环(for和while)。这一点是和普通的高级编程语言如C++、Fortran有显着差别的。
举一个简单的例子:生成一个对数表,如果使用循环
x = .01;
for k = 1:1001
y(k) = log10(x);
x = x + .01;
end
而在MATLAB中可以用这种向量化的代码:
x = .01:.01:10;
y = log10(x);
二者的差别不仅在于代码量的大小,效率差别也很大。
这方面也没什么特殊的资料,属于比较基础的,如果想用好MATLAB,就请多花点时间把基本功练扎实点(事实上很多人并没做到)。特别提醒一下,很多时候注意使用MATLAB的“点运算操作符”,如.*, ./, .^等。想进一步了解这方面的内容,可以在MATLAB帮助系统里搜索一下Vectorization,有一些相关的主题和例子。
⑵ 简单介绍一下有关矩阵的算法
Matrix类的变形方法,最终都是根据用户给出的参数修改内部矩阵。这些方法的不同之处,在于修改值的算法,以及修改结果在矩阵中的位置。
当用户在代码中调用translate(5,13)时,AS3修改矩阵类的内建矩阵,将其中的(tx,ty)T与(5,13)T相加,由于在矩阵创建时(tx,ty)被初始化为(0,0),所以这个结果就是向量(tx,ty)与(5,13)的和。
⑶ 矩阵乘法公式
|a11 a12 …… a1n||b11 b12 …… b1k|
|a21 a22 …… a2n||b21 b22 …… b2k|=
| . . …… . || . . …… . |
|am1 am2 …… amn||bn1 bn2 …… bnk|
|a11*b11+a12*b21+……+a1n*bn1 a11*b12+a12*b22+……+a1n*bn2
若A、B和C表示三个矩阵并有C=AB,A为n行m列,B为m行q列,则C为n行q列
则对于C矩阵任版一元素Cij都有权
Cij=ai1*b1j+ai2*b2j+ai3*b3j+...+ain*bnj
i=1,2,3,...,n,j=1,2,3,...q
(3)矩阵高级算法扩展阅读:
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
⑷ 求对角阵的逆
对角矩阵中,如果对角线上的元素都不为0,那么这个对角阵是可逆的。
其逆矩阵也是一个对角阵,对角线上的元素恰好是对应的原矩阵对角线上元素的倒数。
可以利用逆矩阵的初等变换法证明,所以,逆矩阵如下:
这m×n 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数 aij为(i,j)元的矩阵可记为(aij)或(aij)m × n,m×n矩阵A也记作Amn。
元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵 。