用scipy的curve_fit同时拟合两个函数

时间:2016-05-19 09:36:20

标签: python scipy curve-fitting simultaneous

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

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

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

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

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

1 个答案:

答案 0 :(得分: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()的方式进行一些更改。但是基本结构应该成立。