Author: luc
Date: Thu Aug 16 10:08:17 2012
New Revision: 1373782
URL: http://svn.apache.org/viewvc?rev=1373782&view=rev
Log:
Added toDegrees and toRadians to DerivativeStructure.
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/differentiation/DerivativeStructure.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/differentiation/DerivativeStructureTest.java
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/differentiation/DerivativeStructure.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/differentiation/DerivativeStructure.java?rev=1373782&r1=1373781&r2=1373782&view=diff
==============================================================================
---
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/differentiation/DerivativeStructure.java
(original)
+++
commons/proper/math/trunk/src/main/java/org/apache/commons/math3/analysis/differentiation/DerivativeStructure.java
Thu Aug 16 10:08:17 2012
@@ -757,6 +757,28 @@ public class DerivativeStructure impleme
return result;
}
+ /** Convert radians to degrees, with error of less than 0.5 ULP
+ * @return instance converted into degrees
+ */
+ public DerivativeStructure toDegrees() {
+ final DerivativeStructure ds = new DerivativeStructure(compiler);
+ for (int i = 0; i < ds.data.length; ++i) {
+ ds.data[i] = FastMath.toDegrees(data[i]);
+ }
+ return ds;
+ }
+
+ /** Convert degrees to radians, with error of less than 0.5 ULP
+ * @return instance converted into radians
+ */
+ public DerivativeStructure toRadians() {
+ final DerivativeStructure ds = new DerivativeStructure(compiler);
+ for (int i = 0; i < ds.data.length; ++i) {
+ ds.data[i] = FastMath.toRadians(data[i]);
+ }
+ return ds;
+ }
+
/** Evaluate Taylor expansion a derivative structure.
* @param delta parameters offsets (Δx, Δy, ...)
* @return value of the Taylor expansion at x + Δx, y + Δy, ...
Modified:
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/differentiation/DerivativeStructureTest.java
URL:
http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/differentiation/DerivativeStructureTest.java?rev=1373782&r1=1373781&r2=1373782&view=diff
==============================================================================
---
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/differentiation/DerivativeStructureTest.java
(original)
+++
commons/proper/math/trunk/src/test/java/org/apache/commons/math3/analysis/differentiation/DerivativeStructureTest.java
Thu Aug 16 10:08:17 2012
@@ -893,6 +893,57 @@ public class DerivativeStructureTest {
}
@Test
+ public void testToDegreesDefinition() {
+ double epsilon = 3.0e-16;
+ for (int maxOrder = 0; maxOrder < 6; ++maxOrder) {
+ for (double x = 0.1; x < 1.2; x += 0.001) {
+ DerivativeStructure dsX = new DerivativeStructure(1, maxOrder,
0, x);
+ Assert.assertEquals(FastMath.toDegrees(x),
dsX.toDegrees().getValue(), epsilon);
+ for (int n = 1; n <= maxOrder; ++n) {
+ if (n == 1) {
+ Assert.assertEquals(180 / FastMath.PI,
dsX.toDegrees().getPartialDerivative(1), epsilon);
+ } else {
+ Assert.assertEquals(0.0,
dsX.toDegrees().getPartialDerivative(n), epsilon);
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ public void testToRadiansDefinition() {
+ double epsilon = 3.0e-16;
+ for (int maxOrder = 0; maxOrder < 6; ++maxOrder) {
+ for (double x = 0.1; x < 1.2; x += 0.001) {
+ DerivativeStructure dsX = new DerivativeStructure(1, maxOrder,
0, x);
+ Assert.assertEquals(FastMath.toRadians(x),
dsX.toRadians().getValue(), epsilon);
+ for (int n = 1; n <= maxOrder; ++n) {
+ if (n == 1) {
+ Assert.assertEquals(FastMath.PI / 180,
dsX.toRadians().getPartialDerivative(1), epsilon);
+ } else {
+ Assert.assertEquals(0.0,
dsX.toRadians().getPartialDerivative(n), epsilon);
+ }
+ }
+ }
+ }
+ }
+
+ @Test
+ public void testDegRad() {
+ double epsilon = 3.0e-16;
+ for (int maxOrder = 0; maxOrder < 6; ++maxOrder) {
+ for (double x = 0.1; x < 1.2; x += 0.001) {
+ DerivativeStructure dsX = new DerivativeStructure(1, maxOrder,
0, x);
+ DerivativeStructure rebuiltX = dsX.toDegrees().toRadians();
+ DerivativeStructure zero = rebuiltX.subtract(dsX);
+ for (int n = 0; n <= maxOrder; ++n) {
+ Assert.assertEquals(0.0, zero.getPartialDerivative(n),
epsilon);
+ }
+ }
+ }
+ }
+
+ @Test
public void testField() {
for (int maxOrder = 1; maxOrder < 5; ++maxOrder) {
DerivativeStructure x = new DerivativeStructure(3, maxOrder, 0,
1.0);