首页 > 编程笔记
MATLAB svd()函数的用法
奇异值分解(SVD)是现代数值分析(尤其是数值计算)的最基本和最重要的工具之一,因此在工程实际中有着广泛的应用。
所谓 SVD 分解,具体指的是将 m×n 矩阵 A 表示为 3 个矩阵乘积形式:USVT。其中,U 为m×m酉矩阵;V 为 n×n 酉矩阵;S 为对角矩阵,其对角线元素为矩阵 A 的奇异值且满足:
在 MATLAB 中,这种分解是通过 svd() 函数来实现的。svd() 函数的调用格式及说明如下表所示。
【实例】求下列矩阵的 SVD 分解。
MATLAB 程序如下:
所谓 SVD 分解,具体指的是将 m×n 矩阵 A 表示为 3 个矩阵乘积形式:USVT。其中,U 为m×m酉矩阵;V 为 n×n 酉矩阵;S 为对角矩阵,其对角线元素为矩阵 A 的奇异值且满足:
s1≥s2≥…≥sr>sr+1=…=sn=0
r 为矩阵 A 的秩。在 MATLAB 中,这种分解是通过 svd() 函数来实现的。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