点击蓝字

关注我们
01
特殊矩阵

一、通用的特殊矩阵
zeros函数:产生全0矩阵,即零矩阵。
ones函数:产生全1矩阵,即幺矩阵。
eye函数:产生对角线为1的矩阵。当矩阵是方阵时,得到一个单位矩阵。
rand函数:产生(0,1)区间均匀分布的随机矩阵。
randn函数:产生均值为0,方差为1的标准正态分布随机矩阵。
zeros函数的调用格式:
zeros(m):产生m*m零矩阵。
zeros(m,n):产生m*n零矩阵。
zeros(size(A)):产生与矩阵A同样大小的零矩阵。
>> A=zeros(2,3)A = 0 0 0 0 0 0>> zeros(size(reshape(A,3,2)))ans = 0 0 0 0 0 0
【例1】首先产生5阶两位随机整数矩阵A,再产生均值为0.6、方差为0.1的5阶正态分布随机矩阵B,最后验证(A+B)I=IA+BI(I为单位矩阵)。
rand函数:产生(0,1)开区间均匀分布的随机数x。
fix(a+(b-a+1)*x):产生[a,b]区间上均匀分布的随机整数。
randn函数:产生均值为0、方差为1的标准正态分布随机数x。
μ+σx:得到均值为μ、方差为σ2的随机数。
>> A=fix(10+(99-10+1)*rand(5));>> B=0.6+sqrt(0.1)*randn(5);>> C=eye(5);>> (A+B)*C==C*A+B*Cans = 5×5 logical 数组 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
二、用于专门学科的特殊矩阵
(1)魔方矩阵——Magic Square
>> M=magic(3)M = 8 1 6 3 5 7 4 9 2
n阶魔方阵由1,2,3,...,n2共n2个整数组成,且每行、每列以及主、副对角线上各n个元素之和都相等。
n阶魔方阵每行每列元素的和为(1+2+3+...+n2)/n=(n+n3)/2。
MATLAB函数magic(n)产生一个特定的魔方阵。
【例】产生8阶魔方阵,求其每行每列元素的和。
>> M=magic(8);>> sum(M(1,:))ans = 260>> sum(M(:,1))ans = 260
(2)范德蒙矩阵
在MATLAB中,函数vander(V)生成以向量V为基础的范德蒙(Vandermonde)矩阵。
>> A=vander(1:5)A = 1 1 1 1 1 16 8 4 2 1 81 27 9 3 1 256 64 16 4 1 625 125 25 5 1
范德蒙矩阵常用在各种通信系统的纠错编码中,例如,常用的Reed-Solomon编码即以范德蒙矩阵为基础。
(3)希尔伯特矩阵
在MATLAB中,生成n阶希尔伯特矩阵的函数是hilb((n)。
>> format rat>> H=hilb(4)H = 1 1/2 1/3 1/4 1/2 1/3 1/4 1/5 1/3 1/4 1/5 1/6 1/4 1/5 1/6 1/7
(4)伴随矩阵
MATLAB生成伴随矩阵的函数是compan(p),其中p是一个多项式的系数向量,高次幂系数排在前,低次幂系数排在后。
例如,生成x3-2x2-5x+6的伴随矩阵。
>> p=[1,-2,-5,6];>> A=compan(p)A = 2 5 -6 1 0 0 0 1 0
(5)帕斯卡矩阵
在MATLAB中,函数pascal(n)生成一个n阶帕斯卡矩阵。
【例】生成5阶帕斯卡矩阵,验证它的逆矩阵的所有元素也为整数。
>> format rat %设置为有理数输出格式>> P=pascal(5)P = 1 1 1 1 1 1 2 3 4 5 1 3 6 10 15 1 4 10 20 35 1 5 15 35 70 >> inv(P)ans = 5 -10 10 -5 1 -10 30 -35 19 -4 10 -35 46 -27 6 -5 19 -27 17 -4 1 -4 6 -4 1
02
矩阵变换

一、对角阵
对角矩阵:只有对角线上有非零元素的矩阵。
数量矩阵:对角线上的元素相等的对角矩阵。
单位矩阵:对角线上的元素都为1的对角矩阵。
(1)提取矩阵的对角线元素
diag(A):提取矩阵A主对角线元素,产生一个列向量。
diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量。(主对角线为第0条对角线,与主对角线平行向上为正、向下为负)
(2)构造对角阵
diag(V):以向量V为主对角线元素,产生对角矩阵。
diag(V,k):以向量V为第k条对角线元素,产生对角矩阵。
【例】先建立5*5矩阵A,然后将A的第一行元素乘以1,第二行乘以2,…,第五行乘以5。
>> A=[5,6,8,6,9;6,2,5,8,1;3,0,5,8,1;5,1,0,3,9;8,4,6,8,2]A = 5 6 8 6 9 6 2 5 8 1 3 0 5 8 1 5 1 0 3 9 8 4 6 8 2 >> D=diag(1:5);>> D*Aans = 5 6 8 6 9 12 4 10 16 2 9 0 15 24 3 20 4 0 12 36 40 20 30 40 10
要将A的各列元素分别乘以对角阵的对角线元素,如何实现?
答:右乘
>> A=[5,6,8,6,9;6,2,5,8,1;3,0,5,8,1;5,1,0,3,9;8,4,6,8,2]A = 5 6 8 6 9 6 2 5 8 1 3 0 5 8 1 5 1 0 3 9 8 4 6 8 2 >> D=diag(1:5);>> A*Dans = 5 12 24 24 45 6 4 15 32 5 3 0 15 32 5 5 2 0 12 45 8 8 18 32 10
二、三角阵
(1)上三角阵:矩阵的对角线以下的元素全为零的矩阵。
triu(A):提取矩阵A的主对角线及以上元素。
triu(A,k):提取矩阵A的第k条对角线及以上元素。
>> triu(ones(4),-1)ans = 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 1
(2)下三角阵:对角线以上的元素全为零的矩阵。
在MATLAB中,提取矩阵A三维下三角矩阵的函数是tril,其用法与triu函数完全相同。
三、矩阵的转置
转置运算符是小数点后接单引号(.’)。
共轭转置,其运算符是单引号(‘),它在转置的基础上还要取每个数的复共轭。
>> A=[1,3;3+4i,1-2i]A = 1 + 0i 3 + 0i 3 + 4i 1 - 2i >> A.'ans = 1 + 0i 3 + 4i 3 + 0i 1 - 2i >> A'ans = 1 + 0i 3 - 4i 3 + 0i 1 + 2i
四、矩阵的旋转
rot90(A,k):将矩阵A逆时针方向旋转90°的k倍,当k为1时可省略。
>> A=[1 2 3;-1 2 -3;0 1 0]A = 1 2 3 -1 2 -3 0 1 0 >> rot90(A)ans = 3 -3 0 2 2 1 1 -1 0 >> rot90(A,2)ans = 0 1 0 -3 2 -1 3 2 1
五、矩阵的翻转
fliplr(A):对矩阵A实施左右翻转。
flipud(A):对矩阵A实施上下翻转。
【例】验证魔方阵的主对角线、副对角线元素之和相等。
>> A=magic(5);>> D1=diag(A);>> sum(D1)ans = 65 >> B=flipud(A);>> D2=diag(B);>> sum(D2)ans = 65
六、矩阵求逆
对于一个方阵A,如果存在一个与其同阶的方阵B,使得AB=BA=I(I为单位矩阵),则称B为A的逆矩阵,当然,A也是B的逆矩阵。
inv(A):求方阵A的逆矩阵。
【例】用求逆矩阵的方法解线性方程组。
在线性方程组Ax=b两边各左乘A-1,有A-1Ax=A-1b,由于A-1A=I,故得x=A-1b。
>> A=[1 2 3;1 4 9;1 8 27];>> b=[5;-2;6];>> x=inv(A)*bx = 23 -29/2 11/3 >> x=A\b %也可以用左除运算符求线性方程组的解x = 23 -29/2 11/3
03
矩阵求值

一、矩阵的行列式值
把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为方阵所对应的行列式的值。
det(A):求方阵A所对应的行列式的值。
【例】验证det(A-1)=1/det(A)。
>> format rat>> A=[1 3 2;-3 2 1;4 1 2]A = 1 3 2 -3 2 1 4 1 2 >> det(inv(A))ans = 1/11 >> 1/det(A)ans = 1/11
二、矩阵的秩
矩阵线性无关的行数或列数称为矩阵的秩。
rank(A):求矩阵A的秩。
>> for n=3:20r(n)=rank(magic(n));end>> bar(r)
奇数阶魔方阵秩为n,即奇数阶魔方阵是满秩矩阵。
一重偶数阶魔方阵秩为n/2+2(n是2的倍数,但非4的倍数)。
双重偶数阶魔方阵秩均为3(阶数是4的倍数)。
三、矩阵的迹
矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。
trace(A):求矩阵A的迹。
>> A=[1 3 2;-3 2 1;4 1 2]A = 1 3 2 -3 2 1 4 1 2 >> b=trace(A)b = 5 >> t=sum(diag(A))t = 5
四、向量和矩阵的范数
矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。
(1)向量的3中常用范数
向量1—范数:向量元素的绝对值之和。
向量2—范数:向量元素绝对值的平方和的平方根。
向量∞—范数:所有向量元素绝对值中的最大值。
在MATLAB中,求向量范数的函数为:
norm(V)或norm(V,2):计算向量V的2—范数。
norm(V,1):计算向量V的1—范数。
norm(V,inf):计算向量V的∞—范数。
(2)矩阵的范数
从属于3种向量范数,矩阵范数计算公式如下。
矩阵A的1—范数:矩阵列元素绝对值之和的最大值。
矩阵A的2—范数:A’A矩阵的最大特征值的平方根。
矩阵A的∞—范数:所有矩阵行元素绝对值之和的最大值。
MATLAB提供了求3种矩阵范数的函数,其函数调用与求向量的范数的函数完全相同。
>> x=[2 0 1;-1 1 0;-3 3 0]x = 2 0 1 -1 1 0 -3 3 0 >> n=norm(x)n = 5909/1251 >> x=norm(x,1)x = 6
五、矩阵的条件数
矩阵A的条件数等于A的范数与矩阵A的逆矩阵的范数的乘积。
条件数越接近于1,矩阵的性能越好,反之,矩阵的性能越差。
cond(A,1):计算A的1—范数下的条件数。
cond(A)或cond(A,2):计算A的2—范数下的条件数。
cond(A,inf):计算A的∞—范数下的条件数。
【例】求2~10阶希尔伯特矩阵的条件数。
>> for n=2:10c(n)=cond(hilb(n));end>> format long>> c'ans = 1.0e+13 * 0 0.000000000001928 0.000000000052406 0.000000001551374 0.000000047660725 0.000001495105864 0.000047536735691 0.001525757556663 0.049315340455101 1.602502816811318
参考课程:中南大学《科学计算与MATLAB语言》
如有侵权,请联系删除

微信公众号|技术人的文学小天地
微信号|li15035869237