4 2.0000E+0000 7.383970324E+0000 5.0858E-0003
5 2.5000E+0000 1.217201358E+0001 1.0480E-0002
6 3.0000E+0000 2.006480364E+0001 2.0733E-0002
7 3.5000E+0000 3.307557475E+0001 3.9877E-0002
8 4.0000E+0000 5.452301775E+0001 7.5132E-0002
9 4.5000E+0000 8.987778706E+0001 1.3934E-0001
10 5.0000E+0000 1.481579146E+0002 2.5524E-0001
6.1.4. Liniowe metody wielokrokowe
Liniowa metoda k-krokowa (k jest zadaną liczbą naturalną) konstruuje ciąg: , , ... przybliżeń wartości rozwiązania zagadnienia (6.9) w równoodległych punktach:
spełniający zależności [29, 30]
(6.60)
Nazwa metody wynika stąd, że zarówno pochodną jak i prawą stronę równania (6.1) aproksymują wartości funkcji na k krokach. W każdym kroku obliczeń w metodzie tej korzysta się z k znanych, poprzednio obliczonych wartości: Liniowość metody oznacza jej liniową zależność od wartości funkcji W szczególności przy: z oraz otrzymamy metodę Eulera jako przykład najprostszej liniowej metody jednokrokowej.
Metoda wielokrokowa liniowa może być jawna w przypadku, gdy
(6.61)
bądź też niejawna, w przypadku przeciwnym
(6.62)
Większość najczęściej stosowanych liniowych metod wielokrokowych opiera się na aproksymacji całki
(6.63)
równoważnej równaniu (6.1), kwadraturami interpolacyjnymi.
Całkowaną niewiadomą funkcję
przybliżymy wielomianem interpolacyjnym Lagrange'a
stopnia q, opartego na węzłach dla Zgodnie ze wzorem (4.12) mamy
i następnie dla otrzymujemy wzór aproksymujący całkę (6.63)
We wzorze tym wygodnie jest dokonać zamiany zmiennej, podstawiając Ostatecznie jest
(6.64)
gdzie
W zależności od wyboru liczb r, l i q możemy wyprowadzić różne metody wielokrokowe. Przyjmując: r = 1, l = 0, q = 0, 1, 2, ... otrzymujemy wzory AdamsaBashfortha:
(6.65)
Podobnie dla: r = 0, l = 1, q = 0, 1, 2, ... otrzymujemy wzory Adamsa-Moul-tona:
(6.66)
(6.66cd.)
Innym rodzajem tego typu wzorów są wzory Nyströma (r = 1, l = 1) oraz wzory Milne'a (r = 0, l = 2).
Wzory (6.65) są wzorami jawnymi (ekstrapolacyjnymi), wzory (6.66) - wzorami niejawnymi (interpolacyjnymi). Wzory niejawne w porównaniu ze wzorami jawny-mi mają wyższy rząd dokładności i znacznie większy przedział stabilności absolutnej oraz charakteryzują się mniejszą wartością stałej błędu. Zaletą metod jawnych jest tylko łatwe obliczanie kolejnej wartości
Praktyczną realizacją metody wielokrokowej niejawnej jest metoda predyktorkorektor. W każdym kroku pierwszym etapem obliczeń jest tak zwana predykcja, to znaczy obliczanie przybliżenia początkowego za pomocą metody jawnej, a drugim etapem obliczeń jest tak zwana korekcja, czyli dokonanie kilku iteracji za pomocą metody niejawnej. Należy tu podkreślić, że chodzi tu o zastosowanie metody niejawnej, a metoda jawna gra rolę pomocniczą i służy jedynie do zapoczątkowania procesu iteracyjnego. Skuteczność metody predyktor-korektor zależy nie tylko od własności teoretycznych użytych metod wielokrokowych, ale wymaga także uwz-ględnienia szeregu czynników o charakterze praktycznym.
*
Przedstawiony sposób wyprowadzania wzorów różnicowych narzuca pewne ograniczenia na ich postać. Wychodząc natomiast z ogólnego wzoru różnicowego (6.60) możemy wyprowadzać różne wzory różnicowe, których nie można uzyskać z kwadratur interpolacyjnych.
W celu wyprowadzenia wzorów na współczynniki równania różnicowego (6.60) rozwiniemy wartości funkcji oraz ich pochodnych w szeregi Taylora w otoczeniu punktu xi
Po podstawieniu tych rozwinięć do (6.60) i uporządkowaniu otrzymujemy
(6.67)
gdzie oznaczono:
(6.68)
Ograniczając się do p +1 wyrazów uzyskujemy stąd równania:
(6.69)
umożliwiające wyznaczenie wszystkich współczynników:
Określona w ten sposób metoda wielokrokowa liniowa jest rzędu p; współczynnik nosi nazwę błędu metody.
Ze względu na warunki (6.69) i budowę wzorów (6.68) jednemu spośród współ-czynników: ( j = 0, 1, ..., k) można nadać dowolną wartość; przyjmiemy
(6.70)
Wyznaczymy współczynniki jawnej i niejawnej metody dwukrokowej. W przypadku metody jawnej ( = 0) otrzymujemy:
(6.71)
(6.71cd.)
Dla = 0 obliczamy:
Są to współczynniki określające drugi ze wzorów (6.65). Błąd tej metody wynosi
W przypadku dwukrokowej metody niejawnej niewiadome współczynniki:
wyznaczamy z układu równań:
(6.72)
W szczególnym przypadku dla = 0 otrzymujemy współczynniki określające trzeci ze wzorów (6.66):
Odnotujmy jeszcze wzór dla błędu tej metody
Wynika stąd, że rząd rozważanej dwukrokowej metody niejawnej wynosi 3, podczas gdy rząd metody jawnej jest równy 2. Istnieje ponadto możliwość zwiększenia rzędu metody niejawnej, gdyż maksymalny osiągalny rząd dla k parzystego wynosi
( k +2), a dla k nieparzystego ( k +1) [30].
*
Omówimy teraz warunki, jakie muszą spełniać współczynniki liniowej metody wielokrokowej określonej wzorem (6.60), aby metoda wielokrokowa była zgodna, zbieżna i stabilna.
Biorąc pod uwagę fakt, że występujące w rozwinięciu (6.67) wartości funkcji i jej pochodnych nie mogą znikać, w granicy dla otrzymujemy warunki:
(6.73)
a więc liniowa metoda wielokrokowa jest zgodna (spełnia warunek aproksymacji), jeśli jest ona co najmniej rzędu pierwszego.
W teorii liniowych metod wielokrokowych definiuje się dwa wielomiany charakterystyczne:
- wielomian
(6.74)
- wielomian
(6.75)
W przypadku metody zgodnej wielomiany te mają następujące własności:
(6.76)
co łatwo można sprawdzić przez porównanie z warunkami zgodności (6.73).
Udowadnia się [30], że liniowa metoda wielokrokowa jest zbieżna wtedy i tylko wtedy, gdy jest zgodna i stabilna.
Rozstrzygnięcie problemu zbieżności następuje na drodze badania własności wielomianów (6.74) i (6.75). Metoda wielokrokowa jest stabilna, jeżeli pierwiastki wielomianu charakterystycznego (6.74) tej metody leżą w kole jednostkowym, przy czym pierwiastki o module równym jedności są pojedyncze. Stabilność określoną w powyższej definicji nazywa się stabilnością Dahlquista (lub zerostabilnością). Metodę wielokrokową nazywamy silnie stabilną, jeśli jedynym pierwiastkiem wielomianu o module 1 jest pierwiastek równy 1. Jeśli oprócz pierwiastka z = 1 istnieją inne pierwiastki o module równym jedności metoda jest słabo stabilna. Wszystkie metody (6.65) - (6.66) są silnie stabilne.
Zerostabilność metody wielokrokowej gwarantuje istnienie numerycznego rozwiązania asymptotycznego. Można ją uważać za własność metody, powodującą „wygaszanie” członów pasożytniczych w rozwiązaniu przybliżonym, powstających wskutek zastąpienia pochodnej pierwszego rzędu wyrażeniami różnicowymi rzędów wyższych niż pierwszy.
Oprócz zerostabilności istotne jest jeszcze określenie stabilności numerycznej tzn. zbadanie warunków, przy których nie występuje narastanie błędu numerycznego. Stabilność ta jest badana, tak samo jak w metodzie Rungego-Kutty, dla modelowego zagadnienia (6.50). Po zaburzeniu wartości funkcji na kroku i+j łatwo stwierdzamy, że o zachowaniu się błędów decyduje wielomian stabilności numerycznej
(6.77)
Liniową metodę wielokrokową nazywamy absolutnie stabilną, jeśli pierwiastki wielomianu spełniają nierówność
(6.78)
W przeciwnym wypadku metoda jest absolutnie niestabilna.
Liniową metodę wielokrokową nazywamy względnie stabilną, jeśli pierwiastki wielomianu spełniają nierówność
(6.79)
W przeciwnym razie metoda jest względnie niestabilna. Stabilność względna oznacza, że błąd narasta wolniej niż rozwiązanie zagadnienia różniczkowego.
Dla metod absolutnie stabilnych i metod względnie stabilnych można określić odpowiednie przedziały otwarte (a, b) zawierające takie wartości które zapewniają te dwa rodzaje stabilności. W przypadku metod (6.65) dolne granice przedziału stabilności absolutnej wynoszą:
a w przypadku metod (6.66) wartości są następujące:
A więc istotnie metody niejawne mają znacznie większy przedział stabilności absolutnej w porównaniu z metodami jawnymi.
*
{Program 6.4}
unit Obliczenia;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons;
. . . . . . . . . . . . . . . . .
var
Form3: TForm3;
a,b,bl,eps,f1,f2,f3,f4,h,
x,x1,x2,x3,x4,ya,yp: Real;
y: array[0..100] of Real;
i,k,n: Integer;
plik: Text;
implementation
uses Ustawienia, Informacje, Grafika, Podglad;
{$R *.DFM}
{function f(x,y: Real): Real;}
{function yd(x: Real): Real;}
. . . . . . . . . . . . . . . . . . . . . .
procedure TForm3.BitBtn1Click(Sender: TObject);
label powt;
begin
Form2.Show;
AssignFile(plik,Edit5.Text);
Rewrite(plik); Writeln(plik,'PROGRAM 6.4.');
Writeln(plik,'Zagadnienie początkowe dla równania');
Writeln(plik,'różniczkowego zwyczajnego.');
Writeln(plik,'Metoda predyktor-korektor.');
Writeln(plik); a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text); n:=StrToInt(Edit3.Text);
ya:=StrToFloat(Edit4.Text); eps:=StrToFloat(Edit6.Text);
if RadioButton1.Checked then k:=1;
if RadioButton2.Checked then k:=2;
if RadioButton3.Checked then k:=3;
if RadioButton4.Checked then k:=4;
Writeln(plik,'Liczba podprzedziałów: n = ',n:3);
Writeln(plik,'Początek przedziału: a = ',a:13);
Writeln(plik,'Koniec przedziału: b = ',b:13);
Writeln(plik,'Warunek początkowy: ya = ',ya:13);
Writeln(plik,'Dokładność obliczeń: eps = ',eps:13);
Write(plik,'Predyktor: ',k:1,'-krokowy wzór Adamsa-');
Writeln(plik,'Bashfortha.');
Writeln(plik,'Korektor: ',k:1,'-krokowy wzór Adamsa-Moultona.');
Writeln(plik); Writeln(plik,'Obliczone wartości funkcji:');
Writeln(plik,' i x[i] y[i] błąd');
h:=(b-a)/n;
for i:=0 to k-1 do begin
x:=a+i*h;
Writeln(plik,i:3,' ',x:13,' ',yd(x):18,' ',
yd(x)-yd(x):13);
end;
for i:=0 to n do
y[i]:=yd(a+i*h);
for i:=k to n do begin
x:=a+i*h;
x1:=x-h; x2:=x1-h;
x3:=x2-h; x4:=x3-h;
f1:=f(x1,y[i-1]);
if k>1 then f2:=f(x2,y[i-2]);
if k>2 then f3:=f(x3,y[i-3]);
if k>3 then f4:=f(x4,y[i-4]);
case k of
1: y[i]:=y[i-1]+h*f1;
2: y[i]:=y[i-1]+h*(3*f1-f2)/2;
3: y[i]:=y[i-1]+h*(23*f1-16*f2+5*f3)/12;
4: y[i]:=y[i-1]+h*(55*f1-59*f2+37*f3-9*f4)/24;
end;
repeat
yp:=y[i];
case k of
1: y[i]:=y[i-1]+h*(f(x,yp)+f1)/2;
2: y[i]:=y[i-1]+h*(5*f(x,yp)+8*f1-f2)/12;
3: y[i]:=y[i-1]+h*(9*f(x,yp)+19*f1-5*f2+f3)/24;
4: y[i]:=y[i-1]+h*(251*f(x,yp)+646*f1-264*f2+
106*f3-19*f4)/720;
end;
bl:=Abs(y[i]-yp);
until (bl<eps);
bl:=yd(x)-y[i];
Writeln(plik,i:3,' ',x:13,' ',y[i]:18,' ',bl:13);
end;
Writeln(plik); CloseFile(plik);
Form2.Wyniki.Lines.LoadFromFile(Edit5.Text);
end;
. . . . . . . . . . . . . . . . . . . . . . .
procedure TForm3.BitBtn3Click(Sender: TObject);
begin
Close;
end;
end.
Rys. 6.6
W programie 6.4 wyznaczane jest rozwiązanie zagadnienia (6.22) - (6.23) metodą predyktor-korektor. W zależności od wyboru alternatywy obliczeń predyktorami
i korektorami są, odpowiednio, wzory Adamsa-Bashfortha (6.65) lub wzory Adamsa-Moultona (6.66): dwu-, trzy- i czterokrokowe. Funkcja
obliczana jest w procedurze funkcyjnej f(x,y). Liczby określające: granice przedziału
długość kroku całkowania
, warunek początkowy
oraz dokładność obliczeń
- wczytywane są z formularza Dane (rys. 6.6) Niezbędne dodatkowe wartości początkowe wyznaczane są z rozwiązania dokładnego, obliczanego w procedurze funkcyjnej yd(x).
Wyniki trzech przykładowych obliczeń są następujące:
PROGRAM 6.4.
Zagadnienie początkowe dla równania
różniczkowego zwyczajnego.
Metoda predyktor-korektor.
Liczba podprzedziałów: n = 20
Początek przedziału: a = 0.0000E+0000
Koniec przedziału: b = 2.0000E+0000
Warunek początkowy: ya = 1.0000E+0000
Dokładność obliczeń: eps = 1.0000E-0008
Predyktor: 2-krokowy wzór Adamsa-Bashfortha.
Korektor: 2-krokowy wzór Adamsa-Moultona.
Obliczone wartości funkcji:
i x[i] y[i] błąd
0 0.0000E+0000 1.000000000E+0000 0.0000E+0000
1 1.0000E-0001 1.095445115E+0000 0.0000E+0000
2 2.0000E-0001 1.183182829E+0000 3.3127E-0005
3 3.0000E-0001 1.264853439E+0000 5.7625E-0005
4 4.0000E-0001 1.341561942E+0000 7.8845E-0005
5 5.0000E-0001 1.414113883E+0000 9.9680E-0005
6 6.0000E-0001 1.483117828E+0000 1.2186E-0004
7 7.0000E-0001 1.549046659E+0000 1.4668E-0004
8 8.0000E-0001 1.612276337E+0000 1.7521E-0004
9 9.0000E-0001 1.673111490E+0000 2.0856E-0004
10 1.0000E+0000 1.731802888E+0000 2.4792E-0004
11 1.1000E+0000 1.788559751E+0000 2.9463E-0004
12 1.2000E+0000 1.843558617E+0000 3.5027E-0004
13 1.3000E+0000 1.896949879E+0000 4.1672E-0004
14 1.4000E+0000 1.948862679E+0000 4.9619E-0004
15 1.5000E+0000 1.999408634E+0000 5.9137E-0004
16 1.6000E+0000 2.048684693E+0000 7.0546E-0004
17 1.7000E+0000 2.096775352E+0000 8.4234E-0004
18 1.8000E+0000 2.143754377E+0000 1.0066E-0003
19 1.9000E+0000 2.189686129E+0000 1.2041E-0003
20 2.0000E+0000 2.234626586E+0000 1.4413E-0003
PROGRAM 6.4.
Zagadnienie początkowe dla równania
różniczkowego zwyczajnego.
Metoda predyktor-korektor.
Liczba podprzedziałów: n = 20
Początek przedziału: a = 0.0000E+0000
Koniec przedziału: b = 2.0000E+0000
Warunek początkowy: ya = 1.0000E+0000
Dokładność obliczeń: eps = 1.0000E-0008
Predyktor: 3-krokowy wzór Adamsa-Bashfortha.
Korektor: 3-krokowy wzór Adamsa-Moultona.
Obliczone wartości funkcji:
i x[i] y[i] błąd
0 0.0000E+0000 1.000000000E+0000 0.0000E+0000
1 1.0000E-0001 1.095445115E+0000 0.0000E+0000
2 2.0000E-0001 1.183215957E+0000 0.0000E+0000
3 3.0000E-0001 1.264919302E+0000 -8.2379E-0006
4 4.0000E-0001 1.341654802E+0000 -1.4015E-0005
5 5.0000E-0001 1.414232359E+0000 -1.8797E-0005
6 6.0000E-0001 1.483263147E+0000 -2.3449E-0005
7 7.0000E-0001 1.549221761E+0000 -2.8423E-0005
8 8.0000E-0001 1.612485572E+0000 -3.4022E-0005
9 9.0000E-0001 1.673360558E+0000 -4.0505E-0005
10 1.0000E+0000 1.732098931E+0000 -4.8124E-0005
11 1.1000E+0000 1.788911533E+0000 -5.7151E-0005
12 1.2000E+0000 1.843976789E+0000 -6.7897E-0005
13 1.3000E+0000 1.897447324E+0000 -8.0728E-0005
14 1.4000E+0000 1.949454944E+0000 -9.6075E-0005
15 1.5000E+0000 2.000114456E+0000 -1.1445E-0004
16 1.6000E+0000 2.049526645E+0000 -1.3649E-0004
17 1.7000E+0000 2.097780626E+0000 -1.6293E-0004
18 1.8000E+0000 2.144955728E+0000 -1.9467E-0004
19 1.9000E+0000 2.191123026E+0000 -2.3280E-0004
20 2.0000E+0000 2.236346597E+0000 -2.7862E-0004
PROGRAM 6.4.
Zagadnienie początkowe dla równania
różniczkowego zwyczajnego.
Metoda predyktor-korektor.
Liczba podprzedziałów: n = 20
Początek przedziału: a = 0.0000E+0000
Koniec przedziału: b = 2.0000E+0000
Warunek początkowy: ya = 1.0000E+0000
Dokładność obliczeń: eps = 1.0000E-0008
Predyktor: 4-krokowy wzór Adamsa-Bashfortha.
Korektor: 4-krokowy wzór Adamsa-Moultona.
Obliczone wartości funkcji:
i x[i] y[i] błąd
0 0.0000E+0000 1.000000000E+0000 0.0000E+0000
1 1.0000E-0001 1.095445115E+0000 0.0000E+0000
2 2.0000E-0001 1.183215957E+0000 0.0000E+0000
3 3.0000E-0001 1.264911064E+0000 0.0000E+0000
4 4.0000E-0001 1.341638123E+0000 2.6633E-0006
5 5.0000E-0001 1.414209107E+0000 4.4550E-0006
6 6.0000E-0001 1.483233831E+0000 5.8660E-0006
7 7.0000E-0001 1.549186090E+0000 7.2490E-0006
8 8.0000E-0001 1.612442810E+0000 8.7394E-0006
9 9.0000E-0001 1.673309622E+0000 1.0430E-0005
10 1.0000E+0000 1.732038406E+0000 1.2401E-0005
11 1.1000E+0000 1.788839653E+0000 1.4729E-0005
12 1.2000E+0000 1.843891395E+0000 1.7496E-0005
13 1.3000E+0000 1.897345797E+0000 2.0799E-0005
14 1.4000E+0000 1.949334121E+0000 2.4748E-0005
15 1.5000E+0000 1.999970522E+0000 2.9478E-0005
16 1.6000E+0000 2.049355004E+0000 3.5149E-0005
17 1.7000E+0000 2.097575743E+0000 4.1954E-0005
18 1.8000E+0000 2.144710936E+0000 5.0123E-0005
19 1.9000E+0000 2.190830293E+0000 5.9937E-0005
20 2.0000E+0000 2.235996245E+0000 7.1733E-0005
*
Innym rodzajem algorytmów prowadzących do konstrukcji metod wielokrokowych postaci (6.60) są wzory Geara [9, 32], oparte na metodzie wstecznego różniczkowania [30]. Idea tej metody polega na przybliżaniu rozwiązania zagadnienia początkowego wielomianem interpolacyjnym o postaci Newtona wstecz (4.31).
Przybliżając pochodną rozwiązania równania różniczkowego w punkcie pochodną drugiego wielomianu interpolacyjnego Newtona (4.31) i pamiętając, że dostajemy wzory metody jawnej wstecznego różniczkowania (ekstrapo-lacyjnej):
(6.80)
(6.80cd.)
Postępując podobnie dla przybliżenia rozwiązania w punkcie uzyskamy wzory niejawnej metody wstecznego różniczkowania (interpolacyjnej):
(6.81)
{Program 6.5}
unit Obliczenia;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons;
. . . . . . . . . . . . . . . . .
var
Form3: TForm3;
a,b,bl,eps,f1,h,x,x1,ya,yp: Real;
y: array[0..100] of Real;
i,k,n: Integer;
plik: Text;
implementation
uses Ustawienia, Informacje, Grafika, Podglad;
{$R *.DFM}
{function f(x,y: Real): Real;}
{function yd(x: Real): Real;}
. . . . . . . . . . . . . . . . . . . . . .
procedure TForm3.BitBtn1Click(Sender: TObject);
label powt;
begin
Form2.Show;
AssignFile(plik,Edit5.Text);
Rewrite(plik); Writeln(plik,'PROGRAM 6.5.');
Writeln(plik,'Zagadnienie początkowe dla równania');
Writeln(plik,'różniczkowego zwyczajnego.');
Writeln(plik,'Metoda predyktor-korektor.');
Writeln(plik,'Wzory metody wstecznego różniczkowania.');
Writeln(plik); a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text); n:=StrToInt(Edit3.Text);
ya:=StrToFloat(Edit4.Text); eps:=StrToFloat(Edit6.Text);
if RadioButton1.Checked then k:=1;
if RadioButton2.Checked then k:=2;
if RadioButton3.Checked then k:=3;
if RadioButton4.Checked then k:=4;
Writeln(plik,'Liczba podprzedziałów: n = ',n:3);
Writeln(plik,'Początek przedziału: a = ',a:13);
Writeln(plik,'Koniec przedziału: b = ',b:13);
Writeln(plik,'Warunek początkowy: ya = ',ya:13);
Writeln(plik,'Dokładność obliczeń: eps = ',eps:13);
Writeln(plik,'Predyktor: ',k:1,'-krokowy wzór metody jawnej.');
Writeln(plik,'Korektor: ',k:1,'-krokowy wzór metody niejawnej.');
Writeln(plik); Writeln(plik,'Obliczone wartości funkcji:');
Writeln(plik,' i x[i] y[i] błąd');
h:=(b-a)/n;
for i:=0 to k-1 do begin
x:=a+i*h;
Writeln(plik,i:3,' ',x:13,' ',yd(x):18,' ',
yd(x)-yd(x):13);
end;
for i:=0 to k-1 do
y[i]:=yd(a+i*h);
for i:=k to n do begin
x:=a+i*h; x1:=x-h;
f1:=f(x1,y[i-1]);
case k of
1: y[i]:=y[i-1]+h*f1;
2: y[i]:=y[i-2]+2*h*f1;
3: y[i]:=(-3*y[i-1]+6*y[i-2]-y[i-3])/2+3*h*f1;
4: y[i]:=(-10*y[i-1]+18*y[i-2]-6*y[i-3]+y[i-4])/3+4*h*f1;
end;
repeat
yp:=y[i];
case k of
1: y[i]:=y[i-1]+h*f(x,yp);
2: y[i]:=(4*y[i-1]-y[i-2])/3+2*h*f(x,yp)/3;
3: y[i]:=(18*y[i-1]-9*y[i-2]+2*y[i-3])/11+
6*h*f(x,yp)/11;
4: y[i]:=(48*y[i-1]-36*y[i-2]+16*y[i-3]-3*y[i-4])/25+
12*h*f(x,yp)/25;
end;
bl:=Abs(y[i]-yp);
until (bl<eps);
bl:=yd(x)-y[i];
Writeln(plik,i:3,' ',x:13,' ',y[i]:18,' ',bl:13);
end;
Writeln(plik); CloseFile(plik);
Form2.Wyniki.Lines.LoadFromFile(Edit5.Text);
end;
. . . . . . . . . . . . . . . . . . . . . . .
procedure TForm3.BitBtn3Click(Sender: TObject);
begin
Close;
end;
end.
Program 6.5 jest zmodyfikowanym programem 6.4, w którym zamiast wzorów Adamsa-Bashfortha i wzorów Adamsa-Moultona predyktorami są wzory jawne wstecznego różniczkowania (6.80), a korektorami wzory niejawne wstecznego różniczkowania (6.81). Wyniki powtórzonych obliczeń dla zagadnienia (6.22) - (6.23) przy wykorzystaniu metod dwu-, trzy- i czterokrokowych wstecznego różniczkowania są następujące:
PROGRAM 6.5.
Zagadnienie początkowe dla równania
różniczkowego zwyczajnego.
Metoda predyktor-korektor.
Wzory metody wstecznego różniczkowania.
Liczba podprzedziałów: n = 20
Początek przedziału: a = 0.0000E+0000
Koniec przedziału: b = 2.0000E+0000
Warunek początkowy: ya = 1.0000E+0000
Dokładność obliczeń: eps = 1.0000E-0008
Predyktor: 2-krokowy wzór metody jawnej.
Korektor: 2-krokowy wzór metody niejawnej.
Obliczone wartości funkcji:
i x[i] y[i] błąd
0 0.0000E+0000 1.000000000E+0000 0.0000E+0000
1 1.0000E-0001 1.095445115E+0000 0.0000E+0000
2 2.0000E-0001 1.183640124E+0000 -4.2417E-0004
3 3.0000E-0001 1.265827035E+0000 -9.1597E-0004
4 4.0000E-0001 1.343048594E+0000 -1.4078E-0003
5 5.0000E-0001 1.416120136E+0000 -1.9066E-0003
6 6.0000E-0001 1.485674709E+0000 -2.4350E-0003
7 7.0000E-0001 1.552211019E+0000 -3.0177E-0003
8 8.0000E-0001 1.616130557E+0000 -3.6790E-0003
9 9.0000E-0001 1.677764266E+0000 -4.4442E-0003
10 1.0000E+0000 1.737391538E+0000 -5.3407E-0003
11 1.1000E+0000 1.795254006E+0000 -6.3996E-0003
12 1.2000E+0000 1.851565876E+0000 -7.6570E-0003
13 1.3000E+0000 1.906521973E+0000 -9.1554E-0003
14 1.4000E+0000 1.960304316E+0000 -1.0945E-0002
15 1.5000E+0000 2.013087745E+0000 -1.3087E-0002
16 1.6000E+0000 2.065045022E+0000 -1.5655E-0002
17 1.7000E+0000 2.116351672E+0000 -1.8734E-0002
18 1.8000E+0000 2.167190838E+0000 -2.2430E-0002
19 1.9000E+0000 2.217758322E+0000 -2.6868E-0002
20 2.0000E+0000 2.268268015E+0000 -3.2200E-0002
PROGRAM 6.5.
Zagadnienie początkowe dla równania
różniczkowego zwyczajnego.
Metoda predyktor-korektor.
Wzory metody wstecznego różniczkowania.
Liczba podprzedziałów: n = 20
Początek przedziału: a = 0.0000E+0000
Koniec przedziału: b = 2.0000E+0000
Warunek początkowy: ya = 1.0000E+0000
Dokładność obliczeń: eps = 1.0000E-0008
Predyktor: 3-krokowy wzór metody jawnej.
Korektor: 3-krokowy wzór metody niejawnej.
Obliczone wartości funkcji:
i x[i] y[i] błąd
0 0.0000E+0000 1.000000000E+0000 0.0000E+0000
1 1.0000E-0001 1.095445115E+0000 0.0000E+0000
2 2.0000E-0001 1.183215957E+0000 0.0000E+0000
3 3.0000E-0001 1.264832551E+0000 7.8513E-0005
4 4.0000E-0001 1.341453038E+0000 1.8775E-0004
5 5.0000E-0001 1.413917374E+0000 2.9619E-0004
6 6.0000E-0001 1.482840968E+0000 3.9873E-0004
7 7.0000E-0001 1.548691716E+0000 5.0162E-0004
8 8.0000E-0001 1.611838835E+0000 6.1271E-0004
9 9.0000E-0001 1.672581449E+0000 7.3860E-0004
10 1.0000E+0000 1.731165917E+0000 8.8489E-0004
11 1.1000E+0000 1.787797348E+0000 1.0570E-0003
12 1.2000E+0000 1.842647867E+0000 1.2610E-0003
13 1.3000E+0000 1.895862784E+0000 1.5038E-0003
14 1.4000E+0000 1.947565238E+0000 1.7936E-0003
15 1.5000E+0000 1.997859693E+0000 2.1403E-0003
16 1.6000E+0000 2.046834527E+0000 2.5556E-0003
17 1.7000E+0000 2.094563941E+0000 3.0538E-0003
18 1.8000E+0000 2.141109301E+0000 3.6518E-0003
19 1.9000E+0000 2.186520013E+0000 4.3702E-0003
20 2.0000E+0000 2.230833999E+0000 5.2340E-0003
PROGRAM 6.5.
Zagadnienie początkowe dla równania
różniczkowego zwyczajnego.
Metoda predyktor-korektor.
Wzory metody wstecznego różniczkowania.
Liczba podprzedziałów: n = 20
Początek przedziału: a = 0.0000E+0000
Koniec przedziału: b = 2.0000E+0000
Warunek początkowy: ya = 1.0000E+0000
Dokładność obliczeń: eps = 1.0000E-0008
Predyktor: 4-krokowy wzór metody jawnej.
Korektor: 4-krokowy wzór metody niejawnej.
Obliczone wartości funkcji:
i x[i] y[i] błąd
0 0.0000E+0000 1.000000000E+0000 0.0000E+0000
1 1.0000E-0001 1.095445115E+0000 0.0000E+0000
2 2.0000E-0001 1.183215957E+0000 0.0000E+0000
3 3.0000E-0001 1.264911064E+0000 0.0000E+0000
4 4.0000E-0001 1.341661675E+0000 -2.0888E-0005
5 5.0000E-0001 1.414268352E+0000 -5.4790E-0005
6 6.0000E-0001 1.483327712E+0000 -8.8015E-0005
7 7.0000E-0001 1.549309629E+0000 -1.1629E-0004
8 8.0000E-0001 1.612594334E+0000 -1.4278E-0004
9 9.0000E-0001 1.673491819E+0000 -1.7177E-0004
10 1.0000E+0000 1.732256561E+0000 -2.0575E-0004
11 1.1000E+0000 1.789100332E+0000 -2.4595E-0004
12 1.2000E+0000 1.844202312E+0000 -2.9342E-0004
13 1.3000E+0000 1.897716268E+0000 -3.4967E-0004
14 1.4000E+0000 1.949775544E+0000 -4.1667E-0004
15 1.5000E+0000 2.000496784E+0000 -4.9678E-0004
16 1.6000E+0000 2.049982901E+0000 -5.9275E-0004
17 1.7000E+0000 2.098325519E+0000 -7.0782E-0004
18 1.8000E+0000 2.145606980E+0000 -8.4592E-0004
19 1.9000E+0000 2.191901993E+0000 -1.0117E-0003
20 2.0000E+0000 2.237279019E+0000 -1.2110E-0003
Porównanie wyników obliczeń wykonanych za pomocą programu 6.4 z wynikami obliczeń uzyskanymi po uruchomieniu programu 6.5 pokazuje, że metodami bardziej dokładnymi w przypadku rozwiązywania zagadnienia (6.22) - (6.23) są metody predyktor-korektor oparte na zastosowaniu metod Adamsa. Zalety metod predyktor-korektor wykorzystujące wzory wstecznego różniczkowania ujawniają się w pełni dopiero przy rozwiązywaniu zagadnień początkowych dla układów równań różniczkowych (6.2) źle uwarunkowanych (nazywanych układami typu stiff ), dla których stosunek największej co do modułu wartości własnej macierzy Jacobiego
do najmniejszej co do modułu wartości własnej jest znacznie większy od jedności.
Przykładowo dla zagadnienia początkowego [30]:
którego rozwiązaniem jest funkcja
metody Rungego-Kutty i metody Adamsa okazały się niewydolne dla ze względu na bardzo duży koszt obliczeń (pracochłonność), związany z koniecznością
bardzo wielkiej liczby niezbędnych wywołań procedury obliczającej wartość prawej strony równania różniczkowego. W jawnych i niejawnych wzorach metod wstecznego różniczkowania wartość prawej strony równania różniczkowego jest zawsze obliczana tylko jeden raz, co ma również istotne znaczenie przy rozwiązywaniu zagadnień początkowych dla dużych układów równań różniczkowych zwyczajnych.
Metody predyktor-korektor wstecznego różniczkowania okazały się szczególnie skuteczne przy rozwiązywaniu zagadnień początkowych dla układów równań różniczkowych zwyczajnych w monografii [33], otrzymanych przy wyznaczaniu płaskiego ruchu cieczy lepkiej - opisywanego quasi-liniowym równaniem czwartego rzędu dla funkcji prądu - metodą prostych.
382 6. Równania różniczkowe zwyczajne i całkowe
6.1. Zagadnienia początkowe dla równań różniczkowych zwyczajnych 379