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 Hv la matrice de Householder associée à v.
Etant donné un vecteur a non nul, il existe deux vecteurs v tels que le vecteur b=Hv*tran(a) a ses n - 1 dernières composantes nulles (Hv étant la matrice de Householder associé à v).
Plus précisement, si e0=[1,0,..0],e1=[0,1,0,..0] etc..., 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=Hv*tran(a) a ses composantes à partir de la (l+1)-ième nulles.
Plus précisement, si el=[0,..0,1,0,..0] (ou toutes les composantes sont nulles sauf el[l]=1), 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