def test_inv3(self): """Test linalg.inv with broadcasting support.""" from linalg import Inv mtx1 = Ch(np.sin(2**np.arange(12)).reshape((3, 2, 2))) mtx1_inv = Inv(mtx1) dr = mtx1_inv.dr_wrt(mtx1) eps = 1e-5 mtx2 = mtx1.r.copy() input_diff = np.sin(np.arange(mtx2.size)).reshape(mtx2.shape) * eps mtx2 += input_diff mtx2_inv = Inv(mtx2) output_diff_emp = (np.linalg.inv(mtx2) - np.linalg.inv(mtx1.r)).ravel() output_diff_pred = Inv(mtx1).dr_wrt(mtx1).dot(input_diff.ravel()) # print output_diff_emp # print output_diff_pred self.assertTrue( np.max(np.abs(output_diff_emp.ravel() - output_diff_pred.ravel())) < eps * 1e-3) self.assertTrue( np.max(np.abs(mtx1_inv.r - np.linalg.inv(mtx1.r)).ravel()) == 0)
def test_inv2(self): from linalg import Inv eps = 1e-8 idx = 13 mtx1 = np.random.rand(100).reshape((10,10)) mtx2 = mtx1.copy() mtx2.ravel()[idx] += eps diff_emp = (np.linalg.inv(mtx2) - np.linalg.inv(mtx1)) / eps mtx1 = Ch(mtx1) diff_pred = Inv(mtx1).dr_wrt(mtx1)[:,13].reshape(diff_emp.shape) #print(diff_emp) #print(diff_pred) #print(diff_emp - diff_pred) self.assertTrue(np.max(np.abs(diff_pred.ravel()-diff_emp.ravel())) < 1e-4)
def test_inv2(self): from linalg import Inv eps = 1e-8 idx = 13 mtx1 = np.random.rand(100).reshape((10,10)) mtx2 = mtx1.copy() mtx2.ravel()[idx] += eps diff_emp = (np.linalg.inv(mtx2) - np.linalg.inv(mtx1)) / eps mtx1 = Ch(mtx1) diff_pred = Inv(mtx1).dr_wrt(mtx1)[:,13].reshape(diff_emp.shape) #print diff_emp #print diff_pred #print diff_emp - diff_pred self.assertTrue(np.max(np.abs(diff_pred.ravel()-diff_emp.ravel())) < 1e-4)
def test_inv1(self): from linalg import Inv mtx1 = Ch(np.sin(2**np.arange(9)).reshape((3,3))) mtx1_inv = Inv(mtx1) dr = mtx1_inv.dr_wrt(mtx1) eps = 1e-5 mtx2 = mtx1.r.copy() input_diff = np.sin(np.arange(mtx2.size)).reshape(mtx2.shape) * eps mtx2 += input_diff mtx2_inv = Inv(mtx2) output_diff_emp = (np.linalg.inv(mtx2) - np.linalg.inv(mtx1.r)).ravel() output_diff_pred = Inv(mtx1).dr_wrt(mtx1).dot(input_diff.ravel()) #print(output_diff_emp) #print(output_diff_pred) self.assertTrue(np.max(np.abs(output_diff_emp - output_diff_pred)) < eps*1e-4) self.assertTrue(np.max(np.abs(mtx1_inv.r - np.linalg.inv(mtx1.r)).ravel()) == 0)
def test_inv1(self): from linalg import Inv mtx1 = Ch(np.sin(2**np.arange(9)).reshape((3,3))) mtx1_inv = Inv(mtx1) dr = mtx1_inv.dr_wrt(mtx1) eps = 1e-5 mtx2 = mtx1.r.copy() input_diff = np.sin(np.arange(mtx2.size)).reshape(mtx2.shape) * eps mtx2 += input_diff mtx2_inv = Inv(mtx2) output_diff_emp = (np.linalg.inv(mtx2) - np.linalg.inv(mtx1.r)).ravel() output_diff_pred = Inv(mtx1).dr_wrt(mtx1).dot(input_diff.ravel()) #print output_diff_emp #print output_diff_pred self.assertTrue(np.max(np.abs(output_diff_emp - output_diff_pred)) < eps*1e-4) self.assertTrue(np.max(np.abs(mtx1_inv.r - np.linalg.inv(mtx1.r)).ravel()) == 0)
def test_inv3(self): """Test linalg.inv with broadcasting support.""" from linalg import Inv mtx1 = Ch(np.sin(2**np.arange(12)).reshape((3,2,2))) mtx1_inv = Inv(mtx1) dr = mtx1_inv.dr_wrt(mtx1) eps = 1e-5 mtx2 = mtx1.r.copy() input_diff = np.sin(np.arange(mtx2.size)).reshape(mtx2.shape) * eps mtx2 += input_diff mtx2_inv = Inv(mtx2) output_diff_emp = (np.linalg.inv(mtx2) - np.linalg.inv(mtx1.r)).ravel() output_diff_pred = Inv(mtx1).dr_wrt(mtx1).dot(input_diff.ravel()) # print output_diff_emp # print output_diff_pred self.assertTrue(np.max(np.abs(output_diff_emp.ravel() - output_diff_pred.ravel())) < eps*1e-3) self.assertTrue(np.max(np.abs(mtx1_inv.r - np.linalg.inv(mtx1.r)).ravel()) == 0)