写在前面
我们都知道,在没有持久化存储的情况下,大部分的数据是存储在数组里面的,
也就是对应于数学中的矩阵,
对于一个矩阵而已,最重要的不外乎:赋值,操作,取值
初始化矩阵
在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)*5 ans = 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+1 A = 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)+1 ans = 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*B ans = 34 41 19 29 36 18 40 44 20 >> A.*B ans = 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