Lösen großer LGS < Lin. Gleich.-systeme < Numerik < Hochschule < Mathe < Vorhilfe
|
Hi,
ich habe mehrere große LGS. 2400x2400, bzw. 6500x6500. Wer kennt ein Programm, womit diese zu lösen sind?
Grüße,
BertanARG
|
|
|
|
Hallo BertranARG,
> ich habe mehrere große LGS. 2400x2400, bzw. 6500x6500. Wer
> kennt ein Programm, womit diese zu lösen sind?
Eine Pauschalempfehlung gibt's da sicher nicht. Aber ja nach dem wie viele solcher Matrizen zu lösen sind bieten sich auch direkte Löser an. Mit Gauß würde mein Computer für's kleiner vllt. 5min brauchen entsprechend fürs größere etwa 1h(alles grobe Schätzungen).
Ansonsten ist die Struktur der Matrix entscheidend(dünnbesetzt? Bandmatrix? etc.)
viele Grüße
mathemaduenn
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 10:09 Fr 20.07.2007 | Autor: | rainerS |
Hallo BertanARG,
> ich habe mehrere große LGS. 2400x2400, bzw. 6500x6500. Wer
> kennt ein Programm, womit diese zu lösen sind?
LAPACK, in Fortran 77. Unter "Related Projects" gibt's auch Implementierungen in anderen Sprachen. Mehrere Linux-Distributionen (Debian, Novell/suse) liefern fertige lapack-Pakete mit.
Grüße
Rainer
|
|
|
|
|
Hi,
inzwischen kann ich das Problem sogar exakter beschreiben. Dass es Löser gibt ist schon mal gut. Die Matrizen haben zudem viele Nullen, sind also dünn besetzt.
Allerdings muss ich ein n-dimensionalen Vektor u als Lösung bestimmen, und zwar aus der folgenden Gleichung...
[mm] e=(1,...,1)^T [/mm] ein n-dimensionaler Zeilenvektor mit lauter Einsen.
y=(0,...,0,1,...,1) ein n-dimensionaler Zeilenvektor mit Einsen ab einer Stelle k+1.
P ist gegeben, und u soll berechnet werden.
u=e+P*u*y
Das macht das ganze etwas komplizierter, da ich keine Standardform Ax=b habe. Läßt sich das irgendwie auf Standardform umformen?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:41 Fr 20.07.2007 | Autor: | rainerS |
Hallo,
> [mm]e=(1,...,1)^T[/mm] ein n-dimensionaler Zeilenvektor mit lauter > Einsen.
> y=(0,...,0,1,...,1) ein n-dimensionaler Zeilenvektor mit > Einsen ab einer Stelle k+1.
> P ist gegeben, und u soll berechnet werden.
>
>
> u=e+P*u*y
Die Gleichung verstehe ich nicht? Was ist mit P*u*y gemeint?
> Das macht das ganze etwas komplizierter, da ich keine
> Standardform Ax=b habe. Läßt sich das irgendwie auf
> Standardform umformen?
Du kannst das u auf der linken Seite als Einheitsmatrix mal u schreiben.
Grüße
Rainer
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:45 Fr 20.07.2007 | Autor: | BertanARG |
Zeilenweise ergäbe sich die folgenden Gleichungen...
[mm] u_i=1+\summe_{j=k+1}^n p_{ij}u_j
[/mm]
Daher dieses P*u*y. Das y soll dafür sorgen, dass aus dem Produkt der nxn-Matrix mit dem Vektor u nur die Spalten mit einem Index >k übrig bleiben. Der Rest wird abgeschnitten.
Der Hinweis, dass sich das u auf der linken Seite als E*u schreiben liesse hilft mir noch nicht weiter, sorry.
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 19:31 Fr 20.07.2007 | Autor: | rainerS |
Hallo!
>Zeilenweise ergäbe sich die folgenden Gleichungen...
>[mm]u_i=1+\summe_{j=k+1}^n p_{ij}u_j[/mm]
OK, verstanden. Als erstes kannst du die linke Seite als Produkt der Einheitsmatrix mit u schreiben, in Komponenten ist dies:
[mm]\summe_{j=1}^n \delta_{ij} u_j[/mm].
Dabei ist das Kroneckersymbol
[mm]\delta_{ij} = \begin{cases} 1 & \text{für $i=j$} \\ 0 & \text{für $i\not=j$} \end{cases}[/mm]
die Einheitsmatrix in Komponentenschreibweise.
Dann defininierst du eine Matrix Q mit
[mm]q_{ij} = \begin{cases} p_{ij} & \text{für $j>k$} \\ 0 & \text{für $j\leq k$} \end{cases}[/mm],
das heisst die ersten k Spalten von Q bestehen aus lauter Nullen, die restlichen Spalten von Q sind dieselben wie die von P.
Jetzt lautet deine Gleichung in Komponenten:
[mm]\summe_{j=1}^n \delta_{ij} u_j = 1 + \summe_{j=1}^n q_{ij}u_j[/mm],
oder in Matrizenschreibweise:
[mm]E\cdot u = e + Q\cdot u[/mm], oder [mm] (E-Q)\cdot u = e[/mm].
Das ist die gewünschte Form.
Grüße
Rainer
|
|
|
|
|
Hallo ,
Um den Rechenaufwand bei einer solchen Matrix mit Gaußalgo zu verringern solltest Du im Übrigen noch eine Abfrage haben ob eine Rechnung nach Dreiecksregel in jedem Schritt überhaupt notwendig ist oder ob sich da nichts ändert weil da eine 0 steht. Alternativ kannst Du Dir die ersten k-Schritte auch analytisch überlegen und nur ab k rechnen lassen.
viele grüße
matheamduenn
|
|
|
|