Implementation of Hypergeometric functions



>>>>> "Dieter" == Dieter Kaiser <drdieterkaiser at web.de> writes:

    Dieter> I know we had a discussion on this list about the implementation of
    Dieter> hypergeometric functions and the notation. Maxima knows the noun %
    Dieter> f[p,q]([a1,a2,...,ap],[b1,b2,...,bq],z). There is not a lot of code
    Dieter> implemented to use this noun. But the derivative is implemented directly
    Dieter> into the code of sdiff. An example is:

I think I did that because hgfred needed to be able to differentiate
such forms when simplifying hypergeometric functions

    Dieter> I would prefer a notation like

    Dieter>      hypergeometric([a1,...,ap],[b1,...,bq],z)

I kind of like %f since it's nice and short, but hypergeometric seems
like a better name.  %f is just too generic.

    Dieter> Perhaps it is useful to support some more notations like

    Dieter>     hypergeometric0f1(b,z)
    Dieter>     hypergeometric1f1(a,b,z) ...

    Dieter> to have a short form for some special cases.

This works, but I think I prefer hypergeometric_0f1, _1f1, etc, so it
lookslesslikeabunchofwordsstucktogether.

    Dieter> I do not prefer to do the code for the derivative directly into the
    Dieter> routine of sdiff like it is done for the noun %f. I would prefer to use
    Dieter> the more general lookup algorithm of sdiffgrad.

I agree.  

    Dieter> But one problem is that sdiffgrad does not support functions which have
    Dieter> a list as an argument. I had to implement extra code in the routine
    Dieter> sdiffgrad to support such functions. Furthermore, we have to build the
    Dieter> derivative with the help of $map and $apply. The lookup routine does not
    Dieter> support such expressions.


    Dieter> I would like to do some further work on this topic. Perhaps we can use
    Dieter> the extensions of the derivative routines for further functions too.

I agree.  I think table-driven implementation is easier to extend and
maintain.

Ray