点击“蓝字”关注我们
科学计算 | MATLAB矩阵分析处理
01
特殊矩阵
1.通用特殊矩阵
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(3,2)A = 0 0 0 0 0 0>> zeros(size(reshape(A,2,3)))ans = 0 0 0 0 0 0
2.用于专门学科的特殊矩阵
魔方矩阵
>> M=magic(3)M = 8 1 6 3 5 7 4 9 2
n阶魔方阵由1,2,3,…,n²个整数组成,且每行、每列以及主、副对角线上各n个元素之和都相等。
n>2 时有很多不同的n阶魔方阵,matlab函数 magic(n)产生一个特定的魔方阵。范德蒙矩阵
在matlab中,函数vander(V)生成以向量V为基础的范德蒙矩阵。
>> A=vander(1:3)A = 1 1 1 4 2 1 9 3 1
希尔伯特矩阵
在matlab中,生成n阶希尔伯特矩阵的函数是hilb(n)。
>> format rat %定义输出显示格式为有理分式>> A=hilb(3)A = 1 1/2 1/3 1/2 1/3 1/4 1/3 1/4 1/5
伴随矩阵
>> p=[1,3,-1,6]; %多项式x³+3x²-x+6>> A=compan(p)A = -3 1 -6 1 0 0 0 1 0
帕斯卡矩阵
02
矩阵变换
1.对角阵
对角矩阵:只有对角线上有非零元素的矩阵。
数量矩阵:对角线上的元素相等的对角矩阵。
单位矩阵:对角线上的元素都为1的对角矩阵。
⑴提取矩阵的对角线元素
diag(A):提取矩阵A主对角线元素,产生一个列向量。
diag(A,k):提取矩阵A第k条对角线的元素,产生一个列向量。
⑵构造对角矩阵
diag(V):以向量V为主对角线元素,产生对角矩阵。
diag(V,k):以向量V为第k条对角线元素,产生对角矩阵。
>> A=[1,2,3;4,5,6;7,8,9];>> diag(A)ans = 1 5 9 >> diag(1:3)ans = 1 0 0 0 2 0 0 0 3
2.三角阵
上三角阵:矩阵的对角线以下的元素全为0的矩阵。
下三角阵:对角线以下的元素全为0的矩阵。
⑴上三角矩阵
triu(A):提取矩阵A的主对角阵及以上的元素。
triu(A,k):提取矩阵A的第k条对角线及以上的元素。
⑵下三角阵
在matlab中,提取矩阵A的下三角矩阵的函数 tril,其用法与triu函数完全相同。>> A=[1,2,3;4,5,6;7,8,9];>> triu(A)ans = 1 2 3 0 5 6 0 0 9
3.矩阵的转置
转置运算符是小数点后面接单引号(.')。共轭转置,其运算符是单引号('),它在转置的基础上还要取每个数的复共轭。>> A=[1+i,2-i;3+i,4-i,];>> A.'ans = 1 + 1i 3 + 1i 2 - 1i 4 - 1i >> A'ans = 1 - 1i 3 - 1i 2 + 1i 4 + 1i
4.矩阵的旋转
rot90(A,k):将矩阵A逆时针方向旋转90度的k倍, 当k为1时可忽略。>> A=[1,2,3;4,5,6;7,8,9];>> rot90(A)ans = 3 6 9 2 5 8 1 4 7
5.矩阵的翻转
fliplr(A):对矩阵A实施左右翻转。
flipud(A):对矩阵A实施上下翻转。
>> A=[1,2,3;4,5,6;7,8,9];>> flipud(A)ans = 7 8 9 4 5 6 1 2 3 >> fliplr(A)ans = 3 2 1 6 5 4 9 8 7
6.矩阵的求逆
定义:对于一个方阵A,如果存在一个与其方阵B,使得AB=BA=I(I为单位矩阵),则称B为A的逆矩阵,当然A也是B的逆矩阵。(常用于解线性方程组) inv(A):求方阵A的逆矩阵。03
矩阵求值
1.方阵的行列式
把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称为方阵所对应的行列式的值。 det(A):求方阵A所对应的行列式的值。>> A = [1 -2 4; -5 2 0; 1 0 3];>> det(A)ans = -32
2.矩阵的秩
矩阵线性无关的行数或列数称为矩阵的秩。 rank(A):求矩阵A的秩。>> A = [3 2 4; -1 1 2; 9 5 10];>> rank(A)ans = 2
3.矩阵的迹
矩阵的迹等于矩阵的对角线元素之和,也等于矩阵的特征值之和。 trace(A):求矩阵A的迹。>> A=[1,2,3;4,5,6;7,8,9];>> trace(A)ans = 15
4.向量和矩阵的范数
矩阵或向量的范数用来度量矩阵或向量在某种意义下的长度。⑴向量的3种常用范数
向量1—范数:向量元素的绝对值之和向量2—范数:向量元素绝对值的平方和的平方根向量∞—范数:所有向量元素绝对值中的最大值在matlab中,求向量范数的函数为:
norm(V)或 norm(V,2):计算向量V的2—范数 norm(V,1):计算向量V的1—范数 norm(V,inf):计算向量V的∞—范数⑵矩阵的范数
矩阵A的1—范数:矩阵列元素绝对值之和的最大值矩阵A的2—范数:A'A矩阵的最大特征值的平方根矩阵A的∞—范数:所有矩阵行元素绝对值之和的最大值在matlab提供了求3种矩阵范数的函数,其函数调用格式与求向量的范数的函数完全相同。>> a=(1:3)a = 1 2 3 >> norm(a,1)ans = 6
5.矩阵的条件数
矩阵A的条件数等于A的范数与A的逆矩阵的范数的乘积。条件数越接近于1,矩阵的性能越好,反之矩阵的性能越差。cond(A,1):计算A的1—范数下的条件数
cond(A)或cond(A,2):计算A的2—范数下的条件数
cond(A,inf):计算A的∞—范数下的条件数
04
矩阵的特征值和特征向量
1.矩阵特征值的数学定义:
设A是n阶方阵,如果存在常数λ和n维非零列向量x,使得等式Ax=λx成立,则称λ为A的特征值,x是对应特征值λ的特征向量。
E=eig(A):求矩阵A的全部特征值,构成向量E。
[X,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并产生矩阵X,X各列是对应的特征向量。
>> A = [1 -2 4; -5 2 0; 1 0 3];>> E=eig(A)E = -1244/573 1261/230 1648/613
05
稀疏矩阵
定义:零元素的个数远远多于非零元素的个数的矩阵。
1.矩阵的存储方式
完全存储方式:将矩阵的全部元素按列存储。
稀疏存储方式:只存储矩阵的非零元素的值及其位置,即行号和列号。
注:采用稀疏存储方式时,矩阵元素的存储顺序并没有改变,也是按列的顺序进行存储。
当矩阵的规模很大时,采用稀疏存储方式可以大大节约存储空间。
2.稀疏存储方式的产生
⑴完全存储方式与稀疏存储方式之间的转化
A=sprase(S):将矩阵S转化为稀疏矩阵存储方式的矩阵A。
S=full(A):将矩阵A转化为完全存储方式的矩阵S。
>> A=sparse(eye(3))A = (1,1) 1 (2,2) 1 (3,3) 1 >> B=full(A)B = 1 0 0 0 1 0 0 0 1
⑵直接建立稀疏存储矩阵
sparse函数的其他调用格式:
sparse(m,n):生成一个m*n的所有元素都是零的稀疏矩阵。
sparse(u,v,S):其中u、v、S是3个等长的向量。S是要建立的稀疏存储矩阵的非零元素,u(i)、v(i)分别是S(i)行和列下标。
>> A=sparse([1,2,2],[2,1,4],[4,5,7])A = (2,1) 5 (1,2) 4 (2,4) 7 >> B=full(A)B = 0 4 0 0 5 0 0 7
使用spconvert函数直接建立稀疏存储矩阵。其调用格式为:B=spconvert(A)
其中,A为一个m×3或m×4的矩阵,其每行表示一个非零元素,m是非零元素的个数 。
A(i,1) 表示第i 个非零元素所在的行 。
A(i,2)表示第i个非零元素所在的列 。
A(i,3) 表示第i个非零元素值的实部 。
A(i,4) 表示第i个非零元素值的虚部 。
>> A=[2,2,1;2,1,-1;2,4,3]A = 2 2 1 2 1 -1 2 4 3 >> B= spconvert(A)B = (2,1) -1 (2,2) 1 (2,4) 3
⑶带状稀疏矩阵的稀疏存储方式
稀疏矩阵有两种基本类型:无规则结构的稀疏矩阵与有规则的稀疏矩阵。
带状稀疏矩阵是指所有非零元素集中在对角线上的矩阵。
[B,d]=spdiags(A):从带状稀疏矩阵A中提取全部非零对角线元素赋给矩阵B及其这些非零对角线的位置向量d。
A=spdiags(B,d,m,n):产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原带状稀疏矩阵的行数与列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置。
>> A=[12,0,2,0;0,13,0,3;6,0,8,0]A = 12 0 2 0 0 13 0 3 6 0 8 0 >> [B,d]=spdiags(A)B = 0 12 2 0 13 3 6 8 0 d = -2 0 2 >> A=spdiags(B,d,3,4)A = (1,1) 12 (3,1) 6 (2,2) 13 (1,3) 2 (3,3) 8 (2,4) 3
⑷单位矩阵的稀疏存储
speye(m,n):返回一个m*n的稀疏存储矩阵单位矩阵。
>> speye(3)ans = (1,1) 1 (2,2) 1 (3,3) 1
在大学我们一般都会学线性代数这门基础课,我们都知道其中最复杂就是数值计算,所以在传统的教学内容上老师会着重强调其定义、性质和定理,把复杂的问题通过一些性质转化成简单的问题,但在实际问题中,往往涉及到的线性方程组和矩阵是大规模的,人工计算是非常不容易的,这也导致我们在学习线性代数的时候觉得无趣。我想如果在学习线性代数理论课的基础上增加实验课学分,这样将理论与实验相结合,反而能增加同学们的学习积极性。
在这个寒冷的时节里
因为有你的关注
而变得温暖
欢迎大家评论下方留言!
你“在看”我吗?