[cig-commits] r6668 - cs/cigma/trunk/sandbox/c
luis at geodynamics.org
luis at geodynamics.org
Tue Apr 24 15:02:03 PDT 2007
Author: luis
Date: 2007-04-24 15:02:03 -0700 (Tue, 24 Apr 2007)
New Revision: 6668
Added:
cs/cigma/trunk/sandbox/c/dets.py
Log:
Generate formulas for 3x3 and 4x4 matrix determinants
Added: cs/cigma/trunk/sandbox/c/dets.py
===================================================================
--- cs/cigma/trunk/sandbox/c/dets.py 2007-04-24 21:59:36 UTC (rev 6667)
+++ cs/cigma/trunk/sandbox/c/dets.py 2007-04-24 22:02:03 UTC (rev 6668)
@@ -0,0 +1,83 @@
+#!/usr/bin/env python
+
+#
+# |m[0] m[1] m[2]|
+# |m[3] m[4] m[5]|
+# |m[6] m[7] m[8]|
+#
+# = m[0]*|m[4] m[5]|
+# |m[7] m[8]|
+#
+# - m[1]*|m[3] m[5]|
+# |m[6] m[8]|
+#
+# + m[2]*|m[3] m[4]|
+# |m[6] m[7]|
+#
+# = m[0]*(m[4]*m[8] - m[5]*m[7])
+# - m[1]*(m[3]*m[8] - m[5]*m[6])
+# + m[2]*(m[3]*m[7] - m[4]*m[6])
+
+
+class Matrix(object):
+ def __init__(self, n):
+ self.n = n
+ self.m = [[n*i+j for j in range(n)] for i in range(n)]
+ def __setitem__(self, ij, val):
+ i,j = ij
+ self.m[i][j] = val
+ def __getitem__(self, ij):
+ i,j = ij
+ return 'm[%2d]' % self.m[i][j]
+ def strike(self,a,b):
+ n = self.n
+ minor = Matrix(n-1)
+ rows = [row[:b] + row[b+1:] for row in self.m]
+ minor.m = rows[:a] + rows[a+1:]
+ return minor
+ def __str__(self):
+ if self.n == 1:
+ # |00|
+ return self[0,0]
+ if self.n == 2:
+ # |00 01|
+ # |10 11|
+ return '%s*%s-%s*%s' % (self[0,0],self[1,1],
+ self[0,1],self[1,0])
+ if self.n == 3:
+ # |00 01 02|
+ # |10 11 12|
+ # |20 21 22|
+ c00 = self.strike(0,0)
+ c01 = self.strike(0,1)
+ c02 = self.strike(0,2)
+ pfac = '\n\t+ %s*(%s)'
+ mfac = '\n\t- %s*(%s)'
+ return (pfac + mfac + pfac) % \
+ (self[0,0], c00,
+ self[0,1], c01,
+ self[0,2], c02)
+
+ if self.n == 4:
+ # |00 01 02 03|
+ # |10 11 12 13|
+ # |20 21 22 23|
+ # |30 31 32 33|
+ c00 = self.strike(0,0)
+ c01 = self.strike(0,1)
+ c02 = self.strike(0,2)
+ c03 = self.strike(0,3)
+ pfac = '+ %s*(%s\n\t)\n'
+ mfac = '- %s*(%s\n\t)\n'
+ return (pfac + mfac + pfac + mfac) % (
+ self[0,0], c00,
+ self[0,1], c01,
+ self[0,2], c02,
+ self[0,3], c03)
+ return ''
+
+if __name__ == '__main__':
+ print ("%s\n\n"*4) % (Matrix(1),
+ Matrix(2),
+ Matrix(3),
+ Matrix(4))
Property changes on: cs/cigma/trunk/sandbox/c/dets.py
___________________________________________________________________
Name: svn:executable
+ *
More information about the cig-commits
mailing list