Diagonalizzazione forte di una matrice a valori polinomiali
L'algoritmo FFPoli deternina la posizione del primo elemento della lista di polinomi L che non è multiplo delprecedente.
INPUT: la lista L.
OUTPUT: l'indice del primo elemento della lista L che non è multiplo del precedente.
FFPoli[L_,x_]:=
For[t=2,t<=Length[L],t++,
If[MultPoliTest[{L[[t-1]],L[[t]]},x]===False,Return[t]]]
L'algoritmo GGPoli deternina la posizione del primo elemento della lista di polinomi L che non è monico.
INPUT: la lista L.
OUTPUT: l'indice del primo elemento della lista L che non è monico oppure 0 se tutti i polinomi della lista sono monici.
GGPoli[L_,x_]:=
Block[{t},
For[t=1,t<=Length[L],t++,If[L[[t]]=!=0&&CC[L[[t]],x]=!=1,Return[t]]];
Return[0]]
L'algoritmo DiagPoliForte determina la matrice in forma diagonale forte equivalente alla matrice ad elementi polinomiali A.
INPUT: la matrice A.
OUTPUT: la matrice fortemente diagonale equivalente a A. \
DiagPoliForte[A_,x_]:=Block[{Mat=Expand[A],k,L},
m=Length[A];n=Length[A[[1]]];mi=Min[m,n];
While[!DiagPoliForteTest[Mat,x],
Mat=Expand[DiagPoli[Mat,x]];
L=Table[Mat[[i,i]],{i,1,mi}];
If[!MultPoliTest[L,x],
k = FFPoli[L,x];
Mat[[k-1]]=Mat[[k-1]]+Mat[[k]],
k=GGPoli[L,x];
If[k!=0 && k<n,
Mat[[All,k+1]]=Mat[[All,k+1]]+Mat[[All,k]],
If[k!=0 && k<m,
Mat[[k+1]]=Mat[[k+1]]+Mat[[k]] ]]]];
Mat]
Torna all'elenco dei capitoli
Non ci sono commenti in questa pagina. [Scrivi commento]