Die Quadratwurzel einer allgemein positiven definitiven Matrix erhalten

  • Ich habe eine Matrix, von der ich weiß, dass sie positiv ist. Die Einträge der Matrix sind möglicherweise kompliziert, aber alle sind echt. Um einen Ausdruck für die Quadratwurzel dieser Matrix zu finden (dh SS = A) versuche ich:

     Ftemp = {{F11, F12, F13, 0, 0}, 
             {F12, F22, 0, 0, 0}, 
             {F13, 0, F33, 0,F35}, 
             {0, 0, 0, F44, F45}, 
             {0, 0, F35, F45, F55}}
     

    Alle Elemente in der Matrix sind echt. Wir wissen, dass es für diese Matrix eine positive Quadratwurzel gibt, die jedoch analytisch fürchterlich ist. Was ich jedoch gerne wissen möchte, ist, welche Einträge in der resultierenden Lösung von Null verschieden sind (und somit welche Einträge Null sein werden).

    09 February 2012
    Mr.Wizard
1 answer
  • Sind alle Fs echt? Wenn ja, versuchen Sie Folgendes:

     Assuming[{F11, F12, F13, F21, F22, F24, F33, F35, F44, F45, F53, F54, 
       F55} \[Element] Reals, MatrixPower[Ftemp, 1/2]]
     

    Sie erhalten eine Antwort, die aber hässlich ist. .

    Sie können Position verwenden, um auf null Elemente wie folgt zu prüfen (in diesem Fall wende ich sie auf Ihre ursprüngliche Matrix an, um zu zeigen, dass sie funktioniert):

     Position[Ftemp,x_/;PossibleZeroQ[x]]
    {{1, 4}, {1, 5}, {2, 3}, {2, 4}, {2, 5}, {3, 2}, {3, 4}, {4, 1}, {4, 
      2}, {4, 3}, {5, 1}, {5, 2}}
     

    Also für die Matrix, die Sie interessiert:

     FtempInv = Assuming[{F11, F12, F13, F21, F22, F24, F33, F35, F44, F45, F53, 
         F54, F55} \[Element] Reals, MatrixPower[Ftemp, 1/2]];
    Position[FtempInv,x_/;PossibleZeroQ[x]]
     

    Unglücklicherweise verbringt MMA viel Zeit damit, nachzudenken, und ich habe noch keine Antwort zu sehen. Hier kann es einen besseren Test geben als PossibleZeroQ; Wenn ja, bin ich sicher, dass jemand anderes eine vorschlagen wird.

    Es stellt sich heraus, dass PossibleZeroQ Listable ist, also können Sie dies einfach tun

     PossibleZeroQ[FtempInv]
     

    Das löst aber nicht das Geschwindigkeitsproblem ...

    Ich lasse PossibleZeroQ [FtempInv] renne für eine Weile. Folgendes habe ich:

    {{Falsch, Falsch, Falsch, Falsch, Falsch}, {Falsch, Falsch, Falsch, Falsch, Falsch}, {Falsch, Falsch Falsch, Falsch, Falsch}, {Falsch, Falsch, Falsch, Falsch, Falsch}, {Falsch, Falsch, Falsch, Falsch, Falsch}}

    09 February 2012
    denny