% sfun.s
%
% Purpose: Special Mathematical Functions
% 1. Orthogonal Polynomials
% Copyright: Ilja Heitlager, Leiden University, 1997
% Updates:
% Literature: H. Bateman, Higher Transcendental Functions, Vol II,
% McGraw-Hill, 1953, A. Erdelyi (ed.) e.a.,
% Bateman manuscript project.
PolySimpStrategy := {[]}.
% Gegenbauer Polynomials.
%
% L
% C (X) = cln(X, L, N)
% n
%
% Example: cln(x, 3, 7)
% x * (x ^ 2 * (x ^ 2 * (4608 * x ^ 2 - 5376) + 1680) - 120)
cln(1, 0, 0) := 1.
cln(1, 0, N) := 2 / N.
cln(- X, L, N) := -1 ^ N * cln(X, L, N).
(cln(X, L, N) :=
(iff is_integer(N) and N > 0 then twocln(X, L, N) : 1 else
error("cln: integer argument expected")
))
.
twocln(X, L, 1) := [2 * L * X, 1].
(twocln(X, L, N) :=
([ (( 2 * (N + L - 1) / N * X * cln : 1
- (N + 2 * L - 2) / N * cln : 2
) with
PolySimpStrategy
)
, cln : 1 ] where
cln = twocln(X, L, N - 1)
))
.
cln(X, L, N) latex "C^", L, "_", N, "(", X, ")".
% Legendre Polynomials.
%
% First Kind:
%
% P (X) = pn(X,N)
% n
%
% Second Kind:
%
% Q (X) = qn(X,N)
% n
pn(X, N) := cln(X, 1 / 2, N).
pn(X, N) latex "P_", N, "(", X, ")".
qn(X, 0) := 1 / 2 * log((X + 1) / (X - 1)).
(qn(X, N) :=
(iff is_integer(N) and N > 0 then twoqn(X, N) : 1 else
error("qn: integer argument expected")
))
.
qn(X, N) latex "Q_", N, "(", X, ")".
(twoqn(X, 1) :=
[qn * X - 1, qn] where qn = 1 / 2 * log((X + 1) / (X - 1)))
.
(twoqn(X, N) :=
([ (( (2 * N - 1) / N * X * qn : 1
- (N - 1) / N * qn : 2
) with
PolySimpStrategy
)
, qn : 1 ] where
qn = twoqn(X, N - 1)
))
.
% Chebychev Polynomials.
%
% First Kind:
%
% T (X) => tn(X,N)
% n
%
% Second Kind:
%
% U (X) => un(X,N)
% n
(tn(X, N) :=
(iff is_integer(N) and N > 0 then twotn(X, N) : 1 else
error("tn: integer argument expected")
))
.
tn(X, N) latex "T_", N, "(", X, ")".
un(X, N) := cln(X, 1, N).
un(X, N) latex "U_", N, "(", X, ")".
twotn(X, 1) := [X, 1].
(twotn(X, N) :=
([2 * X * tn : 1 - tn : 2 with PolySimpStrategy, tn : 1] where
tn = twotn(X, N - 1)
))
.