// Le 19.7.2015
// Interpolation polynomiale, version améliorée et simplifiée
// On remarque que les oscillations augmentent avec le degré du polynome

funcprot(0); // pour ne pas indiquer une redéfinition des fonctions

// Interpolation par un polynome de degré arbitraire.
// A partir de  aMax=10  la précision des calculs n'est plus suffisante,
// la résolution du système n'arrive plus à être faite.
aMax=5;
ax=(-aMax:aMax)';
ay=zeros(2*aMax+1, 1);
ay(1 + aMax) = 1;

A = ones(ax);
for ii=1:(2*aMax);  A = [A, ax.^ii]; end;

// Coefficient du polynome passant par les 5 points défini par ax, ay
global coef;
coef = A\ay;

function y=fct(x)
//===============
// Polynome de degré  2*aMax, de coefficients : global coef
global coef
xn = ones(x);
pp = zeros(x);
for ii=coef'  // attention au  '  à la fin, pour que  coef'  soit un vecteur ligne.
   pp = pp + ii*xn;
   xn = xn .* x;
   end;
y = pp;
endfunction

xdel(); // efface la fenêtre graphique
drawlater();
x=-(aMax+0.1):0.02:(aMax+0.1);
plot(x, fct(x));

// Trace les points interpolés
plot(ax, ay, 'LineStyle', 'none', 'Marker', 'o');

// Définition de paramètres d'affichage
//=====================================
// Définition de l'échelle des axes
mygca=gca();
mygca.zoom_box = [-(aMax + 0.5), -(aMax/2)^2, (aMax + 0.5), (aMax/2)^2];

// Définition de la taille de la police des axes
mygca.font_size=4;
mygca.font_style=4; // 6=normal,  4=gras,  5=gras+italique,  0=courrier gras,  1=courrier gras, 
// c.f. help font_style  et  help graphics fonts

// Définit la position et la taille de la fenêtre
mygcf=gcf();
mygcf.figure_position = [820, 1];
mygcf.figure_size = [700, 600];

// Définit la couleur de fond de la fenêtre, hors graphique
mygcf.color_map(29,:) = [1, 0.9, 0.9];
mygca.background = 29;

// Définit la couleur de fond du graphique
mygcf.color_map(30,:) = [1, 1, 0.8];
mygcf.background = 30;

// Définit la couleur des points
mygcf.color_map(31,:) = [0, 1, 0];  // = couleur des fond des marques
mypts = mygca.children(1).children;
mypts.mark_background=31;
drawnow();
