1、第二章 MATLAB语言基础主要内容:(1)概述(2)创建向量(3)创建矩阵(4)向量和矩阵元素的索引(重点)(5)向量和矩阵的基本操作(重点)(6)多维数组1.(1)概述数组:一组有序数的集合,下标是指数组元素在数组中的序号,每个元素有唯一的下标。向量:从编程语言的角度上看,向量其实就是一维数组;从数学的角度上看,向量就是1N或者N1的矩阵,即行向量或列向量;从物理意义上看,表示不仅有大小还有方向的量,与标量相对应。2.矩阵:即线性代数中定义的矩阵的概念,一个二维的数据表,每个元素位于不同的行和列上,从编程语言的角度看,矩阵就是二维数组。vMATLAB的基本运算单位就是矩阵和向量,M语言是向
2、量化编程的语言。vMATLAB中的向量和矩阵都是使用1下标,而不是C语言中的零下标。vMATLAB中矩阵元素是按列存储的,C语言中是按行存储的。3.(2)创建向量直接输入法:行向量元素之间用空格(不论个数)或者逗号隔开,列向量元素之间用分号隔开.例:创建向量 a=1 3 5 8 9a=1 3 5 8 9 a=1,3,5,6,9a=1 3 5 6 9 b=1;5;6;8;9b=1 5 6 8 9v也可采用对行向量取转置的方法构造列向量4.使用冒号运算符:一般格式为start:increment:end,分别表示初值、增量和终值。例:a=1:3:9a=1 4 7v增量可以为负数 a=10:-2:2
3、a=10 8 6 4 2v增量缺省时默认为1 b=1:6b=1 2 3 4 5 6v冒号运算符可以与直接输入法混用 a=2 5 6:8a=2 5 6 7 85.使用向量生成函数linspace和logspace:使用linspace生成线性空间向量,均匀间隔的一组数;使用logspace生成对数空间向量,以10为底.例:a=linspace(1,10,6)a=1.0000 2.8000 4.6000 6.4000 8.2000 10.0000 b=logspace(1,5,5)%指数之间均匀间隔b=10 100 1000 10000 1000006.使用数组编辑器:交互式输入法,比较直观。还有
4、其他办法吗?从已有向量或矩阵中计算得到;从外部文件读入;7.(3)创建矩阵直接输入法:一行中元素之间用逗号或者空格隔开,行与行之间用分号隔开。例:M=1 2 3;4 5 6;7 8 9M=1 2 3 4 5 6 7 8 9 M=1,2,3;4,5,6;7,8,9M=1 2 3 4 5 6 7 8 98.还可以分行输入矩阵元素 M=1 2 3 4 5 6 7 8 9M=1 2 3 4 5 6 7 8 99.使用矩阵生成函数:zeros,ones,eye,rand,randn,magic 例:全零矩阵 M=zeros(3,3)M=0 0 0 0 0 0 0 0 0 全1矩阵 M=ones(3,4)
5、M=1 1 1 1 1 1 1 1 1 1 1 1 10.单位矩阵 M=eye(3,3)M=1 0 0 0 1 0 0 0 101之间均匀分布的随机矩阵 rand(3,4)ans=0.9501 0.4860 0.4565 0.4447 0.2311 0.8913 0.0185 0.6154 0.6068 0.7621 0.8214 0.791911.零均值、方差为1的高斯分布矩阵 M=randn(3,3)M=0.1746 -0.5883 0.1139 -0.1867 2.1832 1.0668 0.7258 -0.1364 0.0593魔方矩阵(每行每列以及对角线上元素之和相同)magic(4
6、)ans=16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1此外,还有范德蒙矩阵、希尔伯特矩阵、托普利兹矩阵、帕斯卡矩阵等。12.使用数组编辑器:交互式输入法,比较直观。还有其他办法吗?从已有向量或矩阵中计算得到;从外部文件读入;13.(4)向量和矩阵元素的索引一个元素的访问例:访问向量的一个元素 a=3 6 9 2 8;a(2)%访问第二个元素,单下标ans=6 a(end)%访问最后一个元素,单下标ans=814.访问矩阵的一个元素 M=1 3 9;6 4 8;3 6 0M=1 3 9 6 4 8 3 6 0 M(2,2)%双下标ans=4 M(6)%单下标ans
7、=6 M(end)%访问最后一个元素,单下标ans=015.若干元素的访问(向量或者矩阵做下标)例:访问向量的若干元素 a=3 6 8 2 4 1;a(1:3)%访问13个元素,单向量下标ans=3 6 8 a(1 3 5)%访问第1、3、5个元素,单向量下标ans=3 8 4 a(end-1:end)%访问最后两个元素,单向量下标ans=4 116.访问矩阵的若干元素 M=3 6 8;3 4 5;1 2 6M=3 6 8 3 4 5 1 2 6 a(1 3;2 4)%使用矩阵做下标ans=3 8 6 2 a(1:3,3:-1:1)%重复访问向量元素,单向量下标ans=3 6 8 8 6 3
8、a(:)%访问向量所有元素ans=3 6 8 2 4 117.M(1 2,2,3)%访问第1、2行的第2,3列,双向量下标;ans=6 8 4 5 M(1:3,1:2)%访问第13行的第12列,双向量下标ans=3 6 3 4 1 2 M(1 3 5)%访问第1、3、5 个元素,单向量下标ans=3 1 418.M(1 3;2 4)%矩阵做下标ans=3 1 3 6 M(:)%访问矩阵的所有元素ans=3 3 1 6 4 2 8 5 6v向量可以做向量和矩阵的下标,矩阵也可以做向量和矩阵的下标 M(1,:)%访问第1行的所有列ans=3 6 8v向量和矩阵做下标的访问方法也可以用来创建向量和矩
9、阵19.(5)向量和矩阵的基本操作求向量长度和矩阵大小,元素个数例:a=1 3 6 8 4 5a=1 3 6 8 4 5 length(a)ans=620.M=1 2 3;4 5 6;7 8 9M=1 2 3 4 5 6 7 8 9 m,n=size(M)m=3n=3vMatlab里的函数可以有多个返回值 numel(M)ans=921.矩阵的拼接和复制例:M=1 2;3 4M=1 2 3 4 N=5 6 7;8 9 10N=5 6 7 8 9 10 L=M,Nc=1 2 5 6 7 3 4 8 9 10 repmat(M,2,2)ans=1 2 1 2 3 4 3 4 1 2 1 2 3 4
10、 3 422.矩阵的重组reshape例:a=1:8a=1 2 3 4 5 6 7 8 M=reshape(a,2,4)M=1 3 5 7 2 4 6 8 N=reshape(M,4,2)N=1 5 2 6 3 7 4 8v重组的时候按列序23.矩阵的翻转:例:M=1 2 3;4 5 6M=1 2 3 4 5 6 N=fliplr(M)%左右翻转N=3 2 1 6 5 4 L=flipud(M)%上下翻转L=4 5 6 1 2 3 24.行列删除:利用空数组例:M=1 2 3;4 5 6;7 8 9M=1 2 3 4 5 6 7 8 9 M(1,:)=%删除第一行M=4 5 6 7 8 9 M
11、(:,2)=%再删除第二列a=4 6 7 925.N=3 6 9;2 8 4;6 5 1N=3 6 9 2 8 4 6 5 1 N(1:2,:)=%删除第1、2行b=6 5 126.矩阵的转置实数矩阵例:M=1 2 3;4 5 6M=1 2 3 4 5 6 N=M N=1 4 2 5 3 6%共轭转置 L=M.L=1 4 2 5 3 6%转置27.复数矩阵例:M=1+2i 2+3i;2+i 1-iM=1.0000+2.0000i 2.0000+3.0000i 2.0000+1.0000i 1.0000-1.0000i N=MN=1.0000-2.0000i 2.0000-1.0000i 2.0
12、000-3.0000i 1.0000+1.0000i L=M.L=1.0000+2.0000i 2.0000+1.0000i 2.0000+3.0000i 1.0000-1.0000i28.矩阵的加减乘除法例:M=1 2;3 4M=1 2 3 4 N=5 6;7 8N=5 6 7 8 L=M+NL=6 8 10 12 F=M-NF=-4 -4 -4 -429.K=M*N%矩阵乘法,满足矩阵乘法的规则K=19 22 43 50 G=M.*N%点乘(数组乘),对应元素相乘G=5 12 21 32 H=M./N%点除(数组除),对应元素相除H=0.2000 0.3333 0.4286 0.50003
13、0.方阵的行列式例:M=1 3 5;2 8 1;3 2 1M=1 3 5 2 8 1 3 2 1 det(M)ans=-9131.方阵求逆例:M=1 3 5;2 8 1;3 2 1M=1 3 5 2 8 1 3 2 1 N=inv(M)N=-0.0659 -0.0769 0.4066 -0.0110 0.1538 -0.0989 0.2198 -0.0769 -0.022032.矩阵的伪逆当A不是方阵或者是方阵但其行列式值为零的时候,矩阵A没有逆矩阵,但有逆矩阵B,使得A*B*A=AB*A*B=B求伪逆的命令为pinv33.矩阵的秩例:M=1 2 3;2 4 6;2 8 4M=1 2 3 2
14、4 6 2 8 4 rank(M)ans=234.矩阵的特征值例:M=1 2 3;2 4 6;2 8 4M=1 2 3 2 4 6 2 8 4 eig(M)ans=11.8655 -0.0000 -2.865535.矩阵的迹矩阵的迹等于矩阵对角线元素之和,也等于矩阵特征值之和;求矩阵迹的命令是trace36.基本数学函数运算三角函数sin,cos,asin,acos,tan,cot,atan,acot例:M=12 23 62 20 31 2 21 14 15 sin(M)ans=-0.5366 -0.8462 -0.7392 0.9129 -0.4040 0.9093 0.8367 0.990
15、6 0.6503v三角函数计算时采用弧度值37.指数对数运算exp,power,log,log10,sqrt 例:M=1 3 5;2 5 6;2 4 1M=1 3 5 2 5 6 2 4 1 exp(M)ans=2.7183 20.0855 148.4132 7.3891 148.4132 403.4288 7.3891 54.5982 2.718338.M=1 3 5;2 5 6;2 4 1M=1 3 5 2 5 6 2 4 1 power(M,2)ans=1 9 25 4 25 36 4 16 1 log(exp(M)ans=1 3 5 2 5 6 2 4 1 sqrt(power(M,2
16、)ans=1 3 5 2 5 6 2 4 139.取整、求模、求余例:M=-1.5 1.2 1.6;6.2 3.8-8.4M=-1.5000 1.2000 1.6000 6.2000 3.8000 -8.4000 floor(M)%向下取整ans=-2 1 1 6 3 -9 ceil(M)%向上取整ans=-1 2 2 7 4 -8 round(M)ans=-2 1 2 6 4 -8%四舍五入 fix(M)ans=-1 1 1 6 3 -8%向零取整40.N=-5-8 9;2 6 4 N=-5 -8 9 2 6 4 mod(N,2)ans=1 0 1 0 0 0 rem(N,2)ans=-1
17、0 1 0 0 0 M=3 5 8;9 6 7M=3 5 8 9 6 7 mod(M,3)%求模ans=0 2 2 0 0 1 rem(M,3)%求余ans=0 2 2 0 0 1v求模和取余也可以对浮点数进行操作41.符号函数例:M=5-1 0;6-8-5M=5 -1 0 6 -8 -5 sign(M)ans=1 -1 0 1 -1 -1v除了基本数学函数(作用与矩阵各元素)外,还有一些直接作用于矩阵的超越函数如sqrtm,logm,expm等。42.(6)多维数组以三维数组为例,第一维称为行,第二维称为列,第三维称为页逐页创建 M(:,:,1)=1 2;3 4;M(:,:,2)=5 6;7 8;M(:,:,3)=9 10;11 12;43.MM(:,:,1)=1 2 3 4M(:,:,2)=5 6 7 8M(:,:,3)=9 10 11 1244.利用cat命令 M=1 2;3 4;N=5 6;7 8;cat(3,M,N)ans(:,:,1)=1 2 3 4ans(:,:,2)=5 6 7 8例如:一幅彩色图像就是一个三维数组,每一页代表RGB分量中的一个。imread:图像读取imshow:图像显示45.