Exemplo n.º 1
0
def apply(given):   
    assert given.is_Unequality
    A_det, zero = given.args
    assert A_det.is_Determinant
    assert zero.is_zero
    A = A_det.arg
    return Equality(Cofactors(A).T / Determinant(A), Inverse(A), given=given)
Exemplo n.º 2
0
def test_Normal():
    m = Normal('A', [1, 2], [[1, 0], [0, 1]])
    A = MultivariateNormal('A', [1, 2], [[1, 0], [0, 1]])
    assert m == A
    assert density(m)(1, 2) == 1/(2*pi)
    assert m.pspace.distribution.set == ProductSet(S.Reals, S.Reals)
    raises (ValueError, lambda:m[2])
    n = Normal('B', [1, 2, 3], [[1, 0, 0], [0, 1, 0], [0, 0, 1]])
    p = Normal('C',  Matrix([1, 2]), Matrix([[1, 0], [0, 1]]))
    assert density(m)(x, y) == density(p)(x, y)
    assert marginal_distribution(n, 0, 1)(1, 2) == 1/(2*pi)
    raises(ValueError, lambda: marginal_distribution(m))
    assert integrate(density(m)(x, y), (x, -oo, oo), (y, -oo, oo)).evalf() == 1
    N = Normal('N', [1, 2], [[x, 0], [0, y]])
    assert density(N)(0, 0) == exp(-((4*x + y)/(2*x*y)))/(2*pi*sqrt(x*y))

    raises (ValueError, lambda: Normal('M', [1, 2], [[1, 1], [1, -1]]))
    # symbolic
    n = symbols('n', integer=True, positive=True)
    mu = MatrixSymbol('mu', n, 1)
    sigma = MatrixSymbol('sigma', n, n)
    X = Normal('X', mu, sigma)
    assert density(X) == MultivariateNormalDistribution(mu, sigma)
    raises (NotImplementedError, lambda: median(m))
    # Below tests should work after issue #17267 is resolved
    # assert E(X) == mu
    # assert variance(X) == sigma

    # test symbolic multivariate normal densities
    n = 3

    Sg = MatrixSymbol('Sg', n, n)
    mu = MatrixSymbol('mu', n, 1)
    obs = MatrixSymbol('obs', n, 1)

    X = MultivariateNormal('X', mu, Sg)
    density_X = density(X)

    eval_a = density_X(obs).subs({Sg: eye(3),
        mu: Matrix([0, 0, 0]), obs: Matrix([0, 0, 0])}).doit()
    eval_b = density_X(0, 0, 0).subs({Sg: eye(3), mu: Matrix([0, 0, 0])}).doit()

    assert eval_a == sqrt(2)/(4*pi**Rational(3/2))
    assert eval_b == sqrt(2)/(4*pi**Rational(3/2))

    n = symbols('n', integer=True, positive=True)

    Sg = MatrixSymbol('Sg', n, n)
    mu = MatrixSymbol('mu', n, 1)
    obs = MatrixSymbol('obs', n, 1)

    X = MultivariateNormal('X', mu, Sg)
    density_X_at_obs = density(X)(obs)

    expected_density = MatrixElement(
        exp((S(1)/2) * (mu.T - obs.T) * Sg**(-1) * (-mu + obs)) / \
        sqrt((2*pi)**n * Determinant(Sg)), 0, 0)

    assert density_X_at_obs == expected_density
Exemplo n.º 3
0
 def _eval_determinant(self):
     if self.blockshape == (2, 2):
         [[A, B], [C, D]] = self.blocks.tolist()
         if ask(Q.invertible(A)):
             return det(A) * det(D - C * A.I * B)
         elif ask(Q.invertible(D)):
             return det(D) * det(A - B * D.I * C)
     return Determinant(self)
Exemplo n.º 4
0
 def _eval_determinant(self):
     condition = self._is_1x1()
     if condition == True:
         return S.One
     elif condition == False:
         return S.Zero
     else:
         from sympy.matrices.expressions.determinant import Determinant
         return Determinant(self)
Exemplo n.º 5
0
def prove(Eq):
    n = Symbol.n(integer=True)
    A = Symbol.A(real=True, shape=(n, n))
    a = Symbol.a(real=True, shape=(n, ))
    b = Symbol.b(real=True, shape=(n, ))
    Eq << apply(Unequal(Determinant(A), 0), Equality(a @ A, b))

    Eq << Eq[1] @ Cofactors(A).T

    Eq << algebre.matrix.determinant.adjugate.apply(A)

    Eq << Eq[-2].subs(Eq[-1])

    Eq << algebre.scalar.inequality.equality.apply(Eq[0], Eq[-1])

    Eq << algebre.matrix.inequality.determinant.apply(Eq[0]) * Determinant(A)

    Eq << Eq[-2].subs(Eq[-1])
Exemplo n.º 6
0
def prove(Eq):
    n = Symbol.n(integer=True)
    A = Symbol.A(real=True, shape=(n, n), given=True)
    a = Symbol.a(real=True, shape=(n, ), given=True)
    b = Symbol.b(real=True, shape=(n, ), given=True)
    Eq << apply(Unequal(Determinant(A), 0), Unequal(a @ A, b))

    Eq << ~Eq[-1]

    Eq << Eq[-1].split()

    Eq << Eq[-2] @ A

    Eq <<= Eq[1].subs(Eq[-1])

    Eq <<= Eq[-2] & Eq[0]
Exemplo n.º 7
0
def prove(Eq):
    n = Symbol.n(integer=True, positive=True)
    A = Symbol.A(complex=True, shape=(n, n))
    Eq << apply(Unequal(Determinant(A), 0))
    
    Eq << algebre.matrix.determinant.adjugate.apply(A)
    
    Eq << algebre.scalar.inequality.equality.apply(Eq[0], Eq[-1])
    
    Eq << Eq[-1].inverse()
    
    Eq << algebre.scalar.inequality.equality.apply(Eq[0], Eq[-1])
    
    Eq << Eq[-1].lhs.args[0].base @ Eq[-1] 
    
    Eq << Eq[-1].reversed
Exemplo n.º 8
0
def test_MatrixSymbol_determinant():
    A = MatrixSymbol('A', 4, 4)
    assert A.as_explicit().det() == A[0, 0]*A[1, 1]*A[2, 2]*A[3, 3] - \
        A[0, 0]*A[1, 1]*A[2, 3]*A[3, 2] - A[0, 0]*A[1, 2]*A[2, 1]*A[3, 3] + \
        A[0, 0]*A[1, 2]*A[2, 3]*A[3, 1] + A[0, 0]*A[1, 3]*A[2, 1]*A[3, 2] - \
        A[0, 0]*A[1, 3]*A[2, 2]*A[3, 1] - A[0, 1]*A[1, 0]*A[2, 2]*A[3, 3] + \
        A[0, 1]*A[1, 0]*A[2, 3]*A[3, 2] + A[0, 1]*A[1, 2]*A[2, 0]*A[3, 3] - \
        A[0, 1]*A[1, 2]*A[2, 3]*A[3, 0] - A[0, 1]*A[1, 3]*A[2, 0]*A[3, 2] + \
        A[0, 1]*A[1, 3]*A[2, 2]*A[3, 0] + A[0, 2]*A[1, 0]*A[2, 1]*A[3, 3] - \
        A[0, 2]*A[1, 0]*A[2, 3]*A[3, 1] - A[0, 2]*A[1, 1]*A[2, 0]*A[3, 3] + \
        A[0, 2]*A[1, 1]*A[2, 3]*A[3, 0] + A[0, 2]*A[1, 3]*A[2, 0]*A[3, 1] - \
        A[0, 2]*A[1, 3]*A[2, 1]*A[3, 0] - A[0, 3]*A[1, 0]*A[2, 1]*A[3, 2] + \
        A[0, 3]*A[1, 0]*A[2, 2]*A[3, 1] + A[0, 3]*A[1, 1]*A[2, 0]*A[3, 2] - \
        A[0, 3]*A[1, 1]*A[2, 2]*A[3, 0] - A[0, 3]*A[1, 2]*A[2, 0]*A[3, 1] + \
        A[0, 3]*A[1, 2]*A[2, 1]*A[3, 0]

    B = MatrixSymbol('B', 4, 4)
    assert Determinant(A + B).doit() == det(A + B) == (A + B).det()
Exemplo n.º 9
0
def test_matrix_derivative_with_inverse():

    # Cookbook example 61:
    expr = a.T * Inverse(X) * b
    assert expr.diff(X) == -Inverse(X).T * a * b.T * Inverse(X).T

    # Cookbook example 62:
    expr = Determinant(Inverse(X))
    # Not implemented yet:
    # assert expr.diff(X) == -Determinant(X.inv())*(X.inv()).T

    # Cookbook example 63:
    expr = Trace(A * Inverse(X) * B)
    assert expr.diff(X) == -(X**(-1) * B * A * X**(-1)).T

    # Cookbook example 64:
    expr = Trace(Inverse(X + A))
    assert expr.diff(X) == -(Inverse(X + A)).T**2
Exemplo n.º 10
0
def test_print_Determinant():
    assert mpp.doprint(Determinant(Matrix([[1, 2], [3, 4]]))) == '<mrow><mfenced close="|" open="|"><mfenced close="]" open="["><mtable><mtr><mtd><mn>1</mn></mtd><mtd><mn>2</mn></mtd></mtr><mtr><mtd><mn>3</mn></mtd><mtd><mn>4</mn></mtd></mtr></mtable></mfenced></mfenced></mrow>'
Exemplo n.º 11
0
def apply(A):
    n = A.shape[0]
    return Equality(A @ Cofactors(A).T, Determinant(A) * Identity(n))