function aufg00f03(n);

%AUFG00F03 vergleicht verschiedene Quantitaeten aus der Mathematik.
%
%   AUFG00F03(N) berechnet und plottet fuer Eingabeargumente N vom
%   Typ Integer
%
%     o die Eigenwerte der N x N Tridiagonalmatrix
%
%           T = tridiag(-1,2,-1)
%
%       gegen aequidistante Punkte auf 2-2*cos(x) auf [-1,1],
%
%     o N aequidistante Punkte auf einem skalierten, verschobenen
%       oberen Halbkreis gegen die selben Punkte wie oben,
%
%     o die Nullstellen des Nten Chebyshev-Polynoms gegen leicht
%       anders gewaehlte aequidistante Punkte auf 2-2*cos(x).
%
%   AUFG00F03 ist Loesung von Aufgabe 3 fuer das Aufgabenblatt 0
%   der Vorlesung 'Numerische Verfahren' von Prof. Voss. Die
%   Funktion arbeitet unter Matlab.
%
%   SEE ALSO: aufg00f01, aufg00f02

%   $Author: zemke $
%   $Revision: 1.1 $
%   $Date: 2003/04/22 15:34:24 $

%% compute xa and xb
xa = 2-2*cos(linspace(0,pi,n+2));
xb = 2-2*cos(pi*(2*(0:n-1)+1)/(2*n));

%% compute eigenvalues of tridiagonal matrix
T = 2*diag(ones(n,1))-diag(ones(n-1,1),1)-diag(ones(n-1,1),-1);
xeigT = sort(eig(T));

%% construct upper half-circle
z = exp(i*linspace(0,pi,n+2));
%% scale + shift
z = 2-2*z;
%% compute real part
xcirc = real(z);

%%% compute zeros of Chebyshev-polynomial
%% initialise
coeffCnmo = [0 1];
coeffCn   = [1 0];
linfacx   = [1 0];

for k = 1:n-1
   %% new coefficient vector (3-term recurrence)
   coeffCnpo = 2*conv(linfacx,coeffCn)-[0,coeffCnmo];
   %% renumber
   coeffCnmo = [0,coeffCn];
   coeffCn   =  coeffCnpo;
end

%% due to ill-conditioning roots may be complex
xroots = sort(real(2-2*roots(coeffCn)));

plot(xa(2:n+1),xeigT,'go',...
     xa,xcirc,'r+',...
     xb,xroots,'bs');
