def det_inv_test(): result = {} # first test g = umatrix.matrix([[0., 0., 0., 0., 0., 1.], [0.03125, 0.0625, 0.125, 0.25, 0.5, 1.], [0., 0., 0., 0., 1., 0.], [0.3125, 0.5, 0.75, 1., 1., 0.], [0., 0., 0., 2., 0., 0.], [2.5, 3., 3., 2., 0., 0.]]) g_inv = umatrix.matrix([[-192., 192., -48., -48., -4., 4.], [240., -240., 64., 56., 6., -4.], [-80., 80., -24., -16., -3., 1.], [0., 0., 0., 0., 0.5, 0.], [0., 0., 1., 0., 0., 0.], [1., 0., 0., 0., 0., 0.]]) (det, inv) = ulinalg.det_inv(g) result['determinant 1'] = (abs(det - 0.0078125) < 0.000001) result['inverse 1'] = umatrix.matrix_equal(inv, g_inv, 0.000001) # second test x = umatrix.matrix([[3., 2., 0., 1.], [4., 0., 1., 2.], [3., 0., 2., 1.], [9., 2., 3., 1.]]) (det, inv) = ulinalg.det_inv(x) det_res = det == 24.0 f = umatrix.matrix([[-0.25, 0.25, -0.5, 0.25], [ 0.66666666666666667, -0.49999999999999999, 0.50000000000000001, -0.16666666666666667 ], [ 0.16666666666666667, -0.49999999999999999, 1.00000000000000002, -0.16666666666666667 ], [ 0.41666666666666667, 0.25, 0.50000000000000001, -0.41666666666666667 ]]) result['inverse 2'] = matrix_compare(inv, f, tol=eps * 2) #, tol=0.000000000000001) f[3, 3] = -0.416668 result['determinant 2'] = det_res result['matrix_equal True'] = umatrix.matrix_equal(inv, f, tol=0.0001) result['matrix_equal False'] = umatrix.matrix_equal(inv, f) == False x1 = umatrix.matrix([[0.71, -0.71, 0.7], [0.71, 0.71, 0.5], [0, 0, 1]]) z = ulinalg.pinv(x1) result['psuedo inverse'] = matrix_compare( z, umatrix.matrix([ [0.7042253521126759, 0.704225352112676, -0.8450704225352109], [-0.704225352112676, 0.704225352112676, 0.1408450704225352], [1.110223024625157e-16, 5.551115123125783e-17, 0.9999999999999998] ]), tol=2 * eps) return result
def equality(): result = {} x10 = umatrix.matrix([[0.03, 1.2, 2.45], [4.5, 5.45, 6.98], [8, 9.0001, 10.2], [12.123, 13.45, 14.0]]) x11 = umatrix.matrix([[0.03, 1.2, 2.45], [4.5, 5.45, 6.98], [8, 9.0001, 10.2], [12.123, 13.45, 14.0]]) x12 = umatrix.matrix([[0.03, 1.2, 2.451], [4.5, 5.45, 6.98], [9, 9.0002, 10.2], [12.123, 13.45 + eps, 14.0]]) x13 = umatrix.matrix([[0.03, 1.2, 2.451], [4.5, 5.45, 6.98], [9, 9.0003, 10.2], [12.123, 13.450001, 14.0]]) result['x == y and x.__eq__(y)'] = (x10 == x11) and (x10.__eq__(x11)) result['umatrix.matrix_isclose(x, y) True'] = matrix_compare(x10, x11) result['umatrix.matrix_isclose(x, y) False'] = matrix_compare(x10, x12) == False result['umatrix.matrix_isclose(x, y, tol) False tol'] = matrix_compare( x12, x13, tol=eps / 2) == False result['umatrix.matrix_isclose(x, y, tol) True tol'] = matrix_compare( x12, x13, tol=0.001) try: result['umatrix.matrix_equal(x, y)'] = umatrix.matrix_equal( x10, x12) == False except Exception as e: result['umatrix.matrix_equal(x, y)'] = (False, e) result['umatrix.matrix_equiv(x, y) same shape'] = umatrix.matrix_equiv( x10, x11) result['umatrix.matrix_equiv(x, y.reshape) shape'] = umatrix.matrix_equiv( x10, x11.reshape((3, 4))) return result
def det_inv_test(): result = {} # first test g = umatrix.matrix([[ 0. , 0. , 0. , 0. , 0. , 1. ], [ 0.03125, 0.0625 , 0.125 , 0.25 , 0.5 , 1. ], [ 0. , 0. , 0. , 0. , 1. , 0. ], [ 0.3125 , 0.5 , 0.75 , 1. , 1. , 0. ], [ 0. , 0. , 0. , 2. , 0. , 0. ], [ 2.5 , 3. , 3. , 2. , 0. , 0. ]]) g_inv = umatrix.matrix([[-192. , 192. , -48. , -48. , -4. , 4. ], [ 240. , -240. , 64. , 56. , 6. , -4. ], [ -80. , 80. , -24. , -16. , -3. , 1. ], [ 0. , 0. , 0. , 0. , 0.5, 0. ], [ 0. , 0. , 1. , 0. , 0. , 0. ], [ 1. , 0. , 0. , 0. , 0. , 0. ]]) (det,inv) = ulinalg.det_inv(g) result['determinant 1'] = (abs(det - 0.0078125) < 0.000001) result['inverse 1'] = umatrix.matrix_equal(inv, g_inv, 0.000001) # second test x = umatrix.matrix([[3.,2.,0.,1.],[4.,0.,1.,2.],[3.,0.,2.,1.],[9.,2.,3.,1.]]) (det,inv) = ulinalg.det_inv(x) det_res = det == 24.0 f = umatrix.matrix([[-0.25 , 0.25 , -0.5 , 0.25 ], [0.66666666666666667 , -0.49999999999999999, 0.50000000000000001 , -0.16666666666666667], [0.16666666666666667 , -0.49999999999999999, 1.00000000000000002 , -0.16666666666666667], [0.41666666666666667 , 0.25 , 0.50000000000000001 , -0.41666666666666667]]) result['inverse 2'] = matrix_compare(inv, f, tol=eps*2)#, tol=0.000000000000001) f[3,3] = -0.416668 result['determinant 2'] = det_res result['matrix_equal True'] = umatrix.matrix_equal(inv, f, tol=0.0001) result['matrix_equal False'] = umatrix.matrix_equal(inv, f) == False x1 = umatrix.matrix([[0.71,-0.71,0.7],[0.71,0.71,0.5],[0,0,1]]) z = ulinalg.pinv(x1) result['psuedo inverse'] = matrix_compare(z, umatrix.matrix([[0.7042253521126759 , 0.704225352112676 , -0.8450704225352109 ], [-0.704225352112676 , 0.704225352112676 , 0.1408450704225352 ], [1.110223024625157e-16, 5.551115123125783e-17, 0.9999999999999998 ]]), tol=2*eps) return result
def equality(): result = {} x10 = umatrix.matrix([[0.03,1.2,2.45],[4.5,5.45,6.98],[8,9.0001,10.2],[12.123,13.45,14.0]]) x11 = umatrix.matrix([[0.03,1.2,2.45],[4.5,5.45,6.98],[8,9.0001,10.2],[12.123,13.45,14.0]]) x12 = umatrix.matrix([[0.03,1.2,2.451],[4.5,5.45,6.98],[9,9.0002,10.2],[12.123,13.45+eps,14.0]]) x13 = umatrix.matrix([[0.03,1.2,2.451],[4.5,5.45,6.98],[9,9.0003,10.2],[12.123,13.450001,14.0]]) result['x == y and x.__eq__(y)'] = (x10 == x11) and (x10.__eq__(x11)) result['umatrix.matrix_isclose(x, y) True'] = matrix_compare(x10, x11) result['umatrix.matrix_isclose(x, y) False'] = matrix_compare(x10, x12) == False result['umatrix.matrix_isclose(x, y, tol) False tol'] = matrix_compare(x12, x13, tol=eps/2) == False result['umatrix.matrix_isclose(x, y, tol) True tol'] = matrix_compare(x12, x13, tol=0.001) try: result['umatrix.matrix_equal(x, y)'] = umatrix.matrix_equal(x10, x12) == False except Exception as e: result['umatrix.matrix_equal(x, y)'] = (False, e) result['umatrix.matrix_equiv(x, y) same shape'] = umatrix.matrix_equiv(x10, x11) result['umatrix.matrix_equiv(x, y.reshape) shape'] = umatrix.matrix_equiv(x10, x11.reshape((3,4))) return result