matlab 二范数_MATLAB矩阵处理(一)

本文介绍了MATLAB中特殊矩阵的生成,包括零矩阵、单位矩阵、随机矩阵等,并探讨了矩阵的变换,如对角阵、三角阵、矩阵转置等操作。此外,还讲解了矩阵的行列式值、秩、迹、范数和条件数的计算方法,以及它们在矩阵处理中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

点击蓝字

360889ae1dfb7e9f34757dfb3b5fb3b4.gif

关注我们

01

特殊矩阵

360889ae1dfb7e9f34757dfb3b5fb3b4.gif

一、通用的特殊矩阵

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

矩阵变换

360889ae1dfb7e9f34757dfb3b5fb3b4.gif

一、对角阵

对角矩阵:只有对角线上有非零元素的矩阵。

数量矩阵:对角线上的元素相等的对角矩阵。

单位矩阵:对角线上的元素都为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的逆矩阵。

【例】用求逆矩阵的方法解线性方程组。

12cfaf01cf28f4528ed12a21a2b932e3.png

在线性方程组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

矩阵求值

360889ae1dfb7e9f34757dfb3b5fb3b4.gif

一、矩阵的行列式值

把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为方阵所对应的行列式的值。

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)

37238f2f1335803d6a73f01053a914be.png

奇数阶魔方阵秩为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—范数:向量元素的绝对值之和。

95b7e6c66d9eeade7350d93b7706414f.png

向量2—范数:向量元素绝对值的平方和的平方根。

f34c0bb8c41768b5ba50db2cde85fd59.png

向量∞—范数:所有向量元素绝对值中的最大值。

24a7900a322fc2f62cff2506a777d4f0.png

在MATLAB中,求向量范数的函数为:

norm(V)或norm(V,2):计算向量V的2—范数。

norm(V,1):计算向量V的1—范数。

norm(V,inf):计算向量V的∞—范数。

(2)矩阵的范数

从属于3种向量范数,矩阵范数计算公式如下。

矩阵A的1—范数:矩阵列元素绝对值之和的最大值。

8b703f2d480847262f34bebf51f12a5e.png

矩阵A的2—范数:A’A矩阵的最大特征值的平方根。

ba5cdea469678420cb65506d517ffcd1.png

矩阵A的∞—范数:所有矩阵行元素绝对值之和的最大值。

e5ec30b8ff66c885a5662601d6cf3273.png

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语言》

如有侵权,请联系删除

669d196f82fc70d66415934348ba110e.png

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

微信号|li15035869237

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值