在python中约束最小二乘拟合

时间:2015-07-11 15:31:42

标签: python numpy linear-algebra mathematical-optimization least-squares

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

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()))。

我该如何解决这个问题?

1 个答案:

答案 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))