Matlab基础及其应用教程笔记第二章.docx
《Matlab基础及其应用教程笔记第二章.docx》由会员分享,可在线阅读,更多相关《Matlab基础及其应用教程笔记第二章.docx(27页珍藏版)》请在冰点文库上搜索。
Matlab基础及其应用教程笔记第二章
第二章
2.1.5运算符
矩阵算术运算符
运算符
运算符
示例
法则或使用说明
+
加
C=A+B
矩阵加法法则,即C(i.j)=A(i,j)+B(i.j)
-
减
C=A-B
矩阵减法法则,即C(i.j)=A(i,j)-B(i.j)
*
乘
C=A*B
矩阵乘法法则
/
右除
C=A/B
定义为线性方程组X*B=a的解,即C=A/B=A*B-1
\
左除
C=A\B
定义为线性方程组A*X=B的解,即C=A\B=A-1*B
^
乘幂
C=A^B
A、B其中一个为标量时有定义
'
共轭转置
B=A'
B是A的共轭转置矩阵
数组算术运算符
运算符
名称
示例
法则或使用说明
.*
数组乘
C=A.*B
C(i.j)=A(i,j)*(i,j)
./
数组右除
C=A./B
C(i,j)=A(i,j)/(i,j)
.\
数组左除
C=A.\B
C(i,j)=B(i,j)A(i,j)
.^
数组乘幂
C=A.^B
C(i,j)=A(i,j)^B(i,j)
.'
转置
A.'
将数组的行摆放成列,复数元数不能共轭
关系运算符
运算符
名称
示例
法则或使用说明
<
小于
A
A、B都是标量,结果是或为1(真)或0(假)的标量
A、B若为一个标量,另一个为数组,标量与数组各元数逐一比较,结果为与运算数组行列相同的数组,其中各元数取值或1或0
A、B均为数组时,必须行、列数分别相同,A与B各对应元素相比较,结果为与A或B行列相同的数组,其中各元素取值或1或0
==和~=运算对参与比较的量同时比较实部和虚部,其他运算只比较实部
<=
小于等于
A<=B
>
大于
A>B
>=
大于等于
A>=B
==
恒等于
A==B
~=
不等于
A~=B
2.2.1向量的生成
生成向量主要有3种方案:
直接输入法、冒号表达式法和函数法
1.直接输入法
在命令提示符之后直接输入一个向量,其格式是:
向量名=[a1,a2,a3,…]
例:
>>A=[2,3,4,5,6],B=[1;2;3;4;5],C=[456789];%最后一个分号表示执行后不显示C
2.冒号表达式法
利用冒号表达式a1:
step:
an也能生成向量,式中a1为向量的第一个
一个元素的限定值,step是变化步长,省略步长时系统默认为1。
例:
>>A=1:
2:
10,B=1:
10,C=10:
-1:
1,D=10:
2:
4,E=2:
-1:
10
其运行结果为
A=
13579
B=
12345678910
C=
10987654321
D=
Emptymatrix:
1-by-0
E=
Emptymatrix:
1-by-0
3.函数法
有两个函数可用来直接生成向量。
一个实现线性等分——linspace();另一个实现对数等分——logspace()。
线性等分的通用格式为A=linspace(a1,an,n),其中a1是向量的首元素,an是向量的尾元素,n把a1至an之间的区间分成向量的首尾之外的其他n-2个元素。
省略n则默认生成100个元素的向量。
例:
>>A=linspace(1,50),B=linspace(1,30,10)
对数等分的通用格式为A=logspace(a1,an,n),其中a1是向量首元素的幂,即A
(1)=10a1;an是向量尾元素的幂,即A(n)=10an。
n是向量的维数。
省略n则默认生成50个元素的对数等分向量。
>>A=logspace(0,49),B=logspace(0,4,5)
尽管用冒号表达式和线性等分函数都能生成线性等分向量,但在使用时有几点区别值得注意:
(1)an在冒号表达式中,它不一定恰好是向量的最后一个元素,只有当向量的倒数第二个元素加步长等于an时,an才正好构成尾元素。
如果一定要构成一个以an为末尾元素的向量,那么最可靠的生成方法是用线性等分函数。
(2)在使用线性等分函数前,必须先确定生成向量的元素个数,但使用冒号表达式将依着步长和an的限制去生成向量,用不着去考虑元素个数的多少。
(3)实际应用时,同时限定尾元素和步长去生成向量,有时可能会出现矛盾,此时必须做出取舍。
要么坚持步长优先,调整尾元素限制;要么坚持尾元素限制,去修改等分
步长。
向量的加、减和数乘运算
例:
>>A=[12345];B=3:
7;C=linspace(2,4,3);AT=A';BT=B';
>>E1=A+B,E2=A-B,F=AT-BT,G1=3*A,G2=B/3,H=A+C
其运行结果为
E1=
4681012
E2=
-2-2-2-2-2
F=
-2
-2
-2
-2
-2
G1=
3691215
G2=
1.00001.33331.66672.00002.3333
?
?
?
Errorusing==>+
Matrixdimensionsmustagree.
上述实例执行后,H=A+C显示了出错信息,表明维数不同的向量之间的加减法运算是非法的。
2.2.3向量的点、叉积运算
向量的点积即数量积,叉积又称向量积或矢量积。
1.点积运算
点积运算(A·B)的定义是参与运算的两向量各对应位置上元素相乘后,再将各乘积相加。
所以向量点积的结果是一标量而非向量。
点积运算函数是:
dot(A,B),A、B是维数相同的两向量。
例
>>A=1:
10;B=linspace(1,10,10);AT=A';BT=B';
>>e=dot(A,B),f=dot(AT,BT)
2.叉积运算
在数学描述中,向量A、B的叉积是一新向量C,C的方向垂直于A与B所决定的平面
A=Axi+Ayj+Azk
B=Bxi+Byj+Bzk
C=A×B=(AyBz-AzBy)i+AzBx-AxBz)j+(AxBy-AyBx)k
叉积运算的函数是:
cross(A,B),该函数计算的是A、B叉积后各分量的元素值,且A、B只能是三维向量。
例:
>>A=1:
3,B=3:
5
>>E=cross(A,B)
3.混合积运算
综合运用上述两个函数就可实现点积和叉积的混合运算,该运算也只能发生在三维向量之间
2.3矩阵运算
2.3.2矩阵元素的表示及相关操作
1.元素的下标表示法
(1)全下标方式:
用行下标和列下标来标示矩阵中的一个元素,这是一个被普遍接受和采用的方法。
对一个m×n阶的矩阵A,其第i行、第j列的元素用全下标方式就表示成A(i,j)。
(2)单下标方式:
将矩阵元素按存储次序的先后用单个数码顺序地连续编号。
仍以m×n阶的矩阵A为例,全下标元素A(i,j)对应的单下标表示便是A(s),其中s=(j-1)×m+i。
例:
元素的下标表示
>>A=[123;654;879]
A=
123
654
879
>>A(2,3),A(6)%显示矩阵中全下标元素A(2,3)和单下标元素A(6)的值
ans=
4
ans=
7
>>A(1:
2,3)%显示矩阵A第1、2两行的第3列的元素值
ans=
3
4
>>A(6:
8)%显示矩阵A单下标第6~8号元素的值,此处是用一向量表示一下标区间
ans=
734
2.矩阵元素的赋值
(1)全下标方式:
在给矩阵的单个或多个元素赋值时,采用全下标方式接收。
(2)单下标方式:
在给矩阵的单个或多个元素赋值时,采用单下标方式接收。
(3)全元素方式:
将矩阵B的所有元素全部赋值给矩阵A,即A(:
)=B,不要求A、B同阶,只要求元素个数相等。
例:
1----全下标接收元素赋值
>>clear%不要因工作空间中已有内容干扰了后面的运算
>>A(1:
2,1:
3)=[111;111]%可用一矩阵给矩阵A的1~2行1~3列的全部元素赋值为1
A=
111
111
>>A(3,3)=2%给原矩阵中并不存在的元素下标赋值会扩充矩阵阶数,注%意补0的原则
A=
111
111
002
2----单下标接收元素赋值
>>A(3:
6)=[-111-1]%可用一向量给单下标表示的连续多个矩阵元素赋值
A=
111
111
-1-12
>>A(3)=0;A(6)=0%用单下标对单一元素赋值
A=
111
111
002
3----全元素方式赋值
>>A(:
)=1:
9%将一向量按列之先后赋值给矩阵A,A在上例已被引用
A=
147
258
369
>>A(3,4)=16,B=[111213;141516;171819;000]%扩充矩阵A,生成4×3阶矩阵B
A=
1470
2580
36916
B=
111213
141516
171819
000
>>A(:
)=B%将4×3阶矩阵B按列全部赋给3×4阶矩阵A
A=
1101816
1412019
1715130
3.矩阵元素的删除
在MATLAB中,可以用空矩阵(用[]表示)将矩阵中的单个元素、某行、某列、某矩阵子块及整个矩阵中的元素删除。
例:
>>clear
>>A(2:
3,2:
3)=[11;22]%生成一新矩阵A
A=
000
011
022
>>A(2,:
)=[]%删除A矩阵的第2行,“:
”可表示所有行或列
A=
000
022
>>A(1:
2)=[]%删除新矩阵A的前两个单下标元素,矩阵变成向量
A=
0202
>>A=[]%删除所有元素
A=
[]
2.3.3矩阵的创建
(1)矩阵的所有元素必须放在方括号([])内;
(2)每行的元素之间需用逗号或空格隔开;
(3)矩阵的行与行之间用分号或回车符分隔;
(4)元素可以是数值或表达式。
1.直接输入法:
在命令行提示符“>>”后,直接输入一矩阵的方法即是直接输入法。
2.抽取法:
抽取法是从大矩阵中抽取出需要的小矩阵(或子矩阵)。
1)用全下标方式
>>clear
>>A=[1234;5678;9101112;13141516]
A=
1234
5678
9101112
13141516
>>B=A(1:
3,2:
3)%取矩阵A行数为1~3,列数为2~3的元素构成子矩B
B=
23
67
1011
>>C=A([13],[24])%取矩阵A行数为1、3,列数为2、4的元素构成子矩阵C
C=
24
1012
>>D=A(4,:
)%取矩阵A第4行,所有列,“:
”可表示所有行或列
D=
13141516
>>E=A([24],end)%取2、4行,最后列,用“end”表示某一维数中的最大值
E=
8
16
2)用单下标方式
>>clear
>>A=[1234;5678;9101112;13141516]
A=
1234
5678
9101112
13141516
>>B=A([4:
6;357;12:
14])
B=
1326
9210
1548%从矩阵A中取出单下标4~6的元素做第1行,单下标3、5、7这3个元素做第2行,单下标12~14的元素做第3行,生成一3×3阶新矩阵B
3.拼接法行数与行数相同的小矩阵可在列方向扩展拼接成更大的矩阵
>>A=[123;456;789],B=[98;76;54],C=[456;789]
A=
123
456
789
B=
98
76
54
C=
456
789
>>E=[AB;BA]%行列两个方向同时拼接,请留意行、列数的匹配问题
E=
12398
45676
78954
98123
76456
54789
>>F=[A;C]%A、C列数相同,沿行向扩展拼接
123
456
789
456
789
4.函数法
常用工具矩阵生成函数
函数
功能
zeros(m,n)
生成m×n阶的全0矩阵
ones(m,n)
生成m×n阶的全1矩阵
rand(m,n)
生成取值在0~1之间满足均匀分布的随机矩阵
randn(m,n)
生成满足正态分布的随机矩阵
eye(m,n)
生成m×n阶的单位矩阵
特殊矩阵生成函数
函数
功能
函数
功能
compan
Companion矩阵
magic
魔方矩阵
gallery
Higham测试矩阵
pascal
帕斯卡矩阵
hadamard
Hadamard矩阵
rosser
经典对称特征值测试矩阵
hankel
Hankel矩阵
toeplitz
Toeplitz矩阵
hilb
Hilbert矩阵
vander
范德蒙矩阵
invhilb
反Hilbert矩阵
wilkinson
Wilkinson's特征值测试矩阵
例:
用函数生成矩阵
>>A=ones(3,4),B=eye(3,4),C=magic(3)
A=
1111
1111
1111
B=
1000
0100
0010
C=
816
357
492
>>formatrat;D=hilb(3),E=pascal(4)%rat的数值显示格式可将小数用分数表示
D=
11/21/3
1/21/31/4
1/31/41/5
E=
1111
1234
13610
141020
n阶魔方矩阵的特点是每行、每列和两对角线上的元素之和各等于(n
3+n)/2。
例如上例中3阶魔方阵每行、每列和两对角线元素和为15。
希尔伯特矩阵的元素在行、列方向和对角线上的分布规律是显而易见的,而帕斯卡矩阵在其副对角线及其平行线上的变化规律实际上就是中国人称为杨辉三角而西方人称帕斯卡三角的变化规律。
5.拼接函数和变形函数法
拼接函数法是指用cat和repmat函数将多个或单个小矩阵或沿行、或沿列方向拼接成一个大矩阵。
cat函数的使用格式是:
cat(n,A1,A2,A3,…),n=1时,表示沿行方向拼接;n=2,表示沿列方向拼接。
n可以是大于2的数字,此时拼接出的是多维数组,2.4.2节将会加以讨论。
repmat函数的使用格式是:
repmat(A,m,n…),m和n分别是沿行和列方向重复拼接矩阵A的次数。
例:
>>A1=[123;987;456],A2=A1.'
A1=
123
987
456
A2=
194
285
376
>>cat(1,A1,A2,A1)%沿行向拼接
ans=
123
987
456
194
285
376
123
987
456
>>cat(2,A1,A2)%沿列向拼接
ans=
123194
987285
456376
>>repmat(A1,2,2)
ans=
123123
987987
456456
123123
987987
456456
>>repmat(A1,2,1)
ans=
123
987
456
123
987
456
>>repmat(A1,1,3)
ans=
123123123
987987987
456456456
变形函数法主要是把一向量通过变形函数reshape变换成矩阵,当然也可将一个矩阵变换成一个新的、与之阶数不同的矩阵。
reshape函数的使用格式是:
reshape(A,m,n…),m和n分别是变形后新矩阵的行列数。
例:
>>A=linspace(2,18,9)
A=
24681012141618
>>B=reshape(A,3,3)%注意新矩阵的排列方式,从中体会矩阵元素的存储次序
B=
2814
41016
61218
>>a=20:
2:
24;b=a.';%生成3个元素的列向b,便于将矩阵B扩展成3×4阶的矩阵C
>>C=[Bb],D=reshape(C,4,3)%将3×4阶的矩阵C变形成4×3阶的矩阵D
C=
281420
4101622
6121824
D=
21018
41220
61422
81624
6.加载法
加载用的菜单是命令窗口中的File|ImportData,而命令则是load。
例:
>>clear
>>loadsl2_19%从外存中加载事先保存在可搜索路径中的数据文件sl2_19.mat
>>who%询问加载的矩阵名称,参见1.8节表1.8的命令
Yourvariablesare:
A
>>A%显示加载的矩阵内容
A=
4567
1234
9876
7.M文件法
M文件法和加载法其实十分相似,都是将事先保存在外存中的矩阵读入内存工作空间中,不同点在于加载法读入的是数据文件(.mat),而M文件法读入的是内容仅为矩阵的.m文件。
2.3.4矩阵的代数运算
1.求矩阵行列式的值由函数det(A)实现。
>>A=[324;1-15;2–13],D1=det(A)
A=
324
1-15
2-13
D1=
24
2.矩阵加减、数乘与乘法
>>A=[13;2–1];B=[30;12];
>>A+B
ans=
43
31
>>2*A
ans=
26
4-2
>>2*A-3*B
ans=
-76
1-8
>>A*B
ans=
66
5-2
3.求矩阵的逆矩阵只需调用函数inv(A)即可实现。
>>A=[101;212;046]
A=
101
212
046
>>formatrat;A1=inv(A)
A1=
-1/32/3-1/6
-210
4/3-2/31/6
4.矩阵的除法左除即A\B=inv(A)*B,右除即A/B=A*inv(B)。
5.求矩阵的秩求秩运算是由函数rank(A)完成。
6.求矩阵的特征值与特征向量
求矩阵A的特征值和特征向量的数值解,有两个函数可用:
一是[X,λ]=eig(A),另一是[X,λ]=eigs(A)。
但后者因采用迭代法求解,在规模上最多只给出6个特征值和特征向量。
>>A=[1-33;3-53;6-64],[X,Lamda]=eig(A)
A=
1-33
3-53
6-64
X=
0.40820.4082-0.1203
0.4082-0.4082-0.7595
0.8165-0.8165-0.6393
Lamda=
4.000000
0-2.00000
00-2.0000
Lamda用矩阵对角线方式给出了矩阵A的特征值为λ1=4,λ2=λ3=-2。
而与这些特征值相应的特征向量则由X的各列来代表,X的第1列是λ1的特征向量,第2列是λ2的,其余类推。
必须说明,矩阵A的某个特征值对应的特征向量不是有限的,更不是唯一的,而是无穷的。
所以,例中结果只是一个代表向量而已。
有关知识请参阅线性代数教材。
7.矩阵的乘幂与开方
矩阵的乘幂运算A^n,矩阵的开方运算由函数sqrtm(A)实现。
8.矩阵的指数与对数
矩阵指数运算的函数有多个,例如expm()、expm1()、expm2()和expm3()等,其中最常用的是expm(A);而对数运算函数则是logm(A)。
9.矩阵转置
单纯的转置运算可以用函数transpose(Z)实现
10矩阵结构形式提取与翻转函数
函数
功能
Triu(A)
提取矩阵A的右上三角元素,其余元素补0
Tril(A)
提取矩阵A的左下三角元素,其余元素补0
Diag(A)
提取矩阵A的对角线元素
Flipud(A)
矩阵A沿水平轴上下翻转
Fliplr(A)
矩阵A沿垂直轴左右翻转
Flipdim(A,dim)
矩阵A沿特定轴翻转。
Dim=1,按行翻转;dim=2,按列翻转
Rot90(A)
矩阵A整体逆时针旋转900
>>a=linspa