第3章 数组与矩阵——3.4 矩阵运算(1)

简介: 第3章 数组与矩阵——3.4 矩阵运算(1)

3.4  矩阵运算(1)


矩阵运算是线性代数中极其重要的部分。本节将介绍MATLAB中与矩阵运算相关的内容,包括矩阵分析、矩阵分解、特征值和特征向量等。


3.4.1  矩阵分析


MATLAB提供的矩阵分析函数如表3-2所示。

3-2  矩阵分析函数

函数

功能描述

norm

求矩阵或向量空间的范数

normest

估计矩阵的2阶范数

rank

矩阵的秩,即求对角元素的和

det

矩阵的行列式

trace

矩阵的迹

null

0空间

orth

正交化空间

rref

约化行阶梯形式

subspace

求两个矩阵空间的角度


1.向量和矩阵的范数运算


对于线性空间中的一个向量x={x1 ,x2 ,…,xn},如果存在一个函数r(x)满足以下3个条件:

1r(x)>0,且r(x)=0的充要条件为x=0

2r(ax)=|a|r(x),其中a为任意标量。

3)对向量xy,有r(x+y)≤r(x)+r(y)

则称r(x)为向量x的范数,一般记为||x||。范数的形式多种多样,下面式子中定义的范数操作就满足以上3个条件:

44c5cfbfc917ea7880c03dc741883fd1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

式中定义的 ||x||p称为p阶范数,其中最有用的是12阶范数。

矩阵的范数是基于向量的范数定义的,其定义式如下:

a3431d528123d8654e81f110be59f036_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

与向量的范数一样,矩阵的范数最常用的也是12阶范数和F范数,它们的定义式如下:

d48df9da4a376533012f88ab7f04a14f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

df6f7c745dcbdf1d1b6fe5590ac92d9f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在上式中, Smax{ATA}则为ATA的最大特征值。

矩阵的1范数:将矩阵沿方向取绝对值求和,取最大值作为1范数。

对于实矩阵,矩阵A2范数定义为:A的转置与A乘积的最大特征值开平方根。

矩阵A范数定义为:沿着方向取绝对值求和,取最大值。

MATLAB中,求向量范数的函数的具体用法如下。

● N=norm(x,p):对任意大于1p值,返回向量xp阶范数。

● N=norm(x):返回向量的2阶范数,相当于N=norm(x,2)

● N=norm(x,inf):返回向量的阶范数,相当于N=max(abs(x))

● N=norm(x,-inf):返回向量的-∞阶范数,相当于N=min(abs(x))


MATLAB中,求矩阵范数的函数的具体用法如下。

● N=norm(A):计算矩阵的2阶范数,也就是最大奇异值。

● N=norm(A,p):根据参数p的值不同,求不同阶的范数值。当p=1时,计算矩阵A1阶范数,相当于max(sum(abs(A)))。当p=2时,计算矩阵A2阶范数,相当于norm(A)。当p=inf时,计算矩阵A阶范数,相当于max(sum(abs(A')))。当p=fro时,计算矩阵AF范数(Frobenius范数),相当于sqrt(sum(diag(A'*A)))


3-36:求向量x2阶范数示例。

在命令行窗口中输入:

x = 1:6
N1 = norm(x)
N2 = norm(x,1)
N3 = norm(x,2)
N4 = norm(x,inf)
N5 = norm(x,-inf)

输出结果:

x =
     1     2     3     4     5     6
N1 =
    9.5394
N2 =
    21
N3 =
    9.5394
N4 =
     6
N5 =
     1

注意:当矩阵维数比较大时,会导致计算矩阵范数的时间比较长,并且当一个近似的范数值满足要求时,可以考虑使用函数normest()来估计2阶范数值。函数normest()最初开发时是为了提供给稀疏矩阵使用的,同时它也能接收满矩阵的输入,一般在满矩阵维数比较大时使用。


函数normest()的用法如下。

● normest(S):估计矩阵S2阶范数值。

● normest(S,tol):使用tol作为允许的相对误差。


3-37:求矩阵的范数示例。

在命令行窗口中依次输入:

clear all
A = [1 2 3;4 5 6;7 8 9];
b = norm(A,1);           % 矩阵A的1阶范数
c = norm(A);                 % 矩阵A的2阶范数
d = norm(A,inf);             % 矩阵A的∞阶范数
e = norm(A, 'fro');             % 矩阵A的Frobenius范数
f = normest(A);              % 矩阵A的2阶范数的估计值
bcdef = [b c d e f]

输出结果:

bcdef =
   18.0000   16.8481   24.0000   16.8819   16.8481

2.矩阵的秩


矩阵A中线性无关的列向量个数称为列秩,线性无关的行向量个数称为行秩。在MATLAB中用函数rank()来计算矩阵的秩。函数rank()的用法如下。

● rank(A):用默认允许误差计算矩阵的秩。

● rank(A,tol):给定允许误差计算矩阵的秩,tol=max(size(A))·eps(norm(A))


3-38:求矩阵的秩示例。

在命令行窗口中依次输入:

clear all
A = [1 2 3;4 5 6;7 8 9];
B = magic(3);
r1 = rank(A)
r2 = rank(B)

输出结果:

r1 =
     2
r2 =
     3

3.矩阵的行列式


矩阵A={aij}n×n的行列式定义如下:

d11d4daecec31be8839f418839f18277_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

其中,k1 ,k2 ,…,kn是将序列1,2,…,n交换k次所得的序列。在MATLAB中用函数det()来计算矩阵的行列式。


3-39:计算矩阵的行列式示例。

在命令行窗口中依次输入:

clear all
A = [1 2 3;4 5 6;7 8 9];
B = magic(5);
r1 = det(A)
r2 = det(B)
disp(['A的行列式值 = ',num2str(r1)])
disp(['B的行列式值 = ',num2str(r2)])

输出结果:

r1 =
  -9.5162e-16
r2 =
   5.0700e+06
A的行列式值 = -9.5162e-16
B的行列式值 = 5070000


注意:在 MATLAB 中,当计算一个矩阵的行列式值时,如果得到的结果非常接近零,例如 -9.5162e-16,通常表示该矩阵的行列式值非常接近于零,但由于计算精度限制,结果被舍入为科学计数法表示。因此,在比较行列式值与零或进行其他精确计算时,应当谨慎处理,避免舍入误差对计算结果产生影响。如果需要更高的数值精度,可以考虑使用 MATLAB 提供的 Symbolic Math Toolbox 进行精确计算。


4.矩阵的迹


矩阵的迹定义为矩阵对角元素之和。在MATLAB中用函数trace()来计算矩阵的迹。


3-40:计算矩阵的迹示例。

在命令行窗口中依次输入:

clear all
A = [1 2 3;4 5 6;7 8 9];
B = magic(5);
r1 = trace(A)
r2 = trace(B)
disp(['A的迹 = ',num2str(r1)])
disp(['B的迹 = ',num2str(r2)])

输出结果:

r1 =
    15
r2 =
    65
A的迹 = 15
B的迹 = 65


5.矩阵的化零矩阵


MATLAB中提供了求化零矩阵的函数null(),其用法如下。

● Z=null(A):返回矩阵A的一个化零矩阵,如果化零矩阵不存在,则返回空矩阵。

● Z=null(A,'r'):返回有理数形式的化零矩阵。


3-41:求矩阵的化零矩阵示例。

在命令行窗口中依次输入:

clear all
A = [1 2 3;4 5 6;7 8 9];
Z = null(A)
AZ = A * Z
ZR = null(A, 'r ')
AZR = A * ZR

输出结果:

Z =
   -0.4082
    0.8165
   -0.4082
AZ =
   1.0e-15 *
   -0.4441
         0
    0.4441
ZR =
   -0.4082
    0.8165
   -0.4082
AZR =
   1.0e-15 *
   -0.4441
         0
    0.4441


6.矩阵的正交空间


矩阵A的正交空间Q具有Q'·Q=I的性质,并且Q的列矢量构成的线性空间与矩阵A的列矢量构成的线性空间相同,且正交空间Q与矩阵A具有相同的秩。MATLAB中提供了函数orth()来求正交空间Q


3-42:矩阵的正交空间求解示例。

在命令行窗口中依次输入:

clear all
A = magic(3)
Q = orth(A)

输出结果:

A =
     8     1     6
     3     5     7
     4     9     2
Q =
   -0.5774    0.7071    0.4082
   -0.5774    0.0000   -0.8165
   -0.5774   -0.7071    0.4082

7.矩阵的约化行阶梯形式


矩阵的约化行阶梯形式是高斯-约旦消去法解线性方程组的结果,其形式为:

744c18ea31402ea7421f53ab346e0c79_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

MATLAB中提供了函数rref()来求矩阵的约化行阶梯形式,其用法如下。

● R=rref(A):返回矩阵A的约化行阶梯形式R

● [R,jb]=rref(A):返回矩阵A的约化行阶梯形式R,并返回1×r的向量jbr为矩阵A的秩;A(:,jb)是矩阵A的列矢量构成的线性空间;R(1:r,jb)r×r的单位矩阵。

● [R,jb]=rref(A,tol):以tol作为允许的相对误差计算矩阵A的秩。


3-43:求矩阵A的约化行阶梯形式示例。

在命令行窗口中依次输入:

A = [1 2 3;4 5 6;7 8 9;10 11 12];       % 矩阵A
R = rref(A)                     % 正交矩阵A的约化行阶梯形式

输出结果:

R =
     1     0    -1
     0     1     2
     0     0     0
     0     0     0

8.矩阵空间之间的夹角


矩阵空间之间的夹角代表两个矩阵线性相关的程度。如果夹角很小,它们之间的线性相关度就很高;反之,它们之间的线性相关度就很低。在MATLAB中用函数subspace()来实现求矩阵空间之间的夹角,其调用格式如下。

● theta=subspace(A,B):返回矩阵A和矩阵B之间的夹角。


3-44:求矩阵A和矩阵B之间的夹角示例。

在命令行窗口中依次输入:

clear all
A = [1 2 3;3 4 5;7 8 9;8 7 9;0 2 8];
B = magic(5);
subspace(A,B)

输出结果:

ans =
   9.6980e-16

相关文章
|
5天前
使用多维数组将两个矩阵相加
【10月更文挑战第30天】使用多维数组将两个矩阵相加。
14 2
|
4月前
|
存储 算法 Python
稀疏矩阵是矩阵中大部分元素为零的矩阵。
稀疏矩阵是矩阵中大部分元素为零的矩阵。
|
6月前
|
人工智能 小程序 BI
矩阵的转置、加和乘法写入C++
矩阵的转置、加和乘法写入C++
52 0
|
6月前
|
索引
转置矩阵-暴力解法&一行代码
转置矩阵-暴力解法&一行代码
39 0
|
机器学习/深度学习 存储 人工智能
第3章 数组与矩阵——3.2 矩阵操作
第3章 数组与矩阵——3.2 矩阵操作
|
机器学习/深度学习 资源调度 算法
第3章 数组与矩阵——3.4 矩阵运算(2)
第3章 数组与矩阵——3.4 矩阵运算(2)
|
存储 NoSQL
第3章 数组与矩阵——3.5 稀疏矩阵
第3章 数组与矩阵——3.5 稀疏矩阵
第3章 数组与矩阵——3.3 矩阵元素的运算(2)
第3章 数组与矩阵——3.3 矩阵元素的运算(2)
第3章 数组与矩阵——3.3 矩阵元素的运算(1)
第3章 数组与矩阵——3.3 矩阵元素的运算(1)
|
人工智能 算法 C语言
矩阵及多维数组
矩阵及多维数组
101 0