ASKSAGE: Sage Q&A Forum - Latest question feedhttp://ask.sagemath.org/questions/Q&A Forum for SageenCopyright Sage, 2010. Some rights reserved under creative commons license.Wed, 15 Mar 2017 15:27:39 -0500smith form, gaussian integershttp://ask.sagemath.org/question/36958/smith-form-gaussian-integers/ Hello there,
I would like to be able to compute smith normal forms for matrices with coefficients in some specific ring, to be choosen each time.
I am not able to properly creat a matrix in $\mathbb{Z}[\sqrt{-1}]$. For instance
`M=matrix([[2+I,0],[0,1]])` then
`M.change_ring(ZZ[I])`
Would lead to an error. On the ogher hand, `M=matrix([[2+I,0],[0,1]])` followed by `M.smith_form()` would lso lead to an error since this time my matrix has coefficients in `SR`, the symbolic ring, and the `normal_form()`is not implemented.
However,
`A = QQ['x']` #delcaring the ring
`M=matrix(A,[[x-1,0,1],[0,x-2,2],[0,0,x-3]])` # building the matrix
`M.smith_form()`# computing the normal form
Actually works.
JCBRWed, 15 Mar 2017 15:27:39 -0500http://ask.sagemath.org/question/36958/Solving system of linear Diophantine equationshttp://ask.sagemath.org/question/23666/solving-system-of-linear-diophantine-equations/I have an $m \times n$ integer matrix $A$ with $m>n$, and a set $S \subset \mathbb{Z}$, for example $S=\\{-1,0,1\\}$.
I want to enumerate all possible $X \in S^n$ such that $AX=0$.
I tried using smith_form(), but then i could not figure out how to force the solution to belong to elements of $S$.
----------
EDIT. Thank you Dima for the solution. It works well. I am adding an example here to illustrate your solution.
lb = -1
ub = 1
A = matrix(ZZ, [(8,2,10,0,12,2,0), (4,6,9,1,14,5,2), (2,0,1,1,0,1,0), (2,1,3,0,4,0,1)])
eq1 = [(0,8,2,10,0,12,2,0), (0,4,6,9,1,14,5,2), (0,2,0,1,1,0,1,0), (0,2,1,3,0,4,0,1)]
ieq1 = [(-lb,1,0,0,0,0,0,0), (ub,-1,0,0,0,0,0,0),
(-lb,0,1,0,0,0,0,0), (ub,0,-1,0,0,0,0,0),
(-lb,0,0,1,0,0,0,0), (ub,0,0,-1,0,0,0,0),
(-lb,0,0,0,1,0,0,0), (ub,0,0,0,-1,0,0,0),
(-lb,0,0,0,0,1,0,0), (ub,0,0,0,0,-1,0,0),
(-lb,0,0,0,0,0,1,0), (ub,0,0,0,0,0,-1,0),
(-lb,0,0,0,0,0,0,1), (ub,0,0,0,0,0,0,-1)]
p = Polyhedron(eqns=eq1, ieqs=ieq1, base_ring=QQ)
p.integral_points()
returns the answer
((-1, -1, 1, 1, 0, 0, 0),
(0, -1, -1, 1, 1, 0, 0),
(0, -1, 0, -1, 0, 1,1),
(0, 0, 0, 0, 0, 0, 0),
(0, 1, 0, 1, 0, -1, -1),
(0, 1, 1, -1, -1, 0,0),
(1, 1, -1, -1, 0, 0, 0))
which is exactly what i needed. Thanks again.arunayyarSat, 02 Aug 2014 05:17:47 -0500http://ask.sagemath.org/question/23666/