Quadratische NxN Matrix - Determinate

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

ToeB

Betreff: Quadratische NxN Matrix - Determinate

BeitragDi, Okt 27, 2009 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
So heute haben wir in dem schönen Fach Mathe-Info ein neues Thema angefangen : Matrizen. Ich fand das sehr spannend und da wir heute gelernt haben das man bei quadratischen Matrizen die auf den feldern (N)x(N) bestehen eine Determinate errechnen kann, habe ich mir gedacht, schreibst du schonmal ein programm dafür. Weil bei 3x3 Matrizen gehts schnell auf dem Papier, bei 4x4 ist es schonmal 4* soviel arbeit. Das Programm ist noch nicht Perfect, kann aber fehlerfrei 2x2 und 3x3 Matrizen ausrechen, bei 4x4 und höher hatte ich keine lust das nachzurechnen, wer also möglichkeiten oder lust dazu hat, kann es ja mal machen.

Hier der code :
<leertaste> Determinante errechnen
<Maus> felder auswählen und werte beim klicken verändern
Gebt im Code bei der Function "CreateMatrix" mal einen anderen feldwert ein der größer als 1 ist ein, und könnt gucken wie sich die Determinate verändert etc.

Code: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

SeedRnd MilliSecs()


Global matrix = CreateBank(),matrixsize
Global tmpbank = CreateBank()

CreateMatrix(5)


For yy = 1 To matrixsize
   For xx = 1 To matrixsize
      SetMatrixNum(xx,yy,Rand(10))
   Next
Next

Global size = 64

Repeat
   For yy = 1 To matrixsize
      For xx = 1 To matrixsize
         Rect xx*size,yy*size,size,size,0
         num = GetMatrixNum(xx,yy)
         Text xx*size+size/2,yy*size+size/2,num,1,1
         If RectsOverlap(MouseX(),MouseY(),1,1,xx*size,yy*size,size,size) Then
            Color 255,0,0:Rect xx*size,yy*size,size,size,0
            Color 255,255,255
            If MouseDown(1) Then
               Cls:Flip
               num = Input("Zahl : ")
               setmatrixnum(xx,yy,num)
            EndIf
         EndIf
      Next
   Next
   If KeyHit(57) Then
      ms = MilliSecs()
      det = Determinante(matrix,matrixsize)
      time = MilliSecs() - ms
   EndIf    
   Text 0,0,"Determinate : "+det
   Text 0,13,"(Leertaste zum Ausrechnen)"
   Text 0,26,"Zeit : "+time+"ms"
   Flip
   Cls
Until KeyHit(1)
End

Function CreateMatrix(felder)
   ResizeBank(matrix,felder*felder*4)
   matrixsize = felder
End Function

Function GetMatrixNum(x,y)
   x = x -1
   y = y -1
   get = (y*matrixsize+x)*4
   get = PeekInt(matrix,get)
   Return get
End Function

Function SetMatrixNum(x,y,num)
   x = x -1
   y = y -1
   put = (y*matrixsize+x)*4
   PokeInt(matrix,put,num)
End Function

Function Determinante(bank,felder=2)
   If felder = 2
      a = PeekInt(bank,(0*felder+0)*4)
      b = PeekInt(bank,(0*felder+1)*4)
      c = PeekInt(bank,(1*felder+0)*4)
      d = PeekInt(bank,(1*felder+1)*4)
      det =  a*d - b*c
      Return det
   Else
      det = 0
      For i = 1 To felder
         num = PeekInt(bank,(i-1)*4)
         nsize = felder-1
         nsize1 = nsize*nsize*4
         tmpbank = CreateBank(nsize1)
         aktfeld = 0
         For yy = 2 To felder
            For xx = 1 To felder
               If xx <> i Then
                  nx = xx-1
                  ny = yy-1
                  im = PeekInt(bank,(ny*felder+nx)*4)
                  PokeInt(tmpbank,aktfeld,im)
                  aktfeld = aktfeld + 4
               EndIf
            Next
         Next
         det_tmp = Determinante(tmpbank,nsize)
         wert = num * det_tmp
         DebugLog wert
         If Floor(i/2.0) <> i/2.0 Then
            det = det + wert
         Else
            det = det - wert
         EndIf
      Next
      Return det      
   EndIf
End Function



mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group