Bonjour tout le monde !
Déjà joyeux noël (en retard) et bonne année (en avance) !
J'ai un petit problème sur un programme d'interpolation polynomiale (Lagrange) et des calcul numérique d'intégrales pour un TP.
Il s'agit plus d'un problème lié au code qu'aux maths (qui selon moi sont justes). Le script principal, les fichiers pour la fonction étudiée (Fonction.txt) et pour l'interpolation proprement dite (Interpol.txt) sont en pièces jointes.
Le problème est le suivant :
Dans les 2 étapes du script principal (voir ci dessous) ... la fonction Interpol est appelée pour approximer la valeur de la fonction Fonction en un point donné à partir d'un ensemble de points et de valeurs exactes de Fonction en ces points (une interpolation de Lagrange en somme ^^)
Le souci c'est que j'obtiens BY et A remplis de 0 ... comme définis lors des préallocations mémoires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 %-------------------------------------------------------------------------- % Construction de la matrice BY % (Valeurs interpolées de z aux points de coordonnées Mx & Ay) %-------------------------------------------------------------------------- BY = zeros(Ny,Np); for i = 1:Ny for j = 1:Np BY(i,j) = Interpol(Nx,AX(1,:),T(i,:),MX(j)); end end %-------------------------------------------------------------------------- % Construction du vecteur A % (Valeurs interpolées de z aux points M du segment DE) %-------------------------------------------------------------------------- A = zeros(1,Np); for k = 1:Np A(k) = Interpol(Ny,AY(:,1)',BY(:,k)',MY(k)); end
Du coup j'ai plusieurs hypothèses ...
• L'une est que la fonction Interpol n'est pas (ou pas bien) appelée dans les 2 cas -> Problème de syntaxe ou de variables dans la définition de Interpol ?
• L'autre est que la boucle for à l'intérieur de la définition de la fonction Interpol ne fonctionne pas (voir ci dessous) ... ce qui fait que le vecteur PEl reste rempli de 0 (comme définis en préalloc mem) ... et que du coup P est nul car somme de ces 0 -> Problème de syntaxe dans la boucle ?
Cependant je n'arrive pas à voir où j'ai fait une erreur de code dans l'une ou l'autre des hypothèses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 function P = Interpol(N,X,Y,a) PEl = zeros(1,N); % Pré allocation mémoire pour PEl (Vecteur des Polynomes Elementaires) for m = 1:N QEl = zeros(1,N); % Pré allocation mémoire pour QEl (Vecteur des Quotients Elementaires) for n = 1:N if m~=n QEl(n) = ((a-X(n))/(X(m)-X(n))); % Construction progressive du vecteur QEl (N éléments) end end PEl(m) = prod(QEl)*Y(m); % Construction progressive du vecteur PEl (N éléments) end P = sum(PEl); % Construction du Polynome de Lagrange P (Somme des polynomes élementaires)
Est ce que quelqu'un pourrait tester ce programme sur sa machine (j'utilise MATLAB 7.4) ... et me donner un point de vue extérieur sur la cause du disfonctionnement ?
Merci d'avance à vous.
Damien.
Partager