Sorry if this is obvious, but what exactly is wrong with the output? I know it's complicated, but that's a known issue that SymPy isn't so great at simplifying piecewise expressions. It seems to work when you substitute values in for s_theta (I have no idea if they are right or not).
Aaron Meurer On Thu, Dec 5, 2013 at 3:19 AM, eTna <[email protected]> wrote: > Hi, > > Sorry about what must be a silly question but I struggle a bit and I'm > pretty sure that a small hint will help a lot. I'm trying to compute an > expected profit after having defined two functions, one being the profit, > the other being the cdf. The last step involves integrating the product of > the profit and the derivative of the cdf over its interval and this is where > I'm stuck: > > class function_cdf_theta(Function): > nargs = 2 > > @classmethod > def eval(cls, s_theta, s_gamma): > return Piecewise((0, s_theta < 0), (1, s_theta > 1), (s_theta**s_gamma, > True)) > > class function_profit(Function): > nargs = 4 > > @classmethod > def eval(cls, s_theta, s_p, s_p_bar, s_eta): > return Piecewise((0, s_p > s_p_bar), (s_p*(s_theta + s_p**(-s_eta)), > True)) > > class function_expected_profit(Function): > nargs = 4 > > @classmethod > def eval(cls, s_p, s_p_bar, s_eta, gamma): > return integrate(function_profit(s_theta, s_p, s_p_bar, s_eta)*\ > diff(function_cdf_theta(s_theta, s_gamma), s_theta), > (s_gamma, 0, 1)) > > E.g. > >>>> function_expected_profit(1, 2, 1.5, 1) > Piecewise((0, Or(s_theta < 0, s_theta > 1)), (Piecewise((Piecewise((0, > Or(s_theta < 0, s_theta > 1)), (Piecewise(((s_theta + 1)/(2*s_theta), > s_theta**2*log(s_theta)**3 == 0), ((s_theta**2*log(s_theta)**2 - > s_theta**2*log(s_theta) + s_theta*log(s_theta)**2 - > s_theta*log(s_theta))/(s_theta*log(s_theta)**3), True)), True)), > s_theta**2*log(s_theta)**3 == 0), (Piecewise((-(-s_theta**2*log(s_theta) - > s_theta*log(s_theta))/(s_theta**2*log(s_theta)**3), Or(s_theta < 0, s_theta >> 1)), (Piecewise(((s_theta + 1)/(2*s_theta), s_theta**2*log(s_theta)**3 == > 0), ((s_theta**2*log(s_theta)**2 - s_theta**2*log(s_theta) + > s_theta*log(s_theta)**2 - s_theta*log(s_theta))/(s_theta*log(s_theta)**3), > True)) - (-s_theta**2*log(s_theta) - > s_theta*log(s_theta))/(s_theta**2*log(s_theta)**3), True)), True)), True)) > > It's clear that function is not evaluated as it should be... I've tried to > play around with subs and stuffs like that but not been too successful so > far, so if anyone can tell me where to look that would be very appreciated. > > Many thanks for your time and kindness, > > Etienne > > -- > 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 [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/sympy. > For more options, visit https://groups.google.com/groups/opt_out. -- 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sympy. For more options, visit https://groups.google.com/groups/opt_out.
