约束最小二乘拟合 python

Constraining the least squares fitting in python

我想在最小二乘意义上解决以下问题:

H = dot(A, B) + dot(A.conj(), C)

其中复数矩阵 HBC 是已知的。正在搜索剩余的复矩阵 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))