〖矩阵论笔记一〗奇异值分解(SVD) 您所在的位置:网站首页 三行三列矩阵求解怎么求出来 〖矩阵论笔记一〗奇异值分解(SVD)

〖矩阵论笔记一〗奇异值分解(SVD)

2024-06-25 14:59| 来源: 网络整理| 查看: 265

奇异值分解(singular value decomposition, SVD)是一种矩阵因子分解方法,是线性代数的概念,它在优化问题、最小二乘问题、广义逆矩阵及统计学习中被广泛使用,成为其重要工具。

奇异值分解 1 定义与性质2 奇异值分解算法2.1 算法一2.2 算法二 3 奇异值分解代码

1 定义与性质 奇异值分解是指任意一个mxn矩阵,都可以表示为三个矩阵的乘积(因子分解)形式,分别是m阶正交矩阵、由降序排列的非负的对角线元素组成的mxn矩形对角矩阵和n阶正交矩阵。奇异值:设A∈ C r m ∗ n C^{m*n}_r Crm∗n​(r>0),求出 A A T AA^T AAT或 A T A A^TA ATA的特征值, λ 1 ≥ λ 2 ≥ λ 3 ≥ . . . ≥ λ r > 0 , λ r + 1 = λ r + 2 = . . . λ n = 0 λ_1≥λ_2≥λ_3≥...≥λ_r>0,λ_{r+1}=λ_{r+2}=...λ_n=0 λ1​≥λ2​≥λ3​≥...≥λr​>0,λr+1​=λr+2​=...λn​=0,则称σ= λ i \sqrtλ_i λ ​i​(i=1,2,3…n)为A的奇异值,σ= λ i \sqrtλ_i λ ​i​(i=1,2,3…r)为A的非零奇异值。 注: A A T AA^T AAT和 A T A A^TA ATA有相同的非零奇异值。矩阵奇异值分解将矩阵分解为三个矩阵的乘积: A = U Σ V T A=UΣV^T A=UΣVT 其中: U和V是正交单位矩阵(酉矩阵),Σ为对角矩阵(不一定是方阵)。 矩阵U称为左奇异矩阵,U的列向量称为左奇异向量,V为右奇异矩阵,V的列向量称为右奇异向量。 Σ=diag( σ 1 , σ 2 , . . . σ n σ_1,σ_2,...σ_n σ1​,σ2​,...σn​),只有其主对角线有奇异值,其余均为0。 将上诉公式 A = U Σ V T A=UΣV^T A=UΣVT改为A=U ( Σ 1 O O O ) V T \begin{pmatrix} Σ_1&O\\O&O\end{pmatrix}V^T (Σ1​O​OO​)VT,其中 Σ 1 Σ_1 Σ1​=diag( σ 1 , σ 2 , . . . σ r σ_1,σ_2,...σ_r σ1​,σ2​,...σr​) 2 奇异值分解算法

例题:求矩阵A= ( 1 2 0 0 0 0 ) \begin{pmatrix} 1&2\\0&0\\0&0\end{pmatrix} ⎝⎛​100​200​⎠⎞​的奇异值分解。

2.1 算法一

(1)求正交矩阵V 可求得矩阵 A T A = A^TA= ATA= ( 1 0 0 2 0 0 ) \begin{pmatrix}1&0&0\\2&0&0\end{pmatrix} (12​00​00​) ( 1 2 0 0 0 0 ) \begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} ⎝⎛​100​200​⎠⎞​= ( 1 2 2 4 ) \begin{pmatrix}1&2\\2&4\end{pmatrix} (12​24​)的特征值为 λ 1 = 5 , λ 2 = 0 λ_1=5,λ_2=0 λ1​=5,λ2​=0, 对应特征向量为 a 1 = ( 1 , 2 ) T a_1=(1,2)^T a1​=(1,2)T, a 2 = ( 2 , − 1 ) T a_2=(2,-1)^T a2​=(2,−1)T 非零奇异值为 σ = 5 σ=\sqrt5 σ=5 ​,所以 Σ 1 Σ_1 Σ1​=( 5 \sqrt5 5 ​) 使得 V T ( A T A ) V V^T(A^TA)V VT(ATA)V= ( 5 0 0 0 ) \begin{pmatrix}5&0\\0&0\end{pmatrix} (50​00​)成立的正交矩阵 V = ( V 1 , V 2 V=(V_1,V_2 V=(V1​,V2​)= ( 1 5 2 5 2 5 − 1 5 ) \begin{pmatrix}\frac{1}{\sqrt5}&\frac{2}{\sqrt5}\\\frac{2}{\sqrt5}&-\frac{1}{\sqrt5}\end{pmatrix} (5 ​1​5 ​2​​5 ​2​−5 ​1​​) (2)求正交矩阵U U 1 = A V 1 Σ 1 − 1 U_1=AV_1Σ_1^{-1} U1​=AV1​Σ1−1​= ( 1 2 0 0 0 0 ) \begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} ⎝⎛​100​200​⎠⎞​ ( 1 5 2 5 ) \begin{pmatrix}\frac{1}{\sqrt5}\\\frac{2}{\sqrt5}\end{pmatrix} (5 ​1​5 ​2​​) ( 1 5 ) \begin{pmatrix}\frac{1}{\sqrt5}\end{pmatrix} (5 ​1​​)= ( 1 0 0 ) \begin{pmatrix}1\\0\\0\end{pmatrix} ⎝⎛​100​⎠⎞​ 取 U 2 = ( 0 0 1 0 0 1 ) U_2=\begin{pmatrix}0&0\\1&0\\0&1\end{pmatrix} U2​=⎝⎛​010​001​⎠⎞​ ,将 U 1 U_1 U1​扩张成 R 3 R^3 R3的标准正交基 U = ( U 1 , U 2 ) U=(U_1,U_2) U=(U1​,U2​)= ( 1 0 0 0 1 0 0 0 1 ) \begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} ⎝⎛​100​010​001​⎠⎞​ (3)分解 则A的奇异值分解为A=U ( Σ 1 O O O ) V T \begin{pmatrix} Σ_1&O\\O&O\end{pmatrix}V^T (Σ1​O​OO​)VT= ( 1 0 0 0 1 0 0 0 1 ) \begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} ⎝⎛​100​010​001​⎠⎞​ ( 5 0 0 0 0 0 ) \begin{pmatrix}\sqrt5&0\\0&0\\0&0\end{pmatrix} ⎝⎛​5 ​00​000​⎠⎞​ ( 1 5 2 5 2 5 − 1 5 ) \begin{pmatrix}\frac{1}{\sqrt5}&\frac{2}{\sqrt5}\\\frac{2}{\sqrt5}&-\frac{1}{\sqrt5}\end{pmatrix} (5 ​1​5 ​2​​5 ​2​−5 ​1​​)

2.2 算法二

(1)求正交矩阵U 可求得矩阵 A A T = AA^T= AAT= ( 1 2 0 0 0 0 ) \begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} ⎝⎛​100​200​⎠⎞​ ( 1 0 0 2 0 0 ) \begin{pmatrix}1&0&0\\2&0&0\end{pmatrix} (12​00​00​)= ( 5 0 0 0 0 0 0 0 0 ) \begin{pmatrix}5&0&0\\0&0&0\\0&0&0\end{pmatrix} ⎝⎛​500​000​000​⎠⎞​的特征值为 λ 1 = 5 , λ 2 = λ 3 = 0 λ_1=5,λ_2=λ_3=0 λ1​=5,λ2​=λ3​=0,非零奇异值为 σ = 5 σ=\sqrt5 σ=5 ​,所以 Σ 1 = ( 5 Σ_1=(\sqrt5 Σ1​=(5 ​) 求得特征向量 a 1 = ( 1 , 0 , 0 ) T a_1=(1,0,0)^T a1​=(1,0,0)T, a 2 = ( 0 , 1 , 0 ) T a_2=(0,1,0)^T a2​=(0,1,0)T, a 3 = ( 0 , 0 , 1 ) T a_3=(0,0,1)^T a3​=(0,0,1)T 则 U = ( 1 0 0 0 1 0 0 0 1 ) U=\begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} U=⎝⎛​100​010​001​⎠⎞​ (2)求正交矩阵V 可求得矩阵 A T A = A^TA= ATA= ( 1 0 0 2 0 0 ) \begin{pmatrix}1&0&0\\2&0&0\end{pmatrix} (12​00​00​) ( 1 2 0 0 0 0 ) \begin{pmatrix}1&2\\0&0\\0&0\end{pmatrix} ⎝⎛​100​200​⎠⎞​= ( 1 2 2 4 ) \begin{pmatrix}1&2\\2&4\end{pmatrix} (12​24​)的特征值为 λ 1 = 5 , λ 2 = 0 λ_1=5,λ_2=0 λ1​=5,λ2​=0, 对应特征向量为 a 1 = ( 1 , 2 ) T a_1=(1,2)^T a1​=(1,2)T, a 2 = ( 2 , − 1 ) T a_2=(2,-1)^T a2​=(2,−1)T 使得 V T ( A T A ) V V^T(A^TA)V VT(ATA)V= ( 5 0 0 0 ) \begin{pmatrix}5&0\\0&0\end{pmatrix} (50​00​)成立的正交矩阵 V = ( V 1 , V 2 V=(V_1,V_2 V=(V1​,V2​)= ( 1 5 2 5 2 5 − 1 5 ) \begin{pmatrix}\frac{1}{\sqrt5}&\frac{2}{\sqrt5}\\\frac{2}{\sqrt5}&-\frac{1}{\sqrt5}\end{pmatrix} (5 ​1​5 ​2​​5 ​2​−5 ​1​​) (3)分解 则A的奇异值分解为A=U ( Σ 1 O O O ) V T \begin{pmatrix} Σ_1&O\\O&O\end{pmatrix}V^T (Σ1​O​OO​)VT= ( 1 0 0 0 1 0 0 0 1 ) \begin{pmatrix}1&0&0\\0&1&0\\0&0&1\end{pmatrix} ⎝⎛​100​010​001​⎠⎞​ ( 5 0 0 0 0 0 ) \begin{pmatrix}\sqrt5&0\\0&0\\0&0\end{pmatrix} ⎝⎛​5 ​00​000​⎠⎞​ ( 1 5 2 5 2 5 − 1 5 ) \begin{pmatrix}\frac{1}{\sqrt5}&\frac{2}{\sqrt5}\\\frac{2}{\sqrt5}&-\frac{1}{\sqrt5}\end{pmatrix} (5 ​1​5 ​2​​5 ​2​−5 ​1​​) 我觉得算法二套路简单,没有算法一那么花里胡哨,但所得结果需要检验。

3 奇异值分解代码

python代码:直接调用numpy的svd()

import numpy as np A = np.array([[1,2],[0,0],[0,0]]) U,S,VT = np.linalg.svd(A) print("返回结果:",np.linalg.svd(A)) print("U=",U) print("S=",S) print("V^T=",VT)

输出 在这里插入图片描述

这时我们发现矩阵S只显示对角元素的值,而矩阵中其它元素因为是0而被省略了。所以返回的时候,作为一维矩阵返回。如果我们想让矩阵S完整显示出来,可以添加以下代码进行处理

S2 = np.zeros(A.shape,S.dtype) np.fill_diagonal(S2,S) print("处理后的S=") print(S2)

输出: 在这里插入图片描述 说明: np.fill_diagonal(S2, S)的作用是将矩阵S2的对角元素设置为S的元素 np.zeros(A.shape,S.dtype)的作用是返回来一个和矩阵A形状相同的、和矩阵S数据类型相同的、用0填充的数组。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有