2014-03-26 3 views
0

lmfit 패키지를 사용하여 매개 변수 (a)와 (b)를 추출하려면 2D 함수로 데이터를 맞추고 싶습니다. 기본적으로 1D 함수 피팅으로 모든 좌표를 동일한 좌표 (x, y)의 2D 함수에 맞추려고합니다. 이것은 각 데이터 포인트가 다른 좌표 (x, y)를 가지므로 다른 데이터 포인트와 다른 초기 추정 값을 가짐을 의미합니다. 나는이 오류 메시지가있어, 그러나Python에서 lmfit을 사용하여 2D 함수에 데이터 맞추기

#!/usr/bin/ python 
    import pyfits 
    import numpy as np 
    import math 
    from lmfit import minimize, Parameters, Parameter, report_errors,report_fit,  
     conf_interval, printfuncs 


    xn =np.linspace(0,3,4) # x-component 
    yn =np.linspace(0,3,4) # y-component 

    data= [0.0, 0.16, 0.33, 0.5, 0.2, 0.26, 0.38, 0.53, 0.4, 0.43, 0.52, 0.64, 0.6, 0.62, 
    0.67, 0.78] # (x1,y1) generate (data[0]), (x1,y2) generate (data[1]) and so on 


    params = Parameters() 
    params.add('a', value=3) 
    params.add('b', value=5)      


    def residual(params,x,y,data=None): 
     a = params['a'].value    # parameter 
     b = params['b'].value    # parameter 
     model=(x**2/a**2+y**2/b**2)**0.5  # 2D function    
     if data is None: 
      return data 
     return model - data 


    out=minimize(residual,params,args=(x,y,data,))  # lmfit minimizer 
    final=data+out.residual 
    report_fit(params) 
    ci = conf_interval(out, sigmas=[0.68,0.95])   # confidence interval 
    printfuncs.report_ci(ci) 

: 이것은 내 코드는 x와 y의 차원 데이터의 동일하지 않습니다, 분명히

ValueError: operands could not be broadcast together with shapes (4) (16) 

을,하지만 만드는 방법을 알고하지 않습니다 데이터 [0]은 (x1, y1)을 취하고, 데이터 [1]은 (x1, y2) ..., 데이터 [5]는 (x2, y1) 등을 취합니다. 제발 누구든지이 문제를 해결하거나 어떤 제안을 할 수 있도록 도와주세요. 미리 감사드립니다.

답변

0

데이터를 압축해야합니까?

x = [x1, x2, ...] 
y = [y1, y2, ...] 
data = zip(x, y) # [(x1, y1), (x2, y2), ... ] 
+0

응답 해 주셔서 감사합니다. 실제로이 단계 x, y = np.ix_ (xn, yn)을 데이터 앞에 추가했는데 제대로 작동했습니다. – user3395817

관련 문제