如何解决通过使用curve_fit在python中具有共享参数的非线性回归全局
我正在尝试使用一组数据对非线性系统进行回归。
import numpy as np
xdata = np.array([3,6,9,12,24]) #ydata1 and ydata2 use the same xdata
ydata1 = np.array([5e-4,5.03e-4,4.56e-4,4,89e-4,4.85e-4])
ydata2 = np.array([1.7e-3,1.74e-3,1.64e-3,1.69e-3])
xdata3 = np.array([3,18])
ydata3 = np.array([2.74e-3,2.68e-3,2.62e-3,2.92e-3])
除了一个参数p1,这三行使用相同的函数,我是否知道是否有一个简单的例子来说明如何使用curve_fit同时(全局)解决这个系统。非常感谢!
def func(a,b,x):
return a * b * p1 * x / ((1 + np.sqrt(b * x)) ** 2)
### p1 is 6,18,30 for ydata1,ydata2,ydata3
解决方法
使用部分功能工具。
您将不必使用 curve_fit(xdata,ydata,func)
三次,而是:
from functools import partial
f1 = partial(func,p1=6)
f2 = partial(func,p1=18)
f3 = partial(func,p1=30)
popt1,pcov1 = curve_fit(xdata,ydata1,f1)
popt2,pcov2 = curve_fit(xdata,ydata2,f2)
popt3,pcov3 = curve_fit(xdata3,ydata3,f3)
ydata1_fit = f1(xdata,*popt1)
ydata2_fit = f2(xdata,*popt2)
ydata3_fit = f3(xdata3,*popt3)
为了避免重复,我们可以把它塞进一个函数中。
def fitter(xdata,p1):
f = partial(func,p1=p1)
popt,pcov = curve_fit(xdata,f)
ydata_fit = f(xdata,*popt)
return ydata_fit
ydata1_fit = fitter(xdata,6)
ydata2_fit = fitter(xdata,18)
ydata3_fit = fitter(xdata3,30)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。