【MATLAB】特殊矩阵的建立


前言

线性代数问题是科学技术中最常见的问题,矩阵在工程数学中应用得非常广泛,因此学会创建出自己想要的矩阵是非常重要的,本文讲解利用MATLAB创建常用的矩阵。


1.零矩阵

零矩阵是指所有元素为零的矩阵,在MATLAB利用函数 zeros()创建

% zeros(n)创建一个n*n的零矩阵
A=zeros(4)
% zeros(n,m)创建一个n*m的零矩阵
B=zeros(1,3)

2.幺矩阵

幺矩阵是指所有元素为1的矩阵,在MATLAB利用函数 ones()创建

% ones(n)创建一个n*n的幺矩阵
A=ones(4)
% ones(n,m)创建一个n*m的幺矩阵
B=ones(1,3)

3.单位矩阵

单位矩阵是指主对角线上为1,其他元素均为0的矩阵,在MATLAB利用函数 eye()创建

% eye(n)创建一个n*n单位矩阵
A=eye(4)
% eye(n,m)创建一个n*m的扩展单位矩阵
B=eye(3,8)

4.随机元素矩阵

随机元素矩阵是指矩阵的各个元素都是随机产生的。在MATLAB中可以利用rand()来生成[0,1]之间的随机数。

% rand(n)创建一个n*n的随机矩阵,元素在0到1之间
A=rand(4)
% rand(n,m)创建一个n*m的随机矩阵,元素在0到1之间
B=rand(3,8)
% a*rand(n,m)+b创建一个n*m的随机矩阵,元素在b到a+b之间
C=10*rand(n,m)-5  %元素在[-5,5]内

在MATLAB中还可以利用randn()来生成服从标准正态分布的随机数。

5.Hankel矩阵

Hankel矩阵的一般形式是
H = [ c 1 c 2 . . . c m c 2 c 3 . . . c m + 1 . . . . . . c n c n + 1 . . . c n + m − 1 ] \pmb H=\begin{bmatrix}c_1&c_2&...&c_m\\c_2&c_3&...&c_{m+1}\\...&&...\\c_n&c_{n+1}&...&c_{n+m-1}\end{bmatrix} H= c1c2...cnc2c3cn+1............cmcm+1cn+m1 Hankel矩阵如果是方阵则为对称矩阵,其特点是每条反对角线上所有元素都相同。
在MATLAB中利用hankel(c,r)函数生成Hankel矩阵。

函数使用说明
H=hankel(c,r)c向量为H矩阵的第一列元素取值,r向量为H矩阵的最后一行元素取值

例程:

c=[1,2,3];
r=[3,4,5,6];
H1=hankel(c,r)
H1=hankel(c)

运行结果:

H1 =

     1     2     3     4
     2     3     4     5
     3     4     5     6


H2 =

     1     2     3
     2     3     0
     3     0     0

6.对角矩阵

对角矩阵是指非对角线的所有元素为0的矩阵,对角矩阵是一个方阵。
在MATLAB中,利用函数diag()来生成一个对角矩阵,blkdiag()构造一个块对角矩阵。

函数使用说明
A=diag(v)生成主对角线元素为向量v的对角矩阵A
v=diag(A)返回矩阵A的主对角线上的元素
A=diag(v,k)生成第k条对角线为v的矩阵
v=diag(A,k)提取矩阵A的第k条对角线,返回向量v
A=blkdiag(A1,A2,…,An)构造一个块对角矩阵

例程1:

v=[1 2 3];
A=diag(v)
B=diag(v,1)

运行结果:

A =

     1     0     0
     0     2     0
     0     0     3


B =

     0     1     0     0
     0     0     2     0
     0     0     0     3
     0     0     0     0

例程2:

A1=[1,1;1,1];
A2=[2,2;2,2];
A3=[3,3;3,3;3,3]
A=blkdiag(A1,A2,A3)

运行结果:

A =

     1     1     0     0     0     0
     1     1     0     0     0     0
     0     0     2     2     0     0
     0     0     2     2     0     0
     0     0     0     0     3     3
     0     0     0     0     3     3
     0     0     0     0     3     3

7.友矩阵

假设有一个首一化的多项式
p ( s ) = s n + a 1 s n − 1 + . . . + a n − 1 s + a n p(s)=s^n+a_1s^{n-1}+...+a_{n-1}s+a_n p(s)=sn+a1sn1+...+an1s+an
则可以写出一个友矩阵
A = [ − a 1 − a 2 . . . − a n − 1 − a n 1 0 . . . 0 0 0 1 . . . 0 0 . . . . . . . . . . . . . . . 0 0 . . . 1 0 ] A=\begin{bmatrix}-a_1&-a_2&...&-a_{n-1}&-a_n\\1&0&...&0&0\\0&1&...&0&0\\...&...&...&...&...\\0&0&...&1&0\end{bmatrix} A= a110...0a201...0...............an100...1an00...0
在MATLAB可以利用函数compan(a)生成友矩阵。

函数使用说明
A=compan(a)生成以向量a为降幂排列的多项式相对应的友矩阵

例程: 生成多项式 P ( s ) = 2 s 4 + 3 s 2 + 6 s + 3 P(s)=2s^4+3s^2+6s+3 P(s)=2s4+3s2+6s+3对应的友矩阵

P=[2 3 6 3];
A=compan(P)%给出向量P,自动归一化建立友矩阵

运行结果:

A =

   -1.5000   -3.0000   -1.5000
    1.0000         0         0
         0    1.0000         0

8.范德蒙矩阵

V = [ c 1 n − 1 c 1 n − 2 . . . c 1 1 c 2 n − 1 c 2 n − 2 . . . c 2 1 . . . . . . . . . . . . . . . c n n − 1 c n n − 2 . . . c n 1 ] V=\begin{bmatrix}c^{n-1}_1&c^{n-2}_1&...&c_1&1\\c^{n-1}_2&c^{n-2}_2&...&c_2&1\\...&...&...&...&...\\c^{n-1}_n&c^{n-2}_n&...&c_n&1\end{bmatrix} V= c1n1c2n1...cnn1c1n2c2n2...cnn2............c1c2...cn11...1 上述的矩阵V被称为范德蒙矩阵。
在MATLAB中利用vander()函数构造范德蒙矩阵。

函数使用说明
V=vander( c )生成以向量c一次列的范德蒙矩阵
例程:
c=[2 3 4 5];
V=vander(c)

运行结果:

V =

     8     4     2     1
    27     9     3     1
    64    16     4     1
   125    25     5     1

9.稀疏矩阵

稀疏矩阵是指大部分元素都是零,仅有少部分元素非零的矩阵。
在MATLAB中可以利用函数sparse()创建稀疏矩阵。

函数使用说明
A=sparse(p,q,w)其中p,q为非零元素的行号和列号组成的向量,w为相应位置的矩阵元素构成的向量

p,q,w三个向量的长度要保持一致,否者会报错

10.符号矩阵

上面提到的矩阵都是数值矩阵,在MATLAB中也可以用函数sym()创建符号矩阵。
例程:

A1=sym('a%d%d',[1,4])
A2=sym('a%d',[1,4])
A3=sym('f%d',[4,1])
A4=sym('a%d',4)

运行结果:

A1 =
 
[ a11, a12, a13, a14]
 
 
A2 =
 
[ a1, a2, a3, a4]
 
 
A3 =
 
 f1
 f2
 f3
 f4
 
 
A4 =
 
[ a11, a12, a13, a14]
[ a21, a22, a23, a24]
[ a31, a32, a33, a34]
[ a41, a42, a43, a44]

符号矩阵也可以进行加减乘的运算。
例程:

A=sym('a%d',3)
B=sym('b%d',3)
C=A+B
D=A*B

运行结果:

A =
 
[ a11, a12, a13]
[ a21, a22, a23]
[ a31, a32, a33]
 
 
B =
 
[ b11, b12, b13]
[ b21, b22, b23]
[ b31, b32, b33]
 
 
C =
 
[ a11 + b11, a12 + b12, a13 + b13]
[ a21 + b21, a22 + b22, a23 + b23]
[ a31 + b31, a32 + b32, a33 + b33]
 
 
D =
 
[ a11*b11 + a12*b21 + a13*b31, a11*b12 + a12*b22 + a13*b32, a11*b13 + a12*b23 + a13*b33]
[ a21*b11 + a22*b21 + a23*b31, a21*b12 + a22*b22 + a23*b32, a21*b13 + a22*b23 + a23*b33]
[ a31*b11 + a32*b21 + a33*b31, a31*b12 + a32*b22 + a33*b32, a31*b13 + a32*b23 + a33*b33]

总结

函数使用说明
A=zeros(n,m)创建一个n*m的零矩阵
A=ones(n,m)创建一个n*m的幺矩阵
A=eye(n)创建一个n*n的单位矩阵
H=hankel(c,r)c向量为H矩阵的第一列元素取值,r向量为H矩阵的最后一行元素取值
A=diag(v)生成主对角线元素为向量v的对角矩阵A
v=diag(A)返回矩阵A的主对角线上的元素
A=diag(v,k)生成第k条对角线为v的矩阵
v=diag(A,k)提取矩阵A的第k条对角线,返回向量v
A=blkdiag(A1,A2,…,An)构造一个块对角矩阵
A=compan(a)生成以向量a为降幂排列的多项式相对应的友矩阵
V=vander( c )生成以向量c一次列的范德蒙矩阵
A=sparse(p,q,w)其中p,q为非零元素的行号和列号组成的向量,w为相应位置的矩阵元素构成的向量
A=sym(‘a%d’,4)生成4行4列的符号矩阵
A=sym(‘a%d’,[n,m])生成n行m列的符号矩阵
  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Matlab中,对角矩阵可以通过使用diag函数来构造。有两种常见的用法: 1. 提取矩阵的对角线元素:使用diag(A)可以提取矩阵A的主对角线元素,返回一个列向量。例如,如果A是一个4x4的矩阵,则diag(A)将返回一个4x1的列向量,包含A的主对角线上的元素。如果想要提取矩阵A的第k条对角线的元素,可以使用diag(A,k),其中k是一个整数。例如,diag(A,1)将返回A的第一条对角线上的元素。 2. 构造对角矩阵:使用diag(V)可以以向量V为主对角线元素创建一个对角矩阵。返回的矩阵将是一个二维矩阵,其主对角线上的元素由向量V的元素给定。例如,如果V=[1:5,则diag(V)将返回一个5x5的对角矩阵,其主对角线上的元素为1, 2, 3, 4, 5。如果想要创建以向量V为第k条对角线元素的对角矩阵,可以使用diag(V,k),其中k是一个整数。例如,diag(1:4,1)将返回一个5x5的对角矩阵,其第一条对角线上的元素为1, 2, 3, 4。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Matlab的对角阵、三角阵,矩阵变换:矩阵的转置、旋转、翻转、求逆、方阵的行列式、矩阵的秩求解](https://blog.csdn.net/HangHug_L/article/details/107944238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦斯威尔逊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值