我是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回溯(最近一次调用) 在里面 13#y=数据[:,1] 14plt.绘图(data_k2_2fl_NL3[:,8],数据_k2_2fl_NL3[:,5],“b-”,label=”数据“) --->;15 popt,pcov=曲线拟合(func,data_k2_2fl_NL3[:,8],data_k2_2fl_NL3[:,5]) 16磅 17
^{pr2}$我如何解决这个问题? 谢谢您。在
似乎您遇到的大多数问题都与使用
numpy
vsmath
有关。为了完整起见,并且由于您提到了lmfit
,要使用lmfit
来完成此操作,您可以使用请注意,
curve_fit()
将欣然接受未初始化的参数,并为所有参数指定不可能调整的默认值1。Lmfit不允许这样做,并强制您显式地设置初始值。但它也能更好地报告统计数据、不确定性,并允许组合更多的complpex模型。在对于您的示例,fit报告将显示
^{pr2}$还有一个阴谋
我认为问题在于
curve_fit
函数无法通过自省来确定参数的数量,因为您要求它匹配的函数(test
)被包装在np.vectorize
函数中。在我尝试了一个最小的示例,其中我使用了
test
函数,它起作用了:如果出于性能原因需要
^{pr2}$vectorize
,还可以传递一个参数p0
一个初始参数数组。e、 g组:相关问题 更多 >
编程相关推荐