next up previous contents index
suivant: Le calcul intégral et monter: Tridiagonalisation des matrices symétriques précédent: Matrice de Householder annulant   Table des matières   Index

Réduction de Householder

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