cerca
Matlab - Polinomio di Lagrange
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Matlab - Polinomio di Lagrange

Torna alla pagina di Analisi Numerica


:: Matlab - Polinomio di Lagrange ::

% Metodo di Lagrange
% ------------------
% restituisce un vettore pl (il polinomio di Lagrange)
% richiede tre vettori come parametri, che contengono le 
%   coordinate x e y dei punti da interpolare, e l'insieme 
%   dei valori di x che si trovano nell'intervallo
function [pl] = lagrange(xnodi,ynodi,x)
% ricavo il numero di nodi
n =length(xnodi);
% inizializzo il polinomio di Lagrange a 0
pl = 0;
% calcolo i polinomi della base associati al nodo i
for i=1:n
    % applico la proprietà L_i [x_i] = 1
    L(i)=1;
    % calcolo le altre L_i
    for j=1:n
        % faccio la produttoria di tutti i nodi j, con j diverso da i
        %   A                     B                    C
        %--------         ----------------     -----------------
        if j ~= i, L(i) = L(i)*(x-xnodi(j)) / (xnodi(i)-xnodi(j)); end
        % spieghiamo a cosa corrispondono le varie parti:
        % A = condizione che j deve essere diverso da i
        % B = (x - x(j))
        % C = (x(i) - x(j))
    end
end
% formo il polinomio di Lagrange, dato dalla sommatoria
%   dei prodotti delle y(i) per i polinomi della base
pl = sum(L.*ynodi);

% esempio di utilizzo:
% 
% % definisco gli estremi dell'intervallo
% estremoA = 2;
% estremoB = 5;
% % definisco il numero di nodi da interpolare
% nodi = 4;
% % utilizzo la funzione linspace per generare un vettore x
% %   con 'nodi' elementi compresi tra 'estremoA' e 'estremoB'
% x = linspace(estremoA,estremoB,nodi);
% % definisco una funzione da applicare alle x
% y = sin(x);
% % genero un vettore z con tutti i punti dell'intervallo
% z = estremoA:0.01:estremoB;
% % genero il polinomio di lagrange
% for i=1:length(z),
%   pz(i) = lagrange(x,y,z(i));
% end
% % disegno il grafico che mi mostra la funzione, il
% % polinomio interpolatore e i nodi
% xdis = z; 
% ydis =sin(xdis);
% plot(xdis,ydis,'r:',z,pz,'b-.',x,y,'r*');

Torna alla pagina di Analisi Numerica