MATLAB——第二天 矩阵

来源:互联网 发布:中兴怎么样知乎 编辑:程序博客网 时间:2024/05/29 05:06



写在前面                                                                                                 



我们都知道,在没有持久化存储的情况下,大部分的数据是存储在数组里面的,


也就是对应于数学中的矩阵,


对于一个矩阵而已,最重要的不外乎:赋值,操作,取值


初始化矩阵                                                                                                   



在MATLAB里给一个矩阵赋值的方法有很多,有直接赋值法、借助函数库的间接赋值法,


有时候还要生成一个在某个区间内随机矩阵


一、直接赋值法:


>> A =[1,2,3,4]A =     1     2     3     4>> A= [1:1:4]A =     1     2     3     4



>> A=[1;2;3;4]A =     1     2     3     4>> A=[1:4;2:5]A =     1     2     3     4     2     3     4     5 >> B=A'B =     1     2     2     3     3     4     4     5



二、间接赋值法


生成一个平均分布的矩阵


>> A=linspace(1,3,6)A =    1.0000    1.4000    1.8000    2.2000    2.6000    3.0000


生成一个全是0的矩阵


 >> A=zeros(2,3)A =     0     0     0     0     0     0


生成一个单位矩阵


>> A=eye(3,3)A =     1     0     0     0     1     0     0     0     1


生成一个全是1的矩阵


>> A=ones(2,3)A =     1     1     1     1     1     1


生成一个n阶魔阵


>> A=magic(4)A =    16     2     3    13     5    11    10     8     9     7     6    12     4    14    15     1





三、在某个区间内生成随机矩阵                                                                                                     


首先要知道  


A= ran(n,m)    可以生成一个在区间(0,1) n*m的小数矩阵


>> A=rand(3,4)A =    0.9572    0.1419    0.7922    0.0357    0.4854    0.4218    0.9595    0.8491    0.8003    0.9157    0.6557    0.9340


然后    A=rand(n,n)*k   (k是大于0的)    生成n*m的小数矩阵的值在     (0,k)


>> rand(3)*5ans =    4.1060    0.8450    3.2387    0.0770    3.2456    2.2546    0.2151    3.6586    2.7350

然后在加上一个  d


就是    A=rand(n,n)*k+d    生成n*m的小数矩阵的值就在    (d,k+d)上了


>> A=rand(3)*5+1A =    3.8060    1.9522    5.9082    5.4093    2.8446    1.7820    4.3459    3.3036    5.2776



当然,如果只要整数,那么也行, 用  fix函数


A=fix(rand(n,n)*k)+d  当然因为中间取整了,所以整数的区间会缩小1,生成的整数矩阵区间  (d,k-1+d)


>>  fix(rand(3)*5)+1ans =     4     3     3     2     3     2     1     1     2



因此,就可以抽象出两个生成随机矩阵的方法



生成在区间(a,b)上的整数


function A = randInter( min,max,n,m ) A=fix(rand(n,m)*(max-min+1))+min;end


生成在区间(a,b)上小数


function A = randFloat( min,max,n,m)A=rand(n,m)*(max-min)+min;end




矩阵操作                                                                                                  



①常见的操作有:    矩阵与常数的乘除            矩阵与矩阵的加减乘除次幂


需要注意的是:‘ * ’ 和 ‘  .* ’是不一样的,' / ' ‘ ./ ’     ‘^’和'.^'是不一样的   


A =     3     2     3     4     1     2     2     4     3>> B=randInter(2,6,3,3)B =     4     5     3     5     4     2     4     6     2>> A*Bans =    34    41    19    29    36    18    40    44    20>> A.*Bans =    12    10     9    20     4     4     8    24     6


向量x、矩阵A大小的测试与查找


●whose命令查看当前工作内变量信息


●length(x)返回向量x的长度


●s=size(A)返回矩阵的大小,s(1)表示A的行数,s(2)表示A的列数。


●[r,c]=size(A), A的行数存于变量,列数存于变量c。


● s=size(A, n)返回矩阵A的第n维的大小。


●length(A)返回A的行数与列数中较大者。


●ndims(A)返回矩阵的维数。


● i=find(条件表达式)或者[r,c]=find(条件表达式),返回表达式为真的元素下标。


此处不再粘代码。。。。



截取矩阵                                                                                                  


>> A=[1:4;2:5;3:6;4:7]A =     1     2     3     4     2     3     4     5     3     4     5     6     4     5     6     7


①精确取矩阵中的某一个元素

>> A(4,4)ans =     7


②取矩阵中的某一行

取第四行

>> A(4,:)ans =     4     5     6     7


③取矩阵中的某一列

取第四列

>> A(:,4)ans =     4     5     6     7


④取矩阵中的某些行列

取第1,2行和第3,4列的交汇部分

 >> A(1:2,3:4)ans =     3     4     4     5

⑤逆序取某一行

第二行放在第一行的前面

>> A(2:-1:1,:)ans =     2     3     4     5     1     2     3     4


⑥逆序取某一列

取第四列放在第三列的前面

>> A(:,4:-1:3)ans =     4     3     5     4     6     5     7     6


⑦删除某几行

删除前两行

>> A(1:2,:)=[]A =     3     4     5     6     4     5     6     7


⑧删除某几列

删除前两列

 >> A(:,1:2)=[]A =     3     4     4     5     5     6     6     7

⑨同时删除行和列

删除前两行,前两列

>> B(3:4,3:4)ans =     5     6     6     7








0 0