Yigal,
> The Maxima manual http://www.ma.utexas.edu/maxima/maxima_18.html
> explains that delta(x) is recognized only by LAPLACE. Has there been
> work on defining generalized functions for general use in Maxima by
> using a special package? If so what package(s) should be added to use
> them? If not, then what needs to be done to make it work?
So far as I know, delta is not recognized by integrate or diff.
Some functionality could be implemented by modifying the Lisp
source code, but I think that's unnecessarily difficult.
A better approach is to implement some identities via simplification
rules. We probably cannot get everything we want that way,
but that's OK, because we can get something working soon, and
it will help us understand what more we want, and it is an
improvement on what we have now.
Here is an attempt to get started.
matchdeclare (aa, atom, [bb, cc, dd, ee], all);
simp:false;
tellsimpafter ('integrate (bb*delta(cc), aa, dd, ee), FOO(aa,bb,cc,dd,ee));
simp:true;
FOO(a,b,c,d,e):=(solve(c,a), subst(%%[1],b)); /* This is naive. Oh well */
'integrate(exp(-s*t)*delta(t-a)*sin(b*t),t,0,s);
=> sin(a*b)*%e^-(a*s)
The first step is to develop a list of identities we want to implement.
I can help with writing the rules, if you can help develop the list.
I am guessing we want to handle the derivatives and integrals
featuring delta, unit step, and maybe some related functions.
The usual criticisms of Maxima's rule system is that it is too slow,
and/or too clumsy. I don't see either of those as serious problems
in this context. Certainly writing rules is more nearly humanly possible
than modifying Maxima's integration code. There are also some bugs
in the rules code although I don't know of any show-stoppers,
and I would be willing to work on bug fixes if we find some bugs in
the course of this exercise.
Hope this helps,
Robert Dodier