suivant: Le calcul intégral et
monter: Tridiagonalisation des matrices symétriques
précédent: Matrice de Householder annulant
Table des matières
Index
Le programme tridiaghouse(A) renvoie H,B tel que
normal(H*A*tran(H))=B (ou encore normal(tran(H)*B*H)=A)
avec H est le produit de matrice
de householder (tran(H)=inv(H)) et B est une matrice de hessenberg (ou
bien B est une matrice tridiagonale si tran(A)=A).
tridiaghouse(A):={
local n, a, H,Ha;
B:=A;
n:=size(A);
H:=idn(n);
for (l:=0;l<n-2;l++) {
a:=col(B,l);
Ha:=make_house(a,l+1);
B:=normal(Ha*B*Ha);
H:=normal(Ha*H);
}
//normal(H*A*tran(H))=B et B de hessenberg
//(ou tridiagonale si tran(A)=A)
return(H,B);
};
On tape :
A:=[[3,2,2,2,2],[2,1,2,-1,-1],[2,2,1,-1,1],
[2,-1,-1,3,1],[2,-1,1,1,2]]
H,B:tridiaghouse(A)
On obtient :
[[1,0,0,0,0],[0,1/-2,1/-2,1/-2,1/-2],[0,5*sqrt(11)/22,
(-(3*sqrt(11)))/22,sqrt(11)/22,(-(3*sqrt(11)))/22],
[0,0,22*sqrt(2)/44,0,(-(22*sqrt(2)))/44],[0,22*sqrt(22)/242,
22*sqrt(22)/484,(-(22*sqrt(22)))/121,22*sqrt(22)/484]],
[[3,-4,0,0,0],[-4,9/4,sqrt(11)/4,0,0],[0,sqrt(11)/4,3/4,
44*sqrt(22)/121,0],[0,0,44*sqrt(22)/121,1/2,286*sqrt(11)/484],
[0,0,0,286*sqrt(11)/484,7/2]]
On vérifie et on tape :
normal(H*A*tran(H))
On tape :
A:=[[1,2,3],[2,3,4],[3,4,5]]
H,B:=tridiaghouse(A)
On obtient :
[[1,0,0],[0,(-(2*sqrt(13)))/13,(-(3*sqrt(13)))/13],
[0,(-(3*sqrt(13)))/13,(2*sqrt(13))/13]],
[[1,-(sqrt(13)),0],[-(sqrt(13)),105/13,8/13],[0,8/13,(-1)/13]]
On vérifie et on tape :
normal(H*A*tran(H))
Documentation de giac écrite par Renée De Graeve