LGS mit b=0 lösen < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Hi,
ich will ein Gleichungssystem lösen, das auf ein Gleichgewicht führen soll. Die Gleichung sieht also folgendermaßen aus.
x=x*P, oder x*(E-P)=0.
Das Problem, wenn ich es mit Matlab lösen will ist, dass ich nur die triviale Lösung x=0 erhalte.
Ich gehe folgendermaßen vor, lese die Matrix P aus einer Textdatei ein (ist korrekt, und sie ist auf jeden Fall lösbar!!!).
E=eye(n), mit n als Dimension der Matrix P
b=zeros(1,n)
x=b/(E-P)
Wo steckt der Fehler?
Viele Grüße und danke schon mal
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:19 Mo 23.07.2007 | Autor: | dormant |
Hi!
Wenn man die Dokumentation von Matlab durchliest, dann sieht man, dass
b/(E-P) "ungefähr das Gleiche wie" b*inv(E-P) ist.
Falls da eine nicht-triviale Lösung existier, dann ist E-P singulär (das kannst du leicht überprüfen: wenn det(E-P)=0, dann ist sie singulär, sonst gibt es keine andere Lösung).
Sonst kannst du null((E-P)') benutzen, was eine Basis des Lösungsraums ausspuckt. Jede Linearkombination von diesen Vektoren ist eine Lösung von xA=0.
Gruß,
dormant
|
|
|
|
|
Hi,
die Determinante ist zwar [mm] 10*e^{-15}, [/mm] aber sie ist ganz sicher eine Matrix die man mittels Gaußalgorithmus eindeutig lösen kann.
Für eine kleinere Matrix habe ich auch die Lösung, die eingesetzt das gewünschte Ergebnis liefert.
wenn ich nun allerdings...
null((E-P)') eingebe, erhalte ich Empty Matrix: 6 by 0. Was macht dieser Befehl denn genau?
Ich habe es auch mit der Matrix [mm] M=\pmat{ 1 & 1 \\ 1 & 2 } [/mm] getestet, mit dem selben Fehler (2 by 0 stattdessen).
Wenn ich eine Basis des Lösungraums erhalten würde, wäre es schon perfekt. Die müsste ich dann lediglich noch auf die Summe 1 normieren, da es sich um eine stochastische Matrix handelt.
Viele Grüße und danke schon mal
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 01:57 Di 24.07.2007 | Autor: | dormant |
Hi!
> Hi,
>
> die Determinante ist zwar [mm]10*e^{-15},[/mm] aber sie ist ganz
> sicher eine Matrix die man mittels Gaußalgorithmus
> eindeutig lösen kann.
Also 10e-15 (was eigentlich [mm] 10^{-15} [/mm] bedeutet) ist eigentlich so gut wie Null. Was heißen würde, dass deine Matrix so gut wie singulär ist. Und schlecht konditioniert, weshalb wahrscheinlich kein brauchbares Ergebnis rauskommt...
> Für eine kleinere Matrix habe ich auch die Lösung, die
> eingesetzt das gewünschte Ergebnis liefert.
>
> wenn ich nun allerdings...
> null((E-P)') eingebe, erhalte ich Empty Matrix: 6 by 0.
Das bedeutet, dass die Funktion null der Meinung ist, dass deine Matrix nicht singulär ist, was eigentlich auch der Fall ist.
> Was macht dieser Befehl denn genau?
Der gibt an die Basisvektoren des Lösungsraums von Ax=0. Es kann sein, dass null vorab prüft, ob det(A)=0. Wenn nicht, dann spart er sich die Arbeit. Weiß ich nicht genau.
> Ich habe es auch mit der Matrix [mm]M=\pmat{ 1 & 1 \\ 1 & 2 }[/mm]
> getestet, mit dem selben Fehler (2 by 0 stattdessen).
Hättest du da eine bessere Lösung zu bieten? [mm] \det(M)\not=0, [/mm] da gibt es nur die triviale Lösung. Du kriegst eine nichttriviale Lösung, nur wenn die Spalten linear abhängig sind, wie in [mm] M=\pmat{ -1 & -2 \\ 1 & 2 }, [/mm] da ist die Lösung von Mx=0 [mm] x=\vektor{-2 \\ 1}, [/mm] oder eher alle Vielfachen davon. Ich schätze mal du steckst in dem Fall, dass deine Matrix so aussieht: [mm] M=\pmat{ -1.0000001 & -2 \\ 1 & 2 }. [/mm] Da musst du schauen wie man die Kondition verbassern kann.
> Wenn ich eine Basis des Lösungraums erhalten würde, wäre es
> schon perfekt. Die müsste ich dann lediglich noch auf die
> Summe 1 normieren, da es sich um eine stochastische Matrix
> handelt.
Schau dir doch mal das hier an.
Gruß,
dormant
|
|
|
|
|
Hi,
okay da hatte ich was falsch verstanden. Die eigentliche Matrix M ist diagnoalisierbar, während P=E-M natürlich singulär sein muss. Ansonsten würde ich keine von Null verschiedene Lösung erhalten.
Ich habe es nun folgendermaßen geschafft. Ich ließ M einlesen, habe E erstellt und die Matrix P=E-M berechnen lassen.
Dann folgendermaßen:
P1=P', da ich die Gleichung x*P=x lösen muss.
[L,U]=lu(P1)
In der Matrix U habe ich dann den Wert der letzten Zeile und letzten Spalte auf Null gesetzt (er war bei [mm] e^{-9}, [/mm] und in den Zeilen darüber waren ohnehin Einträge in der letzten Spalte).
Dann konnte ich wirklich mit
x=null(L*U) den benötigten Vektor berechnen. Diesen musste ich noch noch auf die Vektorsumme 1 normieren, und zu einem Spaltenvektor transponieren.
Und dann war x*M=x!!
Tausend Dank, das hilft mir unglaublich viel weiter.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:21 Di 24.07.2007 | Autor: | BertanARG |
sorry,
das sollte eine Mitteilung werden und keine neue Frage. Kann sie bitte jemand als beantwortet markieren.
|
|
|
|
|
Hi,
ich habe noch mal ein Problem zu diesem Thema. Bis auf einen Fall konnte ich nun für alle meine Modelle eine Lösung bestimmen.
Dieser eine bereitet mir jedoch Kopfzerbrechen.
Meine Ausgangsmatrix ließ ich mittels LU-Zerlegung in die Matrizen L und U zerlegen.
In der U-Matrix war der Wert U(2380,2380) sehr klein, aber nicht gleich Null (vermutlich Rundungsfehler).
Nach manuellen Setzen auf Null konnte ich die Lösungen bestimmen.
In dem einen Fall erhalte ich dennoch am Ende die Fehlermeldung "empty matrix: 2380-by-Null. Unterhalb der Diagonalen besitzt meine U-Matrix aber ganz sicher ausschließlich Nullen.
Was kann denn noch die Ursache dafür sein? Welche Eigenschaft muss denn die L-Matrix erfüllen, damit eine Lösung existiert?
Grüße und danke schon mal
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 05:44 So 12.08.2007 | Autor: | matux |
$MATUXTEXT(ueberfaellige_frage)
|
|
|
|