奇异值分解求解超定方程最小二乘解
超定方程可以通过SVD奇异值分解来求解最小二乘解,分为两种:
1、Ax = 0
对于这个情况:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15""" Ax = 0 A = [[1, 2, 3], x1 [4, 5, 6], * x2 = 0 ...... [2, 3, 4]] x3 """ U, Sigma, VT = np.linalg.svd(A) print(VT) print(VT.T) x1 = VT.T[0, 2] x2 = VT.T[1, 2] x3 = VT.T[2, 2]
即奇异值分解的V的转置的最后一列为所求解的值。
2、Ax = b
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24import 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)
参考参考
最后
以上就是神勇书包最近收集整理的关于奇异值分解求解超定方程最小二乘解的全部内容,更多相关奇异值分解求解超定方程最小二乘解内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复