矩阵必知必会: 十一 生成空间 优秀的LS与SVD过程对比

举报
码乐 发表于 2023/11/27 09:28:19 2023/11/27
【摘要】 11 承上一节这里我们主要查看LS与SVD两个方式对于求解问题的能力,并简单对比。完全的对比的问题太大,只简单举个例子。 11.1 一点尾声: SVD值与LS解的对比许多物理问题都可以转换为对线性方程 Ax = b的求解问题。如果A可逆,那么它为方阵,行列式(determinant)就不是0,现在需要获取以下A矩阵的分解 和 对 A*->x = ->b 的解. 11.1.1 方法一 R3空...

11 承上一节

这里我们主要查看LS与SVD两个方式对于求解问题的能力,并简单对比。

完全的对比的问题太大,只简单举个例子。

11.1 一点尾声: SVD值与LS解的对比

许多物理问题都可以转换为对线性方程 Ax = b的求解问题。

如果A可逆,那么它为方阵,行列式(determinant)就不是0,
现在需要获取以下A矩阵的分解 和 对 A*->x = ->b 的解.

11.1.1 方法一 R3空间LS解

设有R3空间A,并且

  A = (4  11  14
       8  7  -2
       0  0   5  )

我们期望获得 b 到该空间的解

->b = (2
       1
       4)

又有 A^tA->x = A^t*->b (方程2)

已知:

      A^t*A = A^t*(4   11   14      = (80  100  40  
                   8    7  -2         100  170 140   
                   0    0   5)        40   140  225 )

     A^t*->b = (4  8  0  * (2   =  (16
                11  7 0     1       29
                14 -2 5     4)      46 )

因此方程2为

                         V
    A^t*A*->x = (80  100  40   *  (x    =  (16
                100  170 140       y        29
                40  140 225)      z)       46 )

获取V矩阵的增广矩阵最简形

        (80    100   40    16  
         100   170   140   29
         40    140   225   46)

将上式交换行,倍乘倍减后得到

  R(V) = [[-134.16, -228.08 , -195.28,  -44.87],
          [   0.        ,      -80.50, -183.36,  -33.99],
          [   0.        ,       0.   ,    8.34,    6.67]]

因此有

    	(-134.17, -228.08 , -195.29,        * (x  =  ( -44.88
           0.   ,  -80.50,  -183.36,           y      -33.99
           0.   ,    0.  ,     8.34,           z)      6.67)

得到方程组

  -134.16x - 228.1y - 195.3z = -44.9        
             -80.5y - 183.4z = -33.99        
                        8.4z = 6.7

得到向量的解

            x ≈ 1.551
            y ≈ -1.396
            z ≈ 0.798

得到 ->x 的解

  ->x     = (1.551
            -1.396
             0.798)

其于A空间的距离为

 ||A*-x - b ||  =  (4  11  14   * ( 1.551   - (2    =  ||( 2.02 || ≈ 2.27
                    8  7   -2      -1.396      1           1.04
                    0  0   5 )      0.798)     4)          -0.01)

11.1.2 方法二 R3空间SVD解

相同的空间,相同的问题。
设有R3空间A,并且

  A = (4  11  14
       8  7  -2
       0  0   5  )

我们期望获得 b 到该空间的解

->b = (2
       1
       4)

使用奇异分解方法。此法允许使用者大规模生成矩阵的解。
在欠定矩阵(n < m)中,under determined

由于需要获取的答案->b 中,没有足够的测量去唯一地确定单个唯一解决方案。
也就是:方程数量少于未知数。
因此可能有无穷的解。

        A      x    =   b
       ______  __      __
       |    |  | |     | |
       |    |  | |     | |
       ------  | |     ---
               | |
               ---

在超定矩阵(n > m)中,over determined

也就是:方程数量多于未知数。

超定系统总是不一致的,只在某些场景有解,例如方程在系统出现多次。或者某些方程式其他方程的线性组合。

非正定或超定矩阵,可以使用约束计数描述。每个未知数都可以看作是限制一个自由度的约束。因此,当方程的数量和自由变量的数量相同,将出现临界点。

对于每个给出自由度的变量,都存在相应的约束。超定的场景发生在系统被过度约束时,也就是:当方程的数量超过未知时。

此时通常无解,或只在某些场景有解。

        A      x    =   b
        ______  __      __
        |    |  | |     | |
        |    |  ---     | |
        |    |          | |
        ------          ---

公式

  A = UΣV^t

其逆形式为

由于 U 和 V 是正交的(这意味着 U^TU=I 和 V^TV=I)我们可以将 A 的逆写为(有关技巧 ,请参阅使用 QR 分解解决超定系统)

    A^-1 = V*Σ^-1*U^t

设 需要获取以下A矩阵的分解,并解决到 ->b 的解。
步骤1 因此有

   A^t*A   
   A^t*A - λI_3  
   
   λ1 ,λ2 , λ3  
   因此 Σ = ( λ1  0  0
              0  λ2  0
              0  0  0  )

步骤2 找到A^t*A的特征值λ

   v1 =   ?    v2 = ?      v3 = ?   

V为以上正交基为列的矩阵

	V = (v1, v2 ,v3)

步骤3 矩阵U

    U的第一列是

	σ1*Av1  

    U的第二列是
    
    σ2*Av2  
    
    U的第三列是
    
    σ3*Av3  

我们值得U是3 x 3 矩阵,因此:

    U = (σ1*Av1   σ2*Av2  σ3*Av3)

可以验证

	A = (4  11 14  = UΣV^t    
         8  7  -2              
         0  0   5)          

使用以上方程:

	A*->x = b

给定目标解为:

 ->b = (2
        1
        4)

可得:

    x = ( 1.55
          -1.4 
           0.8 )

向量b其到A空间的距离为:

||A*-x - b ||  =  (4  11  14   * ( 1.55   - (2    =  ||( 1.7  || ≈ 2.1
                   8  7   -2      -1.4      1           -1.3
                   0  0   5 )      0.8)     4)           0)

三个方法可以计算得未知向量 ->x:
先计算 SVD 分解,然后再反向求解

  • 1 使用matlab

         [U S V]=svd(A);    
         matlab:
     	x = V*(diag(diag(S).^-1)*(U.'*b))
    
  • 2 使用推导的人工公式

        Σ^2*V^t*->x = Σ*U^t*b
        或者
        UΣV^t*->x = b
    
        V^t*->x = w
    
  • 3 使用numpy
    1, 因式分解和逆
    2,使用逆来求解 Ax=b
    3,公式

    	比如 
    	A = [[4,  11, 14],
             [8,  7,  -2],
             [0,  0,  5]]
    
       b = [[3],
           [1],
           [5]]
    
    # 分解
    U,Σ,V = np.linalg.svd(a)
    # 求逆
    pav = np.linalg.pav(a)
    pav_svd = np.dot(np.dot(V.T,np.linalg.inv(np.diag(s))),U.T)
    # 使用solve 求解x,这个必须是方阵
    x = np.linalg.solve(a,b)                      
    

3.3.3 对比 LS 解 和 SVD 解

因此可见,LS 解 和 SVD 解 不同 但只有些许差别。

LS 最小二乘解

    ->x = (1.551
          -1.396
           0.798)
	与真实解距离约为 ≈ 2.27

SVD奇异值方法

    x = ( 1.55
          -1.4 
           0.8 )
   与真实解距离约为 ≈ 2.1 

对于方阵,除去误差几乎可以相等。如下图:

问题是: 截断的 SVD 解决方案如何才能更准确?
使用SVD求逆,然后获取未知量 ->x 的过程,这是非常复杂的问题。

使用 SVD 计算 Ax = b 的解的全部意义在于,实际中有一个不完整矩阵甚至非满秩矩阵——这意味着最小的奇异值非常小或为零。

这些类型的矩阵在实践中一直出现(例如, 使用numpy模拟 rand(100,100) 而不是 rand(4,4))。

在这些情况下,可以截断那些小的奇异值(以及 U 和 V 的相应列),然后 SVD 可以计算伪逆。

小结

感谢能看到现在的朋友,也许只有自己。 实际问题可能需要更多的计算工具。

而实际上也有很多方法等待发现。 下一节有些书单,有兴趣的朋友可以参考。

一个好的计算机软件和好的计算方法,确实可以节省了大量计算时间,特别是避免计算错误问题。

这个系列先到此为止。 希望将来有机会再续前缘。 谢谢。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。