Я делаю некоторую подгонку данных, используя привязки Pyminuit Python для кода минимизации (http://code.google.com/p/pyminuit/).) Минимизатор принимает функцию и использует самоанализ для извлечения минимизируемых параметров. В общем, я хочу минимизировать значение хи-квадрат для набора данных, заданного конкретной функции для описания набора данных.
Мой вопрос: существует ли способ определить функцию хи-квадрат, которая, учитывая произвольную функцию с переменным числом параметров, возвращает функцию, которая дает значение хи-квадрат для этой функции , а содержит только параметры, которые будут минимизированы в спецификации аргумента функции?
Пример:
from scipy import *
import minuit
# Generate some data to fit
data_x = arange(50)
noise = 0.3
data_y = data_x**3 + normal(0.0, noise)
# Fit function, e.g. a cubic
fit_func = lambda x, a1, a2, a3, a4: a1 + a2*x + a3*x**2 + a4*x**3
# Minimisation function e.g. chi squared
# Note this has only the parameters to be minimised in the definition (eg not data_x)
min_func = lambda a1, a2, a3, a4: sum( (fit_func(data_x, a1, a2, a3, a4) - data_y)**2 / noise**2 )
Это то место, где я хотел бы написать что-то вроде min_func = make_chi2(fit_func)
. Я не знаю, что делать, поскольку data_x
и data_y
определены только вне функции. Остальная часть процедуры минимизации для полноты выглядит следующим образом:
# Initialise minimiser object with initial values
m = minuit.Minuit(min_func, {'a1': 1.0, 'a2': 1.0, 'a3': 1.0, 'a4': 1.0})
# Run minimiser
m.migrad()
# Print minimised values - example output
print m.values
>>> {'a1': 0.000, 'a2': 0.000, 'a3': 0.000, 'a4': 1.000}
Заранее спасибо за помощь!