piecewise function with integrals



Well, here's a somewhat better (though still pretty simple-minded) approach.

It takes something like

          if X then A elseif Y then B else C

and simplifies it to

           if X then (simplify A assuming X)
           elseif Y then (simplify A assuming not X and Y)
           else (simplify C assuming not X and not Y)

(%i1) load("if_simp");
(%o1) "if_simp.mac"
(%i2) resimp_if(if a>0 then abs(a) else abs(a));
(%o2) if a>0 then a else -a
(%i3) resimp_if(if a>0 then (if b>0 then abs(a*b) else abs(a*b)) else (if
b>0 then abs(a*b) else abs(a*b)));
(%o3) if a>0 then if b>0 then a*b else -a*b else if b>0 then -a*b else a*b

There is also a variant, reeval_if, which evaluates the 'then' clauses
rather than resimplifying them.  This can obviously be hazardous -- *caveat
emptor.*

(%i17) if equal(a,-1) then integrate(x^a,x) else integrate(x^a,x)$
(%i18) reeval_if(%);
(%o18) if equal(a,-1) then log(x) else x^(a+1)/(a+1)

Some limitations:

It does not yet handle and's and or's in "if" clauses. (The naive approach
of just passing them along to 'assume' doesn't work.)

Since it depends on the existing assume/simplify system, it does not know
that

         if equal(a,b) then a-b

can be simplified to

         if equal(a,b) then 0

I'll be interested in feedback / bug reports....

            -s


On Sun, Jan 20, 2013 at 9:43 PM, Robert Dodier <robert.dodier at gmail.com>wrote:

> On 2013-01-20, Stavros Macrakis <macrakis at alum.mit.edu> wrote:
>
> > (%i1) expr: if cond then print(3) else print(4);
> > (%o1) if cond then print(3) else print(4)
> > (%i2) map(ev,%);
> > 3                                << note evaluation of both branches
> > 4
> > (%o2) if cond then 3 else 4      << evaluated values in 'if' expression
>
> Hmm, yes, that's a good idea (despite the limitations which you pointed
> out).
>
> best
>
> Robert Dodier
>
> _______________________________________________
> Maxima mailing list
> Maxima at math.utexas.edu
> http://www.math.utexas.edu/mailman/listinfo/maxima
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: if_simp.mac
Type: application/octet-stream
Size: 2677 bytes
Desc: not available
URL: <http://www.math.utexas.edu/pipermail/maxima/attachments/20130121/bb5c9848/attachment.obj>;