 brent@worden.org wrote:
> On Tue, 30 Mar 2004 21:29:42 0700, Phil Steitz wrote:
>
> > 0. To help debug the SplineInterpolater (PR #28019 et al), I need to
> > expose the coefficients in o.a.c.m.analysis.Polynomial as a
> readonly
> > property (returning an array copy). Any objections to adding this?
>
>
> > 1. Add protected static double evaluate(double[] coefficients,
> double
> > argument) implementing Horner to get the function value; and change
> > value(double) to just call this.
>
> +1
>
> >
> > 2. Add protected static double[] differentiate(double[] coefficients)
> > to
> > return the coefficients of the derivative of the polynomial with
> > coefficients equal to the actual parameter. Then change
> > firstDerivative(x) to just return
> > evaluate(differentiate(coefficients), x). Similar for
> > secondDerivative.
> > I could adapt Horner for the derivatives, but that seems messy to me
> > and
> > the slight memory cost to create the temp arrays seems worth it.
>
> +1 on the differntiate method.
>
> Are the firstDerivate and secondDerivative methods needed anymore with
> the addition of your derivative method below? I would favor removing
> the prior two methods if possible.
+1 to Brent's suggestion. These methods seem very redundant now, and I never
really liked naming these explicitly, as they seem to beg for derivatives of
all orders to then be named explicitly as well.
> > 3. I would also like to add
> > public PolynomialFunction derivative() {
> > return new PolynomialFunction(differentiate(coefficients));
> > }
>
> Have we considered a design for the general derivative case (i.e. for
> UnivariateRealFunction objects)? I was thinking about a
> Differentiable interface that either extends from URF or is a base
> interface. It would have a single derivative method with a URF return
> value.
>
> Specialized URF types, like PolynomialFunction, could implement and
> general derivative method and could provide their own specialized
> derivative methods. Much like java.util.List with iterator and
> listIterator.
>
> With this approach, the derivative impl for PolynomialFunction could
> be:
>
> public PolynomialFunction polynomialDerivative() {
> return new PolynomialFunction(differentiate(coefficients));
> }
>
> public UnivariateRealFunction derivative() {
> return polynomialDerivative();
> }
>
> Counter thoughts?
>
> Brent Worden
> http://www.brent.worden.org/
That seems pretty reasonable. Should we at least briefly explore what
multivariable differentiation would look like and see if that makes it clearer
what it should look like with a single variable?
For instance, a UnivariateRealFunction can be considered a special case of a
ScalarRealFunction (I thought about writing MultivariateRealFunction there, but
semantically it seems wrong to call Univariate... a special case of
Multivariate...). For a RealFunction of n variables, the quintessential
derivatives are the first partial derivatives with respect to each of the n
variables, from which the gradient and other deloperatorbased vector
functions spring. For second derivatives we quickly generate the matrix of all
mixed partial derivatives.
Where is this leading? I guess one direction might be an interface containing
a differentiate() method that calculates a first derivative, which in n
dimensions would require the user to specify which of the n variables to
differentiate with respect to, but in one dimension would not, for obvious
reasons. So I guess the Brent's suggestion holds, and the generalization to
more dimensions would be
public ScalarRealFunction derivative(Variable x) {
// implementation of first derivative with respect to x
}
I don't care to tackle vector functions of any number of variables at the
moment. <g>
Al
__________________________________
Do you Yahoo!?
Yahoo! Finance Tax Center  File online. File on time.
http://taxes.yahoo.com/filing.html

To unsubscribe, email: commonsdevunsubscribe@jakarta.apache.org
For additional commands, email: commonsdevhelp@jakarta.apache.org
