Eine Matrix dreimal speichern?
-
Hallo,
ich muss einige numerische Integrationsmethoden implementieren und hab eine kleine Frage. Ich habe große dünnbesetzte Matrixen und habe deshalb drei Vektoren, wobei der erste die Nichtnullwerte, der zweite Spalten und der dritte die Zeilen festhält. Ich habe eine Matrix A für das LGS Ax = b. A ruft eine Funktion auf. Das Problem ist nun:
In der Funktion werden zwei neue Matrizen erzeugt, ihre Dimension kann durch einen Parameter festgelegt werden. Und in jedem Schritt werden Spaltenvektoren dieser Natrizen erzeugt, die in der nächsten Iteration wieder benutzt werden. Da mein A immer so um die 10Tausend Unbekannte hat(und m <= dim(A) ist), wäre es vllt ineffizient, die beiden neu erzeugten Matrizen auch in je drei vektoren zu speichern.
Da wollte iche uch fragen, was ihr machen würdet. Ich suche halt nach einem optimaleren Weg, aber hab bisher nichts gefunden.

-
lil_pingu schrieb:
ich muss einige numerische Integrationsmethoden implementieren und hab eine kleine Frage.
Ok. Numerische Integration sagt mir etwas.
lil_pingu schrieb:
Ich habe große dünnbesetzte Matrixen und habe deshalb drei Vektoren, wobei der erste die Nichtnullwerte, der zweite Spalten und der dritte die Zeilen festhält.
Aha. Werden die Vektoren in einer Klasse gekapselt? Wenn nicht, warum nicht?
lil_pingu schrieb:
Ich habe eine Matrix A für das LGS Ax = b. A ruft eine Funktion auf.
"A ruft eine Funktion auf" ???
Ok, ignorieren & weiterlesen...lil_pingu schrieb:
Das Problem ist nun:
In der Funktion werden zwei neue Matrizen erzeugt, ihre Dimension kann durch einen Parameter festgelegt werden. Und in jedem Schritt werden Spaltenvektoren dieser Natrizen erzeugt, die in der nächsten Iteration wieder benutzt werden. Da mein A immer so um die 10Tausend Unbekannte hat(und m <= dim(A) ist),
Was für "Schritte"? Was sind "Unbekannte", wenn eine Matrix die "haben" kann? Oder meinst Du, dass die Matrix 10tausend Spalten besitzt?
lil_pingu schrieb:
wäre es vllt ineffizient, die beiden neu erzeugten Matrizen auch in je drei vektoren zu speichern.
Warum?
lil_pingu schrieb:
Da wollte ich euch fragen, was ihr machen würdet. Ich suche halt nach einem optimaleren Weg, aber hab bisher nichts gefunden.

Mit der Erklärung kann ich nicht viel anfangen. Gibt es noch eine "optimalere"
Erklärung des Problems?Gruß,
SP
-
Sebastian Pizer schrieb:
Gibt es noch eine "optimalere"
Erklärung des Problems?Ja, ich versuchs mal

Sebastian Pizer schrieb:
lil_pingu schrieb:
Ich habe große dünnbesetzte Matrixen und habe deshalb drei Vektoren, wobei der erste die Nichtnullwerte, der zweite Spalten und der dritte die Zeilen festhält.
Aha. Werden die Vektoren in einer Klasse gekapselt? Wenn nicht, warum nicht?
Es gibt eine Klasse, ihr Konstruktor erzeugt drei Vektoren. Diese Vektoren bilden zusammen die Matrix A. Natürlich hat sie noch keine Werte, die ganzen Matrizeneinträge kann man mit Memberfunktionen einfügen (also sowas wie: add_element_at_row_vol(row,col,element)).
Sebastian Pizer schrieb:
lil_pingu schrieb:
Ich habe eine Matrix A für das LGS Ax = b. A ruft eine Funktion auf.
"A ruft eine Funktion auf" ???
Ok, ignorieren & weiterlesen...Nicht ignorieren
. Da die Matrix als Klasse implementiert wurde, ist eine Matrix A ein Objekt und alle Matrizenoperationen als Klassenmethoden implementiert. Also "ruft A eine Funktion auf".Sebastian Pizer schrieb:
lil_pingu schrieb:
Das Problem ist nun:
In der Funktion werden zwei neue Matrizen erzeugt, ihre Dimension kann durch einen Parameter festgelegt werden. Und in jedem Schritt werden Spaltenvektoren dieser Natrizen erzeugt, die in der nächsten Iteration wieder benutzt werden. Da mein A immer so um die 10Tausend Unbekannte hat(und m <= dim(A) ist),
Was für "Schritte"? Was sind "Unbekannte", wenn eine Matrix die "haben" kann? Oder meinst Du, dass die Matrix 10tausend Spalten besitzt?
Ein Schritt ist eine Iteration, Unbekannte sind die Unbekannten des Gleichungssystems, also die Dimension der Matrix (also JA, die Spaltenanzahl).
Sebastian Pizer schrieb:
lil_pingu schrieb:
wäre es vllt ineffizient, die beiden neu erzeugten Matrizen auch in je drei vektoren zu speichern.
Warum?
Weil die beiden anderen Matrizen auch riesig sind und wenn man drei riesige Matrizen hat (und nur begrenzten Speicher) wird das rechnen langsamer. Ich brauche aber einen Algorithmus, der nicht 1 Monat rechnen soll, sondern vllt nur ein paar Stunden

Ich hoffe, ich konnte mein Problem besser beschreiben.
-
lil_pingu schrieb:
Ich hoffe, ich konnte mein Problem besser beschreiben.
Ehrlich gesagt nicht, nein. Es sind bisher nur Stichwörter gefallen: Große dünnbesetzte Matrizen, Gleichungssystem, Schritt=Iteration, 10tausende Unbekannte, numerische Integration.
Du hast aber nirgends erwähnt, was Du eigentlich machen willst. Z.B. ein großes, lineares Gleichungssystem iterativ lösen?. Vielleicht willst Du ja auch etwas ganz anderes machen ("numerische Integration" passt hier nicht ganz rein in die Reihe der Stichwörter). Wie auch immer, ich kann nicht Gedanken lesen.
Also:
- Man weiß nicht, was Du machen willst
- Man weiß nicht, wo das Problem dabei liegtGruß,
SP