function [R,err,lambda_n] = explQR_shift(A,m) % explicit QR-algorithm with Rayleigh shift % Input: A - matrix % m - number of iterations % Output: R - upper triangular matrix % err - velikosti prvku A(n,n-1) % lambda_n - aproximace nejmensiho vl.c. n = size(A,1); err = [abs(A(n,n-1))]; TOL=1e-10; lambda_n = A(n,n); % Reyl. shift for i=1:1, % inicial iterations without shift [Q,R] = qr(A); A = R*Q; err = [err,abs(A(n,n-1))]; lambda_n = [lambda_n, A(n,n)]; end while ((i < m) && (err(i+1) > TOL)) % stopping criterium i=i+1; [Q,R] = qr(A - lambda_n(i)*eye(n)); A = R*Q + lambda_n(i)*eye(n); err = [err,abs(A(n,n-1))]; lambda_n = [lambda_n, A(n,n)]; end if (n > 2) % recursive dimensional reduction [A(1:n-1,1:n-1),err_sub,lambda_sub] = explQR_shift(A(1:n-1,1:n-1),m); err = [err,err_sub]; lambda_n = [lambda_n, lambda_sub]; end R=A;