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

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

 Accepted Answer

rnjpfxan
rnjpfxan on 23 May 2023
Edited: rnjpfxan on 23 May 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,对它们仍然是与相应特征值对应的特征向量这一点,没有影响。

More Answers (0)

Categories

Tags

Asked:

on 23 May 2023

Edited:

on 23 May 2023

Community Treasure Hunt

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

Start Hunting!