Sure,

Suppose that you are integrating an equation of line *L(x, x1, y1, x2, y2)* 
which 
is being multiplied by a certain complicated expression. One way of 
representing a line is to represent through it's parameters:

*def Line(x, x1, y1, x2, y2):*
*    return y1 + ((x - x1) (y2 - y1))/(x2 - x1)*

But again in certain situations you don't want to have such detailed 
abstraction as it might complicate your expression especially if your 
expression is already too complicated. You would want the line to abstract 
the underlying complexity of all it's parameters and have it represented as 
a symbolic function which hides it's dependence on parameters *x1, y1, x2, 
y2*:

from sympy import *

tau = symbols("tau")
Line = Function("Line")
fn = Function("fn")

result = integrate(Line(tau) * fn(tau), tau)

In my specific case I would like to instruct SymPy that I would like to 
perform integration by parts whenever I encounter *Line* which should 
result in:

result = Line(tau) * Integral(fn(tau), tau) - Integral(Integral(fn(tau), tau) 
* Derivative(Line(tau), tau), tau)

Now since I know that the *Derivative(Line(tau), tau)* is a constant I 
would like to apply another rule and have the above expression to be 
simplified into:

result = Line(tau) * Integral(fn(tau), tau) - Derivative(Line(tau), tau) * 
Integral(Integral(fn(tau), tau), tau)

(This rule is universal in context governed by the definition of Line and 
would not work with other functions)

The major requirement for above examples is ability to operate at higher 
abstraction level and still be able to perform efficient manipulation and 
reduction*.*

*Alternative example* 
For example consider a *Step,* *Box* functions. *Step(x)* is a function 
which is equal to 1 for all x ≥ 0, zero otherwise. *Box* is equal to *Step(x 
+ 1/2) - **Step(x - 1/2). *

There is however little sense in using above representations as they are 
too detailed and would complicate the result of integration so again it 
makes sense to maintain higher level of abstraction and to define these 
functions symbolically like so:

from sympy import *

tau = symbols("tau")
Step = Function("Step")
Box = Function("Box")
fn = Function("fn")

result = integrate(fn(tau) * Box(tau), tau)

and then to somehow explain to SymPy that the integration of expression 
that involves multiplication *Box *can be reduced to following form:

result = Box(tau) * (Integral(fn(tau), {tau, -1/2, 1/2}) / 2 + Integral(fn(
tau), tau)) + Step(tau - 1/2) * Integral(fn(tau), {tau, -1/2, 1/2})

(this is a universal rule that comes directly from definition of *Box* 
function but SymPy doesn't know that)

Again what I'm asking is whether there is a way to extend existing 
integration rule system for the integrate function to account for the cases 
that I could provide it with. 

*P.S.*

I understand that I could use pattern matching to find and transform the 
expressions or perform monkey-patching of integrate method in order to 
check for above patterns but this all seems to quirky, are there any proper 
mechanisms to extend integrations 

On Tuesday, December 10, 2024 at 3:25:36 PM UTC+1 [email protected] 
wrote:

> Frankly, I am not clear what you want to do.
>
> Can you give an example?
>
>  
>
> *From:* [email protected] <[email protected]> *On Behalf Of *Mr 
> Y
> *Sent:* Monday, December 9, 2024 4:41 PM
> *To:* sympy <[email protected]>
> *Subject:* [sympy] Extending integration rules
>
>  
>
> Hi!
>
>  
>
> I'm new to SymPy so excuse me if this question is misplaced.
>
>  
>
> Basically I would like to teach SymPy how to integrate my custom function:
>
>  
>
> ```
>
> from sympy import Function
>
>  
>
> tau = symbols("tau")
>
> fn = Function("fn")
>
> gn = Function("gn")
>
>  
>
> result = integrate(fn(tau), tau)
>
> ```
>
> Is there a way to add my own rules to `integrate` routine?
>
>  
>
> -- 
> 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 view this discussion visit 
> https://groups.google.com/d/msgid/sympy/6d3ef1f4-d6eb-43d0-8809-4d9fea262335n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sympy/6d3ef1f4-d6eb-43d0-8809-4d9fea262335n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
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 view this discussion visit 
https://groups.google.com/d/msgid/sympy/02ad0140-9f94-486f-9c89-2e288fbaeffbn%40googlegroups.com.

Reply via email to