You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by lu...@apache.org on 2012/09/11 16:42:44 UTC
svn commit: r1383437 - in /commons/proper/math/trunk/src:
main/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonForm.java
test/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonFormTest.java
Author: luc
Date: Tue Sep 11 14:42:44 2012
New Revision: 1383437
URL: http://svn.apache.org/viewvc?rev=1383437&view=rev
Log:
Added arbitrary order derivative for polynomials in Newton form.
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonForm.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonFormTest.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonForm.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonForm.java?rev=1383437&r1=1383436&r2=1383437&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonForm.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonForm.java Tue Sep 11 14:42:44 2012
@@ -16,9 +16,10 @@
*/
package org.apache.commons.math3.analysis.polynomials;
-import org.apache.commons.math3.exception.NoDataException;
+import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
+import org.apache.commons.math3.analysis.differentiation.UnivariateDifferentiable;
import org.apache.commons.math3.exception.DimensionMismatchException;
-import org.apache.commons.math3.analysis.UnivariateFunction;
+import org.apache.commons.math3.exception.NoDataException;
import org.apache.commons.math3.exception.util.LocalizedFormats;
/**
@@ -34,7 +35,7 @@ import org.apache.commons.math3.exceptio
* @version $Id$
* @since 1.2
*/
-public class PolynomialFunctionNewtonForm implements UnivariateFunction {
+public class PolynomialFunctionNewtonForm implements UnivariateDifferentiable {
/**
* The coefficients of the polynomial, ordered by degree -- i.e.
@@ -94,6 +95,20 @@ public class PolynomialFunctionNewtonFor
return evaluate(a, c, z);
}
+ /** {@inheritDoc} */
+ public DerivativeStructure value(final DerivativeStructure t) {
+ verifyInputArray(a, c);
+
+ final int n = c.length;
+ DerivativeStructure value = new DerivativeStructure(t.getFreeParameters(), t.getOrder(), a[n]);
+ for (int i = n - 1; i >= 0; i--) {
+ value = t.subtract(c[i]).multiply(value).add(a[i]);
+ }
+
+ return value;
+
+ }
+
/**
* Returns the degree of the polynomial.
*
@@ -221,4 +236,5 @@ public class PolynomialFunctionNewtonFor
a.length, c.length);
}
}
+
}
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonFormTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonFormTest.java?rev=1383437&r1=1383436&r2=1383437&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonFormTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/polynomials/PolynomialFunctionNewtonFormTest.java Tue Sep 11 14:42:44 2012
@@ -16,6 +16,7 @@
*/
package org.apache.commons.math3.analysis.polynomials;
+import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
import org.apache.commons.math3.exception.MathIllegalArgumentException;
import org.junit.Assert;
import org.junit.Test;
@@ -127,6 +128,30 @@ public final class PolynomialFunctionNew
}
/**
+ * Test for derivatives.
+ */
+ @Test
+ public void testDerivative() {
+
+ // x^3 = 0 * [1] + 1 * [x] + 3 * [x(x-1)] + 1 * [x(x-1)(x-2)]
+ PolynomialFunctionNewtonForm p =
+ new PolynomialFunctionNewtonForm(new double[] { 0, 1, 3, 1 },
+ new double[] { 0, 1, 2 });
+
+ double eps = 2.0e-14;
+ for (double t = 0.0; t < 10.0; t += 0.1) {
+ DerivativeStructure x = new DerivativeStructure(1, 4, 0, t);
+ DerivativeStructure y = p.value(x);
+ Assert.assertEquals(t * t * t, y.getValue(), eps * t * t * t);
+ Assert.assertEquals(3.0 * t * t, y.getPartialDerivative(1), eps * 3.0 * t * t);
+ Assert.assertEquals(6.0 * t, y.getPartialDerivative(2), eps * 6.0 * t);
+ Assert.assertEquals(6.0, y.getPartialDerivative(3), eps * 6.0);
+ Assert.assertEquals(0.0, y.getPartialDerivative(4), eps);
+ }
+
+ }
+
+ /**
* Test of parameters for the polynomial.
*/
@Test