1第二章MATLAB语言基础主要内容:(1)概述(2)创建向量(3)创建矩阵(4)向量和矩阵元素的索引(重点)(5)向量和矩阵的基本操作(重点)(6)多维数组2(1)概述数组:一组有序数的集合,下标是指数组元素在数组中的序号,每个元素有唯一的下标。向量:从编程语言的角度上看,向量其实就是一维数组;从数学的角度上看,向量就是1×N或者N×1的矩阵,即行向量或列向量;从物理意义上看,表示不仅有大小还有方向的量,与标量相对应。3矩阵:即线性代数中定义的矩阵的概念,一个二维的数据表,每个元素位于不同的行和列上,从编程语言的角度看,矩阵就是二维数组。MATLAB的基本运算单位就是矩阵和向量,M语言是向量化编程的语言。MATLAB中的向量和矩阵都是使用1下标,而不是C语言中的零下标。MATLAB中矩阵元素是按列存储的,C语言中是按行存储的。4(2)创建向量直接输入法:行向量元素之间用空格(不论个数)或者逗号隔开,列向量元素之间用分号隔开.例:创建向量a=[13589]a=13589a=[1,3,5,6,9]a=13569b=[1;5;6;8;9]b=15689也可采用对行向量取转置的方法构造列向量5使用冒号运算符:一般格式为start:increment:end,分别表示初值、增量和终值。例:a=1:3:9a=147增量可以为负数a=10:-2:2a=108642增量缺省时默认为1b=1:6b=123456冒号运算符可以与直接输入法混用a=[256:8]a=256786使用向量生成函数linspace和logspace:使用linspace生成线性空间向量,均匀间隔的一组数;使用logspace生成对数空间向量,以10为底.例:a=linspace(1,10,6)a=1.00002.80004.60006.40008.200010.0000b=logspace(1,5,5)%指数之间均匀间隔b=101001000100001000007使用数组编辑器:交互式输入法,比较直观。还有其他办法吗?从已有向量或矩阵中计算得到;从外部文件读入;8(3)创建矩阵直接输入法:一行中元素之间用逗号或者空格隔开,行与行之间用分号隔开。例:M=[123;456;789]M=123456789M=[1,2,3;4,5,6;7,8,9]M=1234567899还可以分行输入矩阵元素M=[123456789]M=12345678910使用矩阵生成函数:zeros,ones,eye,rand,randn,magic…例:全零矩阵M=zeros(3,3)M=000000000全1矩阵M=ones(3,4)M=11111111111111单位矩阵M=eye(3,3)M=1000100010~1之间均匀分布的随机矩阵rand(3,4)ans=0.95010.48600.45650.44470.23110.89130.01850.61540.60680.76210.82140.791912零均值、方差为1的高斯分布矩阵M=randn(3,3)M=0.1746-0.58830.1139-0.18672.18321.06680.7258-0.13640.0593魔方矩阵(每行每列以及对角线上元素之和相同)magic(4)ans=16231351110897612414151此外,还有范德蒙矩阵、希尔伯特矩阵、托普利兹矩阵、帕斯卡矩阵等。13使用数组编辑器:交互式输入法,比较直观。还有其他办法吗?从已有向量或矩阵中计算得到;从外部文件读入;14(4)向量和矩阵元素的索引一个元素的访问例:访问向量的一个元素a=[36928];a(2)%访问第二个元素,单下标ans=6a(end)%访问最后一个元素,单下标ans=815访问矩阵的一个元素M=[139;648;360]M=139648360M(2,2)%双下标ans=4M(6)%单下标ans=6M(end)%访问最后一个元素,单下标ans=016若干元素的访问(向量或者矩阵做下标)例:访问向量的若干元素a=[368241];a(1:3)%访问1~3个元素,单向量下标ans=368a([135])%访问第1、3、5个元素,单向量下标ans=384a(end-1:end)%访问最后两个元素,单向量下标ans=4117访问矩阵的若干元素M=[368;345;126]M=368345126a([13;24])%使用矩阵做下标ans=3862a([1:3,3:-1:1])%重复访问向量元素,单向量下标ans=368863a(:)%访问向量所有元素ans=36824118M([12],[2,3])%访问第1、2行的第2,3列,双向量下标;ans=6845M(1:3,1:2)%访问第1~3行的第1~2列,双向量下标ans=363412M([135])%访问第1、3、5个元素,单向量下标ans=31419M([13;24])%矩阵做下标ans=3136M(:)%访问矩阵的所有元素ans=331642856向量可以做向量和矩阵的下标,矩阵也可以做向量和矩阵的下标M(1,:)%访问第1行的所有列ans=368向量和矩阵做下标的访问方法也可以用来创建向量和矩阵20(5)向量和矩阵的基本操作求向量长度和矩阵大小,元素个数例:a=[136845]a=136845length(a)ans=621M=[123;456;789]M=123456789[m,n]=size(M)m=3n=3Matlab里的函数可以有多个返回值numel(M)ans=922矩阵的拼接和复制例:M=[12;34]M=1234N=[567;8910]N=5678910L=[M,N]c=12567348910repmat(M,2,2)ans=121234341212343423矩阵的重组reshape例:a=1:8a=12345678M=reshape(a,2,4)M=13572468N=reshape(M,4,2)N=15263748重组的时候按列序24矩阵的翻转:例:M=[123;456]M=123456N=fliplr(M)%左右翻转N=321654L=flipud(M)%上下翻转L=45612325行列删除:利用空数组例:M=[123;456;789]M=123456789M(1,:)=[]%删除第一行M=456789M(:,2)=[]%再删除第二列a=467926N=[369;284;651]N=369284651N(1:2,:)=[]%删除第1、2行b=65127矩阵的转置实数矩阵例:M=[123;456]M=123456N=M'N=142536%共轭转置L=M.'L=142536%转置28复数矩阵例:M=[1+2i2+3i;2+i1-i]M=1.0000+2.0000i2.0000+3.0000i2.0000+1.0000i1.0000-1.0000iN=M'N=1.0000-2.0000i2.0000-1.0000i2.0000-3.0000i1.0000+1.0000iL=M.'L=1.0000+2.0000i2.0000+1.0000i2.0000+3.0000i1.0000-1.0000i29矩阵的加减乘除法例:M=[12;34]M=1234N=[56;78]N=5678L=M+NL=681012F=M-NF=-4-4-4-430K=M*N%矩阵乘法,满足矩阵乘法的规则K=19224350G=M.*N%点乘(数组乘),对应元素相乘G=5122132H=M./N%点除(数组除),对应元素相除H=0.20000.33330.42860.500031方阵的行列式例:M=[135;281;321]M=135281321det(M)ans=-9132方阵求逆例:M=[135;281;321]M=135281321N=inv(M)N=-0.0659-0.07690.4066-0.01100.1538-0.09890.2198-0.0769-0.022033矩阵的伪逆当A不是方阵或者是方阵但其行列式值为零的时候,矩阵A没有逆矩阵,但有逆矩阵B,使得A*B*A=AB*A*B=B求伪逆的命令为pinv34矩阵的秩例:M=[123;246;284]M=123246284rank(M)ans=235矩阵的特征值例:M=[123;246;284]M=123246284eig(M)ans=11.8655-0.0000-2.865536矩阵的迹矩阵的迹等于矩阵对角线元素之和,也等于矩阵特征值之和;求矩阵迹的命令是trace37基本数学函数运算三角函数sin,cos,asin,acos,tan,cot,atan,acot例:M=12236220312211415sin(M)ans=-0.5366-0.8462-0.73920.9129-0.40400.90930.83670.99060.6503三角函数计算时采用弧度值38指数对数运算exp,power,log,log10,sqrt例:M=[135;256;241]M=135256241exp(M)ans=2.718320.0855148.41327.3891148.4132403.42887.389154.59822.718339M=[135;256;241]M=135256241power(M,2)ans=1925425364161log(exp(M))ans=135256241sqrt(power(M,2))ans=13525624140取整、求模、求余例:M=[-1.51.21.6;6.23.8-8.4]M=-1.50001.20001.60006.20003.8000-8.4000floor(M)%向下取整ans=-21163-9ceil(M)%向上取整ans=-12274-8round(M)ans=-21264-8%四舍五入fix(M)ans=-11163-8%向零取整41N=[-5-89;264]N=-5-89264mod(N,2)ans=101000rem(N,2)ans=-101000M=[358;967]M=358967mod(M,3)%求模ans=022001rem(M,3)%求余ans=022001求模和取余也可以对浮点数进行操作42符号函数例:M=[5-10;6-8-5]M=5-106-8-5sign(M)ans=1-101-1-1除了基本数学函数(作用与矩阵各元素)外,还有一些直接作用于矩阵的超越函数如sqrtm,logm,expm等。43(6)多维数组以三维数组为例,第一维称为行,第二维称为列,第三维称为页逐页创建M(:,:,1)=[12;34];M(:,:,2)=[56;78];M(:,:,3)=[910;1112];44MM(:,:,1)=1234M(:,:,2)=5678M(:,:,3)=910111245利用cat命令M=[12;34];N=[56;78];cat(3,M,N)ans(:,:,1)=1234ans(:,:,2)=5678例如:一幅彩色图像就是一个三维数组,每一页代表RGB分量中的一个。imread:图像读取imshow:图像显示