Interpolacja liniowymi funkcjami sklejanymi

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 liniowymi funkcjami sklejanymi

Post autor: janusz47 »

Interpolacja liniowymi funkcjami sklejanymi

Interpolacja funkcjami sklejanymi (spline-funkcjami) w przeciwieństwie do interpolacji wielomianowej polega na przybliżaniu krzywej nie jednym

wielomianem opartym na węzłach \(\displaystyle{ x_{0}, x_{1},..., x_{n} }\) lecz różnymi wielomianami, w każdym przedziale \(\displaystyle{ [x_{i-1}, x_{i}], \ \ i=1,2,,n+1.}\)

Jeżeli tymi wielomianami są wielomiany pierwszego stopnia (funkcje liniowe), to mamy doczynienia z interpolacją liniowymi fnkcjami sklejanymi

albo splajnami liniowymi.

Ciekawostką historyczną jest fakt , że z pierwsze modele splajnów zostały zbudowane przez Eulera i Braci Berrnoulli w siedmnastym stuleciu

ubiegłego tysiąclecia.

Były to elastyczne pręty z rowkiem i zawieszonymi z boku ciężarkami tzw. "kaczkami". Służyły one do konstrukcji krzywych.

Niech:

\(\displaystyle{ a = x_{1}< x_{2}<...< x_{n}= b,}\)

wtedy

\(\displaystyle{ S_{i}(x) = f(x_{i}) + \frac{f(x_{i+1})-f(x_{i})}{x_{i+1}-x_{i}} \cdot (x-x_{i})= f(x_{i}) +f[x_{i+1}, x_{i}] \cdot (x-x_{i}), \ \ i=1,2,..., n-1 \ \ (1) }\)

\(\displaystyle{ S(x) = \begin{cases} S_{1}(x), \ \ \mbox{jeśli} \ \ x< a \\ S_{n-1}(x) \ \ \mbox{jeśli} \ \ x>b. \end{cases} \ \ (2) }\)

Przykład

Znajdziemy funkcje sklejane dla danych w tabeli:

\(\displaystyle{ \begin{tabular}{|c|c|c|c|c|c|} x & 1 & 1,5 & 2 & 2,5 & 3 \\ \hline
f(x) & 1 & 3 & 7 & 10 & 15 \end{tabular} }\)


Na podstawie \(\displaystyle{ (1) }\)

\(\displaystyle{ S_{1}(x) = \frac{f(1,5) -f(1)}{1,5 -1} (x-1) +f(1) = \frac{3-1}{0,5}(x-1)+1 = 4x -3,}\)

\(\displaystyle{ S_{2}(x) = \frac{f(2,0) -f(1,5)}{2-1,5} (x-1,5)+ f(1,5) = \frac{7-3}{0,5}(x-1,5)+3 = 8x -9,}\)

\(\displaystyle{ S_{3}(x) = \frac{f(2,5) -f(2,0)}{2,5-2} (x- 2) + f(2)= \frac{10-7}{0,5}(x-2)+7 = 6x -5,}\)

\(\displaystyle{ S_{4}(x) = \frac{f(3) -f(2,5)}{3-2,5} (x- 2,5) +f(2,5) = \frac{15-10}{0,5}(x-2,5)+10 = 10x -15.}\)

Na podstawie \(\displaystyle{ (2) }\)

\(\displaystyle{ S(x) =\begin{cases} 4x-3 \ \ \mbox{gdy} \ \ x\in [1.0,1.5] \\ 8x-9 \ \ \mbox{gdy} \ \ x\in [1.5, 2.0] \\ 6x-5 \ \ \mbox{gdy} \ \ x\in [2.0, 2.5] \\ 10x-15 \ \ \mbox{gdy} \ \ x\in [2.5, 3.0]. \end{cases} }\)

Program w MATLAB

Kod: Zaznacz cały

function spl1(x,y,c)
% Liniowa funkcja sklejana
n=length(x);
for i=n-1:-1:2
    dis=c-x(i);
    if (dis>=0)
        break
    end
end
if (dis<0)
    i=1;
    dis=c-x(1);
end
m=(y(i+1)-y(i))/(x(i+1)-x(i));
spl1=y(i)+m*dis;
disp('       Liniowa funkcja sklejana')
disp('_____________________________________________')
disp(['      x            y            c=' ,num2str(c),'   '])
disp('_____________________________________________')
for j=1:n
    fprintf('%12.6f %12.6f',x(j),y(j))
    if (j==i)
        fprintf('\n                           S(c)= %10.6f',spl1)
    end;
    fprintf('\n')
end
Przykład

Kod: Zaznacz cały

 
>> spl1(x,y,2.2)

       Liniowa funkcja sklejana
_____________________________________________
      x            y            c=2.2   
_____________________________________________
    1.000000     1.000000
    1.500000     3.000000
    2.000000     7.000000
                           S(c)=   8.200000
    2.500000    10.000000
    3.000000    15.000000
    
ODPOWIEDZ