Short answer here is, I think, no. The short answer *should be* that sympy.stats should be able to handle all of this for you at a level higher than sets. It currently errs on this sort of question unfortunately. It wouldn't be hard to add though. The infrastructure is there.
Sets handles this sort of problem while it computes measures. Sadly it assumes a measure with density that is always equal to 1. It would be nice if this piece were generalized so that it would integrate a general function over the domain. In principle this wouldn't be challenging to add. The tedium that you're looking to automate is already solved in the various `def _measure` functions in `sympy/core/sets.py`. Unfortunately it's tangled up with some too-simple assumptions. You would just need to add an argument to all of the `_measure` methods. Presumably at the Interval base-layer you would replace `return self.right - self.left` with `return integrate(f, self)`. If you implement this on your own outside of SymPy you might find Union._measure helpful. It solves the annoying AuBuC == A + B + C - AB - BC + ABC problem generally. If this code were generalized so that `blah.measure` were replaced with `foo(blah)` I suspect you would have your problem 80% solved. Your sort of problem is exactly what I would like sympy.stats to be able to solve with sympy.core.sets. If I ever get more time I'll work on this. Probably not for a while though. I'm happy to help out if you're willing to fix the problem within SymPy.sets. It'd be a nice contribution. On Mon, Nov 12, 2012 at 10:59 AM, Simon Clift <[email protected]> wrote: > Hi folks, > > I have a straightforward, but tedious probability problem that I need to > expand symbolically. Sympy's set and interval material is close, but I > can't see how it would work in a multidimensional application. I've used > Sympy for some fairly intricate PDE problems, but never for this sort of > thing, and I would appreciate any suggestions, please. > > I have a number of events that appear as, for example 2 < X < 5 and 3 < Y > < 8 which have associated probabilities and joint distributions (i.e. are > not mutually exclusive). From basic probability and set theory > > p( 2<X<5 \cup 3<Y<8) = p( 2<X<5 ) + p( 3<Y<8 ) - p( 2<X<5 \cap 3<Y<8 ) > > and so on. My problems start with about 6 unions that are intersections > fo 2 conditions each, all in 3 variables, so requires both the expansion > above and reduction for intersecting intervals. It isn't difficult, just > tedious (and error-prone). > > I was about to hand-roll the symbolic algebra as Python classes, but I was > wondering if there was a way to approach this with Sympy's intervals > module. It's not clear to me, from the docs or from experimentation, that > it handles multi-dimensional problems. > > Best regards > -- Simon > > -- > You received this message because you are subscribed to the Google Groups > "sympy" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/sympy/-/qd4-NeUkPzIJ. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.
