INFOPedia : MACAlgDiagPoli

HomePage :: Categorie :: Indice :: Ultime modifiche :: Ultimi commenti :: Login/Registrazione
La versione più recente è stata modificata il 2006-02-19 16:48:21 da SoNiC

Aggiunzioni:

Torna all'elenco dei capitoli




La versione più vecchia di questa pagina è stata modificata il 2006-02-19 16:47:41 da SoNiC []
Vista della pagina:

Diagonalizzazione di una matrice a valori polinomiali



La funzione Grado calcola il grado del polinomio f nell'indeterminata x.

Grado[f_,x_]:=Exponent[f,x]



L'algoritmo DiagPoli determina una matice diagonale equivalente alla matrice ad elementi polinomiali A.

INPUT: la matrice ad elementi polinomiali A da diagonalizzare.
OUTPUT: la matrice diagonale equivalente ad A.

DiagPoli[A_,x_]:=Block[{i,j,a,b,d,Mat=A,L},
    While[Priorità[Mat]=!={},
      L=Priorità[Mat];i=L[[1]];j=L[[2]];    
      If[i<j,
              If[  Mat[[i,j-1]]==0 ,
                             
          Mat[[All,j-1]]=Mat[[All,j-1]]+Mat[[All,j]]       
                   ];
       
              If[ Grado[Mat[[i,j-1]],x]==Grado[Mat[[i,j]],x],
                      If[ CC[Mat[[i,j-1]],x]==1,
                               
            Mat[[All,j]]=
              Expand[Mat[[All,j]]-CC[Mat[[i,j]],x]*Mat[[All,j-1]] ],       
                               
            Mat[[All,j-1]]=
              Expand[Mat[[All,j-1]]+(1-CC[Mat[[i,j-1]],x])/CC[Mat[[i,j]],x]*
                    Mat[[All,j]]] 
                     ],       
                      a=CC[Mat[[i,j-1]],x]; b= CC[Mat[[i,j]],x];
                                 
          d=Abs[Grado[Mat[[i,j-1]],x]-Grado[Mat[[i,j]],x]];
                         If[Grado[Mat[[i,j-1]],x]< Grado[Mat[[i,j]],x] ,
                         If[Mat[[i,j]]-(b/a*x^d)*Mat[[i,j-1]]=!=0,
                               
              Mat[[All,j]]=Expand[Mat[[All,j]]-(b/a*x^d)*Mat[[All,j-1]]] ,
                               
              Mat[[All,j]]=Expand[Mat[[All,j]]+(1-b/a*x^d)*Mat[[All,j-1]]] 
               ]   
              ]
                        If[Grado[Mat[[i,j-1]],x]> Grado[Mat[[i,j]],x] ,
                        If[Expand[Mat[[i,j-1]]-(a/b*x^d)*Mat[[i,j]]]=!=0,
                             
              Mat[[All,j-1]]=Expand[Mat[[All,j-1]]-(a/b*x^d)*Mat[[All,j]]],
                             
              Mat[[All,j-1]]=
                Expand[Mat[[All,j-1]]+(1-a/b*x^d)*Mat[[All,j]] ]   
               ]   
            ]
          ]
        ];
     
      If[i>j,
            If[  Mat[[i-1,j]]==0 ,
                           Mat[[i-1]]=Mat[[i-1]]+Mat[[i]] 
             ];
               
                  If[ Grado[Mat[[i-1,j]],x]==Grado[Mat[[i,j]],x],
                         If[ CC[Mat[[i-1,j]],x]==1,
                                     
            Mat[[i]]=Expand[Mat[[i]]-CC[Mat[[i,j]],x]*Mat[[i-1]] ],
                                 
            Mat[[i-1]]=
              Expand[Mat[[i-1]]+(1-CC[Mat[[i-1,j]],x])/CC[Mat[[i,j]],x]*
                    Mat[[i]]]   
             ]
                                       a=CC[Mat[[i-1,j]],x]
          b=CC[Mat[[i,j]],x];
                                           
          d=Abs[Grado[Mat[[i-1,j]],x]-Grado[Mat[[i,j]],x]];
                  If[Grado[Mat[[i-1,j]],x]< Grado[Mat[[i,j]],x] ,
                        If[Expand[Mat[[i,j]]-(b/a*x^d)*Mat[[i-1,j]]]=!=0,   
                               Mat[[i]]=Expand[Mat[[i]]-(b/a*x^d)*Mat[[i-1]]],
                                Mat[[i]]=Expand[Mat[[i]]+(1-b/a*x^d)*Mat[[i-1]]]   
              ]   
            ]
                         If[Grado[Mat[[i-1,j]],x]> Grado[Mat[[i,j]],x] ,
                        If[Expand[Mat[[i-1,j]]-(a/b*x^d)*Mat[[i,j]]]=!=0,
                                 Mat[[i-1]]=Expand[Mat[[i-1]]-(a/b*x^d)*Mat[[i]]],
                                 
              Mat[[i-1]]=Expand[Mat[[i-1]]+(1-a/b*x^d)*Mat[[i]]]   
               ]   
             ] 
           ]   
        ]   
      ] ;
    Mat]



Esempi:

B={{-1+x,0,0},{1,x,1}}

{{-1+x,0,0},{1,x,1}}

DiagTest[B]

False

DiagPoli[B,x]

{{1,0,0},{0,1-x,0}}


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