在python中拟合2D Y数据

时间:2019-06-05 19:02:11

标签: 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的估计值,其中要考虑来自ys的数据。我可以拟合一个或另一个方程,并得到AB的估计值。

例如,假设y2是否不依赖于B(或者非常不依赖)。它仍然提供了有关我希望A要考虑的y1值的强大信息。

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

编辑:

我可以想到的一种潜在方法是将所有y数据堆叠到单个列中,然后使用该函数处理预期的y1,y2,然后以类似{{1 }}所以我可以比较这两个集合吗?那么我可以拥有一个与该连接函数的长度匹配的加权函数?

1 个答案:

答案 0 :(得分:0)

我认为您可以遵循以下symfit示例here,并使其适应您的问题。因此,就像这样:

title_style.alignment = 2

通过提供标准差作为额外信息,该示例已经在不同的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_1上包括了不同的权重。

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