一、数组的创建和操作
1.矩阵的输入
>> A=[]A =[]>> B=[6 5 3]B =6 5 3>> C=B'C =653
2.调用矩阵
>> A=[1 2 3 4 5]A =1 2 3 4 5>> a1=A(1)%访问数组第一个元素a1 =1>> a2=A(1:3)%访问数组第1、2、3个元素a2 =1 2 3>> a3=A(3:end)%访问数组第3个到最后一个元素a3 =3 4 5>> a4=A(end:-1:1)%数组元素反序输出a4 =5 4 3 2 1>> a5=A([1 5])%访问数组第1个及第5个元素a5 =1 5
3.子数组的赋值
>>
A=[1 2 3 4 5]
A(3)=5
A([1 4])=[1 1]A =1 2 3 4 5A =1 2 5 4 5A =1 2 5 1 5
二、MATLAB常用矩阵函数
1. 矩阵的构造与操作
zeros 生成元素全为0的矩阵
>> zeros(3:3)ans =0 0 00 0 00 0 0
ones 生成元素全为1的矩阵
>> ones(2:2)ans =1 11 1
eye 生成单位矩阵
>> eye(2:2)ans =1 00 1
rand 生成随机矩阵
>> rand(3:3)ans =0.8147 0.9134 0.27850.9058 0.6324 0.54690.1270 0.0975 0.9575
fliplr | 矩阵左右翻转 |
flipud | 矩阵上下翻转 |
triu | 矩阵的上三角部分 |
tril | 矩阵的下三角部分 |
diag | 对角矩阵 |
full | 将稀疏矩阵化为普通矩阵 |
sparse | 生成稀疏矩阵 |
randn | 生成正态分布随机矩阵 |
2. 矩阵运算函数
subspace | 计算两个子空间的夹角 |
rref | 矩阵的行最简形(初等行变换求解线性方程组) |
orth | 正交规范化 |
null | 求基础解系(矩阵的零空间) |
trace | 方阵的迹%特征值的和等于迹 |
det | 方阵的行列式 |
rank | 矩阵的秩 |
normest | 稀疏矩阵(或大规模矩阵)的2-范数估计 |
norm | 矩阵或向量范数 |
3. 与线性方程有关的矩阵运算函数
pinv | 矩阵的广义逆 |
qr | 矩阵的正交三角分解 |
luinc | 稀疏矩阵的不完全LU分解 |
ilu | 稀疏矩阵的不完全LU分解 |
lu | 矩阵的LU分解 |
linsolve | 矩阵方程组的求解 |
cholinc | 稀疏矩阵的不完全Cholesky分解 |
chol | 矩阵的Cholesky分解(矩阵的平方根分解) |
condest | 稀疏矩阵1-范数的条件数估计 |
cond | 方阵的条件数 |
inv | 方阵的逆 |
4. 与特征值或奇异值有关的矩阵函数
eig | 方阵的特征值与特征向量 |
svd | 矩阵的奇异值分解 |
eigs | 稀疏矩阵的一些(默认6个)最大特征值与特征向量 |
svds | 矩阵的一些(默认6个)最大奇异值与向量 |
hess | 方阵的Hessenberg形式分解 |
schur | 方阵的Schur分解 |
三、数组的常见运算
1.数组的算术运算
dot数组的点积
sum数组元素的乘积之和
>> A=[1 2 3];
>> B=[4 5 6];
>> C=dot(A,B)C =32
>> D=sum(A.*B)D =32
2.数组的关系运算
关系运算的运算法则如下:
当两个比较量是标量时,直接比较两个数的大小。若关系成立,则返回的结果为1,否则为0。
当两个比较量是维数相等的数组时,逐一比较两个数组相同位置的元素,并给出比较结果。最终的关系运算结果是一个与参与比较的数组维数相同的数组,其组成元素为0或1。
>>
A=[1 2 3 5 7]
B=[2 3 5 5 8]
A<6
A>B
F=A==BA =1 2 3 5 7B =2 3 5 5 8ans =1×5 logical 数组1 1 1 1 0ans =1×5 logical 数组0 0 0 0 0F =1×5 logical 数组0 0 0 1 0
3.数组的逻辑运算
在 MATLAB中数组提供了3种数组逻辑运算符,即&(与)、|(或)和~(非)。逻辑运算的运算法则如下:
如果是非零元素则为真,用1表示;反之是零元素则为假,用0表示。
当两个比较量是维数相等的数组时,逐一比较两个数组相同位置的元素,并给出比较结果。最终的关系运算结果是一个与参与比较的数组维数相同的数组,其组成元素为0或1。
与运算(a&b)时,a、b全为非零,则为真,运算结果为1;或运算(ab)时,只要a、b有一个为非零,则运算结果为1;非运算(~a)时,若a为0,运算结果为1,a为非零,运算结果为0。
>>C=A&B %与D=A|B %或E=~B %非C =1×5 logical 数组1 1 1 1 1D =1×5 logical 数组1 1 1 1 1E =1×5 logical 数组0 0 0 0 0
四、矩阵操作
1.创建矩阵
compan(p):生成一个特征多项式为p的二维矩阵
hadamard(k):返回一个阶数为n=2k的Hadamard矩阵,只有当n能被4整除时Hadamard矩阵才存在
hankel(x):返回一个由向量x定义的 Hankel方阵。该矩阵是一个对称矩阵,其元素为h一x+j-a,第1列为向量x,反三角以下的元素为0
hankel(x,y):返回一个mXn的Hankel矩阵,它的第1列为向量x,最后一行为向量y
magic(n):返回一个nXn的魔方矩阵
pascal(n):返回一个n×n的Pascal矩阵
rosser:给出Rosser 矩阵,这是一个经典对称特征测试问题,它的大小是8×8
vander(x):返回一个Vandermonde矩阵,其元素为v,=x"',n为向量x的长度
wilkinson(n):返回一个m×n的-Wilkinson特征值测试矩阵
(1)希尔伯特矩阵
希尔伯特(Hilbert)矩阵,也称H阵,其元素为H(第i行第j列)/(i+j-1)。由于它是一个条件数差
的矩阵,所以将它用来作为试验矩阵。
关于希尔伯特矩阵的指令函数如下:
hilb(n):用于生成一个n×n的希尔伯特矩阵。
invhilb(n):用于生成一个nXn的希尔伯特矩阵的逆矩阵整数矩阵。
>> A=hilb(3)A =1.0000 0.5000 0.33330.5000 0.3333 0.25000.3333 0.2500 0.2000>> B=invhilb(3)B =9 -36 30-36 192 -18030 -180 180
(2)托普利兹(Toeplitz)矩阵
另外一个比较重要的矩阵为托普利兹(Toeplitz)矩阵,它由两个向量定义,一个行向量和一个列向量。对称的托普利兹矩阵由单一向量来定义。
关于托普利兹矩阵的指令函数如下:
toeplitz(k,r):用于生成非对称托普利兹矩阵,第1列为k,第1行为r,其余元素等于其左上角元素。
(3)范德蒙行列式
>> A=vander([1 2 3 4])A =1 1 1 18 4 2 127 9 3 164 16 4 1
>> B=vander([1;2;3;4])B =1 1 1 18 4 2 127 9 3 164 16 4 1
>> C=vander(1:.5:3)C =1.0000 1.0000 1.0000 1.0000 1.00005.0625 3.3750 2.2500 1.5000 1.000016.0000 8.0000 4.0000 2.0000 1.000039.0625 15.6250 6.2500 2.5000 1.000081.0000 27.0000 9.0000 3.0000 1.0000
五、改变矩阵的大小
C=[A B]在水平方向合并矩阵A和B,而表达式C=[A B]在水平方向合并矩阵A和B,而表达式C=[A;B]在竖直方向合并矩阵A和B。
1.矩阵的合并
>> C=toeplitz(2:5,2:2:8)C =2 4 6 83 2 4 64 3 2 45 4 3 2
>> a=ones(3,4)b=zeros(3,4)c=[a;b]d=[a b]a =1 1 1 11 1 1 11 1 1 1b =0 0 0 00 0 0 00 0 0 0c =1 1 1 11 1 1 11 1 1 10 0 0 00 0 0 00 0 0 0d =1 1 1 1 0 0 0 01 1 1 1 0 0 0 01 1 1 1 0 0 0 0
2.矩阵行列的删除
如果想删除矩阵的第二行
>> A=rand(4,4)A =0.7922 0.8491 0.7431 0.70600.9595 0.9340 0.3922 0.03180.6557 0.6787 0.6555 0.27690.0357 0.7577 0.1712 0.0462>> A(2,:)=[]%删除矩阵的第二行A =0.7922 0.8491 0.7431 0.70600.6557 0.6787 0.6555 0.27690.0357 0.7577 0.1712 0.0462
六:矩阵元素的查找
1.ind=find(X) :查找矩阵X中的非零元素,函数返回这些元素的单下标。
>> A=[1 3 0;3 1 0;9 2 4]A =1 3 03 1 09 2 4>> B=find(A)%矩阵中非零元素的下标B =1234569>> C=find(A>=1)C =1234569
>> D=A(A>=1)%矩阵中大于等于1的元素D =1393124>> A(find(A==0))=10%矩阵中等于0的元素改为10A =1 3 103 1 109 2 4
七、矩阵元素的排序
>> A=[1 3 0;3 1 0;9 2 4];
B=sort(A);
A=[1 3 0;3 1 0;9 2 4];
B=sort(A);%矩阵元素按照列进行升序排序
C=sort(A,2);%矩阵元素按照行进行升序排序
D=sort(A,'descend');%矩阵元素按照列进行降序排序
E=sort(A,2,'descend');%矩阵元素按照行进行降序排序
>> BCDE=[B C;D E]BCDE =1 1 0 0 1 33 2 0 0 1 39 3 4 2 4 99 3 4 3 1 03 2 0 3 1 01 1 0 9 4 2
八、矩阵元素的求和
>> clear all;
A=[1 3 0;3 1 0;9 2 4];
B=sum(A)%矩阵中元素按照列进行求和
C=sum(A,2)%矩阵中元素按照行进行求和
D=cumsum (A)%矩阵中各列元素的和
E=cumsum (A,2)%矩阵中各行元素的和
F=sum(sum (A))%矩阵中所有元素的和
B =13 6 4C =4415D =1 3 04 4 013 6 4E =1 4 43 4 49 11 15F =23
九、矩阵元素的求积
>> clear all;A= magic(3)B=prod (A)%矩阵各列元素的积
C=prod (A,2)%矩阵各行元素的积
D=cumprod (A)%矩阵各列元素的积
E=cumprod(A,2)%矩阵各行元素的积A =8 1 63 5 74 9 2B =96 45 84C =4810572D =8 1 624 5 4296 45 84E =8 8 483 15 1054 36 72
十、矩阵的分析
norm 矩阵或向量范数
normest 稀疏矩阵(或大规模矩阵)的2-范数估计
rank 矩阵的秩
det 方阵的行列式
trace 方阵的迹%特征值的和等于迹
null 求基础解系(矩阵的零空间)
orth 正交规范化
rref 矩阵的行最简形(初等行变换求解线性方程组)
subspace 计算两个子空间的夹角
十一、矩阵的分析
chol:Cholesky分解:对称正定矩阵的 Cholesky 分解
Cholesky分解在MATLAB中用函数chol()来实现,其常用的调用方式如下:
R = chol(X):其中X为对称正定矩阵,R是上三角矩阵,使得 X=R'·R。如果X是非正定的,则结果将返回出错信息。
[R,p] = chol(X):返回两个参数,并且不会返回出错信息。当X是正定矩阵时,返回的上三角矩阵R满足X=-R'·R,且p=0;当X是非正定矩阵时,返回值p是正整数,R是上三角矩阵,其阶数为p-1,且满足X(1:p-1,1:p-1)=R -R
cholinc:稀疏矩阵的不完全 Cholesky分解
lu:矩阵LU分解
luinc:稀疏矩阵的不完全LU分解
qr:正交三角分解
svd:奇异值分解
gsvd:一般奇异值分解
schur:舒尔分解