这似乎是一个漏洞。一个解决方法是先获得您的积分的符号表达式(这似乎很好地工作),然后在上下限的每组参数上评估它并计算差异:
import sympy as sp
x, w, phi = sp.symbols('x w phi')
func = sp.integrate(sp.sin(w * x + phi), x)
para = [{'w': 0.01, 'phi': 0., 'lb': 0., 'ub': 10., 'res': 0.},
{'w': 0.01, 'phi': 0.13, 'lb': 0., 'ub': 10., 'res': 0.},
{'w': 0.01, 'phi': 0.3, 'lb': 0., 'ub': 10., 'res': 0.}]
for parai in para:
parai['res'] = func.subs({w: parai['w'], phi: parai['phi'], x: parai['ub']})
-func.subs({w: parai['w'], phi: parai['phi'], x: parai['lb']})
此后,
para
的内容如下所示:
[{'lb': 0.0, 'phi': 0.0, 'res': 0.499583472197429, 'ub': 10.0, 'w': 0.01},
{'lb': 0.0, 'phi': 0.13, 'res': 1.78954987094131, 'ub': 10.0, 'w': 0.01},
{'lb': 0.0, 'phi': 0.3, 'res': 3.42754951227208, 'ub': 10.0, 'w': 0.01}]
似乎能够为积分提供合理的结果,并将这些结果存储在
res
中。
x
的? - Warren Weckesserw
和phi
进行重现,甚至可用于不定积分。例如,integrate(sin(0.7*x + 0.1), x)
得到的结果是0
。在我看来,这似乎是个错误! - TheBamfw
设置为symbol
,它仍然会正确地进行积分。 - Lol4t0