Utilizzando la versione recente di sympy (0.7.6) ottengo il seguente risultato male nel determinare l'integrale di una funzione di supporto [0, y):integrale di funzione a tratti dà risultato errato
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
Questo non è corretto in quanto il risultato effettivo dovrebbe avere gli ultimi due casi scambiati. Questo può essere confermata controllando la derivata:
Derivative(I.doit(),z).doit().simplify().subs(z,x)
http://mathurl.com/mg4zpts.png
che riduce a 0 dappertutto.
interessante notare che quando far cadere la condizione (b>c)
sostituendo inner = Piecewise((0,(x>=y)|(x<0)),(a,True))
ottengo un TypeError:
TypeError: cannot determine truth value of
-oo < y
sto utilizzando la libreria in modo non corretto o si tratta in realtà di un grave bug sympy?
Grazie, questo conferma il mio sospetto. Qualche idea sul perché i pacchetti simbolici di matematica si dibattano così tanto con funzioni definite a tratti? Credo che sia solo questione di dividere l'integrale e scegliere i giusti limiti di integrazione. Non dovrebbe sympy sollevare un NotImplementedError su funzioni a tratti se questo è noto comportamento buggy? – Lars
Non conosco interni di sympy. So solo empiricamente che CAS lotta con queste cose, ad esempio [Wolfram Alpha] (http://www.wolframalpha.com/input/?i=integral+abs%28sin%28x%29%29) ottiene l'integrale indefinito di | sin x | sbagliato. Se hai accesso a Maple o Mathematica (al momento non lo faccio), potresti voler confrontare il risultato con il loro. –
In realtà, il risultato che ottengo da wolfram alfa è -cos (x) sign (sin (x)) + c, che è la corretta antiderivata (nota che nel caso definito c deve aumentare di 2 per ogni mezzo- periodo). – Lars