commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Al Chou <>
Subject Re: [math] Some changes to Polynomial
Date Wed, 31 Mar 2004 06:36:06 GMT
--- 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
> read-only 
> > 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

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 del-operator-based 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>


Do you Yahoo!?
Yahoo! Finance Tax Center - File online. File on time.

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message