【问题标题】:Fitting two functions simultaniously with scipy's curve_fit用 scipy curve_fit 同时拟合两个函数
【发布时间】:2016-09-16 02:28:04
【问题描述】:

假设我已经定义了自变量x的两个实值函数和以下形式的一些参数:

  • f(x, parameters)
  • g(x, parameters)

(或者:一个返回实数的 2 元组的函数,(f(x),g(x)))。

我现在想使用 scipy 的 curve_fit 将两条曲线 同时 拟合到两个数据数组 fdata 和 gdata,以及它们的相关错误:fdata-err、gdata-err (即找到适合数据的最佳参数)。这可能吗?

我知道我可以定义一个新函数,它是两个函数及其各自测量值之间差异的总和,但 python 的最小化函数似乎不会产生或解释错误,这对我的目的非常重要。

【问题讨论】:

  • 您可以(或必须)自己处理待最小化函数中的错误。您可以查看实现以了解在curve_fit 中是如何完成的:github.com/scipy/scipy/blob/v0.15.1/scipy/optimize/…
  • 非常感谢。我认为这是一件相当常见的事情,所以我希望有一个内置选项。我会按照你的建议做(除非其他人知道替代解决方案!)
  • 为什么不使用 scipy.optimize.leastsq 和 f 和 g 的平方误差之和:sum((fdata - f(xdata))**2/fdata-err**2)+sum((gdata - g(xdata))**2/gdata-err**2)?
  • 是的,我将自己定义这个总和并将其最小化。我只是不想自己处理输出错误(不确定性)......我喜欢curve_fit为你做的事实。

标签: python scipy curve-fitting simultaneous


【解决方案1】:

我只需要做类似的事情并找到一个替代方案,而无需定义自定义最小二乘函数。

一种方法是定义另一个函数 h(x, parameters),它只是 f() 和 g() 的串联。

import numpy as np
def h(x, params):
  fr = f(x, params)
  gr = g(x, params)

  hr = np.hstack(fr, gr)

  return hr

同样,您必须连接 f() 和 g() 的 ydata。

fdata = [..] ## value of ydata of f
gdata = [..] ## value of ydata of g

hdata = np.hstack(fdata, gdata)

同样,xdata 也必须重复。

xdata_new = np.hstack(xdata, xdata)

现在您可以致电curve_fit()。

import scipy.optimize as optimization

popt, pcov = optimization.curve_fit(f=h, xdata=xdata_new, ydata=ydata)

print(popt)

注意:您可能需要根据您定义 f() 和 g() 的方式更改一些内容。但基本结构应该成立。

【讨论】:

    猜你喜欢
    • 2016-01-16
    • 2017-04-11
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-29
    • 2021-08-21
    • 2017-07-13
    • 1970-01-01
    相关资源
    最近更新 更多