Matlab Matrix lösen < Mathe-Software < Mathe < Vorhilfe
|
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hiho,
ich möchte eine größere erweiterte Koeffizienten-Matrix mit Matlab lösen - habe damit aber noch nie gearbeitet und taste mich noch langsam mit der Matlab-Hilfe voran.
Das Lösen mit bekannten Werten funktionierte schon einmal. Z.B.:
a11=1
a12=2
a21=3
a22=4
x=1
y=2
[mm] A=\vmat{ a11 & a12 \\ a21 & 22 }
[/mm]
[mm] r=\vektor{x \\ y}
[/mm]
X=A \ r [mm] =\vektor{0 \\ 0,5}
[/mm]
Auch nach dem multiplizieren von a11 und a21 mit den Unbekannten x1 und x2 hat Matlab erfreulicherweise eine symbolische Lösung gelierfert.
[mm] =>X=\vektor{\bruch{-(2*(x2 - 1))}{(2*x1 - 3*x2)}
\\ \bruch{(2*x1 - 3)}{(2*(2*x1 - 3*x2)}}
[/mm]
Seit ich dies jedoch mit einer 34x34 Matrix -und 23 Unbekannten- probierte, hat Matlab nichts mehr ausgegeben. In der Ecke steht "busy" und ich vermute auch, dass noch gerechnet wird aber das dauert bereits länger als 24 Stunden an.
Ich traue mich nicht das Programm einfach zu beenden, da ich noch immer auf ein Ergebnis hoffe.
Sollte ich nun doch abbrechen und neustarten oder gibt es eine elegantere Möglichkeit die Matrix zu lösen?
Dateianhänge: Anhang Nr. 1 (Typ: txt) [nicht öffentlich]
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:08 Fr 29.05.2015 | Autor: | Marcel |
Hallo,
> Ich habe diese Frage in keinem Forum auf anderen
> Internetseiten gestellt.
>
> Hiho,
>
> ich möchte eine größere erweiterte Koeffizienten-Matrix
> mit Matlab lösen - habe damit aber noch nie gearbeitet und
> taste mich noch langsam mit der Matlab-Hilfe voran.
>
> Das Lösen mit bekannten Werten funktionierte schon einmal.
> Z.B.:
>
> a11=1
> a12=2
> a21=3
> a22=4
> x=1
> y=2
> [mm]A=\vmat{ a11 & a12 \\ a21 & 22 }[/mm]
schreibe [mm] [nomm]$\pmat$[/nomm] [/mm] anstatt vmat - das erinnert sonst zu stark
an die Determinante von A.
Es ist also
[mm] $A=\pmat{ a11 & a12 \\ a21 & 22 }$
[/mm]
> [mm]r=\vektor{x \\ y}[/mm]
>
> X=A \ r [mm]=\vektor{0 \\ 0,5}[/mm]
>
> Auch nach dem multiplizieren von a11 und a21 mit den
> Unbekannten x1 und x2 hat Matlab erfreulicherweise eine
> symbolische Lösung gelierfert.
Wie hast Du das gemacht?
> [mm]=>X=\vektor{\bruch{-(2*(x2 - 1))}{(2*x1 - 3*x2)}
\\ \bruch{(2*x1 - 3)}{(2*(2*x1 - 3*x2)}}[/mm]
>
> Seit ich dies jedoch mit einer 34x34 Matrix -und 23
> Unbekannten- probierte, hat Matlab nichts mehr ausgegeben.
Wird da nun symbolisch gerechnet oder mit konkreten Werten?
Was Dir klar sein sollte: Oben ist A \ r nichts anderes wie
inv(A)*r
bzw. A^(-1)*r (Matlab-Syntax).
Interessant dabei ist natürlich:
det(A)
liefert den Wert -2, so dass A wegen [mm] $\det(A) \neq [/mm] 0$ überhaupt invertierbar ist!
> In der Ecke steht "busy" und ich vermute auch, dass noch
> gerechnet wird aber das dauert bereits länger als 24
> Stunden an.
>
> Ich traue mich nicht das Programm einfach zu beenden, da
> ich noch immer auf ein Ergebnis hoffe.
Ich glaube nicht, dass da noch was kommen wird.
> Sollte ich nun doch abbrechen und neustarten oder gibt es
> eine elegantere Möglichkeit die Matrix zu lösen?
Du kannst auch alternativ mal Octave (Syntax ist der von Matlab sehr ähnlich
bzw. oft sogar identisch), Scilab oder R mal benutzen. Allerdings weiß ich
bei allen Programmen nicht, wie man symbolisch rechnen läßt.
Bei Matlab gibt es da ein Paket, was man wohl gegen Bezahlung nachladen
kann oder das ggf. in einer entsprechenden Version schon zur Verfügung
steht.
Ist der Code *Geheimsache*, oder kannst Du die Datei einfach mal
hochladen? Ich kann gerne mal reinschauen; allerdings gerade bei
symbolischer Rechnung kann ich nichts wirklich machen - vielleicht
dafür aber jemand anderes.
Edit: Gerade gesehen, dass Du ja 'ne Textdatei angehängt hast!
Oder kannst Du ggf. den Code so verifizieren, dass wir ein Minimalbeispiel
sehen (meinetwegen 8 x 8 Matrix mit 5 Unbekannten).
Das einzige, was mit auf die Schnelle einfällt: Anstatt inv(A) kann man
manchmal die Pseudoinverse pinv(A) gebrauchen.
Da müßte ich jetzt aber selbst nochmal in der linearen Algebra
nachschlagen. Da ich/wir aber Dein konkretes Problem nicht kenne/n,
warte ich lieber mal auf eine Rückmeldung Deinerseits.
Gruß,
Marcel
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 01:34 Fr 29.05.2015 | Autor: | Marcel |
Hallo,
> Ich habe diese Frage in keinem Forum auf anderen
> Internetseiten gestellt.
>
> Hiho,
>
> ich möchte eine größere erweiterte Koeffizienten-Matrix
> mit Matlab lösen - habe damit aber noch nie gearbeitet und
> taste mich noch langsam mit der Matlab-Hilfe voran.
>
> Das Lösen mit bekannten Werten funktionierte schon einmal.
> Z.B.:
>
> a11=1
> a12=2
> a21=3
> a22=4
> x=1
> y=2
> [mm]A=\vmat{ a11 & a12 \\ a21 & 22 }[/mm]
> [mm]r=\vektor{x \\ y}[/mm]
>
> X=A \ r [mm]=\vektor{0 \\ 0,5}[/mm]
>
> Auch nach dem multiplizieren von a11 und a21 mit den
> Unbekannten x1 und x2 hat Matlab erfreulicherweise eine
> symbolische Lösung gelierfert.
>
> [mm]=>X=\vektor{\bruch{-(2*(x2 - 1))}{(2*x1 - 3*x2)}
\\ \bruch{(2*x1 - 3)}{(2*(2*x1 - 3*x2)}}[/mm]
>
> Seit ich dies jedoch mit einer 34x34 Matrix -und 23
> Unbekannten- probierte, hat Matlab nichts mehr ausgegeben.
> In der Ecke steht "busy" und ich vermute auch, dass noch
> gerechnet wird aber das dauert bereits länger als 24
> Stunden an.
>
> Ich traue mich nicht das Programm einfach zu beenden, da
> ich noch immer auf ein Ergebnis hoffe.
>
> Sollte ich nun doch abbrechen und neustarten oder gibt es
> eine elegantere Möglichkeit die Matrix zu lösen?
so, ich konnte das jetzt doch mal testen. Ich würde aber empfehlen, dass
Du Dir mal Gedanken dazu machst, was Du da machst und ob das
überhaupt sinnvoll ist?
Ich habe Dir einfach mal eine *Testschleife* an Deine Datei angehängt. Bei
mir merkt man relativ schnell (k=6, glaube ich), dass Matlab irgendwann
nichts mehr mit der Aufgabe anzufangen weiß...
Test.m
Gruß,
Marcel
Dateianhänge: Anhang Nr. 1 (Typ: m) [nicht öffentlich]
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:32 Fr 29.05.2015 | Autor: | Clemens94 |
Hallo Marcel,
vielen Dank für Deine Unterstützung.
> was Dir klar sein sollte: Oben ist A \ r nichts anderes
> wie
>
> inv(A)*r
>
> bzw. A^(-1)*r (Matlab-Syntax).
>
> Interessant dabei ist natürlich:
>
> det(A)
>
> liefert den Wert -2, so dass A wegen $ [mm] \det(A) \neq [/mm] 0 $ > überhaupt invertierbar ist!
Ich hatte die Matrix anfänglich noch ohne die Unbekannten x1..x23 aufgebaut und konnte sie mit Matlab schnell lösen. Mit den Unbekannten hatte ich mir ähnliche Erfolge erhofft.
> Ich glaube nicht, dass da noch was kommen wird.
Da hast du leider Recht behalten.(
> Du kannst auch alternativ mal Octave (Syntax ist der von > Matlab sehr ähnlich
> bzw. oft sogar identisch), ..
Ich wollte es schon einmal mit Octave probieren aber das soll für symbolische Berechnungen ungeeignet sein. In diesem Fall möchte ich mich auf Malab fokussieren.
> Oder kannst Du ggf. den Code so verifizieren, dass wir
> ein Minimalbeispiel sehen (meinetwegen 8 x 8 Matrix mit > Unbekannten).
Programmieren oder einen Code erstellen kann ich zwar nicht aber hier zumindest noch ein kleines Beispiel.
A = [x1, 2*x2, 3*x3; 3*x4, 4*x5, 5; 2, 5*x2, 1];
r=[2 3 4]';
X=A \ r
X =
-(16*x2 - 8*x5 - 45*x2*x3 + 48*x3*x5)/(20*x2 - 25*x1*x2 + 4*x1*x5 - 6*x2*x4 - 24*x3*x5 + 45*x2*x3*x4)
-(17*x1 + 18*x3 + 6*x4 - 36*x3*x4 - 20)/(20*x2 - 25*x1*x2 + 4*x1*x5 - 6*x2*x4 - 24*x3*x5 + 45*x2*x3*x4)
(12*x2 - 16*x5 - 15*x1*x2 + 16*x1*x5 + 6*x2*x4)/(20*x2 - 25*x1*x2 + 4*x1*x5 - 6*x2*x4 - 24*x3*x5 + 45*x2*x3*x4)
> Anstatt inv(A) kann man
> manchmal die Pseudoinverse pinv(A) gebrauchen.
War mir bisher völlig unbekannt und sieht mir noch viel komplizierter aus.
> Da ich/wir aber Dein konkretes Problem nicht kenne/n,
> warte ich lieber mal auf eine Rückmeldung Deinerseits.
Es handelt es sich um eine Gesamtsteifigkeitsmatrix für ein symmetrisches Fachwerk. Die Unbekannten x1...x23 sind jeweils ein Querschnitt für zwei achsensymmetrische Stäbe (+ ein Stab in der Mitte).
Ich wollte somit aus der Matrix für jede Knotenverschiebung eine allgemeine Gleichung erhalten, die von jedem Querschnitt abhängig ist. Das wäre dann in die Restriktionen einer Gewichtsoptimierung eingeflossen.
> so, ich konnte das jetzt doch mal testen. Ich würde aber > empfehlen, dass
> Du Dir mal Gedanken dazu machst, was Du da machst und ob > das überhaupt sinnvoll ist?
> Ich habe Dir einfach mal eine *Testschleife* an Deine
> Datei angehängt.
>
> Bei mir merkt man relativ schnell (k=6, glaube ich),
> dass Matlab irgendwann
> nichts mehr mit der Aufgabe anzufangen weiß...
Es ist wohl eine Sackgasse. Die Testschleife blieb nach k=4 stehen. Beim Bilden der Inversen brach das Programm sogar wegen Speichermangel ab ..
Da das Fachwerk symmetrisch ist, versuche ich jetzt die Matrix weiter zu reduzieren.
Danke nochmal für die Hilfe.
MfG
Clemens
|
|
|
|