Inscription / Connexion Nouveau Sujet
Niveau logiciels
Partager :

Scilab & Interpolation Polynomiale

Posté par
H-Espace
27-03-09 à 14:36

Bonjour, voila j'essaye de finir un TP que l'on m'a donné, mais le problème c'est qu'il me donne des résultats assez surprenant. Bon je résume d'abord le sujet, j'expose mon problème puis après je met mon code (qui doit bien être faux quelque part)

On étudie la fonction f(x)=x^2+10.e^{-x^2} sur [-4;4]. On prend pour cela un ensemble de n points dans cet intervalle. Puis un polynomes qui interpole la famille de couple, (point, image par f de ce point).
Pour cela on nous rappelle qu'il est possible de résoudre une équation matricielle Aa=u ou A est une matrice de Vandermonde, a contient les coefficients du polynome interpolateur et u contient les images.

1/Ecrire une fonction qui prend en argurment un vecteur qui renvoye la matrice de Vandermonde associée.

2/Ecrire une fonction a=CoeffsCano(x) qui renvoye les coefficients du polynôme interpolant de degré minimal dans la base canonique.

3/Programmer une fonction InterpCano(z,a) qui renvoye les valeurs du polynôme interpolant en tout point du vecteur d'entrée z. On pourra se servir des fonction poly et horner de Scilab

4/Afficher les polynomes interpolant pour plusieurs valeurs de n (10,50,100,200).

La 1/ semble fonctionner (enfin elle fonctionne) la 2 et 3 semblent donner un résultat cohérent (vite corrigé par mon chargé de TD, juste en regardant un résultat dans un cas particulier). La 4/ me donne pour n=10 deux fois les mêmes valeurs, à partir de 50 la courbe de la fonction de départ reste pareille mais celle de mon polynome ne me donne correctement que les bords de la fonctions (entre 3.5 et 4 et de meme pour les négatifs) sinon elle va dangeureusement vers 0. De plus les deux courbes sont de la même couleur c'est pas génial.

Et voici les différentes fonction

Citation :
function[A]=VanderMonde(x)

// pre: x vecteur ligne
// post: VanderMonde rend une matrice des deux de VanderMonde asssociées
// argin: x
// argout: A

n=length(x);
y=x';
for i=1:n
A(:,i)=y.^(i-1);
end
endfunction


Citation :
function [c]=f(x)

// pre: x un vecteur ligne
// post: renvoye le vecteur dont chacune des coordonnées xi vaut xi^2+10*exp(-xi^2)
// argin: x
// argout: c

c=x.^2+10.*exp(-x.^2);
endfunction


Citation :
function[a]=CoeffsCano(x,f)

// pre: x vecteur ligne, f un endormorphisme de l'ensemble des vecteurs
// post: CoeffCano renvoye les coefficients du polynôme interpolant de degré minimal dans la base canonique
// argin: x, f
// argout: a

A=VanderMonde(x);
u=f(x)';
a=A\u;
endfunction


Citation :
function[y]=InterpCano(z)

// pre: z vecteur ligne, a un réel
// post: InterpCano renvoye la valeur prise par le polynome interpolateur de f par rapport au vecteur z
// argin: z, a
// argout: y

c=CoeffsCano(z,f);
b=poly(c,"x","coeff");
y=horner(b,z);
endfunction


Citation :
function[l]=Resultat(f,a,b,n)

// pre:
// post:
// argin:
// argout:

i=a: (b-a)/n:b;
j=f(i);
k=InterpCano(i);
l(:,1)=j';
l(:,2)=k';
endfunction



Citation :
function[y]=main(f,a,b,n)

// pre:
// post:
// argin:
// argout:

i=a: (b-a)/n:b;
y=Resultat(f,a,b,n);
plot(i,y(:,1));
plot(i,y(:,2));
endfunction


Merci beaucoup.

Posté par
H-Espace
re : Scilab & Interpolation Polynomiale 30-03-09 à 08:12

Aurais-je mal défini un point du problème, ou me serais-je trompé de section de forum?



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !