Korzystanie z najnowszej wersji (0.7.6) sympy pojawia się następujący zły wynik przy ustalaniu całkę funkcji z obsługą [0, y):Całka z funkcji odcinkowo daje błędny wynik
from sympy import *
a,b,c,x,z = symbols("a,b,c,x,z",real = True)
y = Symbol("y",real=True,positive=True)
inner = Piecewise((0,(x>=y)|(x<0)|(b>c)),(a,True))
I = Integral(inner,(x,0,z))
Eq(I,I.doit())
http://mathurl.com/l8wrjcn.png
Jest to niepoprawne, ponieważ rzeczywisty wynik powinien zostać zamieniony na dwie ostatnie sprawy. Można to potwierdzić, sprawdzając pochodne:
Derivative(I.doit(),z).doit().simplify().subs(z,x)
http://mathurl.com/mg4zpts.png
co zmniejsza 0 wszędzie.
Co ciekawe, gdy spada stan (b>c)
zastępując inner = Piecewise((0,(x>=y)|(x<0)),(a,True))
otrzymuję TypeError:
TypeError: cannot determine truth value of
-oo < y
używam biblioteki nieprawidłowo lub jest to rzeczywiście poważny sympy bug?
Dzięki, że to potwierdza moje podejrzenia. Wszelki wgląd w to, dlaczego symboliczne pakiety matematyczne mają tak wiele problemów z określonymi funkcjami? Wierzyłbym, że to tylko kwestia podziału integralności i wyboru właściwych granic integracji. Czy nie powinieneś podnosić notImplementedError w funkcjach pofałdowanych, jeśli znane jest błędne zachowanie? – Lars
Nie wiem symby internals. Po prostu wiem empirycznie, że CAS walczy z takimi rzeczami, na przykład [Wolfram Alpha] (http://www.wolframalpha.com/input/?i=integral+abs%28sin%28x%29%29) otrzymuje nieskończoną całość | sin x | źle. Jeśli masz dostęp do Maple lub Mathematica (obecnie nie mam), możesz porównać wyniki z ich wynikami. –
W rzeczywistości wynik, który uzyskuję z wolfram alfa to znak -cos (x) (sin (x)) + c, który jest poprawnym pierwotnym (zauważ, że w określonym przypadku c musi wzrosnąć o 2 na każde pół Kropka). – Lars