suivant: Réduction de Householder
monter: Tridiagonalisation des matrices symétriques
précédent: Matrice de Householder associée
Table des matières
Index
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);
};
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