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 (&Delta;x, &Delta;y, ...)
      * @return value of the Taylor expansion at x + &Delta;x, y + &Delta;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);


Reply via email to