Za formiranje Householderove matrice
potrebno je
računskih operacija. Za množenje nekog vektora
Householderovom matricom također je potrebno
računskih operacija.
No, umnožak
može se izračunati bez formiranja
matrice
:
Za računanje produkta
Koristeći prethodna poboljšanja možemo napisati funkcije za
računanje QR rastava.
Prva funkcija računa vektor
iz zadanog
vektora
prema formuli (6.4) i napomeni 6.3:
function v=House(x) % računa Householderov vektor v iz vektora x sig=sign(x(1)); if sig==0, sig=1; end v=x v(1)=v(1)+sig*norm(v) endSlijedeća funkcija računa umnožak
function B=mnoziHouse(v,A) % računa produkt HA=(I-2*v*v'/(v'*v))*A % bez formiranja matrice H beta=-2/(v'*v) w=beta*A'*v B=A+v*w' endKonačno, sljedeća funkcija računa QR rastav matrice
function [Q,R]=mojQR(A) % QR rastav A=Q*R. A je m x n i mora biti rank(A)=n. [m,n]=size(A) Q=eye(m) for i=1:min(m-1,n) v=House(A(i:m,i)) A(i:m,i:n)=mnoziHouse(v, A(i:m,i:n)) Q(i:m,:)=mnoziHouse(v, Q(i:m,:)) end R=A Q=Q' end
[Q,R]=qr(A)
.
Octave On-line[Octave On-line Home] [Octave User's Guide] |