超定方程求解

SVD分解原理

一个m*n的矩阵A,把他分解成如下形式:

c87ff3d9efa749ce889621fba2553c67.png

 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YaJ57-B5LmL5oSP5LiN5Zyo6YWSfg==,size_20,color_FFFFFF,t_70,g_se,x_16

 分解例子如下:watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YaJ57-B5LmL5oSP5LiN5Zyo6YWSfg==,size_19,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YaJ57-B5LmL5oSP5LiN5Zyo6YWSfg==,size_20,color_FFFFFF,t_70,g_se,x_16watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6YaJ57-B5LmL5oSP5LiN5Zyo6YWSfg==,size_20,color_FFFFFF,t_70,g_se,x_16

 作用:可用来解超定方程

例:左边为超定方程,右边为矩阵形式 

 \left\{\begin{matrix} 2x_1+4x_2=11\\ 3x_1-5x_2=3\\ x_1+2x_2=6 \\2x_1+x_2=7\end{matrix}\right.\begin{bmatrix} 2 & 4 &-11\\ 3 & -5 &-3 \\ 1 & 2&-6 \\ 2&1&-7\end{bmatrix}\begin{bmatrix} x_1\\ x_2 \\1\end{bmatrix}=\begin{bmatrix} 0\\ 0\\ 0 \\0\end{bmatrix}

 于是对于齐次线性方程\boldsymbol{Ax=0},如果\boldsymbol{A}_{m\times n}列满秩且m> n,则该方程组为超定方程组(有效方程个数大于未知参数的个数的方程)。此时的方程组没有精确解,需要求解最小二乘解。在\left \| \boldsymbol{x} \right \|=1的约束条件下下,其最小二乘解为矩阵\boldsymbol{A^TA}最小特征值所对应的特征向量。

 利用代码求解:

import numpy as np
#输入系数矩阵A
A = np.array([[2,4,-11],[3,-5,-3],[1,2,-6],[2,1,-7]])
 
 
#对A进行svd分解
U,Sigma,VT = np.linalg.svd(A)
#print(U)
#print(Sigma)
#print(VT)
 
#求解,V的列向量即是ATA的特征向量
#VT最后一行的行向量即为最小特征值对应的特征向量
#由于x[3,0]=1,所以需要对结果进行处理
k=1/ VT[2,2]
x_1=VT[2,0]*k
x_2=VT[2,1]*k
print(x_1,x_2)
 
#误差
X=np.array([[x_1],[x_2],[1]])
R=np.dot(np.transpose(np.dot(A,X)),(np.dot(A,X)))
print (R)

 运行结果:

 解得最小二乘解为\left\{\begin{matrix} x_1=3.045\\ x_2=1.243 \end{matrix}\right.,误差平方和 R=0.341

 至于为什么解是Vt矩阵最后一行的除法,而误差平方根这么算就不清楚了。

转载来源:

【MQ笔记】SVD分解练习(Python)(矩阵分解,图像处理,求解超定方程)_M&Q的博客-CSDN博客_矩阵分解图像处理

SVD分解_醉翁之意不在酒~的博客-CSDN博客_svd分解

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值