Processing math: 100%

First time here? Check out the FAQ!

Ask Your Question
0

all final(optimal) values of for loop

asked 8 years ago

Deepak Sarma gravatar image

updated 8 years ago

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
Preview: (hide)

3 Answers

Sort by » oldest newest most voted
0

answered 8 years ago

tmonteil gravatar image

updated 8 years ago

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.

Preview: (hide)
link

Comments

We must have answered this at the same time.

John Palmieri gravatar imageJohn Palmieri ( 8 years ago )
0

answered 8 years ago

Deepak Sarma gravatar image

updated 8 years ago

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
Preview: (hide)
link
0

answered 8 years ago

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
Preview: (hide)
link

Comments

Thank you.

Deepak Sarma gravatar imageDeepak Sarma ( 8 years ago )

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: 8 years ago

Seen: 531 times

Last updated: Mar 08 '17