由于某种原因,使用numpy的trapz
和scipy的cumtrapz
会得到不同的解。
x = np.linspace(-2, 4, num=20)
y = (x)
y_int = integrate.cumtrapz(y, x, initial=0)
y_tr = np.trapz(y, x, axis = 0)
display(y_tr)
display(y_int)
trapz
规则给出的最终值是cumtrapz
规则给出的最终值的两倍。
-5.551115123125783e-17
array([ 0.00000000e+00, -3.98891967e-01, -7.53462604e-01, -1.06371191e+00,
-1.32963989e+00, -1.55124654e+00, -1.72853186e+00, -1.86149584e+00,
-1.95013850e+00, -1.99445983e+00, -1.99445983e+00, -1.95013850e+00,
-1.86149584e+00, -1.72853186e+00, -1.55124654e+00, -1.32963989e+00,
-1.06371191e+00, -7.53462604e-01, -3.98891967e-01, -2.77555756e-16])
有什么原因吗?
1条答案
按热度按时间cwxwcias1#
原因似乎是内存分配和执行浮点操作的方式。
-2.77555756e-16
和-5.551115123125783e-17
本质上都是0。通过将极限从-2
更改为4
来运行相同的代码,可得出正确答案:赠送:
在每种情况下,结果都是6。