首页 > 编程笔记

MATLAB svd()函数的用法

奇异值分解(SVD)是现代数值分析(尤其是数值计算)的最基本和最重要的工具之一,因此在工程实际中有着广泛的应用。

所谓 SVD 分解,具体指的是将 m×n 矩阵 A 表示为 3 个矩阵乘积形式:USVT。其中,U 为m×m酉矩阵;V 为 n×n 酉矩阵;S 为对角矩阵,其对角线元素为矩阵 A 的奇异值且满足:

s1≥s2≥…≥srsr+1=…=sn=0

r 为矩阵 A 的秩。

在 MATLAB 中,这种分解是通过 svd() 函数来实现的。svd() 函数的调用格式及说明如下表所示。

表 1 svd() 函数调用格式及说明
调用格式 说 明
s = svd (A) 返回矩阵 A 的奇异值向量 s
[U,S,V] = svd (A) 返回矩阵 A 的奇异值分解因子 U、S、V
[U,S,V] = svd (A,0) 返回 mxn 矩阵 A 的“经济型”奇异值分解。若 m>n 则只计算出矩阵 U 的前 n 列,矩阵 S 为 nxn 矩阵;否则同 [U,S,V] = svd (A)

【实例】求下列矩阵的 SVD 分解。
MATLAB 程序如下:
>> clear                                 % 清除工作区的变量
>> A=[1 2 3 4;2 5 7 8;3 7 6 9;4 8 9 1];  % 创建矩阵A
>> r=rank(A)                             % 求出矩阵A的秩,与奇异值分解因子S的非零对角元素个数一致
r =
     4
>> [U,S,V]=svd(A)                        % 对矩阵A进行SVD分解,返回A的奇异值分解因子U、S、V
U =
   -0.2456   -0.2080    0.3018   -0.8974
   -0.5448   -0.3165    0.6413    0.4380
   -0.6036   -0.3712   -0.7055    0.0140
   -0.5278    0.8478    0.0045   -0.0506
S =
    21.4089         0         0         0
          0    6.9077         0         0
          0         0    1.7036         0
          0         0         0    0.2024
V =
   -0.2456   0.2080  -0.3018  -0.8974
   -0.5448   0.3165  -0.6413   0.4380
   -0.6036   0.3712   0.7055   0.0140
   -0.5278  -0.8478  -0.0045  -0.0506

推荐阅读

副业交流群 关注微信公众号,加入副业交流群,学习变现经验,交流各种打法。