【问题标题】:Constraining the least squares fitting in python约束python中的最小二乘拟合
【发布时间】:2015-07-14 14:28:24
【问题描述】:

我想以最小二乘的方式解决以下问题:

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

我该如何解决这个问题?

【问题讨论】:

  • 如果你想做约束非线性最小二乘看看 lmfit

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


【解决方案1】:

我发现最简单的方法是将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))

【讨论】:

    猜你喜欢
    • 2010-12-05
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2015-08-01
    • 2020-10-02
    • 2021-09-15
    相关资源
    最近更新 更多