gdzie:
Współczynnik obliczamy oddzielnie stosując kwadraturę (5.30).
5.6. Aproksymacja funkcjami sklejanymi
Funkcje sklejane dzięki swoim znakomitym własnościom są często wykorzystywane do aproksymacji rozmaitych funkcji i wygładzania danych eksperymentalnych. W niniejszym rozdziale ograniczymy się do przedstawienia dwu zagadnień aproksymacji funkcji określonych na dyskretnym zbiorze argumentów za pomocą funkcji sklejanych trzeciego stopnia.
Pierwsze z tych zagadnień dotyczy aproksymacji średniokwadratowej. Zapisując funkcję sklejaną trzeciego stopnia w postaci kombinacji liniowej znormalizowanych B-funkcji (4.120) z warunku (5.64) na minimum odchylenia kwadratowego
(5.99)
przy założeniu, że n > m + 3, otrzymujemy układ normalny (5.67) dla współczyn- ników
(5.100)
gdzie:
Z definicji B-funkcji sklejanych (4.117) - (4.118) oraz z rysunku 4.18 wynika, że
(5.101)
co oznacza tym samym, że macierz współczynników układu równań (5.100) jest symetryczną macierzą siedmiodiagonalną. Układ równań (5.100) można zatem przed-stawić w postaci
(5.102)
gdzie:
Do rozwiązania tego układu równań można więc zastosować algorytm opisany wzorami (2.99) - (2.100), co w istotny sposób upraszcza zadanie wyznaczania aproksymacyjnej funkcji sklejanej trzeciego stopnia.
*
Jako drugie zagadnienie rozważymy zadanie wygładzania funkcji
, która na zbiorze punktów: przyjmuje wartości:
Wygładzającą funkcję sklejaną trzeciego stopnia, która przechodzi blisko zadanych punktów i jest bardziej gładka niż interpolacyjna funkcja sklejana trzeciego stopnia wyznaczymy minimalizując funkcjonał
(5.103)
gdzie współczynniki są wagami,
- dodatkowym parametrem. Jeśli wszystkie wartości
są określone z jednakową dokładnością, wtedy przyjmujemy W punktach, w których wartości określone są z inną dokładnością, niż w pozostałych - przyjmujemy Dla
funkcja aproksymująca jest funkcją interpolacyjną.
Niech będzie funkcją sklejaną trzeciego stopnia z węzłami w punktach: , a dowolną, dwukrotnie różniczkowalną funkcją aproksymujacą. Z (5.103) mamy
(5.104)
Występującą w wyrażeniu (5.104) całkę
przekształcimy całkując przez części
Przy wyprowadzaniu tego związku wykorzystano fakt, że trzecia pochodna jest stała dla
Dla ciągłej funkcji otrzymujemy
i ostatecznie dla funkcji sklejanej spełniającej warunki:
(5.105)
nazywanej naturalną funkcją sklejaną, jest
(5.106)
Po podstawieniu (5.106) do (5.104) stwierdzamy, że funkcja sklejana trzeciego stopnia, spełniająca warunki wynikające ze znikania mnożników stojących przy wy-razach
(5.107)
minimalizuje funkcjonał (5.103), a także całkę (4.106), gdyż
wtedy i tylko wtedy, gdy
Z warunków (5.107) i wzorów określających trzecie pochodne
wynika układ równań:
(5.108)
Zakładając, że
jest interpolacyjną, naturalną funkcją sklejaną względem samej siebie, dołączymy do układu (5.108) równanie (4.78). Po podstawieniu do (4.78) związków dla uzyskamy układ równań określający drugie pochodne wygładzającej funkcji sklejanej trzeciego stopnia
(5.109)
gdzie:
*
Zadaniem programu 5.4 jest wyznaczanie przybliżeń średniokwadratowych funkcji
określonej na dyskretnym zbiorze punktów za pomocą wielomianowej funkcji sklejanej trzeciego stopnia. Program działa w podobny sposób jak program 5.2; wczytywana z formularza Dane wartość zmiennej m oznacza w tym przypadku liczbę równoodległych węzłów funkcji sklejanej.
Występująca w programie 5.4 procedura funkcyjna Bf(i,x,a,h) jest przeznaczona do obliczania wartości funkcji
według wzorów (4.117) - (4.118); parametr i oznacza numer węzła, x jest zadaną wartością odciętej, a - początkiem przedziału, h - stałą odległością między węzłami.
{Program 5.4}
unit Obliczenia;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, OleCtnrs;
const
mmax = 51;
type
Wekt1 = array[0..mmax] of Real;
Wekt2 = array[0..500] of Real;
Wekt3 = array[1..1000] of Real;
. . . . . . . . . . . . . . . . .
var
Form3: TForm3;
al,be,ga,de: array[-4..mmax] of Real;
a,b,bl,h,odch,ep,la,x,y,y1,y2: Real;
i,j,k,n,m,Q,X0,Y0,ZX,ZY: Integer;
qq: array[-1..mmax] of Real;
c: array[-3..4] of Real;
xx,yy,Xekr,Yekr: Wekt3;
der2,xw,yw: Wekt1;
plik,plik1: Text;
xp,yp: Wekt2;
implementation
uses Ustawienia, Informacje, Grafika, Podglad;
{$R *.DFM}
{function f(x: Real): Real;}
function Bf(i: Integer; x,a,h: Real): Real;
var
s,xx: Real;
begin
s:=0; xx:=a+i*h;
xx:=Abs((x-xx)/h);
if (xx>=0) and (xx<=1) then
s:=3*xx*xx*xx-6*xx*xx+4;
if (xx>1) and (xx<=2) then begin
s:=2-xx; s:=s*s*s;
end;
Bf:=s/6;
end;
{procedure FunSklej2(n:Integer; x:Real; var y,y1,y2: Real;
xw,yw,der2: Wekt1);}
. . . . . . . . . . . . . . . . . . . . . . . . . . .
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
Form2.Show;
AssignFile(plik,Edit6.Text);
AssignFile(plik1,Edit5.Text);
Rewrite(plik); Rewrite(plik1);
Writeln(plik,'PROGRAM 5.4.');
Writeln(plik,'Aproksymacja średniokwadratowa.');
Writeln(plik,'Funkcja sklejana trzeciego stopnia.');
Writeln(plik);
a:=StrtoFloat(Edit1.Text); b:=StrtoFloat(Edit2.Text);
n:=StrtoInt(Edit3.Text); m:=StrtoInt(Edit4.Text);
Writeln(plik,'Początek przedziału: a = ',a:13);
Writeln(plik,'Koniec przedziału: b = ',b:13);
Writeln(plik,'Liczba punktów: n = ',n:3);
Writeln(plik,'Liczba podprzedziałów: m = ',m:3);
Writeln(plik1,n:3); Writeln(plik); h:=(b-a)/n;
for i:=0 to n do begin
x:=a+i*h; y:=f(x);
xp[i]:=x; yp[i]:=y;
xx[i+1]:=x; yy[i+1]:=y;
end;
Q:=n+2; xx[Q]:=0; yy[Q]:=0;
for k:=-4 to m+1 do begin
al[k]:=0; be[k]:=0;
ga[k]:=0; de[k]:=0;
end;
h:=(b-a)/m;
for j:=-1 to m+1 do begin
for k:=-3 to 4 do c[k]:=0;
for i:=0 to n do begin
x:=xp[i];
for k:=-3 to 3 do
c[k]:=c[k]+Bf(j+k,x,a,h)*Bf(j,x,a,h);
c[4]:=c[4]+yp[i]*Bf(j,x,a,h);
end;
ep:=c[-1]+c[-2]*al[j-2]+c[-3]*(be[j-3]+al[j-2]*al[j-3]);
la:=c[0]+ep*al[j-1]+c[-2]*be[j-2]+c[-3]*ga[j-3]+
c[-3]*al[j-3]*be[j-2];
al[j]:=-(c[1]+ep*be[j-1]+c[-2]*ga[j-2]+
c[-3]*al[j-3]*ga[j-2])/la;
be[j]:=-(c[2]+ep*ga[j-1])/la;
ga[j]:=-c[3]/la;
de[j]:=(c[4]-ep*de[j-1]-c[-2]*de[j-2]-c[-3]*
(de[j-3]+al[j-3]*de[j-2]))/la;
end;
qq[m+1]:=de[m+1];
qq[m]:=al[m]*qq[m+1]+de[m];
qq[m-1]:=al[m-1]*qq[m]+be[m-1]*qq[m+1]+de[m-1];
for k:=m-2 downto -1 do
qq[k]:=al[k]*qq[k+1]+be[k]*qq[k+2]+ga[k]*qq[k+3]+de[k];
for k:=0 to m do begin
xw[k]:=a+k*h;
yw[k]:=(qq[k-1]+4*qq[k]+qq[k+1])/6;
der2[k]:=(qq[k-1]-2*qq[k]+qq[k+1])/h/h;
end;
odch:=0; Writeln(plik,'Wyniki aproksymacji funkcji:');
Writeln(plik,' i x[i] y[i] błąd');
for i:=0 to n do begin
x:=xp[i];
FunSklej2(m,x,y,y1,y2,xw,yw,der2);
bl:=f(x)-y; odch:=odch+Sqr(y-yp[i]);
Writeln(plik,i:3,' ',x:13,' ',y:18,' ',bl:13);
Q:=Q+1; xx[Q]:=x; yy[Q]:=y;
end;
Writeln(plik);
Writeln(plik,'Odchylenie kwadratowe: ',odch:13);
for k:=1 to 2*n+3 do
Writeln(plik1,xx[k]:13,' ',yy[k]:13);
CloseFile(plik); CloseFile(plik1);
Form2.Wyniki.Lines.LoadFromFile(Edit6.Text);
end;
. . . . . . . . . . . . . . . . . . . . . .
Rys. 5.28
Rys. 5.29
Rys. 5.30
Rys. 5.31
Rys. 5.32
Rys. 5.33
Przedstawione na rysunkach 5.28 ÷ 5.33 wyniki obliczeń numerycznych dotyczą aproksymacji tych samych funkcji, które były już wykorzystane przy testowaniu programu 5.2 (tabl. 5.1); wyniki te zostały uzyskane dla danych podstawowych przyjętych zgodnie z tablicą 5.2.
Tablica 5.2
|
Rys. |
Funkcja |
a |
b |
n |
m |
|
5.28 5.29 |
|
−1 −1 |
1 1 |
100 100 |
6 20 |
|
5.30 5.31 |
|
−1 −1 |
1 1 |
100 100 |
6 20 |
|
5.32 5.33 |
|
0 0 |
1 1 |
100 100 |
6 20 |
Fragment wydruku komputerowego zawierającego wyniki obliczeń numerycznych aproksymacji średniokwadratowej funkcji za pomocą funkcji sklejanej trzeciego stopnia (rys. 5.33) jest następujący:
PROGRAM 5.4.
Aproksymacja średniokwadratowa.
Funkcja sklejana trzeciego stopnia.
Początek przedziału: a = 0.0000E+0000
Koniec przedziału: b = 1.0000E+0000
Liczba punktów: n = 100
Liczba podprzedziałów: m = 20
Wyniki aproksymacji funkcji:
i x[i] y[i] błąd
0 0.0000E+0000 -1.332752168E-0004 1.3328E-0004
1 1.0000E-0002 9.391081959E-0003 -3.4271E-0004
2 2.0000E-0002 3.264868414E-0002 1.0054E-0004
3 3.0000E-0002 6.635630616E-0002 3.1733E-0004
4 4.0000E-0002 1.072307228E-0001 2.0484E-0005
5 5.0000E-0002 1.519887092E-0001 -3.5604E-0004
6 6.0000E-0002 1.977383800E-0001 -1.6619E-0004
7 7.0000E-0002 2.431532106E-0001 1.7359E-0004
8 8.0000E-0002 2.872980166E-0001 2.7252E-0004
9 9.0000E-0002 3.292376133E-0001 8.3811E-0005
10 1.0000E-0001 3.680368162E-0001 -1.5738E-0004
11 1.1000E-0001 4.029192778E-0001 -1.4527E-0004
12 1.2000E-0001 4.337439985E-0001 -2.4333E-0005
13 1.3000E-0001 4.605288159E-0001 4.9914E-0005
14 1.4000E-0001 4.832915673E-0001 3.8482E-0005
15 1.5000E-0001 5.020500902E-0001 -7.2299E-0006
16 1.6000E-0001 5.168617616E-0001 -6.6755E-0006
17 1.7000E-0001 5.279421160E-0001 1.3268E-0005
18 1.8000E-0001 5.355462276E-0001 2.2170E-0005
19 1.9000E-0001 5.399291703E-0001 1.3545E-0005
20 2.0000E-0001 5.413460182E-0001 -4.8852E-0006
21 2.1000E-0001 5.400529951E-0001 -2.0147E-0005
22 2.2000E-0001 5.363109241E-0001 -2.3638E-0005
23 2.3000E-0001 5.303817777E-0001 -1.2494E-0005
24 2.4000E-0001 5.225275289E-0001 7.8820E-0006
25 2.5000E-0001 5.130101503E-0001 2.1091E-0005
26 2.6000E-0001 5.020790383E-0001 1.0350E-0005
27 2.7000E-0001 4.899332836E-0001 -5.0957E-0006
28 2.8000E-0001 4.767594007E-0001 -8.5097E-0006
29 2.9000E-0001 4.627439038E-0001 1.3768E-0006
30 3.0000E-0001 4.480733075E-0001 1.0307E-0005
31 3.1000E-0001 4.329220021E-0001 8.3287E-0007
32 3.2000E-0001 4.174158831E-0001 -1.0914E-0005
33 3.3000E-0001 4.016687216E-0001 -1.1028E-0005
34 3.4000E-0001 3.857942892E-0001 7.1159E-0007
35 3.5000E-0001 3.699063571E-0001 1.1589E-0005
36 3.6000E-0001 3.541090874E-0001 6.3555E-0006
37 3.7000E-0001 3.384682046E-0001 -3.1272E-0006
38 3.8000E-0001 3.230398238E-0001 -5.8782E-0006
39 3.9000E-0001 3.078800600E-0001 -5.8693E-0007
40 4.0000E-0001 2.930450284E-0001 5.1938E-0006
41 4.1000E-0001 2.785848313E-0001 1.8422E-0006
42 4.2000E-0001 2.645255197E-0001 -3.5446E-0006
43 4.3000E-0001 2.508871319E-0001 -4.4758E-0006
44 4.4000E-0001 2.376897062E-0001 -4.0567E-0007
45 4.5000E-0001 2.249532808E-0001 3.8991E-0006
46 4.6000E-0001 2.126943729E-0001 2.4714E-0006
47 4.7000E-0001 2.009154158E-0001 -7.4462E-0007
48 4.8000E-0001 1.896153215E-0001 -1.9495E-0006
49 4.9000E-0001 1.787930023E-0001 -5.4277E-0007
50 5.0000E-0001 1.684473702E-0001 1.3047E-0006
51 5.1000E-0001 1.585756794E-0001 6.9872E-0007
52 5.2000E-0001 1.491685520E-0001 -6.5011E-0007
53 5.3000E-0001 1.402149521E-0001 -1.0792E-0006
54 5.4000E-0001 1.317038437E-0001 -3.4339E-0007
55 5.5000E-0001 1.236241908E-0001 6.4516E-0007
56 5.6000E-0001 1.159643475E-0001 6.5860E-0007
57 5.7000E-0001 1.087102269E-0001 1.9073E-0007
58 5.8000E-0001 1.018471322E-0001 -1.9059E-0007
59 5.9000E-0001 9.536036634E-0002 -2.9220E-0007
60 6.0000E-0001 8.923523240E-0002 -1.5404E-0007
. . . . . . . . . . . . . . . . . . . . . . . . . .
Odchylenie kwadratowe: 5.6616E-0007
320 5. Różniczkowanie, całkowanie i aproksymacja
5.6. Aproksymacja funkcjami sklejanymi 323