Interpolacja metodą Lagrangea


#1

Cześć,
potrzebna mi pomoc. Musze napisać funkcje wyznaczającą wielomian określony przez punkty, mam użyc interpolacji metodą Lagrange. Tylko nie wiem jak sie do tego zabrać. Mam za wzór taką funkcje w matlabie:

function [] = lagrange(xj,yj,x,n)
w=0;
s = 0;    
for j=1:n+1        
    omega_p = 1;        
    for i=1:n+1            
        if i ~= j, 
            omega_p = conv(omega_p,[1 -xj(i)])/(xj(j) - xj(i));                
        end
    end
    s = s + yj(j) * omega_p;    
end
for i=1:length(s)              
    w=w*x+s(i);          
end
disp(s);
disp(w);
end

Pomoże ktoś, nie mam pojęcia jak się do tego zabrać, nie wiem czego użyć zamiast conv.


#2

To jest zadanie programistyczne?

Z tego co pamiętam (a metody numeryczne miałem jakieś trzy lata temu) to najlepiej będzie wygenerować sobie wykres w matlabie podanej funkcji i odczytać kilka współrzędnych punktów (na przykład n=3), czyli x1, x2, x3, a potem wyliczyć ze wzoru Lagrange’a Wyliczasz w taki sposób, że podstawiasz x1, x2, x3 dla określonego n (w tym wypadku n=3) pod wzór Li(x).

Myślę, że warto zajrzeć tutaj: http://www.matematyka.pl/


#3

Moim głównym problemem teraz jest to, że nie do końca rozumiem działanie funckji conv, i nie znam jej odpowiednika w Rubym.

Tu jest przykładowe wywołanie z Matlaba:

>> lagrange([0.02 0.08 0.12 0.17 0.23 0.30], [1.02316 1.059 1.14725 1.21483 1.3012 1.40976], 0.114, 5)
   1.0e+03 *

   -5.1771    4.3489   -1.3432    0.1854   -0.0093    0.0011

    1.1359

Podpopwie ktoś coś?


#4

help conv w konsoli Matlaba?


#5

Kluczem do sukcesu jest zauwazenie, ze conv wykonane dla wektorów o długosci 1 jest po prostu rowne ich iloczynowi, czyli conv(omega_p,[1 -xj(i)]) moze byc zastapione przez omega_p * (1 - xj(i))
Przydatny link do napisania odpowiednika funkcji conv http://www.mathworks.com/help/matlab/ref/conv.html , mozesz skorzystac z gotowca gemu convolver https://github.com/neilslater/convolver


#8

Marian54 jest dla mnie forumowiczem miesiąca :heart_eyes:


#9

Noooo gratuluję wyboru reparametryzacji! Widać, że doświadczony matematyk!