python - 在 python 中拟合 2D Y 数据

标签 python curve-fitting

我有一个一般类别的非线性问题,其中我有 2 个或更多 y 数据向量,它们以依赖但已知的方式耦合到 2 个或更多 x 数据向量,并且我想找到参数。我正在寻找一种方法来适应 python 中的基本非线性拟合模型,以将两组数据考虑在内。

一般情况下,我可能有这对:

[y1(x1, x2; A, B), y2(x1, x2; A, B)]

作为一个具体的例子,我可能有:

y1 = A sin(B x1) + e^(-A x1)

y2 = A x1^2 + B x2 + log[A x2]

(假设这些问题无法通过分析解决,或者如果解决可能会导致效率低下)。我知道所有值 y1, y2x1, x2,并且我想找到 AB 的估计值code> 考虑了来自 ys 的数据。我可以只拟合一个或另一个方程并获得 AB 的估计值。

例如,想象一下如果y2不依赖于B(或者依赖得非常弱)。它仍然提供了有关我希望 y1 考虑的 A 值的重要信息。

作为第二个问题,我将如何使用此方法对两组 y 数据赋予不同的权重?

编辑:

我能想到的一种可能的方法是将所有 y 数据堆叠到单个列中,然后使用该函数处理预期的 y1,y2 ,然后以像 return vstack((y1,y2)) 这样我就可以比较这两个集合?那么我可以有一个与这个连接函数的长度相匹配的加权函数吗?

最佳答案

我想你可以关注这个symfit示例here ,并根据您的问题进行调整。所以这会是这样的:

from symfit import variables, parameters, Fit, sin, exp, log

x_1, x_2, y_1, y_2 = variables('x_1, x_2, y_1, y_2')
A, B = parameters('A, B')

model_dict = {
    y_1: A * sin(B * x_1) + exp(-A * x_1),
    y_2: A * x_1**2 + B * x_2 + log(A * x_2)
}

fit = Fit(model_dict, x_1=x1data, y_1=y1data, x_2=x2data, 
          y_2=y2data, sigma_y_1=y1stdev, sigma_y_2=y2stdev)
fit_result = fit.execute()

此示例通过提供标准差作为额外信息,已包含不同 y_1y_2 的不同权重。

免责声明:我是 symfit 的作者。

关于python - 在 python 中拟合 2D Y 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466538/

相关文章:

python - 大 TSV 文件中 moSTLy 整数字符串列的 pandas read_csv dtype 推断不一致

Python 总是向下舍入?

java - Java 和 Python 程序的相同一致性哈希算法实现

python - 如何使用 kapteyn.kmpfit 计算具有 2 个或更多自变量的模型的置信带

algorithm - 高斯曲线拟合算法

c++ - 如何用 C++ 拟合二维散点数据

python - lmfit 不探索参数空间

python - 如何强制二阶 polyfit 的 y 截距为 0

python - 加载 TrueType 字体到 OpenCV

python - 如何将 Python 3.7 包安装到 Docker?