2015-10-06 3 views
0

У меня есть набор данных, как:минимумов функции кортежа

2.699994 -2541.184861 
2.749996 -2541.189717 
2.779995 -2541.190735 
2.789996 -2541.190777 
2.799993 -2541.190668 
2.829992 -2541.189523 
2.858996 -2541.187427 

Я знаю, что это подходит к полиному например .: f(x)=a+b*x+c*x^3

Я нужно получить минимумы функции.

Я googled вокруг, и выглядит как scipy.optimize это то, что я ищу, но не могу понять, как предоставить данные. Просьба помочь

ответ

1

Итак, есть два шага: сначала найдите параметры, установив функцию. Для этого я использовал curve_fit. А затем минимизируйте функцию. я использовал сведение к минимуму, но это также можно было сделать аналитически.

import scipy as sp 
import scipy.optimize 
import matplotlib.pyplot as plt 
%matplotlib inline 

# data 
xdata = sp.array([2.699994, 2.749996, 2.779995, 2.789996, 2.799993, 2.829992, 2.858996]) 
ydata = sp.array([-2541.184861, -2541.189717, -2541.190735, -2541.190777, -2541.190668, -2541.189523, -2541.187427]) 

# function to fit 
def f(x, a, b, c): 
return a + b*x + c*x**3 

# fit the parameters a, b, c 
popt, pcov = sp.optimize.curve_fit(f, xdata, ydata) 
print('Parameters a, b, c are: {0}'.format(popt)) 

# minimize the function (could also be done analytically) 
res = sp.optimize.minimize(lambda x: f(x, *popt), 2.8) 
print('Function is minimized for {0}.'.format(float(res['x']))) 

# plot data, fitted function and minimum 

# function 
x = sp.linspace(2.65, 2.9, 100) 
y = f(x, *popt) 
plt.plot(x, y) 

# data 
plt.scatter(xdata, ydata) 

# minimum 
plt.scatter(res['x'], f(res['x'], *popt), color = 'red', s = 80) 
plt.show() 

data and fit

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