约束最小二乘拟合 python
Constraining the least squares fitting in python
我想在最小二乘意义上解决以下问题:
H = dot(A, B) + dot(A.conj(), C)
其中复数矩阵 H
、B
和 C
是已知的。正在搜索剩余的复矩阵 A
(及其复共轭)。
我尝试用 (Python) numpy 函数计算它:
x, res, r, singval = np.linalg.lstsq(np.vstack((B, C)), H)
但是结果不是我想要的形状( --> array((A, A.conj())
)。
我该如何解决这个问题?
我发现的最简单的方法是将 A
的值分为实部和虚部:
A = U + 1j*V
因此:
H = dot(U, B+C) + 1j*dot(V, B-C)
并使用scipy.optimize.lstsqr
,模型定义为:
def model(B, C, UV):
U = UV[:len(UV)//2]
V = UV[len(UV)//2:]
H = np.dot(U, B+C) + 1j*np.dot(V, B+C)
return H.view(float)
残差为:
def residuals(params, B, C, H):
UV = params
diff = model(B, C, UV) - H.view(float)
return diff.flatten()
得到结果如下:
params, cov = optimize.leastsq(residuals, x0 = np.ones(len(UV), dtype = float),
args=(B, C, H))
我想在最小二乘意义上解决以下问题:
H = dot(A, B) + dot(A.conj(), C)
其中复数矩阵 H
、B
和 C
是已知的。正在搜索剩余的复矩阵 A
(及其复共轭)。
我尝试用 (Python) numpy 函数计算它:
x, res, r, singval = np.linalg.lstsq(np.vstack((B, C)), H)
但是结果不是我想要的形状( --> array((A, A.conj())
)。
我该如何解决这个问题?
我发现的最简单的方法是将 A
的值分为实部和虚部:
A = U + 1j*V
因此:
H = dot(U, B+C) + 1j*dot(V, B-C)
并使用scipy.optimize.lstsqr
,模型定义为:
def model(B, C, UV):
U = UV[:len(UV)//2]
V = UV[len(UV)//2:]
H = np.dot(U, B+C) + 1j*np.dot(V, B+C)
return H.view(float)
残差为:
def residuals(params, B, C, H):
UV = params
diff = model(B, C, UV) - H.view(float)
return diff.flatten()
得到结果如下:
params, cov = optimize.leastsq(residuals, x0 = np.ones(len(UV), dtype = float),
args=(B, C, H))