Я хочу дополнить набор данных простой функцией sin ^ 2 и определить ее минимумы на основе установленных параметров.
Вот мой код:
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize
data = np.loadtxt('data.txt', usecols=(0,1))
x = data[:,0]*np.pi/180
y = data[:,1]
plt.scatter(x, y, c='red')
def sine(t,a,b,c):
return a*(np.sin(b*(t-c)))**2
params, cov = optimize.curve_fit(sine, x, y, p0=[9500, 0.5, 0])
print(params)
t = np.linspace(0, 2*np.pi/3, 120)
plt.plot(t, sine(t, *params), 'black')
plt.show()
optimize.minimize(sine(t, *params), x0=0)
Всевсе в порядке, за исключением вызова minimize
, поскольку я получаю следующую ошибку (с полным обратным отслеживанием):
TypeError Traceback (most recent call last)
~\Documents\CNR\Calibrazione_lamine_20181112\Fit.py in <module>()
23 plt.show()
24
---> 25 optimize.minimize(sine(t, *params), x0=0)
~\Anaconda3\lib\site-packages\scipy\optimize\_minimize.py in minimize(fun, x0, args, method, jac, hess, hessp, bounds, constraints, tol, callback, options)
442 return _minimize_cg(fun, x0, args, jac, callback, **options)
443 elif meth == 'bfgs':
--> 444 return _minimize_bfgs(fun, x0, args, jac, callback, **options)
445 elif meth == 'newton-cg':
446 return _minimize_newtoncg(fun, x0, args, jac, hess, hessp, callback,
~\Anaconda3\lib\site-packages\scipy\optimize\optimize.py in _minimize_bfgs(fun, x0, args, jac, callback, gtol, norm, eps, maxiter, disp, return_all, **unknown_options)
911 else:
912 grad_calls, myfprime = wrap_function(fprime, args)
--> 913 gfk = myfprime(x0)
914 k = 0
915 N = len(x0)
~\Anaconda3\lib\site-packages\scipy\optimize\optimize.py in function_wrapper(*wrapper_args)
290 def function_wrapper(*wrapper_args):
291 ncalls[0] += 1
--> 292 return function(*(wrapper_args + args))
293
294 return ncalls, function_wrapper
~\Anaconda3\lib\site-packages\scipy\optimize\optimize.py in approx_fprime(xk, f, epsilon, *args)
686
687 """
--> 688 return _approx_fprime_helper(xk, f, epsilon, args=args)
689
690
~\Anaconda3\lib\site-packages\scipy\optimize\optimize.py in _approx_fprime_helper(xk, f, epsilon, args, f0)
620 """
621 if f0 is None:
--> 622 f0 = f(*((xk,) + args))
623 grad = numpy.zeros((len(xk),), float)
624 ei = numpy.zeros((len(xk),), float)
~\Anaconda3\lib\site-packages\scipy\optimize\optimize.py in function_wrapper(*wrapper_args)
290 def function_wrapper(*wrapper_args):
291 ncalls[0] += 1
--> 292 return function(*(wrapper_args + args))
293
294 return ncalls, function_wrapper
TypeError: 'numpy.ndarray' object is not callable.
Я что-то упускаю, но не знаю, что.
Я добавляю файл данных для запуска этой программы, как было предложено
0 405
5 20
10 350
15 1380
20 2900
25 4750
30 6450
35 8100
40 9100
45 9800
50 10100
55 10250
60 9400
65 8400
70 6430
75 4900
80 3030
85 1500
90 400
95 17
100 410
105 1550
110 3100
115 4850
120 6780