2017-10-02 14 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의 구성원을 각각 (배열이지만, 그럼에도 불구하고) N=2으로 계산하고이 값을 NP=4NP>N 인 무료 매개 변수와 비교합니다.