#!/usr/bin/env python # (C) 2000 Huaiyu Zhu <hzhu@users.sourceforge.net>. Licence: GPL # $Id: test_mfuncs.py,v 1.4 2001/08/29 09:17:28 hzhu Exp $ """ Test mfuncs module """ from MatPy.Matrix import rand, norm, eye from MatPy.mfuncs import * import sys # Print out values A = rand((3,3)) print A for f in [sqrtm, expm, logm, sinhm, coshm, tanhm, sinm, cosm, tanm, asinm, acosm, atanm]: print f(A) # Check consistency def checkequal(x, y, r): try: assert norm(x-y) <= (norm(x)+norm(y)) * r except: print sys.exc_info() print "x =", x print "y =", y raise checkequal(sqrtm(A) ** 2, A, 1e-14) checkequal(expm(A)+expm(-A), 2 * coshm(A), 1e-14) checkequal(expm(A)-expm(-A), 2 * sinhm(A), 1e-14) checkequal(sinhm(A), coshm(A)*tanhm(A), 1e-14) #print "-"*40 #print coshm(A)**2 #print sinhm(A)**2 #print norm(coshm(A)**2 - sinhm(A)**2 - eye(3)) #print "-"*40 checkequal(coshm(A)**2 - sinhm(A)**2, eye(3), 2e-14) checkequal(1j*sinm(A), sinhm(A*1j), 1e-14) checkequal(cosm(A), coshm(A*1j), 1e-14) checkequal(sinm(A), cosm(A)*tanm(A), 4e-14) checkequal(cosm(A)**2 + sinm(A)**2, eye(3), 2e-14) checkequal(cosm(acosm(A)), A, 1e-14) checkequal(sinm(asinm(A)), A, 1e-14) checkequal(tanm(atanm(A)), A, 1e-14)
Result obtained with
>>> from MatPy.tests import test_mfuncs
[ 0.828 0.139 0.5 0.6 0.367 0.73 0.12 0.85 0.14 ] [ 0.875-0.0572j 0.0442+0.149j 0.308-0.135j 0.36-0.118j 0.538+0.307j 0.467-0.278j 0.0271+0.18j 0.576-0.469j 0.386+0.424j ] [ 2.52 0.644 1.02 1.31 2.04 1.34 0.654 1.28 1.68 ] [-0.518-0.267j 0.459+0.696j 0.387-0.63j 0.548-0.549j -0.424+1.43j 0.413-1.3j 0.492+0.836j 0.207-2.18j -0.494+1.98j ] [ 1.03 0.293 0.671 0.831 0.55 0.934 0.282 1 0.277 ] [ 1.48 0.351 0.351 0.481 1.49 0.402 0.372 0.271 1.4 ] [ 0.617 -0.00855 0.327 0.369 0.188 0.52 -0.0342 0.682 0.0104 ] [ 0.66 0.0146 0.36 0.412 0.218 0.563 -0.0104 0.721 0.0299 ] [ 0.645 -0.247 -0.243 -0.334 0.638 -0.277 -0.262 -0.183 0.695 ] [ 2.82 1.74 2.19 2.9 2.24 2.72 1.81 2.28 1.58 ] [ 0.891-0.33j 0.175-0.271j 0.549-0.283j 0.665-0.385j 0.413-0.316j 0.792-0.33j 0.157-0.286j 0.904-0.234j 0.171-0.245j ] [ 0.68+0.33j -0.175+0.271j -0.549+0.283j -0.665+0.385j 1.16+0.316j -0.792+0.33j -0.157+0.286j -0.904+0.234j 1.4+0.245j ] [ 0.643 0.0117 0.349 0.398 0.212 0.546 -0.0128 0.701 0.0286 ]