I am new to python, so my knowledge is inadequate. I have a datafile named "tlove_cc_seq2_k2_NL3.dat". I want to fit a curve to the data. The code I am using is as follows::
...
import numpy as np import matplotlib.pyplot as plt from scipy.optimize import curve_fit import math import pandas as pd import lmfit from lmfit import Model import matplotlib.pyplot as plt from scipy.optimize import curve_fit from array import * def test(x, a, b, c): return (a + b*math.log(x) + c*math.log(x)**2) func = np.vectorize(test) data_k2_2fl_NL3=np.loadtxt('tlove_cc_seq2_k2_NL3.dat') plt.plot(data_k2_2fl_NL3[:,8], data_k2_2fl_NL3[:,5], 'b-', label='data') popt, pcov = curve_fit(func, data_k2_2fl_NL3[:,8], data_k2_2fl_NL3[:,5]) popt plt.plot(data_k2_2fl_NL3[:,8], func(data_k2_2fl_NL3[:,8], *popt), 'r-', label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt)) popt, pcov = curve_fit(func, data_k2_2fl_NL3[:,8], data_k2_2fl_NL3[:,5], bounds=(-20, [30., 30., 20.5])) popt plt.plot(data_k2_2fl_NL3[:,8], func(data_k2_2fl_NL3[:,8], *popt), 'g--', label='fit: a=%5.3f, b=%5.3f, c=%5.3f' % tuple(popt)) plt.xlabel('x') plt.ylabel('y') plt.legend() plt.show() ...
The error I am getting is as follows::
... ValueError Traceback (most recent call last) in 13 #y = data[:, 1] 14 plt.plot(data_k2_2fl_NL3[:,8], data_k2_2fl_NL3[:,5], 'b-', label='data') ---> 15 popt, pcov = curve_fit(func, data_k2_2fl_NL3[:,8], data_k2_2fl_NL3[:,5]) 16 popt 17
~/anaconda3/lib/python3.7/site-packages/scipy/optimize/minpack.py in curve_fit(f, xdata, ydata, p0, sigma, absolute_sigma, check_finite, bounds, method, jac, **kwargs) 678 args, varargs, varkw, defaults = _getargspec(f) 679 if len(args) < 2: --> 680 raise ValueError("Unable to determine number of fit parameters.") 681 n = len(args) - 1 682 else: ValueError: Unable to determine number of fit parameters. How can I resolve this? Thank you.
