#!/usr/bin/env python
# encoding: utf-8
# <<BEGIN-copyright>>
# <<END-copyright>>
"""
test fudge/core/math
cmattoon, 3/24/2011
"""
import math
import unittest
from xData.series1d import LegendreSeries, Legendre
__metaclass__ = type
[docs]class testLegendre(unittest.TestCase):
[docs] def test0(self):
"""Simple test, just check a couple of values for n = 0,1,2"""
self.assertEqual( Legendre( 0, 0.0 ), 1.0 )
self.assertEqual( Legendre( 1, 1.0 ), 1.0 )
self.assertEqual( Legendre( 2, 1.0 ), 1.0 )
self.assertEqual( Legendre( 1, -1.0 ), -1.0 )
[docs] def test1(self):
"""Check that all odd order polynomials evaluate to zero at the origin"""
for n in range( 50 ):
self.assertEqual( Legendre( 2*n+1, 0.0 ), 0.0 )
[docs] def test2(self):
"""Check that all odd order polynomials are in fact odd and even ones are in fact even"""
for n in range( 50 ):
self.assertEqual( Legendre( 2*n+1, 0.5 ), -Legendre( 2*n+1, -0.5 ) )
self.assertEqual( Legendre( 2*n, 0.5 ), Legendre( 2*n, -0.5 ) )
[docs] def test3(self):
"""Check some more values, these are taken from Abramowitz and Stegun, 8.15 Example 1"""
self.assertEqual( Legendre( 0, 0.3141592654 ), 1.0 )
self.assertEqual( Legendre( 1, 0.3141592654 ), 0.3141592654 )
self.assertAlmostEqual( Legendre( 2, 0.3141592654 ), -0.3519559340 )
self.assertAlmostEqual( Legendre( 3, 0.3141592654 ), -0.3937232064 )
self.assertAlmostEqual( Legendre( 4, 0.3141592654 ), 0.0475063122 )
self.assertAlmostEqual( Legendre( 5, 0.3141592654 ), 0.3418427517 )
self.assertAlmostEqual( Legendre( 6, 0.3141592654 ), 0.1572986975 )
self.assertAlmostEqual( Legendre( 7, 0.3141592654 ), -0.2012339354 )
self.assertAlmostEqual( Legendre( 8, 0.3141592654 ), -0.2561729328 )
self.assertEqual( Legendre( 0, 2.6, False ), 1.0 )
self.assertEqual( Legendre( 1, 2.6, False ), 2.6 )
self.assertAlmostEqual( Legendre( 2, 2.6, False ), 9.64 )
self.assertAlmostEqual( Legendre( 3, 2.6, False ), 40.04 )
self.assertAlmostEqual( Legendre( 4, 2.6, False ), 174.952 )
self.assertAlmostEqual( Legendre( 5, 2.6, False ), 786.74336 )
self.assertAlmostEqual( Legendre( 6, 2.6, False ), 3604.350016 )
self.assertAlmostEqual( Legendre( 7, 2.6, False ), 16729.51005, 5 )
self.assertAlmostEqual( Legendre( 8, 2.6, False ), 78402.55522, 4 )
[docs] def test4(self):
"""Check range testing of parameters"""
self.assertRaises( ValueError, Legendre, n=-1, mu=0.0 )
self.assertRaises( ValueError, Legendre, n=1, mu=10.0 )
[docs] def test5(self):
"""Check recursion relation"""
def lhs( n, x ): return (n+1)*Legendre(n+1,x)
def rhs( n, x ): return (2*n+1)*x*Legendre(n,x) - n*Legendre(n-1,x)
for n in range( 1, 50 ):
self.assertAlmostEqual( lhs( n, 0.5 ), rhs( n, 0.5 ) )
if __name__ == '__main__':
unittest.main()