持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天, 点击查看活动详情
本文为我之前在CSDN平台上的一篇博客记录。原链接为: blog.csdn.net/u011426236/…
主要讲述一些MATLAB中的特殊矩阵的创建生成。
1.矩阵操作
1.1创建矩阵
在《MATLAB学习笔记(2)》中已经介绍过一些常见的矩阵操作,这里进行一些特殊矩阵生成的补充。
1.1.1希尔伯特(Hilbert)矩阵
希尔伯特矩阵是一种数学变换矩阵,正定,且高度病态(即,任何一个元素发生一点变动,整个矩阵的行列式的值和逆矩阵都会发生巨大变化)。关于希尔伯特矩阵的指令函数如下:
hilb(n)%用于生成一个n阶希尔伯特矩阵
invhilb(n)%用于生成一个n阶希尔伯特矩阵的逆矩阵整数矩阵
>> hilb(3)
ans =
1.0000 0.5000 0.3333
0.5000 0.3333 0.2500
0.3333 0.2500 0.2000
>> invhilb(3)
ans =
9 -36 30
-36 192 -180
30 -180 180
1.1.2托普利兹矩阵
关于托普利兹矩阵的指令函数如下:
toeplitz(k, r)%用于生成非对称托普利兹矩阵,第一列为k,第一行为r,其余元素等于其左上角元素
toeplitz(c)%用于向量c生成一个对称的托普利兹矩阵
>> toeplitz(2:5, 2:2:8)
ans =
2 4 6 8
3 2 4 6
4 3 2 4
5 4 3 2
>> toeplitz(1:4)
ans =
1 2 3 4
2 1 2 3
3 2 1 2
4 3 2 1
1.1.3在0~1之间均匀分布的随机矩阵
在MATLAB中常用的随机矩阵函数rand调用形式为:
r = rand(n):产生维数为n*n的0~1间均匀分布的随机矩阵
r = rand(m, n):产生维数为m*n的0~1间均匀分布的随机矩阵
r = rand(m, n, p……):产生维数为m*n的0~1间均匀分布的随机矩阵
r = rand(size(A)):产生与矩阵A大小相同的0~1间的均匀分布的随机矩阵
>> A = rand(3, 3, 2)
A(:,:,1) =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575
A(:,:,2) =
0.9649 0.9572 0.1419
0.1576 0.4854 0.4218
0.9706 0.8003 0.9157
>> C = rand(4)
0.7922 0.8491 0.7431 0.7060
0.9595 0.9340 0.3922 0.0318
0.6557 0.6787 0.6555 0.2769
0.0357 0.7577 0.1712 0.0462
>> D = rand(size(C))
0.0971 0.9502 0.7655 0.4456
0.8235 0.0344 0.7952 0.6463
0.6948 0.4387 0.1869 0.7094
0.3171 0.3816 0.4898 0.7547
1.1.4标准正态分布的随机矩阵
在MATLAB中常用的随机矩阵函数randn调用形式为:
r = randn(n):产生维数为n*n的均值为0、方差为1的随机矩阵
r = randn(m, n):产生维数为m*n的均值为0、方差为1的随机矩阵
r = randn(m, n, p……):产生维数为m*n的均值为0、方差为1的随机矩阵
r = randn(size(A)):产生与矩阵A大小相同的均值为0、方差为1的随机矩阵
>> X = randn(3)
-0.8637 -1.1135 -0.7697
0.0774 -0.0068 0.3714
-1.2141 1.5326 -0.2256
>> Y = randn(3, 2, 2)
Y(:,:,1) =
1.1174 0.5525
-1.0891 1.1006
0.0326 1.5442
Y(:,:,2) =
0.0859 -1.0616
-1.4916 2.3505
-0.7423 -0.6156
>> Z = randn(size(X))
0.7481 -0.7648 0.4882
-0.1924 -1.4023 -0.1774
0.8886 -1.4224 -0.1961
1.1.5魔方矩阵
在MATLAB中常用magic函数产生魔方矩阵,其每行、列和两条对角线上的和相等,其调用格式为:
M = magic(n)%n维魔方矩阵
1.1.6帕斯卡矩阵
在MATLAB中常用pascal函数产生帕斯卡矩阵,器调用格式如下:
A = pascal(n)%返回n阶的正定pascal矩阵
1.1.7范德蒙矩阵
在MATLAB中常用vander函数产生范德蒙矩阵,其调用格式如下:
A = vander(v)%生成范德蒙矩阵,矩阵的列是向量v的幂,且A(i,j) = v(i)^(n-j), 其中n = length(v).
>> a = [1, 5, 9, 3]
1 5 9 3
>> vander(a)
ans =
1 1 1 1
125 25 5 1
729 81 9 1
27 9 3 1
1.2改变矩阵大小
1.2.1矩阵的大小
使用[ ]符号便可以实现矩阵的行列合并
>> A = rand(3)
0.8308 0.9172 0.7537
0.5853 0.2858 0.3804
0.5497 0.7572 0.5678
>> B = eye(3)
1 0 0
0 1 0
0 0 1
>> C = [A, B]
0.8308 0.9172 0.7537 1.0000 0 0
0.5853 0.2858 0.3804 0 1.0000 0
0.5497 0.7572 0.5678 0 0 1.0000
>> D = [A; B]
0.8308 0.9172 0.7537
0.5853 0.2858 0.3804
0.5497 0.7572 0.5678
1.0000 0 0
0 1.0000 0
0 0 1.0000
1.2.2矩阵行列的删除
要删除矩阵的某一行或者某一列,只用把相应行、列值赋为空即可
>> A = [1 2 3; 4 5 6; 7 8 9]
1 2 3
4 5 6
7 8 9
>> A(:,2) = []
>> A(1,:) = []
2.矩阵元素的运算
2.1矩阵加减运算
矩阵大小相同时,直接相加减即可。
2.2矩阵乘法运算
矩阵的乘法满足第一个矩阵的列数与第二个矩阵的行数相同时可以用第一个矩阵乘第二个矩阵。
2.3矩阵除法运算
矩阵的除法包括左除/(A/B要求A与B的列数相同)与右除\(A\B要求A与B的行数相同)。
2.4矩阵的幂运算
方阵才可以进行矩阵的幂运算。
2.5矩阵元素的查找
可以使用find函数查找矩阵中的元素,其调用格式为:
ind = find(X)%查找矩阵X中的非零元素,函数返回这些元素的单下标。
[row, col] = find(X)%查找矩阵X中的非零元素,函数返回这些元素的双下标。
2.6矩阵元素的排序
在MATLAB中可以使用函数sort进行排序,其调用格式如下:
B = sort(A)%对A进行升序排列,A可以为矩阵或向量。
B = sort(A, dim)%对A进行升序排列,并将结果返回在给定的维数dim上按照升序排列。当dim=1时,按照列进行排序;dim=2时,按照行进行排序。
B = sort(A, dim, mode)%前两个参数含义同上,mode可指定排序方式,ascend指定为升序,为默认值;descend为降序排列。
>> A = magic(4)
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> sort(A)
ans =
4 2 3 1
5 7 6 8
9 11 10 12
16 14 15 13
>> sort(A, 2)
ans =
2 3 13 16
5 8 10 11
6 7 9 12
1 4 14 15
>> sort(A, 2, 'descend')
ans =
16 13 3 2
11 10 8 5
12 9 7 6
15 14 4 1
2.7矩阵元素的求和
在MATLAB中可以使用函数sum与cumsum对矩阵元素求和。其中sum为某一维度上的总和,cumsum为某一维度上的累和。同时,sum与cumsum可以用以下格式计算指定维数上的和与累和,其格式如下:
B = sum(A, dim)%dim =1时计算列的和,dim=2时计算行的和
B = cumsum(A, dim)%dim =1时计算列的累和,dim=2时计算行的累和
>> A = magic(4)
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> B = sum(A)
34 34 34 34
>> C = cumsum(A)
16 2 3 13
21 13 13 21
30 20 19 33
34 34 34 34
>> sum(sum(A))%计算矩阵所有元素的和
ans =
2.8矩阵元素的求积
在MATLAB中可以使用函数prod与cumprod对矩阵元素求积。其中prod为某一维度上的总积,cumsum为某一维度上的累积。同时,prod与cumprod可以用以下格式计算指定维数上的积与累积,其格式如下:
B = prod(A, dim)%dim =1时计算列的积,dim=2时计算行的积
B = cumprod(A, dim)%dim =1时计算列的累积,dim=2时计算行的累积
>> A = magic(3)
8 1 6
3 5 7
4 9 2
>> B = prod(A)
96 45 84
>> C = cumprod(A)
8 1 6
24 5 42
96 45 84
>> prod(A, 2)
ans =
>> cumprod(A, 2)
ans =
8 8 48
3 15 105
4 36 72
>> prod(prod(A))%计算矩阵所有元素的积
ans =
362880
2.9矩阵元素的差分
在MATLAB中,函数diff的作用是计算矩阵的差分,其调用格式如下:
Y = diff(X)%计算矩阵各列的差分
Y = diff(X, n)%计算矩阵各列元素的n阶差分
Y = diff(X, n, dim)%计算矩阵在给定维数dim上的n阶差分,dim=1为列;dim=2为行。
>> A = magic(3)
8 1 6
3 5 7
4 9 2
>> B = diff(A)
-5 4 1
1 4 -5
>> B = diff(A, 2)
6 0 -6
>> B = diff(A, 2, 2)
复制代码