示例#1
0
def isom(A, B):
    # First check that A is a symmetric matrix.
    if not matrix(A).is_symmetric():
        return False
    # Then check A against the viable database candidates.
    else:
        n = len(A[0])
        m = len(B[0])
        Avec = []
        Bvec = []
        for i in range(n):
            for j in range(i, n):
                if i == j:
                    Avec += [A[i][j]]
                else:
                    Avec += [2 * A[i][j]]
        for i in range(m):
            for j in range(i, m):
                if i == j:
                    Bvec += [B[i][j]]
                else:
                    Bvec += [2 * B[i][j]]
        Aquad = QuadraticForm(ZZ, len(A[0]), Avec)
        # check positive definite
        if Aquad.is_positive_definite():
            Bquad = QuadraticForm(ZZ, len(B[0]), Bvec)
            return Aquad.is_globally_equivalent_to(Bquad)
        else:
            return False
示例#2
0
def QuadraticForm_from_quadric(Q):
    """
    On input a homogeneous polynomial of degree 2 return the Quadratic Form corresponding to it.
    """
    R = Q.parent()
    assert all([sum(e)==2 for e in Q.exponents()])
    M = copy(zero_matrix(R.ngens(),R.ngens()))
    for i in range(R.ngens()):
        for j in range(R.ngens()):
            if i==j:
                M[i,j]=2*Q.coefficient(R.gen(i)*R.gen(j))
            else:
                M[i,j]=Q.coefficient(R.gen(i)*R.gen(j))
   
    return QuadraticForm(M)