我有一个看起来像f(x, m, E, I) = m * (x - x ** 2) / (E * I)
的函数,我希望得到E
的值。我有一些数据,我称之为X
和Y
,以及y数据中的一些不确定性,我称之为yerr
。此外,参数m
和I
是物理量,并且已经测量了一些不确定性。
我希望函数f
适合我的数据X, Y
,同时考虑到数量m, I
的不确定性。现在这是我用来做拟合的命令:
m = some value
I = some other value
popt, pcov = curve_fit(lambda x, E: f(x, m, E, I), X, Y, p0=[1e9], sigma=yerr)
当然,这并未考虑m
和I
的不确定性。考虑到这种不确定性,有没有办法拟合曲线?
例如,here他们使用模块不确定性来解决ODE,我试图复制程序但是没有工作:
import uncertainties as u
def f(x, m, E, I):
return m * (x - x ** 2) / (E * I)
m = u.ufloat(3e-4, 0.1e-6)
I = u.ufloat(1e-10, 0.2e-12)
@u.wrap
def fit():
popt, pcov = curve_fit(lambda x, E: f(x, m, E, I), X, Y, p0=[1e9], sigma=yerr)
return popt, pcov
其中X, Y, yerr
是前面提到的Y
中的数据和错误。