【发布时间】:2020-03-06 20:28:22
【问题描述】:
我是python新手,所以我的知识不足。 我有一个名为“tlove_cc_seq2_k2_NL3.dat”的数据文件。我想为数据拟合曲线。 我使用的代码如下::
...
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()
...
我得到的错误如下::
... ValueError Traceback(最近一次调用最后一次) 在 13 #y = 数据[:, 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 点 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.
我该如何解决这个问题? 谢谢。
【问题讨论】: