> Matthew... what do you think of the union of intervals as an alternative to the usual ranges in integrate/Integral?
Seems like a decent plan. I haven't been actively working on stats in a while so I don't have strong opinions here. On Thu, Mar 26, 2015 at 6:50 PM, Aaron Meurer <asmeu...@gmail.com> wrote: > I think integrating over sets is a useful thing to allow, but we > definitely need to be more careful about symbolic intervals. And given > that, it probably means that sympy.stats should just do normal > integrals, since it can make assumptions about symbolic intervals that > won't be present when passed to Integral. > > Aaron Meruer > > On Thu, Mar 26, 2015 at 6:54 PM, Francesco Bonazzi > <franz.bona...@gmail.com> wrote: > > Matthew... what do you think of the union of intervals as an alternative > to > > the usual ranges in integrate/Integral? > > > > I suppose that you wrote the code outputting that integral, which > currently > > does not work, and I want to make it work. > > > > I am undecided on whether to edit sympy.stats in order to give Integral( > ... > > , (x, -oo, -1)) + Integral( ... , (x, 1, oo)) instead of Integral( ... , > (x, > > Union(Interval(-oo, -1), Interval(1, oo)))). > > > > On the other hand, this alternative notation may be useful. > Unfortunately it > > would require some algorithmic changes and I am a bit wary about a > > substantial edit of the integration algorithm. > > > > On Thursday, March 26, 2015 at 9:12:37 PM UTC+1, Matthew wrote: > >> > >> You don't need to square the random variable to compute the result. You > >> just need to integrate the pdf over x < -1 and x > 1 > >> > >> On Thu, Mar 26, 2015 at 5:42 AM, Francesco Bonazzi <franz....@gmail.com > > > >> wrote: > >>> > >>> > >>> Well, I was a bit surprised too, but the stats module apparently does > so, > >>> as shown in this example: > >>> > >>> In [1]: from sympy.stats import * > >>> > >>> In [2]: var('sigma', positive=True) > >>> Out[2]: σ > >>> > >>> In [3]: N = Normal('X', mu, sigma) > >>> > >>> In [6]: P(N**2>1, evaluate=False) > >>> Out[6]: > >>> (-∞, -1) ∪ (1, ∞) > >>> ⌠ > >>> ⎮ 2 > >>> ⎮ -(z - μ) > >>> ⎮ ────────── > >>> ⎮ 2 > >>> ⎮ ___ 2⋅σ > >>> ⎮ ╲╱ 2 ⋅ℯ > >>> ⎮ ───────────────── dz > >>> ⎮ ___ > >>> ⎮ 2⋅╲╱ π ⋅σ > >>> ⌡ > >>> > >>> > >>> In [7]: srepr(P(N**2>1, evaluate=False)) > >>> Out[7]: "Integral(Mul(Rational(1, 2), Pow(Integer(2), Rational(1, 2)), > >>> Pow(pi, Rational(-1, 2)), Pow(Symbol('sigma'), Integer(-1)), > >>> exp(Mul(Integer(-1), Rational(1, 2), Pow(Symbol('sigma'), Integer(-2)), > >>> Pow(Add(Dummy('z'), Mul(Integer(-1), Symbol('mu'))), Integer(2))))), > >>> Tuple(Dummy('z'), Union(Interval(-oo, Integer(-1), S.true, S.true), > >>> Interval(Integer(1), oo, S.true, S.true))))" > >>> > >>> > >>> Apart the fact that such an integral looks wrong to me, i.e. there is > no > >>> account for the random variable being squared (or am I missing > something?), > >>> it looks like SymPy is OK with intervals, but not with unions of > intervals: > >>> > >>> > >>> > https://github.com/sympy/sympy/blob/9242d31f6d31a1d9c3464264a5a6e61eab8acfb8/sympy/concrete/expr_with_limits.py#L37 > >>> > >>> That's the point where an Interval gets parsed by the integration > >>> algorithm. > >>> > >>> I think it's an easy fix to add the processing for unions of intervals. > >>> > >>> -- > >>> You received this message because you are subscribed to the Google > Groups > >>> "sympy" group. > >>> To unsubscribe from this group and stop receiving emails from it, send > an > >>> email to sympy+un...@googlegroups.com. > >>> To post to this group, send email to sy...@googlegroups.com. > >>> Visit this group at http://groups.google.com/group/sympy. > >>> To view this discussion on the web visit > >>> > https://groups.google.com/d/msgid/sympy/230fe8c3-a834-4074-920d-435a2687be36%40googlegroups.com > . > >>> > >>> For more options, visit https://groups.google.com/d/optout. > >> > >> > > -- > > You received this message because you are subscribed to the Google Groups > > "sympy" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to sympy+unsubscr...@googlegroups.com. > > To post to this group, send email to sympy@googlegroups.com. > > Visit this group at http://groups.google.com/group/sympy. > > To view this discussion on the web visit > > > https://groups.google.com/d/msgid/sympy/c3701c8c-3577-45a0-afdd-2a000bcd32d8%40googlegroups.com > . > > > > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sympy+unsubscr...@googlegroups.com. > To post to this group, send email to sympy@googlegroups.com. > Visit this group at http://groups.google.com/group/sympy. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sympy/CAKgW%3D6LbcosAeX6FeM0y%2Bb%3D50yrpDUK%3DiVpKhsNqKEh7A46W5A%40mail.gmail.com > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sympy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sympy+unsubscr...@googlegroups.com. To post to this group, send email to sympy@googlegroups.com. Visit this group at http://groups.google.com/group/sympy. To view this discussion on the web visit https://groups.google.com/d/msgid/sympy/CAJ8oX-GLuWwuPVf67SgHB3m7gdGa%3D%3DNUgRTqsV%2BMNSmA_g8qnA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.