|After reading through the docs, I'm still puzzled by the following:
|if I define f(x) as follows
|f(x) := IF x < 0 THEN 0 ELSE 1;
|then
|integrate(f(x), x ,1,2);
|gives the error
|MACSYMA was unable to evaluate the predicate:
|x < 0
|#0: f(x=x)
| -- an error. Quitting. To debug this try DEBUGMODE(TRUE);)
|Is there a "proper" way to integrate piecewise functions in Maxima?
|Pieter
Here's another IF definition with variable expressions.
f(x):=IF x < 0 THEN x ELSE x^2$
f(-2);
- 2
f(2);
4
If you suppress the evaluation of f(x) with the single quote,
you get a symbolic expression,
integrate('f(x),x,1,2);
2
/
[
(D3) I f(x) dx
]
/
1
but you need to find some way to allow
Maxima to evaluate what f(x) is before
it can do the integral. And you do not
want f(x) to be evaluated as a number in the
case of a variable expression.
So use single quotes in the IF definition
to prevent Maxima from evaluating the expression.
f(x):=IF x < 0 THEN 'x ELSE 'x^2$
f(-2);
x
f(2);
2
x
One way to help Maxima decide which function to use
is with ASSUME (may be other ways with EV ... ?? )
(C2) assume(a>0);
(D2) [a > 0]
(C3) INTEGRATE(f(a),x,1,3);
26
(D3) --
3
starting again ...
(C4) kill(ALL)$
(C1) f(x):=IF x < 0 THEN 'x ELSE 'x^2$
(C2) assume(a<0)$
(C3) INTEGRATE(f(a),x,-3,-1);
(D3) - 4
This answer doesn't solve all your problems, but maybe it'll
help. Also, I don't quite understand why the kill(all) command
is necessary before the second ASSUME, I get a
"[INCONSISTENT]" message if I don't use it (RH9,maxima-5.9.0rc3-1).
Maybe someone else has a better solution.
I think I remember reading on the list that Maxima support
for piecewise functions is still not fully complete.
See:
describe(assume);
describe(ev);
example(ev);
lp