Inverse Matrix[Admin/Mod pls Move!]
Übersicht

MarekBetreff: Inverse Matrix[Admin/Mod pls Move!] |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem hat sich gelöst und ich habe einen Code, der eine Matrix beliebiger Größe invertieren kann:
Code: [AUSKLAPPEN] Dim A#(0,0)
Dim I#(0,0) Function InverseMatrix(size) Local x,y,x2,y2,x3,y3 Local temp#,var# Local st$ Dim I#(size-1,size-1) For x=0 To size-1 For y=0 To size-1 If x=y Then I#(x,y)=1.0 Else I#(x,y)=0.0 EndIf Next Next For x=0 To size-1 y=x .back If Not A#(x,y)=1.0 Then If A#(x,y)=0.0 Then If y=size-1 Then Return 0 Else y2=y+1 Repeat If A#(x,y2)=0.0 Then If y2=size-1 Then Return 0 EndIf y2=y2+1 Else For x2=0 To size-1 temp#=A#(x2,y) A#(x2,y)=A#(x2,y2) A#(x2,y2)=temp# temp#=I#(x2,y) I#(x2,y)=I#(x2,y2) I#(x2,y2)=temp# Next Goto back EndIf Forever EndIf Else var#=A#(x,y) For x2=0 To size-1 A#(x2,y)=A#(x2,y)/var# I#(x2,y)=I#(x2,y)/var# Next EndIf EndIf For y2=0 To size-1 If Not y2=y If Not A#(x,y2)=0.0 var#=A#(x,y2) For x2=0 To size-1 A#(x2,y2)=A#(x2,y2)-A#(x2,y)*var# I#(x2,y2)=I#(x2,y2)-I#(x2,y)*var# Next EndIf EndIf Next Next Return 1 End Function A#(x,y) ist die Eingabematrix, I#(x,y) ist die Inverse Matrix von A#! Als Parameter muss die Höhe(=Breite!) der Matrix angegeben werden... z.B: man hat die Matrix A= |1, 0| |-1, 2| um sie zu inversieren muss der Code demnach wie folgt aussehen: Code: [AUSKLAPPEN] Dim A#(1,1)
A#(0,0)=1.0 A#(1,0)=0.0 A#(0,1)=-1.0 A#(1,1)=2.0 Dim I#(0,0) Value=InverseMatrix(2) If Value=0 Then Print "Matrix ist nicht inversierbar!" Else Print "Die inverse Matrix I von A =" Print "|"+I#(0,0)+", "+I#(1,0)+"|" Print "|"+I#(0,1)+", "+I#(1,1)+"|" EndIf WaitKey End MfG Marek @Mod/Admin das gehört jetzt wohl eher ins Codearchiv^^ Daher -> Pls move |
||
Wer lesen kann ist klar im Vorteil... |
Tpro |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das einfachsate ist wahrscheinlich wenn du die Berrechnug in eine Vorschleife steckst und dan dein Pivotelement von links oben nach rechts unten durchwandern läst! Dann hast du auch gleich deine Einheitsmatrix und kanst es ohne Probleme ausgeben. Vorhewr musst du aber noch prüfen ob es überhaubt eine Inverse Matrix gibt ansonsten bekommst du da ein "Divison by Zero"
Lass es den Rechner einfach ganz genauso machen wie du den Allgoritmus durchgest. Am besten du schreibst dir vorher in Worten auf was du tust. z.B.: -wählen des ersten Pivotelements ->übertragen der Pivot Zeile -> teilen durch Pivotelement. usw wenn du das so machst ist es am Ende leichter einen so komplizierten Algoritmuss auch für den Rechener zu übersetzen! |
||
Der Optimist: "Das Glas ist halb voll"
Der Pessimist: "Das Glas ist halb leer" Der Ingenieur: "Das Glas ist doppelt so groß wie es sein müsste" |
Marek |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Antwort, leider etwas spät ![]() Das ist jetzt übrigens doch der Gauss-Jordan Algorythmus... MfG Marek |
||
Wer lesen kann ist klar im Vorteil... |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group