matlab中svd, svds, lansvd 函数

这篇博客详细介绍了MATLAB中用于奇异值分解的svd, svds和lansvd函数。svd提供矩阵的全奇异值分解,svds和lansvd允许用户指定计算的最大或最小奇异值数量,它们默认返回前6个特征值。这些函数在理解和处理矩阵特性时非常有用。" 104799135,8341349,Linux操作系统中的零拷贝技术详解,"['内核', 'Linux', 'DMA', '零拷贝技术', '系统调用']
部署运行你感兴趣的模型镜像

首先我们看一下wiki上关于奇异值分解的理论描述:

1. 理论描述

假设M是一个m×n阶矩阵,其中的元素全部属于K,也就是实数域或复数域。如此则存在一个分解使得

{\displaystyle M=U\Sigma V^{*},\,}M = U  \Sigma V^*, \,

其中U是m×m阶酉矩阵;Σ是m×n阶非负实数对角矩阵;而V*,即V的共轭转置,是n×n阶酉矩阵。这样的分解就称作M的奇异值分解。Σ对角线上的元素Σi,i即为M的奇异值。

常见的做法是将奇异值由大而小排列。如此Σ便能由M唯一确定了。(虽然U和V仍然不能确定。)

2. 直观的解释

在矩阵M的奇异值分解中

{\displaystyle M=U\Sigma V^{*},\,}M = U\Sigma V^*, \,
  • V的列(columns)组成一套对{\displaystyle M\,}M\,正交"输入"或"分析"的基向量。这些向量是{\displaystyle M^{*}\,M}M^*\,M特征向量
  • U的列(columns)组成一套对{\displaystyle M\,}M\,正交"输出"的基向量。这些向量是{\displaystyle MM^{*}\,}MM^*\,特征向量
  • Σ对角线上的元素是奇异值,可视为是在输入与输出间进行的标量的"膨胀控制"。这些是{\displaystyle MM^{*}\,}MM^*\,{\displaystyle M^{*}\,M}M^*\,M特征值的非零平方根,并与U和V的行向量相对应。

3. 具体的matlab运算详解如下:

矩阵奇异值分解:

假设待分解矩阵为 M(m,n), 分解获得的的矩阵为 U, S, V.

SVD matlab函数原型为:

[U, S, V] = svd(M);  则 U(m,m), S(m, n),  V(n, n).

对于Svds 函数:

[U, S, V] = svds(M);  则 U(m,6), S(6,6),  V(n, 6).  

默认情况下是取最大的6个特征值,SVDS(A) 返回的就是svds返回的就是最大的6个特征值及其对应的特征行向量和特征列向量。然而Svds是可以根据需求进行定制:

[U, S, V] = svds(M, k);  则U(m,k), S(k,k),  V(n, k).  此时svds返回的就是最大的k个特征值及其对应的特征行向量和列向量。

在PROPACK 这个库中,有一个lansvd的函数名,此函数功能类似于svds函数,但是比svds更加灵活, svds只可以返回最大的k个特征值,Lansvd还可以返回最小的K个特征值。

[U,S,V] =LANSVD(A,K,'L',...) computes the K largest singular values. 该函数计算最大的K个特征值。

[U,S,V] = LANSVD(A,K,'S',...) computesthe K smallest singular values. 计算最小的K个特征值。


Lansvd在默认情况下,也是返回最大的6个特征值及其对应的特征向量。默认情况下,Svds和Lansvd 计算出来的特征值S是一样的。


4. 总结

在matlab中,SVD, SVDS 和lansvd函数本质上都是一样的。只是SVD得到的是全分解返回的全部特征值, Svds和lansvd 是可以灵活定制的,他们默认都是返回最大的6个特征值。其中Svds可以返回最大的K个特征值, lansvd更加灵活,可以返回最大或者最小的K个特征值。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值