本文整理汇总了Python中sage.matrix.constructor.Matrix.kernel方法的典型用法代码示例。如果您正苦于以下问题:Python Matrix.kernel方法的具体用法?Python Matrix.kernel怎么用?Python Matrix.kernel使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类sage.matrix.constructor.Matrix
的用法示例。
在下文中一共展示了Matrix.kernel方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from sage.matrix.constructor import Matrix [as 别名]
# 或者: from sage.matrix.constructor.Matrix import kernel [as 别名]
#.........这里部分代码省略.........
sage: H = Q.S(QQ, 2).Hom(Q.P(QQ, 1))
sage: TestSuite(H).run()
"""
# The data in the class is stored in the following private variables:
#
# * _base
# The base ring of the representations M and N.
# * _codomain
# The QuiverRep object of the codomain N.
# * _domain
# The QuiverRep object of the domain M.
# * _quiver
# The quiver of the representations M and N.
# * _space
# A free module with ambient space.
#
# The free module _space is the homomorphism space. The ambient space
# is k^n where k is the base ring and n is the sum of the dimensions of
# the spaces of homomorphisms between the free modules attached in M
# and N to the vertices of the quiver. Each coordinate represents a
# single entry in one of those matrices.
# Get the quiver and base ring and check they they are the same for
# both modules
if domain._semigroup != codomain._semigroup:
raise ValueError("representations are not over the same quiver")
self._quiver = domain._quiver
self._semigroup = domain._semigroup
# Check that the bases are compatible, and then initialise the homset:
if codomain.base_ring() != domain.base_ring():
raise ValueError("representations are not over the same base ring")
Homset.__init__(self, domain, codomain, category=category, base = domain.base_ring())
# To compute the Hom Space we set up a 'generic' homomorphism where the
# maps at each vertex are described by matrices whose entries are
# variables. Then the commutativity of edge diagrams gives us a
# system of equations whose solution space is the Hom Space we're
# looking for. The variables will be numbered consecutively starting
# at 0, ordered first by the vertex the matrix occurs at, then by row
# then by column. We'll have to keep track of which variables
# correspond to which matrices.
# eqs will count the number of equations in our system of equations,
# varstart will be a list whose ith entry is the number of the
# variable located at (0, 0) in the matrix assigned to the
# ith vertex. (So varstart[0] will be 0.)
eqs = 0
verts = domain._quiver.vertices()
varstart = [0]*(len(verts) + 1)
# First assign to varstart the dimension of the matrix assigned to the
# previous vertex.
for v in verts:
varstart[verts.index(v) + 1] = domain._spaces[v].dimension()*codomain._spaces[v].dimension()
for e in domain._quiver.edges():
eqs += domain._spaces[e[0]].dimension()*codomain._spaces[e[1]].dimension()
# After this cascading sum varstart[v] will be the sum of the
# dimensions of the matrices assigned to vertices ordered before v.
# This is equal to the number of the first variable assigned to v.
for i in range(2, len(varstart)):
varstart[i] += varstart[i-1]
# This will be the coefficient matrix for the system of equations. We
# start with all zeros and will fill in as we go. We think of this
# matrix as acting on the right so the columns correspond to equations,
# the rows correspond to variables, and .kernel() will give a right
# kernel as is needed.
from sage.matrix.constructor import Matrix
coef_mat = Matrix(codomain.base_ring(), varstart[-1], eqs)
# eqn keeps track of what equation we are on. If the maps X and Y are
# assigned to an edge e and A and B are the matrices of variables that
# describe the generic maps at the initial and final vertices of e
# then commutativity of the edge diagram is described by the equation
# AY = XB, or
#
# Sum_k A_ik*Y_kj - Sum_k X_ik*B_kj == 0 for all i and j.
#
# Below we loop through these values of i,j,k and write the
# coefficients of the equation above into the coefficient matrix.
eqn = 0
for e in domain._quiver.edges():
X = domain._maps[e].matrix()
Y = codomain._maps[e].matrix()
for i in range(0, X.nrows()):
for j in range(0, Y.ncols()):
for k in range(0, Y.nrows()):
coef_mat[varstart[verts.index(e[0])] + i*Y.nrows() + k, eqn] = Y[k, j]
for k in range(0, X.ncols()):
coef_mat[varstart[verts.index(e[1])] + k*Y.ncols() + j, eqn] = -X[i, k]
eqn += 1
# Now we can create the hom space
self._space = coef_mat.kernel()
# Bind identity if domain = codomain
if domain is codomain:
self.identity = self._identity