2012-04-20 39 views
12

Tôi đang viết một chương trình bằng Python sẽ phù hợp với các hình dạng Gaussian và Lorentzian cho một số dữ liệu cộng hưởng nhất định. Ban đầu tôi bắt đầu sử dụng scipy.optimize.leastsq nhưng đã thay đổi thành sử dụng optimize.curve_fit sau khi gặp khó khăn trong việc truy xuất lỗi trong các tham số được tối ưu hóa từ ma trận hiệp phương sai.Vượt qua các đối số bổ sung bằng scipy.optimize.curve_fit?

tôi đã xác định một chức năng để phù hợp với một tổng của Gauss và Lorentzian:

def mix(x,*p): 
    ng = numg 
    p1 = p[:3*ng] 
    p2 = p[3*ng:] 
    a = sumarray(gaussian(x,p1),lorentzian(x,p2)) 
    return a 

nơi p là một mảng của các dự đoán ban đầu vào các thông số phù hợp. Đây là trường hợp mà nó được gọi là sử dụng curve_fit:

leastsq,covar = opt.curve_fit(mix,energy,intensity,inputtot) 

Tại thời điểm numg (số lượng hình dạng Gaussian) là một biến toàn cầu. Có cách nào để nó có thể được kết hợp thành curve_fit làm đối số bổ sung thay vì, có thể được thực hiện với leastsq không?

Trả lời

17

Những điều tuyệt vời về python là bạn có thể xác định chức năng trả lại các chức năng khác, thử currying:

def make_mix(numg): 
    def mix(x, *p): 
     ng = numg 
     p1 = p[:3*ng] 
     p2 = p[3*ng:] 
     a = sumarray(gaussian(x,p1),lorentzian(x,p2)) 
     return a 
    return mix 

và sau đó

leastsq, covar = opt.curve_fit(make_mix(numg),energy,intensity,inputtot) 
+0

Cảm ơn rất nhiều! Làm việc hoàn hảo –

Các vấn đề liên quan