// Exercices de la série 1 : Curiosité numériques du cours d'OS AM

disp("==========  Ex 2  =================");

A=[4, -2, 4; 2, -5, 7; 3, -2, 3];  // les  virgules et les  point-virgules sont importants !
disp(A, "A = ");

b=[12; 13; 8];
disp(b, "b = ");

x=[2; 1; 1];
disp(x, "b = ");

disp(A*x, "A*x = ");

invA = A^(-1);
disp(invA, "inverse de A = ");

disp(A*invA, "A*invA = ");

x=A\b;
disp(x, "x=A\b = ");

disp(A*x, "A*x = ");
disp(A*x == b, "A*x == b");

disp("==========  Ex 3  =================");

A3=[4, -2, 4, 4; 2, -5, 7, -9; 3, -2, 3, 4; 7, 3, -3, 8];
b3=[12; 13; 8; 6]
x3=A3\b3;
disp(x3, "x3 = ");

disp("==========  Ex 4  =================");

AA=[4, -2, 4; 2, -5, 7; 3, -2, 3; 2, -1, 2];
disp(AA, "AA = ");

b=[12; 13; 8; 6];
disp(b, "b = ");

x=[1; 2; 3];
disp(x, "x = ");

disp(AA*x, "AA*x = ");
disp(AA\b, "AA\b = ");

bb=[12; 13; 8; 6.1];
disp(bb, "bb = ");

xx=AA\bb;
disp(xx, "xx = AA\bb = ");

disp(AA*xx, "AA*xx = ");
disp(AA*xx == bb, "(AA*xx == bb) = ");
disp(norm(AA*xx - bb), "norm(AA*xx - bb) = ");

disp("==========  Ex 5  =================");

function y=poly_f(coef, x)
//========================
// Polynome de degré  nnn, de coefficients coef
pp = ones(x) * coef($);
for ii=length(coef)-1:-1:1 
   pp = pp .* x + coef(ii);
   end;
y = pp;
endfunction

// Détermination du polynôme d'interpolation passant par les points donnés
ax = [-2; -1; 0; 1; 2];  // Vecteur colonne
ay = sin(ax);

// Système d'équations à résoudre.
A = ones(ax);
for ii=1:length(ax)-1;  A = [A, ax.^ii]; end;

// Coefficient du polynome passant par les nnn+1 points défini par ax, ay
coef = A\ay;

scf(1);
clf(1);
plot(ax, ay, 'LineStyle', 'none', 'Marker', 'o');

xxx=linspace(min(ax), max(ax), 100);
plot(xxx, poly_f(coef, xxx));

// Définition de l'échelle des axes
mygca=gca();
mygca.zoom_box = [min(ax)-0.1, -1.1, max(ax)+0.1, 1.1];
title("Polynôme d''interpolation de degré " + string(length(ax)-1));



