2017-10-02 2 views
1

scipy.odrを使用してN = 3個の観測値(X、Y)のM = 2セットに適合させたい場合は、2*Mの最適値(勾配と切片の推定値M個の観測セットのそれぞれの中で)。 scipy.odrのドキュメントといくつかの関連するstackoverflowの質問を読むことから、これが可能であるようですが、次の最小限の例を試してみると、フィッティングが収束しない(Reason(s) for Halting: NP < 1 or NP > N)。多次元ODRフィッティング

私は、最も適合した値であるbetaを適度に近似して始めています。なぜこれが悲惨に失敗するのか?

from pylab import * 
from scipy import odr 

x = array([[1.0,2.0,3.0],[1.1,2.1,3.1]]) 
y = array([[1.1,2.3,3.1],[5.9,7.0,8.2]]) 
sx = x*0 + .1 
sy = y*0 + .1 

def f(B, x): 
    out = x * 0 
    for k in range(x.shape[0]) : 
     out[k,:] = B[2*k] * x[k,:] + B[2*k+1] 
    return out 

result = odr.ODR(
    odr.RealData(x, y, sx = sx, sy = sy), 
    odr.Model(f), beta0 = array([1.,0.,1.,5.]) 
    ).run() 

result.pprint() 

答えて

0

エラーメッセージは開始値とは関係ありません。事実上x,y,zであるので、ODRがこのデータを処理できるかどうかはわかりません。私の解釈は、xyというメンバー(それぞれ)を数えて(配列にもかかわらず)、それを無料のパラメータ、つまりNP=4と比較します。したがって、NP>Nです。