$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Roland Schwarz (roland.schwarz_at_[hidden])
Date: 2006-03-25 13:19:44
Marcus Mendenhall wrote:
> For example, for  
> bessel functions, one gets derivatives out of the same recursion  
> relation (when recurring over the order) used to generate the  
> function itself.
True. But why stop at order 2 ? Wouldn't one rather like to be able to 
evaluate a function to arbitrary order say n? (y, y_1, y_2, ...y_n )
Then you would supply a
1) framework of function evaluation that returns a vector of derivatives 
whose size is user specifiable or automatically selected by the algorithm
2) a set of algorithms that can make use of derivatives of up to order n.
3) a set of functions that are able to efficiently calculate not only 
the function value but also the required number of derivatives.
E.g.:
sin(Pi/2,5) would return a vector (1,0,-1,0,1)
The 5 could be hidden when sin indeed is a functor e.g
boost:sin sin_5(5); (the return vector would need an appropriate 
signature, so also vector valued functions are possible. )
So cn_functions would be more appropriate, since everything you said 
about 2 can be said for n in general. You can get derivatives of 
composed functions by recursively applying the rule for 2 can't you?
Or take multiplication: Simply apply the binomial formula to derivation.
It would be a nice exercise, to let the compiler do this at compile time 
too. (Maybe by making use of the spirit library?)
This could lay out the ground for a framework to deal with non-linear 
functions more efficiently while keeping the interface tidy.
The splines still being a special case of 3) to adhere to this 
interface, but having also a very different interface too since you 
would expect to be able to work on the inner representation of the 
splines, i.e. getting access to the tables of function values and 
derivatives. At least you will need to be able to calculate the spline 
somehow.
Roland