INFOPedia : MACAlgMatMN

HomePage :: Categorie :: Indice :: Ultime modifiche :: Ultimi commenti :: Login/Registrazione

Diagonalizzazione di una matrice a blocchi



L'algoritmo MatMN calcola la matrice che si ottiene applicando alla matrice MatEst[A] la procedura che serve a diagonalizzare soltanto la matrice A.

MatMN[A_]:=Block[{i,j,k,l,B,Mat},
    m=Length[A];n=Length[A[[1]]];Mat=MatEst[A];B=A;
    While[Priorità[B]=!={},
      l=Priorità[B];i=l[[1]];j=l[[2]];
      If[i<j,
            If[  Mat[[i,j-1]]==Mat[[i,j]] ,
                          Mat[[All,j]]=Mat[[All,j]]-Mat[[All,j-1]] ,
                     If[ Xor[Mat[[i,j-1]]>0,Mat[[i,j]]>0],
                                  If[ Mat[[i,j]]>0,
                          Mat[[All,j-1]]=Mat[[All,j-1]]+Mat[[All,j]] ,
                          Mat[[All,j]]=Mat[[All,j]]+Mat[[All,j-1]]  ],
                          If[ Mat[[i,j-1]]< Mat[[i,j]],
                                  Mat[[All,j]]=Mat[[All,j]]-Mat[[All,j-1]] ,
                                 
              Mat[[All,j-1]]=Mat[[All,j-1]]-Mat[[All,j]]   ] ] ] ]   ;
      If[i>j,
            If[ Mat[[i-1,j]]==Mat[[i,j]],
                   Mat[[i]]=Mat[[i]]-Mat[[i-1]]  ,
                  If[ Xor[Mat[[i-1,j]]>0,Mat[[i,j]]>0],
                        If[ Mat[[i,j]]>0,
                              Mat[[i-1]]=Mat[[i-1]]+Mat[[i]],
                              Mat[[i]]=Mat[[i]]+Mat[[i-1]]],
                    If[  Mat[[i-1,j]]<Mat[[i,j]] ,
                              Mat[[i]]=Mat[[i]]-Mat[[i-1]] ,
                              Mat[[i-1]]=Mat[[i-1]]-Mat[[i]]  ] ] ]];
             B=Take[Mat,{1,m},{1,n}]  ];Mat]




Esempio

MatMN[T]

{{1,0,0,0,0,1,0,0},{0,1,0,0,0,-1,7,1},{0,0,1,0,0,-657,4577,654},{1,-1,1,-5,0,
0,0,0},{-2,12,132,-661,2,0,0,0},{-4,645,-136,676,-2,0,0,0},{4,-1365,
66,-320,1,0,0,0},{4,-915,1,2,0,0,0,0}}


Torna all'elenco dei capitoli

Non ci sono commenti in questa pagina. [Scrivi commento]

Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by Wikka Wakka Wiki 1.1.6.1
La pagina è stata generata in 0.0901 secondi