矩阵是MATLAB最基本的数据对象,其大部分运算或者命令都是在矩阵运算的意义下执行的,所以创建矩阵是MATLAB最基本的操作,在MATLAB中有三种方式创建矩阵。
1.直接输入法
将矩阵的元素用方括号括起来,按照矩阵行的顺序输入各元素,同一行元素之间用空格或者逗号(其中空格的个数没有限制)进行分隔,不同行元素之间用分号分隔开来,也可以用回车键来代替分号。
例如,键入命令::
A=[1 2 3;4 5 6;7 8 9]
输出结果为:
A =
1 2 3
4 5 6
7 8 9
2.函数创建矩阵法
MATLAB提供了许多生成矩阵的函数和矩阵操作函数,可以用来进行创建矩阵。
(1)全零矩阵的创建
函数为:zeros()
格式为:Y=zeros(n) %生成nXn全零阵 Y=zeros(m,n) %生成mXn全零阵
【例】生成一个4X3全零阵
>> A=zeros(4,3)
A =
0 0 0
0 0 0
0 0 0
0 0 0
(2)单位矩阵
函数为:eye()
格式为:Y=eye(n) %生成nXn的单位阵
(3)全一矩阵的创建
函数为:ones()
格式为:Y=ones(n)%生成nxn全一阵 Y=ones(m,n)%生成mXn全一阵
(4)均匀分布随机矩阵创建
函数为:rand(()
格式为:Y=rand(n)%生成nxn的随机矩阵,其元素在0~1内
Y=rand(m,n)%生成mXn随机矩阵,其元素在0~1内
(5)以输入元素为对角线元素的矩阵的创建
函数为:blkdiag()
格式为:out=blkdiag(a,b,c,d,...)%产生以a,b,c,d,...为对角线元素的矩阵
(6)Magic(魔方)矩阵的创建
函数为:magic()
格式为:M=magic(n)%产生n阶魔方阵
【例】生成4X3全零阵,3阶单位矩阵,3X2全一阵,4阶随机矩阵,4阶魔方阵以及以2,3,4,6,7为对角线元素的对角矩阵。
>> A=zeros(4,3)
A =
0 0 0
0 0 0
0 0 0
0 0 0
>> B=eye(3)
B =
1 0 0
0 1 0
0 0 1
>> C=ones(3,2)
C =
1 1
1 1
1 1
>> D=rand(4)
D =
0.8147 0.6324 0.9575 0.9572
0.9058 0.0975 0.9649 0.4854
0.1270 0.2785 0.1576 0.8003
0.9134 0.5469 0.9706 0.1419
>> E=magic(4)
E =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> F=blkdiag(2,3,4,6,7)
F =
2 0 0 0 0
0 3 0 0 0
0 0 4 0 0
0 0 0 6 0
0 0 0 0 7
3.利用M文件创建矩阵
对于比较大且比较复杂的矩阵,可以专为它建立一个M文件步骤如下
第一步:使用编程程序输入矩阵
第二步:把输入的矩阵以纯文本的形式存盘,并把文件名改为*.m,
第三步:在MATLAB命令窗口输入文件名,就会建立一个矩阵,可供以后显示和调用。
1.矩阵的基本运算
(1)矩阵或者向量的四则运算
a.加减运算,运算符为“+”和“-”,运算规则为对应元素相加减,即按照线性代数中矩阵的加减运算进行。
b.乘法运算,运算符为“*”,运算规则为按照线性代数中矩阵的乘法运算进行,即在前面的矩阵的各行元素分别与放在后面的矩阵的各列元素对应相乘并相加。
c.矩阵的数乘,数乘矩阵,运算符为“*”,例如a=2*X
d.除法运算,MATLAB提供了两种除法运算:左除(\)和右除(/)。一般情况下,x=a\b是方程a*x=b的解,而x=b/a则是方程x*a=b的解。
【例】
>> A=[1 2 3;4 5 6;7 8 9];
>> B=[1 0 0;1 2 0;0 0 3];
>> C=3*A
C =
3 6 9
12 15 18
21 24 27
>> D=A+B
D =
2 2 3
5 7 6
7 8 12
>> E=A*B
E =
3 4 9
9 10 18
15 16 27
(2)矩阵乘方,运算符为“^”
运算规则:当A为方针,P为大于零的整数时,A^P表示A的P次方,即A自乘P次;当P为小于0的整数时,A^P表示A逆矩阵的P次方。
(3)矩阵转置,运算符为“ ' ”
运算规则为:若矩阵A的元素为实数,则与线性代数中矩阵的转置相同;若A为复数矩阵,则A转置后的元素由对应 的元素的共轭复数构成。
若仅进行转置,则用命令A'
2.矩阵或向量的高等运算
常用的矩阵或者向量的函数如表所示:
函数命令 | 功能 | 函数命令 | 功能 |
inv | 矩阵求逆 | trace | 求矩阵的迹 |
rank | 矩阵求秩 | eig | 矩阵的特征值 |
det | 矩阵的行列式 | dot | 两个维数相同的向量的点乘 |
rref | 将矩阵化为行最简形 | cross | 两个维数相同的向量的叉乘 |
orth | 正交基 | norm | 向量的范数 |
(1)逆
函数:inv
格式:Y=inv(X)%求矩阵X的逆矩阵,若x为奇异阵,将给出警告信息。
(2)矩阵的秩
函数:rank
格式:k=rank(A) %求矩阵A的秩
k=rank(A,tol)%tol为给定误差
(3)方阵的行列式
函数:det
格式:d=det(X)%返回方针x的行列式的值
(4)矩阵化成行最简形
函数:rref或者rrefmovie
格式:R=rref(A)%用高斯---约当消元法和行主元法求A的行最简形矩阵
R=rrefmovie(A)%给出每一步化简的过程
(5)正交基
函数:orth
格式:B=orth(A)%将矩阵A正交规范化,B的列与A的列具有相同的空间,B的列向量是正交向量,且满足B'*B=eye(rank(A))
(6)矩阵的特征值
函数:eig()
格式:
d=eig(A)%求矩阵A的特征值d,以向量形式存放在d中
d=eig(A,B)%A,B为方阵,求广义特征值d,以向量形式存放在d中
[V,D]=eig(A)%计算A的特征值对角阵D和特征向量V,使得AV=VD成立
[V,D]=eig(A,'noblance')%当矩阵A中有以截断误差数量级相差不远的值时,该指令可能 更加精确,‘nobanlance’起到误差调节 的作用
[V,D]=eig(A,B)%计算广义特征值向量阵V和广义特征值阵D,满足AV=BVD
[V,D]=eig(A,B,flag)%由flag指定算法计算特征值D和特征向量V,flag可能值为:‘chol’,表 示对B使用Cholesky分解算法,这里A为对称Hermitian矩阵,B为正 定阵;‘qz’,表示使用QZ算法,这里A,B为非对称或者非Hermitian矩阵.
说明:一般特征值问题是求解方程:Ax=mx解的问题。广义特征值问题是求解方程: Ax=mBx解的问题。
(7)向量的点乘(内积):维数相同的两个向量的点乘
函数:do()
格式:C=dot(A)%若A,B为向量,则返回向量A和B的点积,A与B的长度相同,若为 矩阵,则A与B有相同的维数
C=dot(A,B,dim)%在dim维数中给出A与B的点积
(8)向量叉乘
两向量叉乘是过两相交向量的交点且垂直于两向量所在平面的向量,在MATLAB中使用函 数cross实现。
函数:cross
格式:C=cross(A,B)%若A,B为向量,则返回A与B的叉乘。
(9)向量的范数
函数:norm
格式:n=norm(X)%X为向量,求欧几里德范数,即||X||2=sqrt(sum{(1:n):|Xk|^2})
【例】求矩阵A的逆矩阵
>> A=[1 2 3;2 2 1;3 4 3];
>> Y=inv(A),Z=A^(-1)
Y =
1.0000 3.0000 -2.0000
-1.5000 -3.0000 2.5000
1.0000 1.0000 -1.0000
Z =
1.0000 3.0000 -2.0000
-1.5000 -3.0000 2.5000
1.0000 1.0000 -1.0000
>> B=[1 2 3 1 0 0;2 2 1 0 1 0;3 4 3 0 0 1]
B =
1 2 3 1 0 0
2 2 1 0 1 0
3 4 3 0 0 1
>> C=rref(B)
C =
1.0000 0 0 1.0000 3.0000 -2.0000
0 1.0000 0 -1.5000 -3.0000 2.5000
0 0 1.0000 1.0000 1.0000 -1.0000
>> X=C(:,4:6)
X =
1.0000 3.0000 -2.0000
-1.5000 -3.0000 2.5000
1.0000 1.0000 -1.0000
【例】求矩阵的行列式以及秩
>> A=[1 2 3;2 2 1;3 4 3]
A =
1 2 3
2 2 1
3 4 3
>> B=det(A)
B =
2.0000
>> C=rank(A)
C =
3
【例】求矩阵的特征值和特征向量
>> A=[-2 1 1;0 2 0;-4 1 3]
A =
-2 1 1
0 2 0
-4 1 3
>> [V,D]=eig(A)
V =
-0.7071 -0.2425 0.3015
0 0 0.9045
-0.7071 -0.9701 0.3015
D =
-1 0 0
0 2 0
0 0 2
【例】计算向量的混合积
>> a=[1,2,3];b=[4,5,6];c=[-3,6,-3];
>> x=dot(a,cross(b,c))
x =
54
【例】将矩阵正交规范化
>> A=[4 0 0;0 3 1;0 1 3]
A =
4 0 0
0 3 1
0 1 3
>> B=orth(A)
B =
0 1.0000 0
-0.7071 0 -0.7071
-0.7071 0 0.7071
>> Q=B'*B
Q =
1.0000 0 0.0000
0 1.0000 0
0.0000 0 1.0000
【例】求向量组的秩,并判断其线性相关性
>> a1=[1,-2,2,3];a2=[-2,4,-1,3];a3=[-1,2,0,3];
>> a4=[0,6,2,3];a5=[2,-6,3,4];
>> A=[a1;a2;a3;a4;a5]
A =
1 -2 2 3
-2 4 -1 3
-1 2 0 3
0 6 2 3
2 -6 3 4
>> k=rank(A)
k =
3