《Matlab矩阵和数组的操作.ppt》由会员分享,可在线阅读,更多相关《Matlab矩阵和数组的操作.ppt(57页珍藏版)》请在三一办公上搜索。
1、第二讲 矩阵和数组的操作,矩阵的建立矩阵的保存和调用矩阵的拆分多维矩阵矩阵的运算字符与字符串,一 矩阵的建立,直接输入法利用M文件建立矩阵利用矩阵编辑器Matrix Editor完成输入和修改利用MATLAB函数建立矩阵建立大矩阵,1.直接输入法,将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。A=16 3 2 13;5 10 11 8;9 6 7 12;4 15 14 1A=16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1,2.利用文件建立矩阵,对于比较大且比较复杂的矩阵,可以为它专门建立一个M
2、文件。例:利用M文件建立A矩阵。(1)启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵.(2)把输入的内容存盘(设文件名为mymatrix.m)。(3)运行该M文件,就会自动建立一个名为A的矩阵,可供以后使用。,A=.16.0 3.0 2.0 13.0 5.0 10.0 11.0 8.0 9.0 6.0 7.0 12.0 4.0 15.0 14.0 1.0,(2)存为:mymatrix.m,(3)运行:mymatrix,(1)MATLAB程序编辑器中输入:,(一)利用MATLAB程序编辑器:,编辑一个文本文件:16.0 3.0 2.0 13.05.0 10.0 11.0 8.09.0
3、6.0 7.0 12.04.0 15.0 14.0 1.0(2)装入 该文本文件:load mymatrix.dat 或者:load mymatrix.txt(3)创建一个变量名为mymatrix的矩阵,(二)利用其它文本编辑器:(文本或二进制格式),将以文本或二进制格式存储的数据读入 MATLAB 的另一种方式是用 Import Wizard.FileImport Data,3.利用矩阵编辑器 Array Editor,先在命令窗口输入:A=1在Workspace窗口,双击该变量,打开矩阵编辑器,进行输入和修改。,4.利用MATLAB函数建立矩阵,几个产生特殊矩阵的函数:zeros、ones
4、、eye、rand、randn。这几个函数的调用格式相似,下面以产生零矩阵的zeros函数为例进行说明。其调用格式是:zeros(m)产生mm零矩阵 zeros(m,n)产生mn零矩阵。zeros(size(A)产生与矩阵A同样大小的零矩阵相关的函数有:length(A)给出行数和列数中的较大者,即length(A)=max(size(A);ndims(A)给出A的维数,size(A)多维矩阵各维长度,Z=zeros(2,4)Z=0 0 0 0 0 0 0 0R=randn(4,4)R=1.0668 0.2944-0.6918-1.44100.0593-1.3362 0.8580 0.5711
5、-0.0956 0.7143 1.2540-0.3999-0.8323 1.6236-1.5937 0.6900,F=5*ones(3,3)F=5 5 5 5 5 5 5 5 5N=fix(10*rand(1,10)N=4 9 4 4 8 5 2 6 8 0,此外,常用的函数还有reshape(A,m,n),它在矩阵总元素保持不变的前提下,将矩阵A重新排成mn的二维矩阵,其元素是以列的方式从A中获得,A必须包含mn个元素。,A=16 3 2 13 5 10 11 8 9 6 7 12 4 15 14 1reshape(A,2,8)ans=16 9 3 6 2 7 13 12 5 4 10 15
6、 11 14 8 1,5.建立大矩阵,大矩阵可由方括号中的小矩阵建立起来。例如:A=1 2 3;4 5 6;7 8 9;C=A,eye(size(A);ones(size(A),AC=1 2 3 1 0 0 4 5 6 0 1 0 7 8 9 0 0 1 1 1 1 1 2 3 1 1 1 4 5 6 1 1 1 7 8 9,6 冒号表达式,冒号表达式的一般格式:e1:e2:e3还可以用linspace函数产生一个线性间隔的行向量:linspace(a,b,n):a,b,n:初值,终值,点数linspace(a,b,n)与 a:(b-a)/(n-1):b 等价。linspace用于产生一个等差
7、数列,括号里三项分别表示起始值、终止值和元素数目;logspace用于产生一个对数间隔行向量(等比数列),b=logspace(0,4,5),表示产生一个起始值为100,终止值为104,元素数目为5的等比数列.,X=10:20,X=0:0.1:0.5,X=linspace(0,pi,11)或X=linspace(0,1,11)*pi,X=Columns 1 through 7 0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 Columns 8 through 11 2.1991 2.5133 2.8274 3.1416,二 矩阵的保存和调用,save m
8、ydata A X load mydata 系统自动沿设定好的路径以”.mat”格式存储文件 savefile=mydata.mat;save(savefile,A,X)Load(savefile)如果想存储在指定路径:save D:homeworkmydata A X 或者:savefile=D:homeworkmydata.mat;,三 矩阵的拆分,MATLAB允许用户对一个矩阵的单个元素进行赋值和操作。例如 A(3,2)=200也可以采用矩阵元素的序号来引用矩阵元素。矩阵元素按列编号,先第一列,再第二列,依次类推。以 mn 矩阵A为例,矩阵元素 A(i,j)的序号为:(j-1)*m+i。
9、其相互转换关系也可利用sub2ind和ind2sub函数求得(分别为:把矩阵下标变为元素序号和把元素序号变为矩阵下标)。,1.矩阵元素,A=17 24 1 8;2 22 7 14;4 6 13 20A=17 24 1 8 2 22 7 14 4 6 13 20%ind=sub2ind(size(A),2,2)(ind=5)ind=sub2ind(size(A),2,3)(ind=8)i,j=ind2sub(size(A),5)i=2j=2,2.矩阵拆分和结构变换,(1)利用冒号表达式获得子矩阵,A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取
10、A矩阵第i行、第j列的元素。A(i:i+m,:)表示取A矩阵第ii+m行的全部元素;A(:,k:k+m)表示取A矩阵第kk+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第ii+m行内,并在第kk+m列中的所有元素。,(2)利用空矩阵删除矩阵的元素,在MATLAB中,定义为空矩阵。给变量X赋空矩阵的语句为X=。注意:X=与clear X不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间,只是维数为0。将某些元素从矩阵中删除,采用将其置为空矩阵的方法就是一种有效的方法。,X=.16 3 2 135 10 11 89 6 7 124 15 14 1;X(:,2)=X(1,2
11、)=X(2:2:10)=我注:2:2:10为X第2,4,6,8,10个元素,X=16 2 135 11 89 7 124 14 1,X=16 9 2 7 13 12 1,A=4:6A=A-3;A;A+3A=1 2 3 4 5 6 7 8 9B=A(1:2,2:3)B=2 3 5 6A(:,2)=A=1 3 4 6 7 9,A(2,2)=0A=1 3 4 0 7 9A(3)ans=7A(2:4)我注2:4为A的第2,3,4个元素ans=4 7 3,A=1 2 3 4 5 6 7 8 9sum(A)ans=12 15 18Aans=1 4 7 2 5 8 3 6 9,B=diag(A)%提取或建立
12、对角阵B=1 5 9C=diag(B)C=1 0 0 0 5 0 0 0 9,A=1 2 3 4 5 6 7 8 9B=A4B=0 0 0 0 1 1 1 1 1,r,c=find(A4)r=3 2 3 2 3c=1 2 2 3 3,A=rand(3,4)A1=A(2:3,1,3,4)A2=A(1,3,2,4)L=A(2,:)0.5A3=A(2,L),A=0.0579 0.0099 0.1987 0.1988 0.3529 0.1389 0.6038 0.0153 0.8132 0.2028 0.2722 0.7468A1=0.3529 0.6038 0.0153 0.8132 0.2722
13、0.7468A2=0.0099 0.1988 0.2028 0.7468L=1 1 0 1A3=0.3529 0.1389 0.0153,tril(A)%主对角线及以下元素取矩阵A的元素,其余为0tril(A,K)%相对第K对角线及以下元素 triu(A)%主对角线及以上元素取矩阵A的元素,其余为0triu(A,K)%rot90(A)%逆时针旋转90度rot90(A,K)L=flipud(A)%将矩阵A上下翻转 fliplr(A)%将矩阵A左右翻转reshape(A,m,n),(3)矩阵的结构变换,Practice:A=magic(4)B1=rot90(A),B2=rot90(A,2),B3=
14、tril(A,2),B4=triu(A,-1),BT=A,(1)对二维矩阵进行扩充得到三维矩阵:,四 多维矩阵,以三维矩阵为例,常用的方法有4种:,a=1,2;3,4a=1 2 3 4 a(:,:,2)=5,6;7,8,a(:,:,1)=1 2 3 4a(:,:,2)=5 6 7 8,(2)若干个同样大小的二维矩阵进行组合得到三维矩阵:,b(:,:,1)=1 2;3 4b=1 2 3 4 b(:,:,2)=5 6;7 8,b(:,:,1)=1 2 3 4b(:,:,2)=5 6 7 8,(3)除产生单位矩阵的eye函数外,前面介绍的建立矩阵的函数都可以延伸到三维矩阵:,C=randn(4,3,
15、2),c=1 2c=1 2C=repmat(c,3 2 2),C(:,:,1)=1 2 1 2 1 2 1 2 1 2 1 2C(:,:,2)=1 2 1 2 1 2 1 2 1 2 1 2,repmat:复制小矩阵生成多维数组,(4)用cat函数构建多维矩阵。cat(dim,A1,A2,)cat函数把大小相同的若干矩阵A1,A2,,按照dim指定的维数组合成新的矩阵,A1=1 2;3 4,A2=5 6;7 8C1=cat(1,A1,A2)C2=cat(2,A1,A2)C3=cat(3,A1,A2),(一)算术运算(二)关系运算(三)逻辑运算,五 矩阵的运算,(一)算术运算,1.基本算术运算
16、MATLAB的基本算术运算有:(加)、(减)、*(乘)、/(右除)、(左除)、(乘方)。注意:运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。2.点运算 点运算符有.*、./、.和.。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维数相同。3MATLAB常用数学函数,(1)矩阵加、减(,)运算 相加、减的两矩阵必须有相同的行和列,两矩阵对应元素相加减。允许参与运算的两矩阵之一是标量。标量与矩阵的所有元素分别进行加减操作。,(2)矩阵乘()运算 A矩阵的列数必须等于B矩阵的行数 标量可与任何矩阵相乘。,(3)矩阵除(,/)运算 矩阵除的运算在线性代数中没有,有矩阵逆的运算
17、,在matlab中有两种矩阵除运算:(左除):AB表示A左除B;/(右除):A/B表示B右除A,设A是可逆矩阵的运算,AX=B的解是A左除B,即X=AB;XA=B的解是A右除B,即X=B/A,A=1 2;3 4;5 6;B=5 6;7 8;9 10;C=AB D=A/B E=B A F=B/A,对于AX=b的线性方程组,有两种解法:一种是利用矩阵求逆,即X=inv(A)*b;另一种是用左除,即X=A b。除法的速度快。,A=rand(5)b=ones(5,1)x1=inv(A)*b x2=Ab,(4)矩阵乘方()运算,A p A 自乘p 次幂 设A为方阵,p为正整数,则A p 表示 A 自乘p
18、 次;若A为方阵且非奇异,p为正整数,A(-p)表示 A的逆自乘p 次。,对于p的其它值,计算将涉及特征值和特征向量,如A,p 都是矩阵,A p 则无意义。,A=1,2,3;2,3,1;3,2,1B=A2C=A0.3,(5).矩阵的其它运算,inv 矩阵求逆det 行列式的值eig 矩阵的特征值diag 对角矩阵 矩阵转置sqrt 矩阵开方,The first row contains the heart rate,weight,and exercise hours for patient 1,the second row contains the data for patient 2,and
19、 so on.The mean and standard deviation of each column:,mu=mean(D),sigma=std(D)mu=75.8000 161.8000 3.4800sigma=5.6303 25.4990 2.2107,D=72 134 3.2;.81 201 3.5;.69 156 7.1;.82 148 2.4;.75 170 1.2,(6)点运算(,./,.),a=1 2 3;4 5 6;7 8 9b=2 4 6;1 3 5;7 9 10a.*bans=2 8 18 4 15 30 49 72 90 a*b 对比一下上面两式得到的结果。,a.b
20、=b./a%给出a,b对应元素间的商.%都是a的元素被b的对应元素除 a=1 2 3,b=4 5 6 c1=a.bc2=b./ac1=4.0000 2.5000 2.0000c2=4.0000 2.5000 2.0000,.元素对元素的幂a=1 2 3,b=4 5 6z=a.2z=1.00 4.00 9.00z=a.bz=1.00 32.00 729.00,logm(A)求矩阵A的对数sqrtm(A)求矩阵A的平方根funm(A,fun)一般的方阵函数,(二)关系运算,MATLAB提供了6种关系运算符:(大于)、=(大于或等于)、=(等于)、=(不等于)。关系运算符的运算法则。,B=1 1 1
21、 0 0 0 0 1 1 0 1 0 1 1 1 0 1 1 0 0 1 0 0 1 0,C=1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1,A=0.9501 0.7621 0.6154 0.4057 0.0579 0.2311 0.4565 0.7919 0.9355 0.3529 0.6068 0.0185 0.9218 0.9169 0.8132 0.4860 0.8214 0.7382 0.4103 0.0099 0.8913 0.4447 0.1763 0.8936 0.1389,A=rand(5),B=A0.5,C=A=0.5,例
22、:产生5阶随机方阵A,其元素为10,90区间的随机整数,然后判断A的元素是否能被3整除。(1)生成5阶随机方阵A A=fix(90-10+1)*rand(5)+10)(2)判断A的元素是否可以被3整除 P=rem(A,3)=0,(三)逻辑运算,MATLAB提供了4种逻辑运算符:&(与)、|(或)、(非)、xor(异或)。运算法则。,a=1:5b=2:6c=(a2)&(b5),x=linspace(0,10,100);%产生数据y=sin(x);%产生sin函数z=(y=0).*y;%将sin(x)的负值设为0z=z+0.5*(y0);z=(x8).*z%将大于x=8以后的值设为0plot(x,
23、z);xlabel(x),ylabel(z=f(x)title(A discontinuous signal),(四)关系和逻辑函数,y=all(x)%当x为数组时,只有x中所有元素都不等于0时,y为1,否则为0;x为矩阵时,则命令只作用于列元素,即对同列元素进行判断。y=any(x),a=1 2 0 4;.2 0 1 3b=all(a)c=any(a),b=1 0 0 1c=1 1 1 1,exist(a)%变量或函数是否被定义ans=1 exist(e)ans=0isempty(a)%参数是否为空ans=0isstr(hello)%参数是否为一字符串ans=1,isequal(a,b)%判
24、断数组或矩阵是否相等ans=0 y=Hello,z=hellostrcmp(y,z)%判断字符串是否相等ans=0b=4 5 6isprime(b)%元素是否为素数ans=0 1 0,六字符与字符串,字符串是用单撇号括起来的字符序列。例如,Northen Jiaotong University。若字符串中的字符含有单撇号,则该单撇号字符应用两个单撇号来表示。S=Im Lucy字符串中每个字符(空格也是字符),对应矩阵的一个元素。size(S)字符串是以ASCII码形式存储的。用abs和double命令可以看到字符所对应的ASCII码值。abs(S)setstr和char命令可以把ASCII码矩
25、阵转换为字符串矩阵。,char(72 101 108 108 111),setstr(72 101 108 108 111),ans=Hello,ch=Northen Jiaotong University,e=ch(1:5),f=ch(end:-1:1),g=upper(ch),h=lower(g),001 002;003 004ans=001 002003 004 str2num(001 002;003 004)ans=1 2 3 4,str2num,num2str,与字符串有关的另一个重要函数是eval,其调用格式为:eval(t)其中t为字符串。它的作用是把字符串的内容作为对应的MAT
26、LAB语句来执行。例如 t=pi;m=t,sin(t),cos(t);y=eval(m),y=3.1416 0.0000-1.0000,aa=-78 6 7 7 0 8-43 801 9 0 55 0 0-4 2 7 a(2:6)ans=0 9 0 6 8 a(2:6,3:4)?Index exceeds matrix dimensions.a(2:3,3:4)ans=-43 801 55 0 aa=-78 6 7 7 0 8-43 801 9 0 55 0 0-4 2 7 a(2 4,:)ans=0 8-43 801 0-4 2 7 a(2:4,:)ans=0 8-43 801 9 0 55 0 0-4 2 7 a(2:4,:)ans=0 8-43 801 9 0 55 0 0-4 2 7 a(1 3 6 8 11)ans=-78 9 8-4 55 aa=-78 6 7 7 0 8-43 801 9 0 55 0 0-4 2 7,