关于SVD函数的两种使用方法的区别。

MATLAB中SVD函数的一般使用方法是[u,s,v]=svd(A),且有A=u*s*v'的关系,最近看到另一种使用方法是[U,S]=svd(A),请问此时的U和S与A有什么关系呢?谢谢!

 采纳的回答

rnjpfxan
rnjpfxan 2023-5-23
编辑:rnjpfxan 2023-5-23

0 个投票

不知道你用的什么版本。
2021版不会遇到你这个问题。
A = im2double( imread( 'lena_std.tif' ) ); % www.lenna.org 提供原始lena图
N = size(  A( :, :, 1 ), 1 );
[ u, s ] = svd(  A( :, :, 1 ) );
[ U, S, V ] = svd(  A( :, :, 1 ) );
R_u = abs( U - u );
R_s = abs( S - s );
disp( max( max( R_u ) ) )
disp( max( max( R_s ) ) )
disp( sum( sum( U == u ) ) - N^2 )
disp( sum( sum( S == s ) ) - N^2 )
结果全是0,验证了 U = u, S = s 的结论。
另外提一句,svd分解可以类比为求非方阵的矩阵的特征值与特征向量。矩阵的特征向量,再乘以一个常数,仍然是原矩阵的特征向量。你的情形里面就相当于若干个特征向量被乘以了系数-1,对它们仍然是与相应特征值对应的特征向量这一点,没有影响。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Eigenvalues 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!