next up previous contents index
suivant: Réduction de Householder monter: Tridiagonalisation des matrices symétriques précédent: Matrice de Householder associée   Table des matières   Index

Matrice de Householder annulant les dernières composantes de a

Soit H(v) la matrice de Householder associée à v.
Etant donné un vecteur a non nul, il existe deux vecteurs v tels que le vecteur b = H(v)*tran(a) a ses n - 1 dernières composantes nulles (H(v) étant la matrice de Householder associé à v).
Plus précisement, si e0 = [1, 0,..0], les vecteurs v sont :
v1 = a + norm(a)*e0 et v2 = a - norm(a)*e0.
Plus généralement, il existe deux vecteurs v tels que le vecteur b = H(v)*tran(a) a ses composantes à partir de la (l + 1)-ième nulles .
Plus précisement, si el = [0,..0, 1, 0,..0] et si al = [0,..., 0, a[l],.., a[n - 1]], les vecteurs v sont :
v1 = al + norm(al)*el et v2 = al - norm(al)*el.
On 'ecrit le programme qui étant donné a et l renvoie si a est nul renvoie la matrice identité et si a est non nul renvoie la matrice de Householder associée à v = al + eps*norm(al)*el en choisisant eps égal au signe de al si al est réelle et eps = 1 sinon.
//renvoie une matrice hh= H tel que b:=H*tran(a) 
//a ses n-l-1 dernieres comp=0 
//ou encore b[l+1]=...b[n-1]=0
make_house(a,l):={
  local n,na,el,v;
  n:=size(a);
  for (k:=0;k<l;k++) a[k]:=0;
  na:=normal(norm(a)^2);
  na:=sqrt(na);
  if (na==0) return idn(n);
  el:=makelist(0,1,n);
  el[l]:=1;
  if (im(a[l])==0 and a[l]<0) v:=normal(a-na*el); 
    else v:=normal(a+na*el);
  return householder(v);
};

next up previous contents index
suivant: Réduction de Householder monter: Tridiagonalisation des matrices symétriques précédent: Matrice de Householder associée   Table des matières   Index
Documentation de giac écrite par Renée De Graeve