First of all, thank you very much for the quick response!
The result of integrating the Heaviside-function is different with my
sympy (though it is version 0.7.1):
>>> var('a'), var('x')
(a, x)
>>> integrate(Heaviside(x - a), x)
Integral(Heaviside(-a + x), x)

How can I switch to Miejer G integration in order to get your results?





On 6 Mrz., 02:50, Aaron Meurer <[email protected]> wrote:
> Is there a reason you don't just use Heaviside?  With the new Miejer G
> algorithm in master, integrate() works fine with Heaviside functions
> and expressions containing Heaviside functions.
>
> In [101]: var("a")
> Out[101]: a
>
> In [102]: integrate(Heaviside(x - a), x)
> Out[102]:
> ⎧                                │x│
> ⎪            0               for │─│ < 1
> ⎪                                │a│
> ⎪
> ⎪                                │a│
> ⎨            x               for │─│ < 1
> ⎪                                │x│
> ⎪
> ⎪  ╭─╮0, 2 ⎛2, 1       │ x⎞
> ⎪a⋅│╶┐     ⎜           │ ─⎟   otherwise
> ⎩  ╰─╯2, 2 ⎝      1, 0 │ a⎠
>
> The G-function is a result of our poor simplification of the
> conditions.  If you need a better value at that point, you can
> substitute e.g., x = a and call simplify():
>
> In [106]: integrate(Heaviside(x - a), x).subs(x, a).simplify()
> Out[106]: 0
>
> To answer your original question, the only way to make the Risch
> heuristic work with custom functions is to define the derivative using
> _eval_derivative. If that doesn't work, then that just means that the
> Risch heuristic doesn't work with that kind of function.
>
> To extend the Meijer G algorithm, you have to extend the tables.  I
> don't know if Tom ever wrote up a document on how to do this.
>
> Aaron Meurer
>
>
>
>
>
>
>
> On Mon, Mar 5, 2012 at 4:02 PM, Hansi <[email protected]> 
> wrote:
> > Is there a way to define the antiderivative of a function in order to
> > be evaluated when integrating?
>
> > I would like to define a function  foo1(x - a) as an inherited class
> > of sympy.core.function which behaves like the heaviside-function: when
> > the argument of the function (x - a) is negative, foo1(x - a) is 0,
> > otherwise 1.
> > When integrating the function, another function foo2(x - a) should be
> > returned which has the property to return 0 as long as (x - a) is
> > negative, and the argument (x - a) otherwise. It is important that the
> > function is not decomposed, i.e. it is not expressed as (x-a)*(sign(x-
> > a) + 1)/2 because the function foo2 has to be integrated several times
> > again (I already got how to solve this problem by defining the diff-
> > method)
>
> > The question is: Is there any way to define foo2 as the antiderivative
> > of foo1?
> > Overwriting foo1.integrate() does not work as integrate(foo1) does not
> > deliver the result. And by defining the diff-method, I didn't get the
> > result either.
>
> > Thanks a lot for helping a beginner!
>
> > --
> > 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 
> > athttp://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