Hallo zusammen,
den beschriebenen Weg von Udo finde ich absolut gangbar, dieser Weg ist
sicher schneller, als die Brute Force Inverse von Mma, aber auch hier
wird Mma seine Gefahren haben... aus eigener Erfahrung, Mma hat bisher
jedes von mir gestellte Gleichungssystem geknackt, aber (!!!) die
saloppe Benutzung von Simplify/FullSimplify nach der Solve Anweisung
für eine anschließende Vereinfachung ließ Mma ins Nirvana rechnen...
erst die Entnahme einzelner Komponenten und anschließender FullSimplify
Anweisung hat Mma Stück für Stück zur Lösung laufen lassen... Mein Rat
also hier, Gleichungssystem ohne Simplify/FullSimplify lösen lassen,
dann Komponentenweise vereinfachen... mal in Zahlen, Abbruch nach 15
Stunden bei Simplify nach Solve OHNE Ergebnis, Berechnung Simplify
komponentenweise nach 4 Stunden MIT Ergebnis.
Viel Erfolg
Winfried
On 20.12.2003, at 12:48, Udo und Susanne Krause wrote:
Guten Morgen Ioana,
Sie koennen die beiden unteren Matrizen mit Mma 4.2 und 512 MB
Hauptspeicher invertieren. Ihr eigener brute force trial und die
Abschaetzungen der Kollegen haben ergeben, dass man nicht den Befehl
Inverse[] verwenden sollte. Wie dann?
Die Definition der inversen Matrix m . Inverse[m] ==
IdentityMatrix[Length[m]] ist eine abgekuerzte Schreibweise fuer
Length[m] lineare Gleichungssysteme m . v_n =
IdentityMatrix[Length[m]][[n]]. Die inverse Matrix ist die Sammlung
dieser einzelnen Loesungsvektoren v_1, v_2, ..., v_n, ...,
v_Length[m]. Also machen wir doch das etwa fuer quadratische Matrizen:
In[77] := Remove[lucaInverseM];
(* no regularity checks on m done *)
lucaInverseM[m_?MatrixQ] :=
Module[{resM, rk = Length[m], o, v},
resM = {};
For[o = 1, o <= rk, o++,
v = LinearSolve[m, IdentityMatrix[rk][[o]]];
resM = Append[resM, v]
];
Transpose[resM]
] /; TensorRank[m] == 2 && Dimensions[m] ==
Dimensions[Transpose[m]]
Die Probe gibt
In[85] := Inverse[{{x, y,
z}, {z, x, y}, {y, z, x}}] == lucaInverseM[{{
x, y, z}, {z, x, y}, {y, z, x}}]
Out[85] = True
Somit ist die Aufgabe von der Berechnung des Inversen auf die Loesung
von 7 (heatflux) bzw. 10 (stress) linearen Glgsystemen reduziert.
Allerdings muss auch dafuer der Rechner wenigstens die Determinante
der zu invertierenden Matrix ausrechnen koennen. Das ist moeglich:
In[20] := LeafCount[Det[stress]]
Out[20] = 815748323
In[21] := LeafCount[Det[heatflux]]
Out[21] = 1816756
Und auch eine der linearen Gleichungen - etwa die dritte - wird
geloest:
In[82] := LeafCount[LinearSolve[stress,
IdentityMatrix[Length[stress]][[3]]]]
Out[82] = 1820265380
Wahrscheinlich bedeutet diese Unmenge von Ausdruecken das Ende des
Verstaendnisses. Rechnerisch koennen Sie es im Ernstfall so packen,
dass Sie die 7 bzw. 10 linearen Gleichungssystemen einzeln loesen und
den jeweiligen Loesungsvektor herausschreiben und dann die
Loesungsvektoren einlesen und die inverse Matrix daraus zusammensetzen
(vgl. lucaInverseM). Wenn es eine Aufgabe aus der Physik ist, lohnt
sich das Suchen nach Symmetrien in den Materialgesetzen, anstatt auf
den allgemeinsten, symmetriefreien Fall loszugehen.
Mit den besten Gruessen
Udo.