Chebyshev polynomials Tn(x), n = 0, 1, ... of the first kind are of great importance in numerical analysis. They are defined recursively as follows
n = 2, 3, ..., T0(x) = 1, T1(x) = x.
Ex.
function Coeff = ChebT( I )
I = I + 1;
if I == 1
Coeff = [1];
elseif I == 2
Coeff = [0 1];
else
T = zeros( I );
T( 1 , : ) = [1 zeros( 1, I - 1 )];
T( 2 , : ) = [0 1 zeros( 1, I - 2 )];
for J = 3 : I
T( J , : ) = 2 .* [ 0, T( J - 1, 1 : I - 1 ) ] - T( J - 2, : );
end
Coeff = T( I , : );
end
function Coeff = ChebT( I )
% 걍 함수정의 입니다.
I = I + 1;
% 행렬의 첫번째 행이 0부터 시작하지 않아서 임의로 추가해놨습니다. T0 = 1 인데 Tn이랑 넘버링 맞춰야 하기 때문입니다.
if I == 1
Coeff = [1];
elseif I == 2
Coeff = [0 1];
% 0과 1 입력 되었때 바로 답 내보내줍니다.
else
T = zeros( I );
% 0행렬로 T행렬을 일단 정의해둡니다. T0을 1행, T1을 2행에다 쭉쭉쭉 저장해놓으려고 합니다.
T( 1 , : ) = [1 zeros( 1, I - 1 )];
% T 1행에다 T0의 계수를 넣습니다.
T( 2 , : ) = [0 1 zeros( 1, I - 2 )];
% T 2행에다 T1의 계수를 넣습니다.
for J = 3 : I
% T2부터 입력된 I값까지 for문을 돌립니다.
T( J , : ) = 2 .* [ 0, T( J - 1, 1 : I - 1 ) ] - T( J - 2, : );
% 여기가 핵심인데, 3행부터 I행까지 쭈주죽 점화식대로 집어넣기 시작합니다.
% 2 .* [ 0, T( J - 1, 1 : I - 1 )]의 의미는 2x Tn-1(x) 인데 T( J - 1, 1 : I - 1) 은 Tn-1(x)를 의미하며 열 길이를 하나 자른건 열 길이를 통일시키기 위함입니다.
end
Coeff = T( I , : );
% Coeff에 저장해서 반환시킵니다.
end
shift 연산을 이용하면 더 쉽게 짤 수 있긴한데.. wshift 함수의 구동원리를 제대로 모르겠더라구요. 그래서 일부러 안썼습니다.