我想以最小二乘意义解决以下问题:
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())
)。
我该如何解决这个问题?
答案 0 :(得分:0)
我找到的最简单方法是将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))