# [GiNaC-list] Piecewise function

Vincent Huber vincent.huber at cemosis.fr
Wed Apr 22 18:56:07 CEST 2015

```Dear Dr. Kisil

Pr. C. Prud'homme has hacked our GiNaC fork to let people use this kind of
expression.
https://github.com/feelpp/feelpp/commit/547c08b66e5b6019ab258477ab19a329cdf4138a

Now, the one that parse the string
"(x<0.5)*1000+(x>0.5)*10:x:y"
will find in the source file:
f[0] =
10.0*(a[0]>5.0000000000000000e-01)+1000.0*(a[0]<5.0000000000000000e-01);

All the best,

VH

2015-04-22 18:50 GMT+02:00 Vladimir V. Kisil <kisilv at maths.leeds.ac.uk>:

>         Dear Vincent,
>
>         You are right that GiNaC expression do not admit boolean
>   terms directly. However with your example you can proceed as follow (I
>   do understand that your actual target is much more complicated):
>
>   1. Use the step function from GiNaC:
>
>   f=2*x*step(x)+3*x*step(-x).
>
>   [but for x=0 you need take care as step(0)=.5]
>
>   Of course, if you have a hundred points where the function changes the
>   expression, this becomes much more complicated
>
>   2. Define your own function of three variables S(a,b,x) such that
>   S(a,b,x)=1 for a<x<b and zero otherwise. GiNaC tutorial
>   contains a demonstration how make a user-defined function. Then, any
>   piece-wise function F will be a sum of terms f_i(x)*S(a_i,_b_i,x)
>   where f_i is the expression for F on [a_i,b_i] (assuming disjoint
>   partition.
>
>   3. Finally, you may derive your own class from GiNaC::basic to hold
>   your piece-wise function (again, GiNaC tutorial gives an example). As
>   I see it shall have two lists: one with points of the partition,
>   methods to operate this class.
>
>
>   The approaches are given in the order of increasing complexity, but
>   the efficiently shall grow in the same direction.
>
>   Best wishes,
> --
>   Book:     Geometry of Mobius Transformations     http://goo.gl/EaG2Vu
>   Software: Geometry of cycles          http://moebinv.sourceforge.net/
> >>>>> On Wed, 22 Apr 2015 16:47:13 +0200, Vincent Huber <
> vincent.huber at cemosis.fr> said:
>
>     VH> Hello Dr. Kisil,
>
>     VH> The question from C. Trophime is not about evaluating the
>     VH> function but to define it.  ​ Feel++ <http://www.feelpp.org> is a
>     VH> Finite Element library that main goal is to solve the
>     VH> variational problem a(u,v)=f(v) that arises from a lot of
>     VH> physical problems.
>
>     VH> ​We use GiNaC to dynamically define the right hand side of our
>     VH> problem, or our boundaries conditions and whatever can be
>     VH> expressed with it.
>
>     VH> The question - I guess - can be explained like that​ : I would
>     VH> like to define
>
>     VH>    -
>
>     VH>    ​f(x) = 2*x if x>0 -
>
>     VH>    f(x) = 3*x if x<=0.
>
>     VH> Thus, basically, I would like to write
>
>
>     VH> ex MyEx = (x<=0)?3*x:2*x
>
>     VH> To my best knowledge, boolean expression are not handled in
>     VH> GiNaC, isn’t it ?
>
>     VH> all the best,
>
>     VH> Vincent H.  ​ -- Docteur Ingénieur de recherche CeMoSiS
>     VH> <http://www.cemosis.fr> - vincent.huber at cemosis.fr Tel: +33 (0)3
>     VH> 68 8*5 02 06* IRMA - 7, rue René Descartes 67 000 Strasbourg
>
>     VH> ----------------------------------------------------
>     VH> Alternatives:
>
>     VH> ----------------------------------------------------
>     VH> _______________________________________________ GiNaC-list
>     VH> mailing list GiNaC-list at ginac.de
>     VH> https://www.cebix.net/mailman/listinfo/ginac-list
>

--
Docteur Ingénieur de recherche
CeMoSiS <http://www.cemosis.fr> - vincent.huber at cemosis.fr
Tel: +33 (0)3 68 8*5 02 06*
IRMA - 7, rue René Descartes
67 000 Strasbourg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cebix.net/pipermail/ginac-list/attachments/20150422/44fe592f/attachment.html>
```