all final(optimal) values of for loop  I have written a program to check which matrices in a given class maximizes the determinant. But my program gives me only one such matrix, I need all those matrices which attains the maximum determinant.

def xyz(n):
m=0
A=matrix(QQ,n)
for a in myfunction(n):
if a.det()>m:
m=a.det()
A=a
print  A
edit retag close merge delete

Sort by » oldest newest most voted

Instead of storing the best matrix in a variable a, you can store all best matrices in a list (or a set), and flush the list when a better matrix is found (and update the value of the best determinant). It will look something like:

def xyz(n):
L = []
max_det = -infinity
for A in myfunction(n):
d = A.det()
if d == max_det:
L.append(A)
elif d > max_det:
L = [A]
max_det = d
return L

Also let me suggest you to read about the difference between print and return.

more  I have solved the problem with the following modification. But comparatively this takes a lot of time for larger $n$ as the same loop runs twice. Can we do it by running the loop only once?

def xyz(n):
m=max([a.det() for a in myfunction(n)])
for A in myfunction(n):
if A.det()==m:
print A
more def xyz(n):
m = -Infinity # or some number that you know is less than the max
matrices = []  # list of matrices with max determinant
for A in myfunction(n):
d = A.det()
if d > m:
matrices = [A]
m = d
elif d == m:
matrices.append(A)
return matrices
more