La versione più recente è stata modificata il 2006-02-19 16:14:02 da Bruno82
Aggiunzioni:
OUTPUT: la matrice diagonale equivalente ad A.
DiagInt[A_]:=Block[{i,j,k,Mat=A,L},
L=Priorità[Mat];i=L[[1]];j=L[[2]];
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[ 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]] ] ] ]]];Mat]
Omissioni:
OUTPUT: la matrice diagonale equivalente ad A.
DiagInt[A_]:=Block[{i,j,k,Mat=A,L},
L=Priorità[Mat];i=L[[1]];j=L[[2]];
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[ 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]] ] ] ]]];Mat]
Modificato il 2006-02-19 16:06:10 da SoNiC
Aggiunzioni:
DiagInt[T]
Omissioni:
DiagInt[T]
Modificato il 2006-02-19 16:05:55 da SoNiC
Aggiunzioni:
L'algoritmo DiagInt determina una matrice diagonale equivalente alla matrice ad elementi interi A.
DiagInt[A_]:=Block[{i,j,k,Mat=A,L},
Omissioni:
L'algoritmo DiagInt determina una matrice diagonale equivalente alla matrice ad elementi interi A.
DiagInt[A_]:=Block[{i,j,k,Mat=A,L},
La versione più vecchia di questa pagina è stata modificata il 2006-02-19 16:05:40 da SoNiC []
Vista della pagina:
Diagonalizzazione di una matrice a valori interi
L'algoritmo
DiagInt determina una matrice diagonale equivalente alla matrice ad elementi interi A.
INPUT: la matrice ad elementi interi A da diagonalizzare.
OUTPUT: la matrice diagonale equivalente ad A.
DiagInt[A_]:=Block[{i,j,k,Mat=A,L},
While[Priorità[Mat]=!={},
L=Priorità[Mat];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]] ] ] ]]];Mat]
Esempio
DiagInt[T]
{{1,0,0,0,0},{0,1,0,0,0},{0,0,1,0,0}}
Torna all'elenco dei capitoli