Vous êtes sur la page 1sur 3

Accueil » Info MP/MP* » 2012-2013 » TP Scilab MP* N°2 & 3

TP Scilab MP* N°2 & 3


Recherche
Soumis par mathemator le 21 Novembre 2012 - 6:01pm

On passe à Scilab pour faire un peu d'analyse numérique qui reste


pour l'instant très algébrique : Horner, Newton, Lagrange seront RUBRIQUES
nos guides dans ces problèmes d'interpolation polynomiale... Il y
a un petit document inclus : "Scilab for dummies". Le TP au Accueil
format PDF et TEX ainsi que des propositions de correction en
SCILAB Contact

FAC
SCILAB
// ne pas oublier funcprot(0) pour les fonctions récursives Forums
funcprot(0);
INFO 1

// horner pour calculer p(t) récursion terminale INFO 2


// les opérations sont effectuées dans l'&ccumulateur acc
function h = dhorner(p,t,acc) Info MP/MP*
if p == [] then h = acc
2011-2012
else h = dhorner(p(1:$-1),t,p($) + t * acc) //b_i = a_i + t*b_{i+1}
end
2012-2013
endfunction
TP MAPLE n
// on part d'un accumulateur nul °1
function h = horner(p,t)
h = dhorner(p,t,0) TP Scilab
endfunction MP* N°2&3

// horner en gardant la trace des coefficients bi TP Scilab


// renvoie la liste des coefficients bi
// récursion terminale MP* n°4
// on rajoute une liste qui stocke les bi
function h = lhorner(p,t,acc_num,acc_liste) TP Scilab
if p == [] then h = acc_liste MP* n°5
else
ai = p($) TP Scilab
bi = ai + t * acc_num; Maple MP* n°6
h = lhorner(p(1:$-1),t,bi,[bi,acc_liste])
end 2013-2014
endfunction
Info pour tou(te)s
// on part de 0 et d'une liste vide
function h = liste_horner(p,t) MP/MP* 2014/2015
h = lhorner(p,t,0,[])
endfunction Info pour tou(te)s
MP/MP* 2015/2016

LYCÉE
function y = quotient_horner(poly,t)
// quotient de poly par X-t LaTeX
z = liste_horner(poly,t)
y = [z(2:$)] Mémo
endfunction
Polytech
function y = reste_horner(poly,t)
// reste de poly par T-t Programmation
z = liste_horner(poly,t)
if z == [] then y=0 Publications
else y = z(1)
end Tehessin
endfunction

function y = jeme_poly(poly,j,t)
// calcul de poly^(j)(t) avec Horner
if j == 0 then y = reste_horner(poly,t)
else y = j*jeme_poly(quotient_horner(poly,t),j-1,t)
end
endfunction
function y = jeme_poly_mat(poly,k,t)
n = length(poly) + 1;
T = zeros(k+1,length(poly)+1);
for j = 2:n do
T(1,j) = poly(j-1);
end
for i = 2:(k+1) do
T(i,n-i+1) = T(i-1,n-i+2);
for j = (n-i):-1:1 do
T(i,j) = T(i-1,j+1) + t * T(i,j+1)
end
end
y=T
endfunction

// N E W T O N

function y = prod_mono(poly,t)
y = [0,poly] - t*[poly,0]
endfunction

function y = add_poly(p1,p2)
l1 = length(p1)
l2 = length(p2)
l = max(l1,l2)
if l1 < l then
for k = 1:(l-l1) do p1 = [p1,0];end
else
for k = 1:(l-l2) do p1 = [p2,0];end
end
y = p1+p2
endfunction

function P = newton(X,Y,t)
n = length(Y)
if n <> length(X) then
y = "Il manque des abscisses ou des ordonnées"
end
D = zeros(n,n)
for i = 1:n do D(i,1) = Y(i); end
for j = 2:n do
for i = 1:(n-j+1) do
D(i,j) = (D(i+1,j-1) - D(i,j-1)) / (X(i+j-1) - X(i))
end
end
P = D(1,n)
for k = (n-1):-1:1 do
P = D(1,k) + (t-X(k))*P
end
endfunction

function P = newton_poly(X,Y)
n = length(Y)
if n <> length(X) then
y = "Il manque des abscisses ou des ordonnées"
end
D = zeros(n,n)
for i = 1:n do D(i,1) = Y(i); end
for j = 2:n do
for i = 1:(n-j+1) do
D(i,j) = (D(i+1,j-1) - D(i,j-1)) / (X(i+j-1) - X(i))
end
end
P = [D(1,n)]
for k = (n-1):-1:1 do
P = add_poly([D(1,k)] , prod_mono(P,X(k)))
end
endfunction

function y = poly2x(poly,x)
n = length(poly)
f=0
for k = 1:n do
f = f + poly(k)*x^(k-1)
end
y=f
endfunction

for k = [0.1:0.1:1] do
x = [0:k:2];
p = newton_poly(x,1/(1+x^2));
plot(x,poly2x(p,x))
end

//////////////// LAGRANGE

function y = lagrange(X,Y)
n=length(X);
P=[0];
for i=1:n, L=[1];
for j=[1:i-1,i+1:n] L=prod_mono(L,X(j))/(X(i)-X(j));end
P=add_poly(P,L*Y(i));
end
y=P
endfunction

MP* Scilab

Connectez-vous ou inscrivez-vous pour publier un commentaire

Les documents sont sous licence GNU Creative Commons

Connexion utilisateur
CAPTCHA
Nom d'utilisateur * Mot de passe *
Un défi mathématique pour vérifier que vous n'êtes pas un(e) méchant(e) spamer
venu(e) empêcher l'humanité de profiter des bienfaits de ce site merveilleux
courtesy of webmatter.de
Créer un nouveau compte
Math question *
Demander un nouveau mot de passe 5+6=

Solve this simple math


problem and enter the
result. E.g. for 1+3,
enter 4.

Se connecter

Vous aimerez peut-être aussi