неверный интеграл симпи за пределами значений от 0 до 2pi для | cos x |? - PullRequest
0 голосов
/ 12 июля 2020

Я встречал странные результаты для sympy's integrate, когда дело доходит до | cos (x) | (я ограничиваю x действительными числами). Основываясь как на неопределенном интеграле, так и на определенных интегралах, sympy, кажется, дает правильные результаты только для интервала [0,2pi] (без учета определенных интегралов, границы которых находятся в тех же непрерывных частях примитивной функции | cos (x) |).

from sympy import *
x = Symbol("x", real=True)
eq = abs(cos(x))
print("Integrand:")
display(eq)
eqI = integrate(eq, x )
print("Indefinite integral according to sympy:")
display(eqI)

Что касается определенных интегралов: все последующие должны дать 2, но только первый дает правильное значение (второй выводит 0, последний - -2, что не может быть правильным для определенного интеграла функции только с положительными значениями if a ).

## correct:
a = pi/2
b = 3*pi/2
print(f"Definite integral according to sympy from {a} to {b}:", integrate(eq, (x, a, b)))

## incorrect:
print("")
a = -pi/2
b = pi/2
print(f"Definite integral according to sympy from {a} to {b}:", integrate(eq, (x, a, b)))
    
## incorrect:
print("")
a = 7*pi/2
b = 9*pi/2
print(f"Definite integral according to sympy from {a} to {b}:", integrate(eq, (x, a, b)))

Мой вопрос: это связано с каким-то аспектом дизайна sympy. не в курсе, или это ошибка? В первом случае я бы ожидал, что он выдаст ошибку NotImplementedError для значений, для обработки которых он не предназначен, вместо того, чтобы возвращать неверное значение.

Для быстрой справки, вот графики оригинала функция (желтым цветом) и ее прерывистая (красный) и непрерывная (синий) примитивная функция:

графики

(Примечание: я использую sympy версии 1.5.1, но я проверил неверно вычисленные определенные интегралы в версии 1.6, и они все еще неверны.)

...