2016-11-14 7 views
1

У меня логарифмическая функции быть приспособленным к набору точекМожно ли применять ограничения на функцию диапазона/зависимых функций при использовании scipy curve_fit?

def log_func(x, a, b): 
    return a * np.log(x) + b 
popt, pcov = curve_fit(log_func, x, yn) 

Это приводит к сюжету следующим образом - Plotted Curve

Тем не менее, система имеет ограничение, что диапазон должен быть фиксированным в диапазоне от 0 до 100 . Я специально прошел точки в этих пределах (т.е. x = np.array([3200 ... other points ... 42000 ]) и y = np.array([0 ... other points ... 100 ]), но очевидно, что кривая не обязательно фиксировать эти значения.

Я прочитал, что я могу добавить границы для параметров (так a и b), но есть ли способ ограничить вывод, специально заставив кривую через две конечные точки. Или, наоборот, мне нужно ввести какое-то чрезвычайное наказание функции, чтобы привести к параметрам, которые будут приводить к результату между 0 и 100?

ответ

0

Вы можете сформулировать проблему с подгонкой кривой как проблему с ограниченной проблемой оптимизации и использовать ее для решения этой проблемы scipy.optimize.minimize. Учитывая набор данных, для которых оптимальный a должен быть положительным, следует, что требование о диапазоне установленной функции эквивалентно ограничениям a*np.log(3200)+b>=0 и a*np.log(42000)+b<=100.

Можно действовать следующим образом (я использовал простой набор данных).

from scipy.optimize import minimize 


x = np.array([3200, 14500, 42000]) 
yn = np.array([0, 78, 100]) 

def LS_obj(p): 
    a, b = p 
    return ((log_func(x, a, b) - yn)**2).sum() 

cons = ({'type': 'ineq', 'fun': lambda p: p[0] * np.log(3200) + p[1]}, 
     {'type': 'ineq', 'fun': lambda p: 100 -p[0] * np.log(42000) - p[1]}) 

p0 = [10,-100] #initial estimate 
sol = minimize(LS_obj,p0 ,constraints=cons) 
print(sol.x) #optimal parameters 

[ 36.1955 -285.316 ]

На приведенном ниже рисунке сравниваются curve_fit и minimize решения. Как и ожидалось, решение minimize находится в пределах требуемого диапазона.

enter image description here

 Смежные вопросы

  • Нет связанных вопросов^_^