我正在运行定积分,但 sympy 给了我不同的答案。 我不知道出了什么问题。
对方程进行Wolfram积分,结果如预期的1.097
import sympy as sp
y=sp.Symbol('y')
fy=(y-2.4)**2*sp.sqrt(y)*0.1875
print(sp.integrate(fy,(y,0,4)))
这给了我 0.485255751108899
这看起来像是与浮动有关的错误,在集成中可能会出现问题:
In [15]: from sympy import *
In [16]: y = symbols('y')
In [17]: fy=(y-2.4)**2*sp.sqrt(y)*0.1875
In [18]: fy
Out[18]:
2
1.08⋅√y⋅(0.416666666666667⋅y - 1)
In [19]: integ = Integral(fy, (y, 0, 4))
In [20]: integ
Out[20]:
4
⌠
⎮ 2
⎮ 1.08⋅√y⋅(0.416666666666667⋅y - 1) dy
⌡
0
In [21]: integ.doit() # symbolic integration with floats
Out[21]: 0.485255751108899
In [22]: integ.evalf() # numeric integration
Out[22]: 1.09714285714286
In [23]: integ_rational = Integral(nsimplify(fy), (y, 0, 4))
In [24]: integ_rational # same integral with Rational instead of Float
Out[24]:
4
⌠
⎮ 2
⎮ ⎛5⋅y ⎞
⎮ 27⋅√y⋅⎜─── - 1⎟
⎮ ⎝ 12 ⎠
⎮ ──────────────── dy
⎮ 25
⌡
0
In [25]: integ_rational.doit() # symbolic integration with rationals
Out[25]:
192
───
175
In [26]: _.n() # numerically evaluate the last result
Out[26]: 1.09714285714286
首先不要将浮点数与 sympy 一起使用,除非你有充分的理由,例如使用
Rational('0.1')
或 S(1)/10
等而不是 0.1
。 nsimplify
函数可用于将 float 转换为有理数(它试图猜测您真正的意思是什么有理数)。
其次,这是一个错误,因此应该将其报告给 github 而不是 SO: https://github.com/sympy/sympy/issues