mailr25319 - /trunk/test_suite/unit_tests/_target_functions/test_relax_fit.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on August 26, 2014 - 19:51:
Author: bugman
Date: Tue Aug 26 19:51:12 2014
New Revision: 25319

URL: http://svn.gna.org/viewcvs/relax?rev=25319&view=rev
Log:
Implemented two unit tests to check the Hessian of the 
target_functions.relax_fit.d2func() function.

This compares the calculated Hessian to the numerically integrated values 
from the
test_suite/shared_data/curve_fitting/numeric_gradient/Hessian.py script, 
showing that the d2func()
function is implemented correctly.


Modified:
    trunk/test_suite/unit_tests/_target_functions/test_relax_fit.py

Modified: trunk/test_suite/unit_tests/_target_functions/test_relax_fit.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/test_suite/unit_tests/_target_functions/test_relax_fit.py?rev=25319&r1=25318&r2=25319&view=diff
==============================================================================
--- trunk/test_suite/unit_tests/_target_functions/test_relax_fit.py     
(original)
+++ trunk/test_suite/unit_tests/_target_functions/test_relax_fit.py     Tue 
Aug 26 19:51:12 2014
@@ -24,7 +24,7 @@
 from unittest import TestCase
 
 # relax module imports.
-from target_functions.relax_fit import setup, func, dfunc
+from target_functions.relax_fit import setup, func, dfunc, d2func
 
 
 class Test_relax_fit(TestCase):
@@ -98,3 +98,46 @@
         # Check that the gradient matches the numerically derived values.
         self.assertAlmostEqual(grad[0], 
456.36655522098829*self.scaling_list[0], 3)
         self.assertAlmostEqual(grad[1], 
-10.8613338920982*self.scaling_list[1], 3)
+
+
+    def test_d2func(self):
+        """Unit test for the Hessian returned by the d2func() function at 
the minimum.
+
+        This uses the data from 
test_suite/shared_data/curve_fitting/numeric_gradient/Hessian.log.
+        """
+
+        # Get the chi-squared Hessian.
+        hess = d2func(self.params)
+
+        # Printout.
+        print("The Hessian at the minimum is:\n%s" % hess)
+
+        # Check that the Hessian matches the numerically derived values.
+        self.assertAlmostEqual(hess[0][0],  
4.72548021e+03*self.scaling_list[0]**2, 3)
+        self.assertAlmostEqual(hess[0][1], 
-3.61489336e+00*self.scaling_list[0]*self.scaling_list[1], 3)
+        self.assertAlmostEqual(hess[1][0], 
-3.61489336e+00*self.scaling_list[0]*self.scaling_list[1], 3)
+        self.assertAlmostEqual(hess[1][1],  
2.31293027e-02*self.scaling_list[1]**2, 3)
+
+
+    def test_d2func_off_minimum(self):
+        """Unit test for the Hessian returned by the d2func() function at a 
position away from the minimum.
+
+        This uses the data from 
test_suite/shared_data/curve_fitting/numeric_gradient/Hessian.log.
+        """
+
+        # The off-minimum parameter values.
+        I0 = 500.0
+        R = 2.0
+        params = [R/self.scaling_list[0], I0/self.scaling_list[1]]
+
+        # Get the chi-squared Hessian.
+        hess = d2func(params)
+
+        # Printout.
+        print("The Hessian at %s is:\n%s" % (params, hess))
+
+        # Check that the Hessian matches the numerically derived values.
+        self.assertAlmostEqual(hess[0][0], 
-4.11964848e+02*self.scaling_list[0]**2, 3)
+        self.assertAlmostEqual(hess[0][1],  
7.22678641e-01*self.scaling_list[0]*self.scaling_list[1], 3)
+        self.assertAlmostEqual(hess[1][0],  
7.22678641e-01*self.scaling_list[0]*self.scaling_list[1], 3)
+        self.assertAlmostEqual(hess[1][1],  
2.03731472e-02*self.scaling_list[1]**2, 3)




Related Messages


Powered by MHonArc, Updated Tue Aug 26 22:00:02 2014