DMUG-Archiv 2003

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Problemen mit der Invertierung einer 10 mal 10 Matrix

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.

luca wrote:

Hallo!

Ich kann nicht die beiden  unteren Matrizen  mit Mathematica 4.1.2
(Lynux, SUSE 8.0) invertieren. (No memory available. Mathematica kernel
has shut down.) Ob es um  Mathematica oder  um den Computer Leistungen
geht, weiß ich nicht. Kann jemand antworten?

Grüße!
Ioana

stress = {{2*(1 - alpha15)*(eta1^3/9 - (2*eta1*eta2)/3 + eta3) - ...

heatflux = {{eta9*gamma10 + eta10*gamma11 + eta11*gamma13 + eta12*gamma14 - ...



Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html