▲矩阵及其操作是MATLAB语言的重要组成部分,MATLAB语言提供了强大矩阵运算和处理能力。正是由于MATLAB对矩阵操作具有非凡的能力,使其成为有关矩阵应用领域的一个有力工具。
矩阵的生成可以通过在方括号 [ ] 中输入元素实现,不同行之间要用分号隔开,不同列用空格分开。
A=[1 2 3;4 5 6]
A =
1 2 3
4 5 6
A=[1:3;4:6]
A =
1 2 3
4 5 6
%可以用冒号:快速建立矩阵,默认步长为1也可以自己定义步长
A=[1:2:7;1:3:10] %步长分别为2和3
A =
1 3 5 7
1 4 7 10
A=zeros(2,3) %生成2X3全零矩阵
A =
0 0 0
0 0 0
A=eye(3,3) %生成3X3单位矩阵
A =
1 0 0
0 1 0
0 0 1
●常用的特殊矩阵
矩阵 | 函数 | 用法 | 释义 |
---|---|---|---|
全零阵 | zeros | zeros(x,y) | 生成x X y全零矩阵 |
单位阵 | eye | eye(x,y) | 生成 x X y单位矩阵 |
全1阵 | ones | ones(x,y) | 生成 x X y全1矩阵 |
均匀分布随机矩阵 | rand | rand(x);rand(x,y) | 生成 x X x均匀分布的的随机矩阵;生成 x X y均匀分布的的随机矩阵 |
正态分布随机矩阵 | randn | 以上用法与数组相同,可以看前一篇帖 | 同数组创建方法相同 |
产生线性等分向量 | linspace | linspace(x,y);linspace(a,b,n) | 表示生成包含x到y的1行100列矩阵;表示生成包含a到b的1行n列矩阵 |
产生对数等分向量 | logspace | logspace(a,b,n),其中a、b、n分别表示开始值(10a)、结束值(10b)、元素个数(n) | 生成从10的a次方到10的b次方之间按对数等分的n个元素的行向量。n如果省略,则默认值为50 |
Wilkinson特征值测试阵 | wilinson | wilkinson(x),对称三对角矩阵 | 生成x X x的特征值测试阵(主对角线从x依次减1到0后在依次加1升到x,紧挨的两侧的副对角线元素全为1) |
友矩阵(伴随矩阵) | compan | A = compan(u);后面有例题可供参考 | A = compan(u) 返回第一行为 -u(2:n)/u(1) 的对应伴随矩阵,其中u (2:n)为u的第2到第n个元素, u 是多项式系数向量。compan(u) 的特征值是多项式的根 |
Hadamard矩阵 | hadamard | hadamard(n);n 必须为整数,并且 n、n/12 或 n/20 必须为 2 的幂 | 哈达玛(Hadamard)矩阵是由+1和-1元素构成的正交方阵。所谓正交方阵,指它的任意两行(或两列)都是正交的。把行(或列)看作一个函数,任意两行(或两列)都是正交的 |
Hankel矩阵 | hankel | H=hankel ( a );H=hankel ( a,b )后面有介绍可供参考 | 汉克尔矩阵 (Hankel Matrix) 是指每一条副对角线上的元素都相等的矩阵,在数字信号处理、数值计算、系统控制等领域均有广泛的应用 |
Hilbert矩阵 | hilb | hilb(n) | 希尔伯特矩阵是方阵;是一种特殊的汉克尔矩阵 |
逆Hilbert矩阵 | invhilb | invhilb(n) | 生成n阶Hilbert矩阵的逆矩阵 |
Magic矩阵 | magic | magic(n) | magic是一种函数,用于产生魔方矩阵,它的每行、列以及对角线的数之和相等。该和的值为1+2+3+…+n^2的和再除以n,n必须为大于或等于3的整数 |
Pascal矩阵 | pascal | pascal(n) | 帕斯卡矩阵由杨辉三角形表组成的矩阵 |
托普利兹矩阵 | toeplitz | toeplitz(x,y) | 托普利兹矩阵,简称为T型矩阵。托普利兹矩阵的主对角线上的元素相等,平行于主对角线的线上的元素也相等;矩阵中的各元素关于次对角线对称,即T型矩阵为次对称矩阵。简单的T形矩阵包括前向位移矩阵和后向位移矩阵。它生成一个以 x 为第一列,y 为第一行的托普利兹矩阵,这里x, y均为向量,两者不必等长。 |
●友矩阵(伴随矩阵)compan的例题:
求(x-1)(x-2)(x+3)=x3-7x+6 对应的伴随矩阵
u = [1 0 -7 6]; %其中 u 是多项式系数向量按降幂排序
A = compan(u)
A =
0 7 -6
1 0 0
0 1 0
A 的特征值是多项式的根
eig(A)
ans =
-3.0000
2.0000
1.0000
●Hankel矩阵的构成方式是:先指定第一列和最后一行,矩阵中其他所有元素都与其左下角相邻位置的元素相等。
生成对称的Hankel矩阵。第一列元素为a,次对角线下方所有元素均为零。
生成非对称的Hankel矩阵。第一列元素为a,最后一行元素为b,若a的最后一个元素与b的第一个元素不相等,交叉位置的元素取a的最后一个元素。(会产生警告: 输入列的最后一个元素与输入行的第一个元素不匹配。在反对角线冲突中,列具有更高优先级。 )
●Hilbert矩阵:
在MATLAB中,冒号是个很重要的运算符,可以产生行向量。冒号表达式一般格式是:
e1:e2:e3
t=0:1:5t=[0 1 2 3 4 5]
linspace(a,b,n) %a和b分别为第一个和最后一个元素,n为元素总数
sub2ind(下标转序号)
ind2sub(序号转下标)
a=[ 1 2 3 4 5 6;1:6;2:7;3:8;5:10]
a(3:5,2:4) %将a矩阵拆分取其3-5行和2-4列
矩阵重构:
A( : ) %将矩阵A的所有元素堆叠起来,成为一个列向量,这也是MATLAB变量的内部存储方式。
矩阵删除:
c( [1,3,5], : ) = [ ] %删除1、3、5行,组成新矩阵
c( : ,[1,3,5] ) = [ ] %删除1、3、5列,组成新矩阵
c(end, : ) %取c最后一行的元素
c([1,4],3:end) %取c第1,4两行和从第3列到最后一列的元素
①C=cat(dim,A,B):dim指链接方向。
dim的可选值:1,垂直方向;2,水平方向;3,生成三维数组。
②C=cat(dim,A1,A2,…):可以实现链接多个矩阵。
函数 | 功能 | 用法 |
---|---|---|
cat | 链接矩阵 | cat(dim,A,B)/cat(dim,A1,A2,…) |
horzcat | 水平链接多个矩阵 | horzcat(A,B) |
vertcat | 垂直链接多个矩阵 | vertcat(A,B) |
repmat | 复制一个矩阵到另一个矩阵 | 如下 |
blkdiag | 对角链接多个矩阵 | blkdiag(A,B) |
repmat的用法有以下几种:
repmat (A, m)
repmat (A, m, n)
repmat (A, m, n, p …)
repmat (A, [m n])
repmat (A, [m n p …])
A = [1 2 3;4 5 6;7 8 9];
B = repmat(A,3,3)
B = %B矩阵是由A矩阵3 x 3构成的
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
7 8 9 7 8 9 7 8 9
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
7 8 9 7 8 9 7 8 9
1 2 3 1 2 3 1 2 3
4 5 6 4 5 6 4 5 6
7 8 9 7 8 9 7 8 9