// Étude des polynômes de Tchebyseh (Cebyshev)

nDeg = 4;  // Degré du polynôme

// Le polynôme de Tchebyshev de degré nDeg
xxx = linspace(-1, 1, 101);
yyy = horner(chepol(nDeg, 'x'), xxx);
scf(0);
clf();
plot(xxx, yyy);

// Définition de l'échelle des axes
mygca=gca();
mygca.zoom_box = [-1.1, -1.05, 1.1, 1.05];
title("Polynôme de Tchebyshev de degré " + string(nDeg));

// Zeros du polynôme de degré nDeg
kkk = 0:nDeg-1;
axZ = cos((2*kkk+1)*%pi / (2*nDeg));
ayZ = zeros(axZ);
plot(axZ, ayZ, 'LineStyle', 'none', 'Marker', 'o');

// Extremums du polynôme de degré nDeg
kkk = 0:nDeg;
axE = cos(kkk*%pi / nDeg);
ayE = horner(chepol(nDeg, 'x'), axE);
plot(axE, ayE, 'LineStyle', 'none', 'Marker', 'o', "MarkerFaceColor", 'r');


// Le polynôme de Tchebyshev de degré nDeg + 1
xxx = linspace(-1, 1, 101);
yyy = horner(chepol(nDeg+1, 'x'), xxx);
plot(xxx, yyy, "Color", "m");


function y=pol_T(x, nDeg)
//=======================
// Evaluation du polynôme de Tchebychev de degré n
if (nDeg == 0) then
  y = ones(x);
  return;
end;

djp1 = ones(x);
djp2 = zeros(x);
for j = nDeg-1:-1:1 
  dj = 2 * x .* djp1 - djp2;
  djp2 = djp1;
  djp1 = dj;
  end;
y = x .* djp1 - djp2;  // ici  j = 0;
endfunction

function y=pol_T2(coef, x)
//===========================
// Evaluation du polynôme coef(n) * Tn(x) + coef(n-1) * Tn-1(x) + ... + coef(0) * T0(x)
djp2 = zeros(x);
djp1 = coef($) .* ones(x);
for j = length(coef)-2:-1:1 
  dj = 2 * x .* djp1 - djp2 + coef(j+1) .* ones(x);
  djp2 = djp1;
  djp1 = dj;
  end;
y = x .* djp1 - djp2 + coef(1) .* ones(x);  // ici  j = 0;
endfunction

plot(xxx, pol_T(xxx, nDeg), "Color", "y");

plot(xxx, pol_T2([0, 0.5, 0, 0, 0, 0.5], xxx), "Color", "c");
