def test_functional_scale(): r3 = odl.Rn(3) Aop = SumFunctional(r3) x = r3.element([1, 2, 3]) y = 1 # Test a range of scalars (scalar multiplication could implement # optimizations for (-1, 0, 1). scalars = [-1.432, -1, 0, 1, 3.14] for scale in scalars: C = OperatorRightScalarMult(Aop, scale) assert C.is_linear assert C.adjoint.is_linear assert C(x) == scale * np.sum(x) assert all_almost_equal(C.adjoint(y), scale * y * np.ones(3)) assert all_almost_equal(C.adjoint.adjoint(x), C(x)) # Using operator overloading assert (scale * Aop)(x) == scale * np.sum(x) assert (Aop * scale)(x) == scale * np.sum(x) assert all_almost_equal((scale * Aop).adjoint(y), scale * y * np.ones(3)) assert all_almost_equal((Aop * scale).adjoint(y), scale * y * np.ones(3))
def test_functional_scale(): r3 = odl.Rn(3) Aop = SumFunctional(r3) x = r3.element([1, 2, 3]) y = 1 # Test a range of scalars (scalar multiplication could implement # optimizations for (-1, 0, 1). scalars = [-1.432, -1, 0, 1, 3.14] for scale in scalars: C = OperatorRightScalarMult(Aop, scale) assert C.is_linear assert C.adjoint.is_linear assert C(x) == scale * np.sum(x) assert all_almost_equal(C.adjoint(y), scale * y * np.ones(3)) assert all_almost_equal(C.adjoint.adjoint(x), C(x)) # Using operator overloading assert (scale * Aop)(x) == scale * np.sum(x) assert (Aop * scale)(x) == scale * np.sum(x) assert all_almost_equal((scale * Aop).adjoint(y), scale * y * np.ones(3)) assert all_almost_equal((Aop * scale).adjoint(y), scale * y * np.ones(3))
def test_linear_scale(): A = np.random.rand(4, 3) x = np.random.rand(3) y = np.random.rand(4) Aop = MatVecOperator(A) xvec = Aop.domain.element(x) yvec = Aop.range.element(y) # Test a range of scalars (scalar multiplication could implement # optimizations for (-1, 0, 1). scalars = [-1.432, -1, 0, 1, 3.14] for scale in scalars: C = OperatorRightScalarMult(Aop, scale) assert C.is_linear assert C.adjoint.is_linear assert all_almost_equal(C(xvec), scale * np.dot(A, x)) assert all_almost_equal(C.adjoint(yvec), scale * np.dot(A.T, y)) # Using operator overloading assert all_almost_equal((scale * Aop)(xvec), scale * np.dot(A, x)) assert all_almost_equal((Aop * scale)(xvec), np.dot(A, scale * x)) assert all_almost_equal((scale * Aop).adjoint(yvec), scale * np.dot(A.T, y)) assert all_almost_equal((Aop * scale).adjoint(yvec), np.dot(A.T, scale * y))
def test_linear_scale(): A = np.random.rand(4, 3) x = np.random.rand(3) y = np.random.rand(4) Aop = MatVecOperator(A) xvec = Aop.domain.element(x) yvec = Aop.range.element(y) # Test a range of scalars (scalar multiplication could implement # optimizations for (-1, 0, 1). scalars = [-1.432, -1, 0, 1, 3.14] for scale in scalars: C = OperatorRightScalarMult(Aop, scale) assert C.is_linear assert C.adjoint.is_linear assert all_almost_equal(C(xvec), scale * np.dot(A, x)) assert all_almost_equal(C.adjoint(yvec), scale * np.dot(A.T, y)) # Using operator overloading assert all_almost_equal((scale * Aop)(xvec), scale * np.dot(A, x)) assert all_almost_equal((Aop * scale)(xvec), np.dot(A, scale * x)) assert all_almost_equal((scale * Aop).adjoint(yvec), scale * np.dot(A.T, y)) assert all_almost_equal((Aop * scale).adjoint(yvec), np.dot(A.T, scale * y))