Le 10/05/2014 17:24, Albert van der Horst a écrit :
I have the following code for calculating the determinant of
a matrix. It works inasfar that it gives the same result as an
octave program on a same matrix.

/ ----------------------------------------------------------------

def determinant( mat ):
     ''' Return the determinant of the n by n matrix mat
         i row j column
         Destroys mat ! '''
     #print "getting determinat of", mat
     n=len(mat)
     nom = 1.
     if n == 1: return mat[0][0]
     lastr = mat.pop()
     jx=-1
     for j in xrange(n):
        if lastr[j]:
            jx=j
            break
     if jx==-1: return 0.
     result = lastr[jx]
     assert(result<>0.)
     # Make column jx zero by subtracting a multiple of the last row.
     for i in xrange(n-1):
         pivot = mat[i][jx]
         if 0. == pivot: continue
         assert(result<>0.)
         nom *= result   # Compenstate for multiplying a row.
         for j in xrange(n):
             mat[i][j] *= result
         for j in xrange(n):
             mat[i][j] -= pivot*lastr[j]
     # Remove colunm jx
     for i in xrange(n-1):
        x= mat[i].pop(jx)
        assert( x==0 )

     if (n-1+jx)%2<>0: result = -result
     det = determinant( mat )
     assert(nom<>0.)
     return result*det/nom

/-----------------------------------------

Now on some matrices the assert triggers, meaning that nom is zero.
How can that ever happen? mon start out as 1. and gets multiplied
with a number that is asserted to be not zero.

Any hints appreciated.

Groetjes Albert

I know it's not the question, but if you want a replacement for octave did you try numpy (and scipy) ? The determinant would be computer faster and with less memory than with your function.

---
Ce courrier électronique ne contient aucun virus ou logiciel malveillant parce 
que la protection avast! Antivirus est active.
http://www.avast.com


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to