Это похоже на ошибку. Решение обходного пути может быть, чтобы получить символическое выражение вашего интеграла первого (который, кажется, работает нормально), а затем оценить его для каждого набора параметров в верхнем и нижней границе и вычислить разницу:
import sympy as sp
x, w, phi = sp.symbols('x w phi')
# integrate function symbolically
func = sp.integrate(sp.sin(w * x + phi), x)
# define your parameters
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.}]
# evaluate your function for all parameters using the function subs
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'? –
Я могу воспроизвести это для множества 'w' и' phi', даже для неопределенных интегралов. Например, «интегрировать (sin (0,7 * x + 0,1), x)' дает '0'. Похож на ошибку! – TheBamf
Кажется, у него довольно много интегральных ошибок. (https://github.com/sympy/sympy/labels/integrals). Тем не менее он правильно интегрируется, если 'w' задано как' symbol' – Lol4t0