1function [p, d1, d2] = plate_rr_legendre(order, x)
2% PLATE_RR_LEGENDRE Legendre polynomials and their first two derivatives.
3%
4% [p, d1, d2] = plate_rr_legendre(order, x) tabulates P_n(x), P_n'(x) and
5% P_n''(x) for n = 0..order at the points of the row vector x in [-1, 1],
6% as (order + 1) x numel(x) arrays, from the three-term recurrence
7% (n + 1) P_{n+1} = (2 n + 1) x P_n - n P_{n-1}
8% and its derivatives
9% P'_{n+1} = P'_{n-1} + (2 n + 1) P_n, P''_{n+1} = P''_{n-1} + (2 n + 1) P'_n.
11x = x(:)';
12m = numel(x);
13p = zeros(order + 1, m);
14d1 = zeros(order + 1, m);
15d2 = zeros(order + 1, m);
16p(1, :) = 1;
17if order >= 1
18 p(2, :) = x;
19 d1(2, :) = 1;
20end
21for n = 1:order - 1
22 p(n + 2, :) = ((2 * n + 1) * x .* p(n + 1, :) - n * p(n, :)) / (n + 1);
23 d1(n + 2, :) = d1(n, :) + (2 * n + 1) * p(n + 1, :);
24 d2(n + 2, :) = d2(n, :) + (2 * n + 1) * d1(n + 1, :);
25end
26end