By the way, the integral hangs because it tries to go through
heurisch.  If you know in advance that heurisch will probably fail
(which it generally does for integrals either of special functions or
whose solutions involve special functions), you can use just the
MeijerG algorithm by passing meijerg=True to integrate().  The meijerg
algorithm almost never hangs, so it will generally either give an
answer or return right away with an unevaluated Integral:

In [40]: %time (2*l+1) / (2*t) * integrate(legendre(l, (1-R**2+t**2) /
(2*t)) * exp(-alpha*R), (R, 1-t, 1+t), meijerg=True)
CPU times: user 0.02 s, sys: 0.00 s, total: 0.02 s
Wall time: 0.02 s
Out[40]:
          t + 1
            ⌠
            ⎮                  ⎛      2    2    ⎞
            ⎮     -R⋅α         ⎜   - R  + t  + 1⎟
(2⋅l + 1)⋅  ⎮    ℯ    ⋅legendre⎜l, ─────────────⎟ dR
            ⎮                  ⎝        2⋅t     ⎠
            ⌡
          -t + 1
────────────────────────────────────────────────────
                        2⋅t

Aaron Meurer

On Tue, Sep 4, 2012 at 11:13 AM, Ondřej Čertík <[email protected]> wrote:
> Hi Raoul,
>
> On Tue, Sep 4, 2012 at 4:36 AM, someone <[email protected]> wrote:
>> Hi,
>>
>>> > Is this a supported way of constructing symbolic integrals?
>>
>> You could use the "Integral" command to construct
>> the noun form explicitely, avoiding computation of
>> the integral with symbolic parameter l.
>>
>> --------------------------------------------------------------
>> from sympy import *
>>
>> var("l R alpha t")
>>
>> f = (2*l+1) / (2*t) * Integral(legendre(l, (1-R**2+t**2) / (2*t)) * 
>> exp(-alpha*R), (R, 1-t, 1+t))
>>
>> for _l in range(5):
>>     #print r"\begin{equation}"
>>     #print r"s_%d =" % _l
>>     expr = f.subs(l, _l).doit().simplify() / exp(-alpha)
>>     expr = expr.series(alpha, 0, 4)
>>     pprint(expr)
>>     #print latex(expr)
>>     #print r"\end{equation}"
>> --------------------------------------------------------------
>>
>> which then prints out the following series approximations:
>>
>> --------------------------------------------------------------
>>      2  2
>>     α ⋅t     ⎛ 4⎞
>> 1 + ───── + O⎝α ⎠
>>       6
>>            2  3    3  3
>>           α ⋅t    α ⋅t     ⎛ 4⎞
>> t + α⋅t + ───── + ───── + O⎝α ⎠
>>             10      10
>>                ⎛ 4    2⎞    3  4
>>  2      2    2 ⎜t    t ⎟   α ⋅t     ⎛ 4⎞
>> t  + α⋅t  + α ⋅⎜── + ──⎟ + ───── + O⎝α ⎠
>>                ⎝14   3 ⎠     14
>>                ⎛ 5      3⎞      ⎛ 5    3⎞
>>  3      3    2 ⎜t    2⋅t ⎟    3 ⎜t    t ⎟    ⎛ 4⎞
>> t  + α⋅t  + α ⋅⎜── + ────⎟ + α ⋅⎜── + ──⎟ + O⎝α ⎠
>>                ⎝18    5  ⎠      ⎝18   15⎠
>>                ⎛ 6      4⎞      ⎛ 6      4⎞
>>  4      4    2 ⎜t    3⋅t ⎟    3 ⎜t    2⋅t ⎟    ⎛ 4⎞
>> t  + α⋅t  + α ⋅⎜── + ────⎟ + α ⋅⎜── + ────⎟ + O⎝α ⎠
>>                ⎝22    7  ⎠      ⎝22    21 ⎠
>> --------------------------------------------------------------
>>
>> I hope this helps.
>
> Ah, yes, that's the right solution! Thanks for this.
>
> Yes, the integral does not have a closed form in terms of some other
> special functions, as far as I know.
>
> Also, many thanks for all the improvements that you have made to the
> symbolic special functions in SymPy. This
> is extremely valuable. My code above was broken in a sense that it was
> calling integrate, but it should have been calling Integral to not
> require sympy to try to evaluate it symbolically.
>
> Ondrej
>
> --
> 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.
>

-- 
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.

Reply via email to