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

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

 Réponse acceptée

rnjpfxan
rnjpfxan le 23 Mai 2023
Modifié(e) : rnjpfxan le 23 Mai 2023

0 votes

不知道你用的什么版本。
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,对它们仍然是与相应特征值对应的特征向量这一点,没有影响。

Plus de réponses (0)

Catégories

En savoir plus sur Eigenvalues dans Centre d'aide et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!