def _test_schur(dtype): rand = _Random() a = rand.randmat(5, 5, dtype) t, q = schur(a)[:2] assert_array_almost_equal(dtype, np.dot(np.dot(q, t), np.conj(q.T)), a)
def _test_evecs_from_schur(dtype): rand = _Random() a = rand.randmat(5, 5, dtype) t, q, ev = schur(a) vl, vr = evecs_from_schur(t, q, select=None, left=True, right=True) assert_array_almost_equal(dtype, np.dot(vr, np.dot(np.diag(ev), np.linalg.inv(vr))), a) assert_array_almost_equal(dtype, np.dot(np.linalg.inv(np.conj(vl.T)), np.dot(np.diag(ev), np.conj(vl.T))), a) select = np.array([True, True, False, False, False], dtype=bool) vl, vr = evecs_from_schur(t, q, select, left=True, right=True) assert_equal(vr.shape[1], 2) assert_equal(vl.shape[1], 2) assert_array_almost_equal(dtype, np.dot(a, vr), np.dot(vr, np.diag(ev[select]))) assert_array_almost_equal(dtype, np.dot(vl.T.conj(), a), np.dot(np.diag(ev[select]), vl.T.conj())) vl, vr = evecs_from_schur(t, q, lambda i: i<2, left=True, right=True) assert_equal(vr.shape[1], 2) assert_equal(vl.shape[1], 2) assert_array_almost_equal(dtype, np.dot(a, vr), np.dot(vr, np.diag(ev[select]))) assert_array_almost_equal(dtype, np.dot(vl.T.conj(), a), np.dot(np.diag(ev[select]), vl.T.conj()))
def _test_evecs_from_schur(dtype): rand = _Random() a = rand.randmat(5, 5, dtype) t, q, ev = schur(a) vl, vr = evecs_from_schur(t, q, select=None, left=True, right=True) assert_array_almost_equal( dtype, np.dot(vr, np.dot(np.diag(ev), np.linalg.inv(vr))), a) assert_array_almost_equal( dtype, np.dot(np.linalg.inv(np.conj(vl.T)), np.dot(np.diag(ev), np.conj(vl.T))), a) select = np.array([True, True, False, False, False], dtype=bool) vl, vr = evecs_from_schur(t, q, select, left=True, right=True) assert vr.shape[1] == 2 assert vl.shape[1] == 2 assert_array_almost_equal(dtype, np.dot(a, vr), np.dot(vr, np.diag(ev[select]))) assert_array_almost_equal(dtype, np.dot(vl.T.conj(), a), np.dot(np.diag(ev[select]), vl.T.conj())) vl, vr = evecs_from_schur(t, q, lambda i: i < 2, left=True, right=True) assert vr.shape[1] == 2 assert vl.shape[1] == 2 assert_array_almost_equal(dtype, np.dot(a, vr), np.dot(vr, np.diag(ev[select]))) assert_array_almost_equal(dtype, np.dot(vl.T.conj(), a), np.dot(np.diag(ev[select]), vl.T.conj()))
def _test_convert_r2c_schur(dtype): rand = _Random() a = rand.randmat(10, 10, dtype) t, q = schur(a)[:2] t2, q2 = convert_r2c_schur(t, q) assert_array_almost_equal(dtype, np.dot(np.dot(q, t), np.conj(q.T)), a) assert_array_almost_equal(dtype, np.dot(np.dot(q2, t2), np.conj(q2.T)), a)
def _test_order_schur(dtype): rand = _Random() a = rand.randmat(10, 10, dtype) t, q, ev = schur(a) t2, q2, ev2 = order_schur(lambda i: i>2 and i<7, t, q) assert_array_almost_equal(dtype, np.dot(np.dot(q, t), np.conj(q.T)), a) assert_array_almost_equal(dtype, np.dot(np.dot(q2, t2), np.conj(q2.T)), a) assert_array_almost_equal(dtype, np.sort(ev), np.sort(ev2)) assert_array_almost_equal(dtype, np.sort(ev[3:7]), np.sort(ev2[:4])) sel = [False, False, 0, True, True, True, 1, False, False, False] t3, q3 = order_schur(sel, t, q)[:2] assert_array_almost_equal(dtype, np.dot(np.dot(q3, t3), np.conj(q3.T)), a) assert_array_almost_equal(dtype, t2, t3) assert_array_almost_equal(dtype, q2, q3)
def _test_order_schur(dtype): rand = _Random() a = rand.randmat(10, 10, dtype) t, q, ev = schur(a) t2, q2, ev2 = order_schur(lambda i: i > 2 and i < 7, t, q) assert_array_almost_equal(dtype, np.dot(np.dot(q, t), np.conj(q.T)), a) assert_array_almost_equal(dtype, np.dot(np.dot(q2, t2), np.conj(q2.T)), a) assert_array_almost_equal(dtype, np.sort(ev), np.sort(ev2)) assert_array_almost_equal(dtype, np.sort(ev[3:7]), np.sort(ev2[:4])) sel = [False, False, 0, True, True, True, 1, False, False, False] t3, q3 = order_schur(sel, t, q)[:2] assert_array_almost_equal(dtype, np.dot(np.dot(q3, t3), np.conj(q3.T)), a) assert_array_almost_equal(dtype, t2, t3) assert_array_almost_equal(dtype, q2, q3)