python - 使用 scipy curve_fit 同时拟合两个函数

标签 python scipy curve-fitting simultaneous

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

  • f(x, 参数)
  • g(x, 参数)

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

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

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

最佳答案

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

一种方法是定义另一个函数 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() 的方式更改一些内容。但基本结构应该成立。

关于python - 使用 scipy curve_fit 同时拟合两个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37319309/

相关文章:

python - 大型 Python 随机共享器

Python重采样实现如Matlab的Signal Toolbox的重采样函数

r - 使用 minpack.lm 中的 nlsLM 时,是什么导致输入参数不正确?

python - 如何让 PyTest 在 Visual Studio 中工作

python - 通过子类化 `io.TextIOWrapper` 来子类化文件——但是它的构造函数有什么签名?

python - 如何修复使用 scipy 读取 wav 时出现 'Incomplete wav chunk' 错误

python - scipy curve_fit 对于大 X 值不正确

python - numpy polynomial.Polynomial.fit() 给出与 polynomial.polyfit() 不同的系数

python - Pyodbc 在 Sql Server 中存储 html unicode 字符串

python - 在 SciPy 中,csr_matrices 的奇特索引