2

嵌合我要解決在最小二乘意義上的以下內容:約束最小二乘在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()))。

我該如何解決這個問題?

+1

如果你想這樣做約束非線性最小二乘看lmfit – Moritz

回答

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