Interpolacja Lagrange'a

Przybliżanie, metoda najmniejszych kwadratów, wielomiany interpolacyjne i inne.
janusz47
Użytkownik
Użytkownik
Posty: 7910
Rejestracja: 18 mar 2009, o 16:24
Płeć: Mężczyzna
Podziękował: 30 razy
Pomógł: 1670 razy

Interpolacja Lagrange'a

Post autor: janusz47 »

Wśród wielomianów interpolacyjnych - wielomianem opartym na bazie funkcji kardynalnych

\(\displaystyle{ L_{j}(x_{i}) = \begin{cases} 1 \ \ \mbox{gdy} \ \ i=j \\ 0 \ \ \mbox{gdy} \ \ i\neq j, \ \ i, j=0,1,2,..,n \end{cases} }\)

jest wielomian Lagrange'a:

\(\displaystyle{ p_{n}(x) = \sum_{i=0}^{n}f(x_{i})\cdot L_{i}(x) \ \ (1) }\)

gdzie:

\(\displaystyle{ L_{i}(x) = \frac{(x-x_{0})\cdot (x - x_{1})\cdot ...\cdot (x - x_{i-1})\cdot (x-x_{i+1})\cdot ...\cdot (x-x_{n})}{(x_{i}-x_{0})\cdot (x_{i}-x_{1})\cdot ...\cdot (x_{i} -x_{i+1})\cdot ...\cdot(x_{i}-x_{n})} \ \ (2)}\)

Przykład konstrukcji wielomianu Lagrange'a drugiego stopnia dla danych:

\(\displaystyle{ \begin{tabular}{|c|c|c|c|} x & -1 & 0 & 3 \\ \hline
f(x) & 8 & -2 & 4\\ \end{tabular} }\)


Z równania \(\displaystyle{ (2) }\) mamy:

\(\displaystyle{ L_{0}(x) = \frac{(x-0)\cdot (x-3)}{-1-0) \cdot (-1-3)}= \frac{1}{4}x\cdot (x-3),}\)

\(\displaystyle{ L_{1}(x) = \frac{(x+1)\cdot (x-3)}{(0+1) \cdot (0-3)}= -\frac{1}{3}(x+1) \cdot (x-3),}\)

\(\displaystyle{ L_{2}(x) = \frac{(x+1)\cdot (x-0)}{(3+1) \cdot (3-0)}= -\frac{1}{12}x \cdot (x+1).}\)

Z równania \(\displaystyle{ (1) }\)

\(\displaystyle{ p_{2}(x) = 2x\cdot (x-2) + \frac{2}{3}(x+1)\cdot (x-3) + \frac{1}{3}x\cdot (x+1).}\)

Można udowodnić na przykład (*) , że jeżeli funkcja \(\displaystyle{ f\in C^{n+1},}\) to błąd przybliżenia tej funkcji wielomianem Lagrange'a \(\displaystyle{ p_{n}(x) }\)

spełnia nierówność:

\(\displaystyle{ e_{n} = |f(x) - p_{n}| \leq \frac{1}{4(n+1)} \cdot M \cdot \left( \frac{b-a)}{n}\right)^{n+1}, }\)

gdzie:

\(\displaystyle{ M = \max_{\xi\in (a,b)} [f^{(n+1)}(\xi)], \ \ \xi \in (a, b).}\)


(*) Zenon Fortuna Bohdan Macukow Janusz Wąsowski Metody numeryczne. Wydanie piąte. WNT Warszawa 1993.


Program w MATLAB

Kod: Zaznacz cały

function lagrange(x,y,a)
  n=length(x);
  p=0;
  for k=1:n
    b(k)=1;
    d(k)=1;
    for j=1:n
      if j~= k
        b(k)=b(k)*(x(k)-x(j));
        d(k)= d(k)*(a-x(j));
      end
      end
     c(k)=y(k)/b(k);
     p=p+c(k)*d(k);
   end
   c
   fprintf('\n p(a)=%10.6f',p)
   fprintf('\n')
   
    
Przykład

Kod: Zaznacz cały

 >> x=[-1 0 3]';
 
>> y=[8 -2 4]';

>> lagrange(x,y,-0.5)

c =

    2.0000    0.6667    0.3333

 p(a)=  2.250000
 
ODPOWIEDZ