簡體   English   中英

使用curve_fit在python中具有共享參數的非線性回歸(全局)

[英]Nonlinear regression(globally) with shared parameters in python by using curve_fit

我正在嘗試使用一組數據對非線性系統進行回歸。

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.74e-3, 1.69e-3])
xdata3 = np.array([3, 6, 9, 18])
ydata3 = np.array([2.74e-3, 2.68e-3, 2.62e-3, 2.92e-3])

這三行使用相同的function,除了一個參數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)

為避免重復,我們可以將其放入 function。

def fitter(xdata, ydata, p1):
    f = partial(func, p1=p1)
    popt, pcov = curve_fit(xdata, ydata, f)
    ydata_fit = f(xdata, *popt)
    return ydata_fit

ydata1_fit = fitter(xdata, ydata1, 6)
ydata2_fit = fitter(xdata, ydata2, 18)
ydata3_fit = fitter(xdata3, ydata3, 30)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM