def test_functional_right_vector_mult(): r3 = odl.Rn(3) Aop = SumFunctional(r3) vec = r3.element([1, 2, 3]) x = r3.element([4, 5, 6]) y = 2.0 # Test a range of scalars (scalar multiplication could implement # optimizations for (-1, 0, 1). C = OperatorRightVectorMult(Aop, vec) assert C.is_linear assert C.adjoint.is_linear assert all_almost_equal(C(x), np.sum(vec * x)) assert all_almost_equal(C.adjoint(y), vec * y) assert all_almost_equal(C.adjoint.adjoint(x), C(x)) # Using operator overloading assert all_almost_equal((Aop * vec)(x), np.sum(vec * x)) assert all_almost_equal((Aop * vec).adjoint(y), vec * y)
def test_linear_right_vector_mult(): A = np.random.rand(4, 3) Aop = MatVecOperator(A) vec = Aop.domain.element([1, 2, 3]) x = Aop.domain.element([4, 5, 6]) y = Aop.range.element([5, 6, 7, 8]) # Test a range of scalars (scalar multiplication could implement # optimizations for (-1, 0, 1). C = OperatorRightVectorMult(Aop, vec) assert C.is_linear assert C.adjoint.is_linear assert all_almost_equal(C(x), np.dot(A, vec * x)) assert all_almost_equal(C.adjoint(y), vec * np.dot(A.T, y)) assert all_almost_equal(C.adjoint.adjoint(x), C(x)) # Using operator overloading assert all_almost_equal((Aop * vec)(x), np.dot(A, vec * x)) assert all_almost_equal((Aop * vec).adjoint(y), vec * np.dot(A.T, y))
def test_functional_right_vector_mult(): r3 = odl.Rn(3) Aop = SumFunctional(r3) vec = r3.element([1, 2, 3]) x = r3.element([4, 5, 6]) y = 2.0 # Test a range of scalars (scalar multiplication could implement # optimizations for (-1, 0, 1). C = OperatorRightVectorMult(Aop, vec) assert C.is_linear assert C.adjoint.is_linear assert all_almost_equal(C(x), np.sum(vec * x)) assert all_almost_equal(C.adjoint(y), vec * y) assert all_almost_equal(C.adjoint.adjoint(x), C(x)) # Using operator overloading assert all_almost_equal((Aop * vec)(x), np.sum(vec * x)) assert all_almost_equal((Aop * vec).adjoint(y), vec * y)
def test_linear_right_vector_mult(): A = np.random.rand(4, 3) Aop = MatVecOperator(A) vec = Aop.domain.element([1, 2, 3]) x = Aop.domain.element([4, 5, 6]) y = Aop.range.element([5, 6, 7, 8]) # Test a range of scalars (scalar multiplication could implement # optimizations for (-1, 0, 1). C = OperatorRightVectorMult(Aop, vec) assert C.is_linear assert C.adjoint.is_linear assert all_almost_equal(C(x), np.dot(A, vec * x)) assert all_almost_equal(C.adjoint(y), vec * np.dot(A.T, y)) assert all_almost_equal(C.adjoint.adjoint(x), C(x)) # Using operator overloading assert all_almost_equal((Aop * vec)(x), np.dot(A, vec * x)) assert all_almost_equal((Aop * vec).adjoint(y), vec * np.dot(A.T, y))