Ask Your Question
0

all final(optimal) values of for loop

asked 2017-03-08 01:20:07 -0500

Deepak Sarma gravatar image

updated 2017-03-08 14:48:01 -0500

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 flag offensive close merge delete

3 answers

Sort by ยป oldest newest most voted
0

answered 2017-03-08 14:52:55 -0500

How about something like this:

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
edit flag offensive delete link more

Comments

Thank you.

Deepak Sarma gravatar imageDeepak Sarma ( 2017-03-09 23:31:48 -0500 )edit
0

answered 2017-03-08 15:00:50 -0500

tmonteil gravatar image

updated 2017-03-08 15:07:58 -0500

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.

edit flag offensive delete link more

Comments

We must have answered this at the same time.

John Palmieri gravatar imageJohn Palmieri ( 2017-03-08 18:19:11 -0500 )edit
0

answered 2017-03-08 01:31:19 -0500

Deepak Sarma gravatar image

updated 2017-03-08 14:48:08 -0500

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
edit flag offensive delete link more

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 2017-03-08 01:20:07 -0500

Seen: 33 times

Last updated: Mar 08