Mit Matrizen rechnen
Übersicht BlitzBasic Allgemein
WipffinderBetreff: Mit Matrizen rechnen |
Do, Apr 10, 2014 9:44 Antworten mit Zitat |
|
---|---|---|
Salü
Ich möchte mit Matrizen rechnen und dafür eine kleine Bibliothek erstellen. Die Rechenregeln sind mir bekannt. Jetzt weis ich aber nicht wie ich die Matrizen im Speicher halten soll. Dim Felder werden laut Doku immer global definiert. Man kann sie also nicht einfach so in einer Funktion übergeben. Würde man also Dim Felder benutzen wären die Funktionen sehr unflexibel. Mit types besteht das Problem, dass man mit dem Befehl Field nur eindimensionale Felder definieren kann, die in ihrer Länge auch noch statisch sind. Man könnte direkt in einer Datei herumrechnen, die Matrix könnte dann als Dateiname übergeben werden. Doch dass wäre wahrscheinlich zu langsam. Hat jemand eine Idee wie man eine beliebige Anzahl beliebiger Matrizen beliebiger Grösse organisieren kann? gruss |
||
Tritium |
Do, Apr 10, 2014 10:30 Antworten mit Zitat |
|
---|---|---|
Vielleicht würden Banks funktionieren? Dann wäre eine Matrix aus technischer Sicht die Startadresse in der Bank, und innerhalb der Bank würde eine Matrix aus einem "Header" bestehen, der die Struktur der Matrix beschreibt, gefolgt von den eigentlichen Daten der Matrix. | ||
DAK |
Do, Apr 10, 2014 12:16 Antworten mit Zitat |
|
---|---|---|
Verwende doch BlitzArrays. Im Gegensatz zu Dims können sie als lokal definiert werden und an Funktionen übergeben werden. Man kann sie auch als Field in ein Type setzen.
Nachteil: Sie sind nur eindimensional und man muss beim Funktionsheader definieren, wie groß die Arrays sind, die übergeben werden können. Wenn du z.B. eine 4x4 Matrix haben willst, kannst du also nicht ein 4x4 Array erstellen, sondern musst ein 16x1 (oder eigentlich nur 16, da es die 2. Dimension gar nicht gibt)-Array machen. Code: [AUSKLAPPEN] Local foo[10]
For i=0 To 10 foo[i] = i*3 Next test(foo) WaitKey Function test(bar[10]) For i=0 To 10 Print(bar[i]) Next End Function |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Wipffinder |
Do, Apr 10, 2014 16:56 Antworten mit Zitat |
|
---|---|---|
@Tritium
Banks scheinen dafür geeignet zu sein. Der Befehl CreateBank gibt ja einen Handle zurück der an Funktionen übergeben werden kann. Das mit dem Header würde die ganze Sache für den Benutzer der Funktion sehr einfach machen. Werd ich mir genauer anschauen. @DAK Das Problem ist hier das die Funktion bereits die Grösse wissen muss. Das wird aber schnell sehr ineffizient wenn man mit sehr kleinen und sehr grossen Matrizen rechnen will (z.B. Bilder) muss man die grösstmögliche angeben. Danke für die schnelle Hilfe. |
||
DAK |
Do, Apr 10, 2014 22:04 Antworten mit Zitat |
|
---|---|---|
Aso, habe gedacht, du meinst Matrizenrechnung im Sinne von Transformationsmatrizen o.Ä., wo es üblicherweise nicht mehr als 3 verschiedene Größen gibt.
Bei variablen Größen bist du mit Banks wohl wirklich am Besten bedient. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
Wipffinder |
Do, Apr 10, 2014 22:44 Antworten mit Zitat |
|
---|---|---|
Eigentlich will ich mit Hilfe der Singulärwertzerlegung ein Bild komprimieren. Mit Phyton gehts schon mal. Nun will ich alles selber mal durchkauen.
EDIT: Kann mir jemand sagen was ich mit der Matrixmultiplikation von zwei komplexen Matritzen falsch mache. Das Internet schweigt sich dazu aus. Ich ersetzte einfach die Multiplikation von zwei reellen Zahlen durch die komplexe Multiplikation, geht irgendwie nicht. Cik = summe über alle j (Aij * Bjk) wobei A = a+bi und B = c+di A*B = ac - bd + i*(ad + bc) Ich hoffe das ist verständlich genug. |
||
Übersicht BlitzBasic Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group