1、行向量的定义
rowvec = [1.2 3 56];
2、列向量的定义
colvec = [1.2;3;56];
3、逐个元素的分配矩阵
B(1,1) = 1 ;
B(1,2) = 2 ;
B(2,1) = 3 ;
B(2,2) = 4 ;
B =
1 2
3 4
注意:矩阵的下标从1开始计数
4、矩阵的输入
直接输入矩阵时候,矩阵元素用“空格”或者“逗号”隔开,矩阵行用“分号”隔离,整个矩阵放在方括号“[ ]”内.不必事先对矩阵维数做任何说明.
例如:
A = [1,2,3;4,5,6;7,8,9]
或者
A = [1 2 3;4 5 6;7 8 9]
还可以分行输入:
A=[1 2 3;
4 5 6;
7 8 9]
注意:
表达符号一定要在英文状态下输入.MATLAB对矩阵大小写是敏感的.如果不用clear指令清楚,或者重新赋值,那么该矩阵就会一直保存在工作空间中,直到指令窗(Command Window)关闭.
5、矩阵、零矩阵和单位矩阵
1矩阵的所有元素全为1,零矩阵的所有元素全为零.
ones(n) %建立一个n×n的1矩阵
ones(m,n,……,p) %建立一个m×n×……×p的1矩阵
ones(size(A)) %建立一个和矩阵A同样大小的1矩阵
zeros(n) %建立一个n×n的0矩阵
zeros(m,n,……,p) %建立一个m×n×……×p的0矩阵
zeros(size(A)) %建立一个和矩阵A同样大小的0矩阵
eye(n) %建立一个n×n的单位矩阵
eye(m,n) %建立一个m×n的单位矩阵
eye(size(A)) %建立一个和矩阵A同样大小的单位矩阵
例如:输入OneMatrix = ones(2,3,2)
则结果为:
OneMatrix(:,:,1) =
1 1 1
1 1 1
OneMatrix(:,:,2) =
1 1 1
1 1 1
注意:eye命令只能用来建立二维矩阵
6、随机数和随机矩阵
rand %产生在0~1之间均匀分布的随机数;每调用一次给一个新的数值.
rand + i*rand %产生一个复数随机数
rand(n) %产生一个n×n的矩阵,其元素均为0~1之间均匀分布的随机数.
rand(m,n,……,p) %产生一个m×n×……×p的矩阵,其元素均为0~1之间均匀分布的随机数.
randn %产生零均值、单位方差的正太分布随机数
randn(n) %产生一个n×n的矩阵,其元素均为零均值、单位方差的正太分布随机数.
randn(m,n,……,p) %产生一个m×n×……×p的矩阵, 其元素均为零均值、单位方差的正太分布随机数.
7、随机数种子
rand(‘state’) %返回一个有35个元素的向量,其中包含随机发生器的当前状态.
rand(‘state’,s) %设置随机种子发生器的状态为s
rand(‘state’,0) %设置随机种子发生器为它的原始状态
rand(‘state’,j) %设置随机种子发生器为它的第j种子状态,j为整数
rand('state',sum(100*clock)); %使用clock命令,使得随机种子发生器在每个不同的时刻都设置为不同的状态.
rand(‘state’,arg) %使用MATLAB中的随机种子发生器.
randn(‘state’,) %返回一个有两个元素的向量,其中包含正态随机种子发生器的状态
randn(‘state’,arg) %根据arg设置正态随机种子发生器,见rand.
例如
astate = rand('state'); astate(1:5)
ans =
0.8651
0.5121
0.9021
0.8186
0.6267
说明:astate(1:5)表示列出状态向量(35个元素)中的前5个元素的值
8、从已存在的向量中产生新的矩阵(一)
diag(A) %生成一个由矩阵A主对角线元素组成的列向量,主对角线总是从矩阵左上角开始,对于方阵来说它结束于矩阵的右下角.
diag(x) %x为一个n维向量.生成一个n维方阵,它的主对角线元素取自向量x,其余元素的值都为零.
diag(A,k) %生成一个由矩阵A第k条对角线元素组成的列向量。k=0为主对角线;K<0为主对角线下第条对角线;k>0为主对角线上第K条对角线.
dialog(x,k) %生成一个(n +)*(n+)维的矩阵,该矩阵的第k条对角线元素取自x,其余元素为0.(n为x的维数)
例一:
A =
1 2 3
4 5 6
7 8 9
diag(A)=
1
5
9
例二:
x = [1 2 3];
diag(x) =
1 0 0
0 2 0
0 0 3
例三:(A为例一中的A)
diag(A,0) =
1
5
9
diag(A,1) =
2
6
diag(A,-1) =
4
8
例四:(x为例二中的x)
diag(x,1) =
0 1 0 0
0 0 2 0
0 0 0 3
0 0 0 0
diag(x,-2) =
0 0 0 0 0
0 0 0 0 0
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
9、从已存在的矩阵中生成新的矩阵(二)
triu(A) %生成一个和A同样大小的上三角矩阵。该矩阵的主对角线及以上元素取自A中的相应元素,其余元素都为0.
triu(A,k) %生成一个和A同样大小的上三角矩阵。该矩阵的第k条对角线及以上元素取自A中的相应元素,其余元素都为0.命令triu(A,0)等价于triu(A).
tril(A) %生成一个和A同样大小的下三角矩阵。该矩阵的主对角线及以下元素取自A中的相应元素,其余元素都为0.
tril(A,k) %生成一个和A同样大小的下三角矩阵。该矩阵的第k条对角线及以下元素取自A中的相应元素,其余元素都为0.命令tril(A,0)等价于tril(A).
对于每一个方阵A都有以下关系:
A = triu(A) +tril(A) – diag(diag(A));
A = triu(A,1) + tril(A,-1) + daig(diag(A)).
例一:
A =
1 2 3
4 5 6
7 8 9
triu(A) =
1 2 3
0 5 6
0 0 9
triu(A,1) =
0 2 3
0 0 6
0 0 0
tril(A,-1) =
0 0 0
4 0 0
7 8 0
例二:
B =
1 2 3 4
5 6 7 8
9 1 0 5
triu(B) =
1 2 3 4
0 6 7 8
0 0 0 5
tril(B,-1) =
0 0 0 0
5 0 0 0
9 1 0 0
10、矩阵旋转和矩阵变维
例一:
A =
1 2
3 4
5 6
fliplr(A) = flipdim(A,2) =
2 1
4 3
6 5
例二:
B =
2 2 3
4 6 6
7 8 10
flipud(B) = flipdim(B,1) =
7 8 10
4 6 6
2 2 3
例三:(例二中的B)
rot90(B) =
3 6 10
2 6 8
2 4 7
例四:(例二中的B)
rot90(B,2) =
10 8 7
6 6 4
3 2 2
例五:
OneMatrix = ones(3,4,2)
reshape(OneMatrix,3,8) =
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
例六:(例二中的B)
repmat(B,2,3) =
2 2 3 2 2 3 2 2 3
4 6 6 4 6 6 4 6 6
7 8 10 7 8 10 7 8 10
2 2 3 2 2 3 2 2 3
4 6 6 4 6 6 4 6 6
7 8 10 7 8 10 7 8 10
例七:
y = 3 ;
repmat(y,2,5) =
3 3 3 3 3
3 3 3 3 3
例八:
E =
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
C = zeros(3,8);
D = cat(3,E,C)
ans(:,:,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
ans(:,:,2) =
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
即在矩阵E中增加了一层零元素.
11、矩阵维数的扩展
(1)扩展列向量的列
将向量x=[9,10]扩展成xnew=[9,10,3,2],有下列办法:
方法一:xnew = x ;xnew(3) = 3 ;xnew(4) = 2;
方法二:xnew = [x 3 2];
方法三:tmp = [0,15]; xnew = [x tmp];
(2)扩展矩阵的列
将 A = [1 2;3 4]扩展成Anew = [1 2 11;3 4 12],有下列方法:
方法一:y = [11;12],Anew = [A y];
方法二:Anew = [A [11;12]]
(3)扩展矩阵的行
将A = [1 2;3 4]扩展成Anew = [1 2;3 4;13 14],有下列办法:
方法一:z = [13 14],Anew = [A; z]
方法二:Anew = [A;[13 14]]
(4)矩阵的赋值扩展法
A = reshape(1:9,3,3)
A =
1 4 7
2 5 8
3 6 9
A(4,4) = 111;
A =
1 4 7 0
2 5 8 0
3 6 9 0
0 0 0 111
A(:,6) = 222
A =
1 4 7 0 0 222
2 5 8 0 0 222
3 6 9 0 0 222
0 0 0 111 0 222
A(5,:) = 250
A =
1 4 7 0 0 222
2 5 8 0 0 222
3 6 9 0 0 222
0 0 0 111 0 222
250 250 250 250 250 250
12、数字序列
(1)数字序列一
i:k %创建从i开始、步长为1、到k结束的数字序列.数字i和k不一定是整数,该序列最后一个数小于或等于k.
i:j:k %创建创建从i开始、步长为j、到k结束的数字序列.数字i、j和k不一定是整数,该序列最后一个数小于或等于k.
(2)数字序列二
linspace(a,b) %在区间[a,b]上创建一个有100个元素的向量,这100个数把整个区间线性分隔.
linspace(a,b,n) %在在区间[a,b]上创建一个有n个元素的向量,这n个数把整个区间线性分隔.
logspace(a,b) %在区间[10*a,10*b]上创建一个有50个元素的向量,这50个数把整个区间对数分隔.
logspace(ab,n) %在区间[10*a,10*b]上创建一个有n个元素的向量,这n个数把整个区间对数分隔.
例一:
vect = 2:7
vect = 2 3 4 5 6 7
vect = 2:7.2
vect = 2 3 4 5 6 7
vect = 6:-1:2
vect = 6 5 4 3 2
vect = 1.2:-0.8:-3.2
1.2000 0.4000 -0.4000 -1.2000 -2.0000 -2.8000
注意:此时最后一个数为-2.8.
例二:
linspace(1,5,6)
ans =
1.0000 1.8000 2.6000 3.4000 4.2000 5.0000
13、定义子阵
A(i,j,……,k) %返回多维数组A中下标为(i,j,……,k)的元素值.
A(:,j) %返回二维矩阵A中第j列列向量.
A(i,:) %返回二维矩阵A中第j行行向量.
A(:,j:k) %返回二维矩阵A中的第j列,第j+1列,……,第k列列向量组成的子阵.
A(i:k,:) %返回二维矩阵A中的第i行,第i+1行,……,第k行行向量组成的子阵.
A(i:k,j:L) %返回二维矩阵A中的第i行到第k行行向量和第j列到第L列列向量组成的子阵.
A(:,:,……,:) %返回矩阵A本身.
A(:) %将矩阵A中的每列合成一个长的列向量.
A(j:k) %返回一个行向量,其中的元素为A(:)中的从第j个元素到第k个元素.
A([j1,j2,……]) %返回一个行向量,其中的元素为A(:)中的第j1,j2,……元素.
A(:,[j1,j2,……]) %返回矩阵A的第j1列、第j2列、……的列向量.
A([j1,j2,……],:) %回矩阵A的第j1行、第j2行、……的行向量.
A([i1,i2,……],[j1,j2,……]) %返回矩阵第i1行、第i2行等和第j1列、第j2列等的元素.
14、将二维矩阵合成三维矩阵
>> A1 = [1 2;3 4];
>> A2 = [3 4 ;5 6];
>> C(:,:,1)=A1;
>> C(:,:,2)=A2;
>> C
C(:,:,1) =
1 2
3 4
C(:,:,2) =
3 4
5 6
此时C为三维矩阵.
15、删除矩阵的行
【例一】
>> a = [1 2 3;4 5 6;7 8 9]
a =
1 2 3
4 5 6
7 8 9
>> a = a([2,3],:)
a =
4 5 6
7 8 9
【例二】
>> a = [1 2 3;4 5 6;7 8 9]
a =
1 2 3
4 5 6
7 8 9
>> a(1,:) = []
a =
4 5 6
7 8 9
16、删除矩阵的列
【例一】
>> a = [1 2 3;4 5 6;7 8 9]
a =
1 2 3
4 5 6
7 8 9
>> a = a(:,[1,3])
a =
1 3
4 6
7 9
【例二】
>> a = [1 2 3;4 5 6;7 8 9]
a =
1 2 3
4 5 6
7 8 9
>> a(:,2) = []
a =
1 3
4 6
7 9
17、数组寻址和排序
18、矩阵及数组运算
18.1矩阵加减
两矩阵必须同阶才可进行加减运算,另外MATLAB还特别作了扩充,允许矩阵与一个数量(即1×1矩阵)进行加减运算。
例如键入A=[1,2,3;4,5,6;7,8,9],B=[1,4,7;2,5,8;3,6,9],则 C=A+B 的结果显示为:
如果键入x=[-1,0,2],则y=x-1的结果为:
18.2矩阵乘法
当左乘矩阵的列数等于右乘矩阵的行数时,两矩阵可以进行乘法。在MATLAB中,矩阵A乘以矩阵B应表示成A*B。
18.3矩阵除法
MATLAB中有两种除法,即左除“\”与右除“/”。
若A为非奇异方阵,B为矩阵,则A\B,B/A的数学意义分别为 。在MATLAB中,这两种运算也可以分别表示为inv(A)*B,B*inv(A)。
18.4数组的乘除运算
18.5数组的乘方
数组的乘方用符号“.^”来表示,而数组的乘方有三种形式。
1 向量的向量次方
例如:键入x =[1,2,3], y =[4,5,6],z=x.^y,则结果为:
z=
1 32 729
它的数学意义是 。
2 向量的数量次方
例如:键入x =[1,2,3],z=x.^2,则结果为:
z=
1 4 9
它的数学意义是 。
3 数量的向量次方
例如:键入x =[1,2,3],z=2.^x,则结果为:
z=
2 4 8
它的数学意义是 。
19、向量的关系运算
MATLAB提供了6种关系运算符:<(小于)、<=(小于或等于)、>(大于)、 >=(大于或等于)、 ==(等于)、 ~=(不等于)。
关系运算的运算法则为:
1 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式的值为1,否则为0。
2 当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同,它的元素由0或1组成。
3 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。
例如
若键入x=(1<2)
则x =
1
若键入A=[1,2,3;2,3,4],B=[1,2,2;2,2,3],C=(A<=B)
则 C =
1 1 0
1 0 0
若键入A=[1,2,3;2,3,4],b=1,C=(A<=b)
则 C =
1 0 0
0 0 0
20、向量的逻辑运算
MATLAB提供了3种逻辑运算符:&(与)、|(或)、~(非)。
逻辑运算的运算法则为:
1 在逻辑运算中,确认非零元为真,用1表示,零元素为假,用0表示。
2 设参与逻辑运算的是两个标量a和b,那么
a&b a,b全为非零时,运算结果为1,否则为0。
a|b a,b中只要有一个非零时,运算结果为1;只有当a,b全为零时,运算结果为0。
~a 当a为零时,运算结果为1;当a非零时,运算结果为0。
3 若参与逻辑运算的是两个同维矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算的结果是一个与原矩阵同维的矩阵,其元素由0或1组成。
4 若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同维的矩阵,其元素是由0或1组成。
5 若对一个矩阵做逻辑非运算,那么将对矩阵中的每个元素按标量规则逐个取逻辑非,最终运算的结果是一个与原矩阵同维的矩阵,其元素由0或1组成。
6 在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。
例如,若键入A=[0,2,3;0,2,0],B=[0,0,0;2,3,4],A&B,A|B,~A,则其结果分别为
ans =
0 0 0
0 1 0
ans =
0 1 1
1 1 1
ans =
1 0 0
1 0 1
21、判断矩阵是否为空
Isempty(Matrix) ;
如果矩阵为空则返回1,否则返回0;
22、求行列式及化阶梯形
【例一】:求矩阵A的行列式:det(A)
例:A=[1 2;3 4] ;
则det(A) = -2 ;
【例二】:化阶梯形
A =
4 5 6
1 2 3
7 8 9
>> rref(A)
ans =
1 0 -1
0 1 2
0 0 0
23、求矩阵的转置及矩阵的秩
23.1矩阵的转置
求矩阵A的转置矩阵:A’
转置符号为单引号.
23.2求矩阵的秩
例:
>> X = [1 3 5;5 -9 0; 32 1 18];
>> rank(X)
ans =
3
24、求矩阵的逆矩阵及迹
求矩阵A的逆矩阵:inv(A)
求矩阵A的迹:trace(A)
例:a= [1 2;3 4];
则
trace(A) = 5.
25、矩阵及向量的最大值、最小值
25.1向量的最大值及最小值
- max(P) :返回向量P的最大值,如果P中包含复数元素,则按模取最大值。
- [y,i] = max(P) :返回向量P的最大值存入y,最大值的序号存入i,如果P中包含复数元素,则按模取最大值。
- 求向量的最小值的函数min(P)用法同max(P)。
25.2矩阵的最大值及最小值
- max(A) : 返回一个行向量,向量的第i个元素为矩阵A的第i列的最大值。
- [y,u] = max(A) : 返回行向量y和u,y记录A的每列的最大值,u记录每列最大值的行号。
- max(A,[],dim) : dim取1时,该函数和max(A完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行的最大值。
- 求矩阵的最小值函数min(A)用法同max(A)。
- 使用max(max(A))可以求出矩阵中的最大元素,同理min(min(A))可以求出矩阵中的最小元素。
26、计算矩阵大小及元素个数
26.1计算矩阵大小
size(A),返回的是矩阵A的列数和行数;
size(A,1),返回矩阵A的行数;
size(A,2),返回矩阵A的列数。
>>A = [1 2 5;3 4 9];
则size(A) = 2 3
size(A,1) = 2
size(A,2) = 3
26.2计算矩阵中的元素个数
使用函数numel()
当矩阵为一个行向量或者一个列向量时候,返回的该向量的长度,当矩阵为M*N时,返回值为M*N.
例:A = [1 2 3 4;5 6 7 8];
则numel(A) = 8.
26.3计算矩阵的维数
n = ndims(A);返回矩阵的维数,若A为三维数组,则n=3.
27、LU分解
矩阵的三角分解又称LU分解,它的目的是将一个矩阵分解成一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。
函数: lu
格式 [L,U] = lu(X) %U为上三角阵,L为下三角阵或其变换形式,满足LU=X。
[L,U,P] = lu(X) %U为上三角阵,L为下三角阵,P为单位矩阵的行变换矩阵,满足LU=PX。
例:
>> X = [1 3 5;5 -9 0; 32 1 18];
>> [p,q,r] = lu(X)
p =
1.0000 0 0
0.1563 1.0000 0
0.0313 -0.3242 1.0000
q =
32.0000 1.0000 18.0000
0 -9.1563 -2.8125
0 0 3.5256
r =
0 0 1
0 1 0
1 0 0
28、QR分解(求正交矩阵)
将矩阵A分解成一个正交矩阵与一个上三角矩阵的乘积。
函数: qr
格式: [Q,R] = qr(A) %求得正交矩阵Q和上三角阵R,Q和R满足A=QR。
例:
>> X = [1 3 5;5 -9 0; 32 1 18];
>> [p ,q] = qr(X)
p =
0.0309 0.3156 0.9484
0.1543 -0.9390 0.3075
0.9875 0.1368 -0.0777
q =
32.4037 -0.3086 17.9300
0 9.5344 4.0415
0 0 3.3436
29、求特征值及特征向量
函数 eig
格式 d = eig(A) %求矩阵A的特征值d,以向量形式存放d。
【例一】
>> X = [1 3 5;5 -9 0; 32 1 18];
>> D = eig(X)
D =
24.8632
-3.7328
-11.1305
【例二】
>> X = [1 3 5;5 -9 0; 32 1 18];
>> [d,v] = eig(X)
d =
-0.2087 -0.4880 0.3641
-0.0308 -0.4632 -0.8545
-0.9775 0.7398 -0.3706
v =
24.8632 0 0
0 -3.7328 0
0 0 -11.1305
说明:矩阵d的列向量构成特征向量,v中的正对角线上的元素为特征值。
30、奇异值分解
函数 svd
格式 s = svd (X) %返回矩阵X的奇异值向量
[U,S,V] = svd (X) %返回一个与X同大小的对角矩阵S,两个酉矩阵U和V,且满足= U*S*V'。若A为m×n阵,则U为m×m阵,V为n×n阵。奇异值在S的对角线上,非负且按降序排列。
[U,S,V] = svd (X,0) %得到一个“有效大小”的分解,只计算出矩阵U的前n列,矩阵S的大小为n×n。
【例】:
>> X = [1 3 5;5 -9 0; 32 1 18];
>> S = svd(X)
S =
37.1225
10.2231
2.7220
>> [U,S,V] = svd(X)
U =
-0.0902 0.4116 -0.9069
-0.1159 -0.9088 -0.4009
-0.9892 0.0689 0.1296
S =
37.1225 0 0
0 10.2231 0
0 0 2.7220
V =
-0.8707 -0.1885 0.4543
-0.0058 0.9276 0.3736
-0.4918 0.3227 -0.8087
>> [U,S,V] = svd(X,0)
U =
-0.0902 0.4116 -0.9069
-0.1159 -0.9088 -0.4009
-0.9892 0.0689 0.1296
S =
37.1225 0 0
0 10.2231 0
0 0 2.7220
V =
-0.8707 -0.1885 0.4543
-0.0058 0.9276 0.3736
-0.4918 0.3227 -0.8087