我有一类一般的非线性问题,其中我有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, y2
和x1, x2
,并且我想找到一个A
和B
的估计值,其中要考虑来自ys
的数据。我可以拟合一个或另一个方程,并得到A
和B
的估计值。
例如,假设y2
是否不依赖于B
(或者非常不依赖)。它仍然提供了有关我希望A
要考虑的y1
值的强大信息。
作为第二个问题,我将如何使用这种方法对两组y数据赋予不同的权重?
编辑:
我可以想到的一种潜在方法是将所有y数据堆叠到单个列中,然后使用该函数处理预期的y1,y2
,然后以类似{{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的作者。