矩阵的秩运算

3898人阅读
平时开发程序,免不了要对图像做各种变换处理。有的时候变换可能比较复杂,比如平移之后又旋转,旋转之后又平移,又缩放。
直接用公式计算,不但复杂,而且效率低下。这时可以借助变换矩阵和矩阵乘法,将多个变换合成一个。&最后只要用一个矩阵对每个点做一次处理就可以得到想要的结果。
&另外,矩阵乘法一般有硬件支持,比如3D&图形加速卡,处理3D变换中的大量矩阵运算,比普通CPU&要快上1000倍。
下面是3类基本的2D图形变换。&
设某点向x方向移动&dx,&y方向移动&dy&,[x,y]为变换前坐标,&[X,Y]为变换后坐标。
则&X&=&x+&&Y&=&y+
以矩阵表示:
& & & & & & & & & & & & & & & & 1&&&&0&&&&0
[X,&Y,&1]&=&[x,&y,&1][&0&&&&1&&&&0&&]&;&
& & & & & & & & & & & & & & & &dx&&dy&&&1
&&1&&&&0&&&&0
&&0&&&&1&&&&0&&&即平移变换矩阵。&
&&dx&&dy&&&1&
&旋转相比平移稍稍复杂:
&设某点与原点连线和X轴夹角为b度,以原点为圆心,逆时针转过a度&&,&原点与该点连线长度为R,&[x,y]为变换前坐标,&[X,Y]为变换后坐标。
&&x&=&Rcos(b)&;&y&=&Rsin(b);
&&X&=&Rcos(a+b)&=&Rcosacosb&-&Rsinasinb&=&xcosa&-&&(合角公式)
&&Y&=&Rsin(a+b)&=&Rsinacosb&+&Rcosasinb&=&xsina&+&ycosa&;
&&用矩阵表示:
& & & & & & & & & & & & & & & & cosa&&&sina&&0
&[X,&Y,&1]&=&[x,&y,&1][-sina&&cosa&&0&&]&
& & & & & & & & & & & & & & & & &0&&&&&&&&0&&&&&1
&&cosa&&&sina&&0
&-sina&&cosa&&0&&为旋转变换矩阵。
&&&0&&&&&&&0&&&&&1&
&设某点坐标,在x轴方向扩大&sx倍,y轴方向扩大&sy倍,[x,y]为变换前坐标,&[X,Y]为变换后坐标。
&X&=&sx*x;&Y&=&sy*y;
则用矩阵表示:
& & & & & & & & & & & & & & & & sx&&&&0&&&&0
[X,&Y,&1]&=&[x,&y,&1][&0&&&&sy&&&&0&&]&;&
& & & & & & & & & & & & & & & & 0&&&&&0&&&&&1
&sx&&&&0&&&&0
&0&&&&sy&&&&0&&即为缩放矩阵。&
&0&&&&&0&&&&&1
&2D基本的模型视图变换,就只有上面这3种,所有的复杂2D模型视图变换,都可以分解成上述3个。
比如某个变换,先经过平移,对应平移矩阵A,&再旋转,&对应旋转矩阵B,再经过缩放,对应缩放矩阵C.
则最终变换矩阵&T&=&ABC.&即3个矩阵按变换先后顺序依次相乘(矩阵乘法不满足交换律,因此先后顺序一定要讲究)。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:199717次
积分:3059
积分:3059
排名:第4759名
原创:91篇
转载:123篇
评论:22条
(2)(1)(1)(3)(1)(3)(1)(5)(11)(7)(3)(5)(5)(3)(4)(4)(1)(3)(6)(15)(6)(8)(5)(6)(3)(4)(4)(4)(3)(3)(4)(4)(9)(5)(6)(7)(10)(5)(11)(11)(4)(3)(6)请问矩阵的运算法则?请问矩阵取 绝对值 还有 相乘 怎么运算?请详细的举例说明,_百度作业帮
请问矩阵的运算法则?请问矩阵取 绝对值 还有 相乘 怎么运算?请详细的举例说明,
矩阵的运算 1、矩阵的加法 :如果 是两个同型矩阵(即它们具有相同的行数和列数,比如说 ),则定义它们的和 仍为与它们同型的矩阵(即 ),的元素为 和 对应元素的和,即:.给定矩阵 ,我们定义其负矩阵 为:.这样我们可以定义同型矩阵 的减法为:.由于矩阵的加法运算归结为其元素的加法运算,容易验证,矩阵的加法满足下列 运算律:( 1)交换律:; ( 2)结合律:; ( 3)存在零元:; ( 4)存在负元:.2 、数与矩阵的乘法 :设 为一个数,,则定义 与 的乘积 仍为 中的一个矩阵,中的元素就是用数 乘 中对应的元素的道德,即 .由定义可知:.容易验证数与矩阵的乘法满足下列运算律:(1 ) ; (2 ) ; (3 ) ; (4 ) .3 、矩阵的乘法:设 为 距阵,为 距阵,则矩阵 可以左乘矩阵 (注意:距阵 德列数等与矩阵 的行数),所得的积为一个 距阵 ,即 ,其中 ,并且 .据真的乘法满足下列 运算律(假定下面的运算均有意义):( 1)结合律:; ( 2)左分配律:; ( 3)右分配律:; ( 4)数与矩阵乘法的结合律:; ( 5)单位元的存在性:.若 为 阶方阵,则对任意正整数 ,我们定义:,并规定:由于矩阵乘法满足结合律,我们有:,.
您可能关注的推广回答者:您还未登陆,请登录后操作!
矩阵如何计算
你可以参考《数值线性代数》,或者复旦大学屠伯埙写的《高等代数》,这本书是从矩阵计算的角度去写的,可以为矩阵计算打下很好的基础。
如果提问者只是在学线性代数,那他看你推荐的书就毁了。
您的举报已经提交成功,我们将尽快处理,谢谢!
大家还关注R语言中矩阵运算
1_矩阵的生成
2_矩阵的四则运算
3_矩阵的矩阵运算
4_矩阵的分解
1_1将向量定义成数组
向量只有定义了维数向量(dim属性)后才能被看作是数组.比如:
& dim(z)=c(3,4);
[,1] [,2] [,3] [,4]
注意:生成矩阵是按列排列的。
1_2用array ( )函数构造多维数组
用法为:array(data=NA,dim=length(data),dimnames=NULL)
&&&&&&&&&&&
参数描述:data:是一个向量数据。
&&&&&&&&&&&&&&&&&&&&&
dim:是数组各维的长度,缺省时为原向量的长度。
&&&&&&&&&&&&&&&&&&&&&
dimname:是数组维的名字,缺省时为空。
& x=array(1:20,dim=c(4,5))
[,1] [,2] [,3] [,4] [,5]
1_3用matrix()函数构造矩阵
函数matrix)是构造矩阵(二维数组)的函数,其构造形式为
matrix(data=NA,nrow=1,ncol=1,byrow=FALSE,dimnames=NULL)
其中data是一个向量数据,nro、是矩阵的行数,ncol是矩阵的列数.当byrow=TRUE时,生成矩阵的数据按行放置,缺省时相当于byrow=FALSE,数据按列放置.dimname。是数组维的名字,缺省时为空.
如构造一个3x5阶的矩阵
& A=matrix(1:15,nrow=3,byrow=TRUE)
[,1] [,2] [,3] [,4] [,5]
2_矩阵的四则运算
可以对数组之间进行四则运算(+、一、*、/),这时进行的是数组对应元素的四则运算。一般情况下参加运算的矩阵或者数组的维数是相同的,但也可以计算不同维的,这是要将对应的元素补足。
3_1& 转置运算
对于矩阵A,函数t(A)表示矩阵A的转置,如:
& A=matrix(1:6,nrow=2);
[,1] [,2] [,3]
3_2 求方阵的行列式
函数det()是求矩阵行列式的值,如
& det(matrix(1:4,ncol=2));
3_3 向量的内积
对于n维向量x,可以看成nxl阶矩阵或lxn阶矩阵。若x与y是相同
维数的向量,则x%*%Y表示x与y作内积.例如,
&x=1:5; Y=2*1:5
函数crossprod()是内积运算函数(表示交叉乘积),crossprod(x,y)计算向量x与y的内积,即t(x) %*%
y'。crossprod(x)表示x与x的内积.
类似地,tcrossprod(x,y)表示’x%*%t(Y)’,即x与y的外积,也称为叉积。tcrossprod(x)表示x与x作外积.如:
& x=1:5; y=2*1:5;
& crossprod(x);
& crossprod(x,y);
& tcrossprod(x);
[,1] [,2] [,3] [,4] [,5]
& tcrossprod(x,y);
[,1] [,2] [,3] [,4] [,5]
3_4& 向量的外积(叉积)
设x和y是n维向量,则x%o%y表示x与y作外积.例如
[,1] [,2] [,3] [,4] [,5]
outer()是更为强大的外积运算函数,outer(x,y)计算向量二与y的外积,它等价于x %o%y
函数。outer()的一般调用格式为
outer(x,y,fun=”*”)
y矩阵(或向量),fun是作外积运算函数,缺省值为乘法运算。函数outer()在绘制三维曲面时非常有用,它可生成一个x和y的网格。
3_5& 矩阵的乘法
设A和B为两个矩阵,通常意义下的矩阵乘法是通过A%*%B来完成,crossprod(A,B)表示的是
t(A)%*%B,而tcrossprod(A,B)表示的是A%*%t(B)。最后我们通过运算知道x%*%A%*%x为二次型。
& A=array(1:9,dim=(c(3,3)))
& B=array(9:1,dim=(c(3,3)))
[,1] [,2] [,3]
[2,]& 114&&
[3,]& 138&&
& crossprod(A,B)==t(A)%*%B;
[,1] [,2] [,3]
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
[3,] TRUE TRUE TRUE
& tcrossprod(A,B)==A%*%t(B);
[,1] [,2] [,3]
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
[3,] TRUE TRUE TRUE
3_6 生成对角阵和矩阵取对角运算
函数diag()依赖于它的变量,当v是一个向量时,diag(v)表示以v的元素为对角线元素的对角阵.当M是一个矩阵时,则diag(M)表示的是取M对角线上的元素的向量.如
& v=c(1,4,5);
& diag(v);
[,1] [,2] [,3]
& M=array(1:9,dim=c(3,3));
& diag(M);
3_7 解线性方程组和求矩阵的逆矩阵
若求解线性方程组Ax=b,其命令形式为solve(A,b),求矩阵A的逆,其命令形式为solve(A).设矩阵A=t(array(c(1:8,10),dim=c(3,3))),b&-c(1,1,1),则解方程组Ax=b的解x和求矩阵A的逆矩阵的命令如下:
& A=t(array(c(1:8,10),dim=c(3,3)));
& b=c(1,1,1);
& x=solve(A,b);
[1] -1.& 1.&
& solve(A);
&&&&&&&&&&
[1,] -0.6666667
-1.333333&&&
[2,] -0.6666667&
3.666667&& -2
[3,]& 1.0000000
-2.000000&&&
3_8 求矩阵的特征值与特征向量
函数eigen(Sm)是求对称矩阵Sm的特征值与特征向量,其命令形式为:ev=eigen(Sm),则ev存放着对称矩阵Sm特征值和特征向量,是由列表形式给出的,其中ev$values是Sm的特征值构成的向量,ev$vectors是Sm的特征向量构成的矩阵.如
& Sm=crossprod(A,A);
& ev=eigen(Sm);
[1] 303.&&
&&&&&&&&&&
[,1]&&&&&&&&
[,2]&&&&&&
[1,] -0.4646675& 0.&
[2,] -0.. -0.8326258
[3,] -0..& 0.4658502
4_1 特征值分解
(1).定义:
对N阶方阵A,x为标量,v是非零的N维列向量,且满足Ax=xv ,则称x为矩阵A的特征值,v 是相对应于x
的特征向量。特征值的全体成为A的谱。
(2).在r中的实现:在r中利用函数eigen(A)来求矩阵的特征值和特征向量,具体的调用格式为:
以矩阵A为例说明此问题
& A=array(c(1,1,1,4,2,1,9,3,1),dim=c(3,3));
& D=eigen(A);
[1]& 5..0000000&
&&&&&&&&&&
[,1]&&&&&&&&&
[,2]&&&&&&
[1,] -0..& 0.5384820
[2,] -0.4346498& 6. -0.7872938
[3,] -0.2680839& 3.&
(3).特征值分解的性质:我们知道当所求的的特征向量构成的矩阵可逆时会满足solve(vectors)%*%A%*%vectors=diag(values),下面进行验证。
& solve(vectors)%*%A%*%
&&&&&&&&&&&&&
[,1]&&&&&&&&&
[,2]&&&&&&&&&
[1,]& 5.& 8.
[2,]& 1. -2.&
[3,] -3. -1.& 1.
结果的精度还是比较高的。
4_2 矩阵的奇异值分解
函数svd(A)是对矩阵A作奇异值分解,即A =U%*%D%*%t(V),其中U,
V是正交阵,D为对角阵,也就是矩阵A的奇异值.svd(A)的返回值也是列表,svd(A)$d表示矩阵A的奇异值,即矩阵D的对角线上的元素.svd(A)$u对应的是正交阵U,
svd(A) $v对应的是正交阵V.例如,
& A&-t(array(c(1:8,10),dim=c(3,3)))
& SVD=svd(A);
[1] 17.4125052& 0.8751614&
&&&&&&&&&&
[,1]&&&&&&&
[,2]&&&&&&
[1,] -0.2093373& 0.&
[2,] -0.5038485& 0..8630696
[3,] -0..& 0.4785099
&&&&&&&&&&
[,1]&&&&&&&&
[,2]&&&&&&
[1,] -0..& 0.2995295
[2,] -0.5537546& 0. -0.8326258
[3,] -0.6909703& 0.&
& attach(SVD);
The following object(s) are masked from 'SVD (position 3)':
& u%*%diag(d)%*%t(v);
[,1] [,2] [,3]
[,1] [,2] [,3]
4_3 qr分解
设A为m*n矩阵,如果存在m*m酉矩阵Q(即Q(H)Q=QQ(H)=I)和m*n阶梯形矩阵R,使得A=QR,那么此分解称为QR分解。QR分解在解决最小二乘问题、特征值计算等方面有着十分重要的作用。
& A=(array(c(1:12),dim=c(4,3)));
[,1] [,2] [,3]
#进行矩阵分解
& QR=qr(A);QR
&&&&&&&&&&
[,1]&&&&&&&
[,2]&&&&&&&&&
[1,] -5...
[2,]& 0.3651484& -3.2659863
[3,]& 0.5477226&
-0.3781696& 7.
[4,]& 0.7302967&
-0.9124744& 9.
[1] 1...373098
attr(,"class")
#提取Q,R并验证分解的正确性。
& Q=qr.Q(QR);
& R=qr.R(QR);
[,1] [,2] [,3]
4_4 Schur分解
从特征值的分解中可以看出,特征值的分解是有条件的,如果特征向量不是线性无关的,那么对于一个矩阵来说便不能采用特征值分解的方法对矩阵进行分解。例如对于矩阵A=t(array(c(6,12,19,-9,-20,-33,4,9,15),dim=c(3,3))进行特征值分解有:
& A=t(array(c(6,12,19,-9,-20,-33,4,9,15),dim=c(3,3)));
[,1] [,2] [,3]
[2,]&& -9&
& W=eigen(A);
[1]& 1+0i& 1-0i -1+0i
&&&&&&&&&&&&&
[,1]&&&&&&&&&
[,2]&&&&&&&&&
[1,] -0.i -0.i -0.i
[2,]& 0.i&
[3,] -0.i -0.i -0.i
& attach(W);
The following object(s) are masked from 'W (position 3)':
&&& values,
& det(vectors);
错误于determinant.matrix(x, logarithm = TRUE, ...) :
& 目前还不能算复数矩阵的行列式
& det(Re(vectors));
& solve(vectors)
&&&&&&&&&&&&&&&&&&
[,1]&&&&&&&&&&&&&&
[,2]&&&&&&&&&&&&&&&
[1,] 0.09959i&
0.59i& -9.59i
[2,] 0.09959i&
0.59i& -9.59i
3.691206+&&&&&&
11.07362+&&&&&&
18.45603+&&&&&&
很明显vectors不是一个可逆矩阵此时进行特征值分辨这种方法便不可行,对于这种情况我们可以作Schur分解。
对于任意的方针A,其Schur分解的形式为:A=USU(H),其中U是标准的正交矩阵(即满足UU(H)=I),S为上三角矩阵,并且对角线上的元素为A的特征值。由于此函数在包Matrix中,所以使用之前必须调入。并且注意matrix和Matrix的区别。
A=Matrix(c(6,12,19,-9,-20,-33,4,9,15),ncol=3,byrow=TRUE);
3 x 3 Matrix of class "dgeMatrix"
[,1] [,2] [,3]
[2,]&& -9&
& library(Matrix);
& Sch=Schur(A, vectors=TRUE);
& Q=as.matrix(Q)
& attach(Sch);
错误于attach(Sch) : 'attach'只适用于串列,数据框和环境
& Q%*%T%*%t(Q)
3 x 3 Matrix of class "dgeMatrix"
[,1] [,2] [,3]
[2,]&& -9&
4_5& Cholesky分解(柯利分解)
正定矩阵:设A是n阶实系数矩阵, 如果对任何非零向量 X=(x1,...xn) 都有
t(X)AX&0,就称A正定(Positive Definite)。正定矩阵在相合变换下可化为标准型, 即单位矩阵。
Cholesky分解:
对任意的正定矩阵A,存在上三角矩阵R,使A=t(R)%*%R,则称为A的Cholesky分解(柯利分解)。
& #输入矩阵
& m=matrix(c(5,1,1,3),ncol=2 );
& #矩阵分解
& CH=chol(m);
& #验证结果
& t(CH)%*%CH;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 矩阵的运算 的文章

 

随机推荐