Let's consider a system of linear equations with integer coefficients:

n=3
m=5
A=random_matrix(ZZ,n,m)
b=random_vector(ZZ,n)

What is the best way to find an integer vector x such that Ax=b?
A rational solution is of course found by A.solve_right(b). 

A random example:
 
A=matrix(ZZ,3,5,[-1,  0, -1, -1,  1, 0, -2, -1,  1, -8,-1,  0,  2, -8, -2])
b=vector(ZZ,3,[-1,-1,15])

A.solve_right(b) gives (-13/3, -13/6, 16/3, 0, 0), although there are 
integer solutions,
e.g.: (-221, 13, 144, 65, -13)

Is there also a good way to get all integer solutions? In the example above 
that would be something like:

[-10*t0 - 30*t1 - 221, -2*t0 + 3*t1 + 13, 7*t0 + 19*t1 + 144, 3*t0 + 9*t1 + 
65, -2*t1 - 13]

for integer variables t0 and t1.

The best way I could think of is to implement the algorithm from section 
4.5.2 from Knuth's TAOCP. (This is also where the solutions above come from)
Is there a simpler way to do that in sage?

Of course to we could formulate the same question in terms of linear 
equations instead of matrices, but then solve() also gives rational, 
non-integer solutions. 

Maybe the right thing to use would be isolve from maple, but the interface 
is broke ( see http://trac.sagemath.org/sage_trac/ticket/12295 ).

To consider the problem as linear program and use 
MixedIntegerLinearProgram()  with integer constrains works, but it is very 
very slow for larger systems.

Any help will be appreciated,

    moritz

-- 
You received this message because you are subscribed to the Google Groups 
"sage-support" group.
To post to this group, send email to sage-support@googlegroups.com.
To unsubscribe from this group, send email to 
sage-support+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/sage-support?hl=en.


Reply via email to