You are on page 1of 19

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

Metody numeryczne
w C++Builder
Autorzy: Bernard Baron, ukasz Pitek
ISBN: 83-7361-544-X
Format: B5, stron: 552

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Metody numeryczne s to sposoby rozwizywania zoonych problemw


matematycznych za pomoc narzdzi obliczeniowych udostpnianych przez
popularne jzyki programowania. Jeden z najpopularniejszych jzykw C++,
chocia nie by projektowany z myl o zastosowaniu go w obliczeniach numerycznych,
posiada mechanizmy, ktre umoliwiaj stosunkowo atw implementacj algorytmw
obliczeniowych. Dziki uniwersalnoci mechanizmu szablonw programista moe
tworzy procedury numeryczne, w ktrych da si okreli precyzj oblicze
zmiennoprzecinkowych. Procedury stworzone w C++ nadaj si do przeprowadzania
oblicze zarwno w dziedzinie liczb rzeczywistych, jak i zespolonych.
Ksika Metody numeryczne w C++Builder przedstawia najczciej wykorzystywane
algorytmy numeryczne wraz z przykadami ich implementacji w jzyku C++.
Kade zagadnienie jest omwione zarwno od strony teoretycznej, jak i praktycznej,
co uatwia jego zrozumienie i pozwala na modyfikacje zamieszczonych w ksice
kodw rdowych. Ksika zawiera rwnie opis zagadnie zwizanych z jzykiem
C++, niezbdnych do poznania i prawidowego wykorzystywania biblioteki oblicze
numerycznych.
Algebra macierzy i rwnania liniowe
Cakowanie i rniczkowanie numeryczne
Wybrane algorytmy interpolacji i aproksymacji
Wyznaczanie minimw funkcji
Rozwizywanie rwna nieliniowych i wyznaczanie wartoci wasnych macierzy
Ukady rwna rniczkowych liniowych i nieliniowych
Przeksztacenia Fouriera i Laplacea

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Spis treci
Przedmowa........................................................................................ 7
Rozdzia 1. Definicje typw, funkcji, klas i wzorcw dla zagadnie numerycznych .. 9
1.1. Zastosowanie wzorcw C++ w bibliotece oblicze numerycznych........................10
1.2. Definicja wzorca klasy liczb zespolonych...............................................................13
1.3. Organizacja biblioteki oblicze numerycznych.......................................................15
1.4. Funkcje konwersji liczb rzeczywistych zespolonych na acuch i odwrotnie ........16
1.5. Uycie wzorca klasy vector do implementacji wektorw w jzyku C++ ............18
1.5.1. Operacje na wektorach zdefiniowanych na bazie konteneru vector .............20
1.6. Macierz jako wektor wektorw ...............................................................................21
1.7. Zapis i odczyt wektorw oraz macierzy na komponencie TStringGrid ...............24
1.8. Funkcje wzorcowe do zapisu i odczytu plikw macierzy .......................................24
1.9. Wykorzystanie funkcji matematycznych zawartych w bibliotece math.h...............25
1.10. Przekazywanie wskanikw funkcji do procedur implementujcych
algorytmy oblicze numerycznych.......................................................................27
1.11. DynamicArray i wzorzec valarray jako alternatywa dla wzorca klasy vector ........29
1.12. Wywietlanie komunikatw o bdach i implementacja wskanikw postpu ......29

Rozdzia 2. Algebra macierzy i rwnania liniowe ................................................. 33


2.1. Metoda bezporedniego rozwizywania ukadu rwna macierzowych
metod eliminacji Gaussa .....................................................................................34
2.1.1. Skalowanie ukadu rwna liniowych ..........................................................38
2.2. Rozwizywanie ukadu rwna liniowych wedug algorytmu Crouta....................40
2.3. Obliczanie macierzy odwrotnej metod eliminacji Gaussa.....................................44
2.4. Obliczanie macierzy odwrotnej metod Crouta ......................................................48
2.5. Obliczanie wyznacznika macierzy kwadratowej.....................................................53
2.6. Wskanik uwarunkowania macierzy .......................................................................54
2.7. Obliczanie wartoci wasnej macierzy kwadratowej A o najwikszym module .....56
2.8. Obliczanie wartoci wasnej macierzy 1 A o najwikszym module .....................57
2.9. Rozwizywanie ukadu rwna liniowych
metod iteracji Jacobiego oraz Richardsona.........................................................59
2.10. Rozwizywanie ukadu rwna metod Gaussa-Seidela oraz metod nadrelaksacji.....62
2.11. Pseudorozwizanie ukadu nadokrelonego............................................................65
2.12. Metoda najmniejszych kwadratw..........................................................................71
2.13. Algorytm Crouta rozwizywania rzadkich ukadw rwna liniowych.................73
2.14. Algorytmy iteracyjne Richardsona oraz Gaussa-Seidela dla macierzy rzadkich.......82
Przykady ................................................................................................................88

Metody numeryczne w C++Builder

Rozdzia 3. Praktyka badania funkcji................................................................ 111


3.1. Cakowanie i rniczkowanie numeryczne ...........................................................111
3.1.1. Ekstrapolacja iterowana Richardsona i Aitkena .........................................111
3.1.2. Cakowanie numeryczne .............................................................................119
3.1.3. Rniczkowanie numeryczne......................................................................131
3.1.4. Gradient funkcji wielu zmiennych ..............................................................142
3.1.5. Jacobian funkcji wektorowej wielu zmiennych ..........................................145
3.1.6. Hesjan funkcji wielu zmiennych.................................................................147
3.2. Wybrane metody aproksymacji i interpolacji liniowej funkcji jednej zmiennej .....149
3.2.1. Aproksymacja metod najmniejszych kwadratw......................................150
3.2.2. Aproksymacja funkcji dyskretnej wielomianem...........................................152
3.2.3. Aproksymacja ukadami funkcji ortogonalnych .........................................153
3.2.4. Aproksymacja wielomianami ortogonalnymi .............................................154
3.2.5. Implementacja metod aproksymacji ...........................................................156
3.2.6. Interpolacja funkcji dyskretnej krzyw aman ..........................................169
3.2.7. Interpolacja wielomianem potgowym Lagrangea....................................170
3.2.8. Interpolacja funkcjami sklejanymi..............................................................170
3.2.9. Interpolacja funkcjami i wielomianami ortogonalnymi..............................172
3.2.10. Metody interpolacji w ramach klasy TInterpolacja ....................................175
3.3. Wybrane metody poszukiwania minimum funkcji wielu zmiennych
metodami bezgradientowymi .............................................................................189
3.3.1. Wyznaczenie minimum funkcji wielu zmiennych
bezgradientow metod poszukiwa prostych Hookea-Jeevesa............191
3.3.2. Bezgradientowa metoda zotego podziau poszukiwania minimum .......193
3.3.3. Bezgradientowa metoda Powella poszukiwania minimum funkcji
wielu zmiennych .....................................................................................201
3.4. Wybrane metody poszukiwania minimum funkcji wielu zmiennych
metodami gradientowymi ...................................................................................205
3.4.1. Metoda ekspansji i kontrakcji geometrycznej z jednym testem
badania wspczynnika kroku przy poszukiwaniu minimum w kierunku ....206
3.4.2. Metoda aproksymacji parabolicznej z jednym testem
badania wspczynnika kroku przy poszukiwaniu minimum w kierunku ....210
3.4.3. Algorytm najwikszego spadku ..................................................................214
3.4.4. Zmodyfikowany algorytm Newtona ...........................................................217
Przykady...............................................................................................................222

Rozdzia 4. Rwnania nieliniowe, zera wielomianw, wartoci wasne macierzy . 263


4.1. Algorytmy rozwizywania ukadw rwna nieliniowych ...................................264
4.1.1. Rozwizywanie ukadw rwna nieliniowych metod Newtona .............265
4.1.2. Rozwizywanie ukadw rwna nieliniowych metod gradientow ........268
4.1.3. Rozwizywanie ukadu rwna nieliniowych
zmodyfikowan metod Newtona...........................................................271
4.1.4. Rozwizywanie ukadw nieliniowych metod iteracyjn .........................275
4.1.5. Pseudorozwizania nieliniowego ukadu nadokrelonego
metod Hookea-Jeevsa...........................................................................278
4.2. Wyznaczanie zer wielomianw metodami Bairstowa i Laguerrea ......................280
4.2.1. Dzielenie wielomianw o wspczynnikach rzeczywistych
przez czynnik liniowy wedug algorytmu Hornera .................................280
4.2.2. Dzielenie wielomianu przez czynnik kwadratowy .....................................282
4.2.3. Wyznaczanie dzielnikw wielomianu stopnia N>2
w postaci trjmianu kwadratowego metod Bairstowa...........................282
4.2.4. Wyznaczanie zer wielomianw o wspczynnikach rzeczywistych ...........287
4.2.5. Wyznaczanie zera wielomianu metod Laguerrea ....................................288
4.2.6. Wyznaczanie wszystkich zer wielomianu metod Laguerrea ...................290

Spis treci

5
4.3. Wyznaczanie wartoci wasnych macierzy metodami Bairstowa i Laguerrea.....293
4.3.1. Wyznaczanie wspczynnikw wielomianu
charakterystycznego macierzy kwadratowej metod Kryowa ...............293
4.3.2. Wyznaczanie wartoci wasnych macierzy metod Bairstowa ...................295
4.3.3. Wyznaczanie wartoci wasnych macierzy metod Laguerrea..................297
4.4. Wyznaczanie zer funkcji jednej zmiennej metod poowienia przedziau.........298
Przykady...............................................................................................................299

Rozdzia 5. Ukady zwyczajnych rwna rniczkowych nieliniowych ................. 315


5.1. Ukad rwna rniczkowych jako klasa programowania obiektowego ..............317
5.1.1. Definicje typw do zadawania
ukadu rwna rniczkowych nieliniowych..........................................317
5.1.2. Definicja klasy prototypowej dla klas implementujcych
rozwizywanie ukadu rwna rniczkowych ......................................318
5.1.3. Definicja klasy prototypowej dla klas potomnych dotyczcych
rozwizywania ukadu rwna rniczkowych nieliniowych ................324
5.1.4. Aproksymacja dyskretnych wartoci wektorw stanu................................327
5.1.5. Funkcje pomocnicze do dziaania na wektorach stanu ...............................330
5.2. Metody Rungego-Kutty .........................................................................................331
5.3. Rozwizywanie ukadu rwna rniczkowych zwyczajnych
metod Rungego-Kutty z automatycznym doborem kroku cakowania.............337
5.4. Metody Fehlberga..................................................................................................341
5.5. Rozwizanie ukadu rwna rniczkowych nieliniowych zwyczajnych
metod Fehlberga z automatycznym doborem kroku cakowania .....................349
5.6. Rozwizanie ukadu rwna rniczkowych nieliniowych zwyczajnych
metod Dormanda-Princea z automatycznym doborem kroku cakowania ........352
5.7. Metoda wielokrokowa rozwizywania ukadu rwna rniczkowych nieliniowych
z czonem przewidywania Adamsa-Bashfortha oraz czonem korekcyjnym AdamsaMultona z automatycznym doborem kroku i rzdu..............................................358
5.7.1. Algorytm Adamsa-Bashfortha ....................................................................358
5.7.2. Algorytm Adamsa-Multona ........................................................................360
5.7.3. Algorytmy przewidywania i korekcji wyraone
przez macierz Nordsiecka .......................................................................363
5.7.4. Faza wstpna oblicze.................................................................................373
5.7.5. Metody klasy TAdamsMultonAbstract i TAdamsMulton
realizujce algorytm Adamsa-Multona ...................................................377
5.8. Rozwizywanie ukadu rwna nieliniowych metod
sztywno stabilnych algorytmw Geara...............................................................383
5.9. Metoda Gragga z ekstrapolacj Bulirscha-Stoera..................................................395
Przykady...............................................................................................................403

Rozdzia 6. Ukady rwna rniczkowych liniowych o staych wspczynnikach .. 425


6.1. Rwnania rnicowe dla rnych aproksymacji funkcji wymuszajcych...................429
6.1.1. Wymuszenie aproksymowane funkcjami przedziaami staymi .................430
6.1.2. Wymuszenie aproksymowane funkcjami przedziaami liniowymi ............432
6.1.3. Wymuszenie aproksymowane wielomianem stopnia drugiego ..................434
6.1.4. Dobr kroku cakowania T ze wzgldu na dobr grnej granicy bdu
obliczania macierzy eAT oraz ze wzgldu
na numeryczn stabilno rozwizania ...................................................436
6.2. Definicja typw dla liniowych rwna rniczkowych ........................................438
6.3. Numeryczne rozwizywanie rwna rniczkowych liniowych o staych
wspczynnikach dla aproksymacji wymusze funkcjami przedziaami staymi......441

Metody numeryczne w C++Builder


6.4. Numeryczne rozwizywanie rwna rniczkowych liniowych
o staych wspczynnikach dla aproksymacji wymusze
funkcjami przedziaami liniowymi .....................................................................444
6.5. Numeryczne rozwizywanie rwna rniczkowych liniowych
o staych wspczynnikach dla aproksymacji wymusze funkcjami
przedziaami kwadratowymi...............................................................................447
Przykady ...............................................................................................................450

Rozdzia 7. Praktyka przeksztace Fouriera..................................................... 457


7.1. Dyskretna transformacja Fouriera wedug algorytmu Hornera .............................463
7.2. Szybkie przeksztacenie Fouriera wedug algorytmu Cooleya-Tukeya ................465
7.3. Szybkie przeksztacenie Fouriera wedug algorytmu Sandego-Tukeya ................473
7.4. Wyznaczanie wspczynnikw zespolonego szeregu Fouriera
dla dowolnej funkcji okresowej..........................................................................477
7.5. Obliczanie odwrotnej transformacji Fouriera dla dowolnej transformaty.............478
Przykady ...............................................................................................................480

Rozdzia 8. Praktyka przeksztace Laplacea................................................... 495


8.1. Numeryczne obliczanie transformacji odwrotnej Laplacea
w wybranej chwili czasu z zastosowaniem szeregw Fouriera ............................496
8.2. Numeryczne obliczanie transformacji odwrotnej Laplacea
w wybranej chwili czasowej z zastosowaniem szeregw Laguerrea ................502
8.3. Numeryczne obliczanie transformacji odwrotnej Laplacea
w wybranej chwili czasowej wedug algorytmu Valsa ......................................506
8.4. Obliczanie transformacji odwrotnej Laplacea funkcji
wymiernej na podstawie jej pozostaoci w biegunach ......................................510
8.4.1. Definiowanie klasy do obliczania odwrotnej transformacji Laplacea
funkcji wymiernej na podstawie jej pozostaoci w biegunach ..............513
Przykady...............................................................................................................518

Bibliografia .................................................................................... 531


Skorowidz...................................................................................... 535

Rozdzia 6.

Ukady rwna
rniczkowych liniowych
o staych wspczynnikach
Zadany jest ukad N rwna rniczkowych liniowych niejednorodnych:
W
dxi (t ) N
= aij x j (t ) + bij u j (t ) , (i = 1,2,,N),
dt
j =1
j =1

(6.1)

gdzie wspczynniki aij oraz bij s rzeczywiste. Ukad ten mona zapisa w postaci
macierzowej:

dx(t )
= Ax(t ) + Bu(t ) ,
dt
gdzie:

x1 (t )
x (t )
2
.
x(t ) =
;
.
.

x N (t )

dx1 (t )
dt
dx (t )
2
dt
dx(t ) .
;
=
dt
.

.
dx N (t )
dt

a11a12 K a1N
a a Ka
2N
;
A = 21 22

..K .

a N 1a N 2 K a NN

(6.2)

426

Metody numeryczne w C++Builder

u1 (t )
u (t )
2
.
u(t ) =
.
.
.

u w (t )

b11b12 K b1W
b b Kb
2W
;
B = 21 22

..K .

bN 1bN 2 K bNW

Na czony niejednorodne ukadu (6.1) skada si W wymusze uj(t) (j = 1, 2, , W)


wystpujcych ze wspczynnikami bij macierzy prostoktnej B. W teorii rwnania
(6.2) centraln rol odgrywa funkcja wykadnicza eAt, macierzy kwadratowej A przemnoonej przez zmienn niezalen t, zdefiniowan szeregiem macierzowym [7]:

e At = 1 + At +

1
1
( At ) k
.
( At ) 2 + K + ( At ) k + K =
2!
k!
k!
k =0

(6.3)

Szereg macierzowy (6.3) jest rwnowany z N2 zwykych skalarnych szeregw potgowych:

ij + ( At ) ij +

1
{(At ) 2 }ij + K + 1 {(At ) k }ij + K , (i,j = 1,2,,N)
2!
k!

Dla zrozumienia konstrukcji caki oglnej rwnania (6.2) niezbdne bd nastpujce


wasnoci funkcji wykadniczej eAt:
1. Jeeli t = 0, to zgodnie z definicj (6.3)

eA0 = 1 (macierz jednostkowa NN-wymiarowa).

(6.4)

2. Jeeli macierz A komutuje z macierz B, a wic AB = BA, to:

e eBt = e(A+B)t.

(6.5)

At At
(A A)t
= 1, wic macierz
3. Poniewa na mocy wasnoci (6.5) e e = e

odwrotna macierzy eAt ma posta:

[e ]

At 1

= e At .

(6.6)

4. Rniczkujc obie strony rwnania macierzowego (6.3) ze wzgldu na t

oraz wyczajc wsplny czynnik A z wyrazw szeregu nieskoczonego,


otrzymujemy:

d At
e = Ae At = e At A .
dt

(6.7)

5. Mnoc lewostronnie lub prawostronnie rwnanie macierzowe (6.7) przez A1

(macierz odwrotna macierzy A), a nastpnie cakujc tak otrzymywane


rwnania ze wzgldu na t od t1 do t2, otrzymujemy:

Rozdzia 6. Ukady rwna rniczkowych liniowych o staych wspczynnikach


t2

e
t1

At

dt = A 1 (e At2 e At1 ) = (e At2 e At1 )A 1 .

427
(6.8)

Do rozwizania ukadu rwna rniczkowych liniowych (6.2) mona zastosowa


metod uzmiennienia staych. W tym celu najpierw rozpatruje si przypadek, gdy
u(t) 0, co oznacza, e rwnanie (6.2) jest jednorodne

dx(t )
= Ax(t ) .
dt

(6.9)

atwo wykaza, e caka oglna rwnania jednorodnego (6.9) ma posta:


x(t) = eAt y ,

(6.10)

gdzie y jest wektorem N-wymiarowym o skadowych staych.


Istotnie, z wasnoci (6.7) wynika

dx(t ) d At
= (e y(t )) = Ae At y = Ax(t) .
dt
dt

(6.11)

Zgodnie z metod uzmiennienia staych przyjmuje si dalej, e wektor y jest funkcj


zmiennej t, co daje:
x(t) = eAt y(t) ,

(6.12)

a nastpnie podstawia si wyraenie (6.12) do rwnania niejednorodnego (6.2) z uwzgldnieniem wasnoci (6.7)

Ae At y(t) + e At

dy (t )
= Ae At y(t) + Bu(t) .
dt

(6.13)

Upraszczajc rwnanie (6.13) o czon AeAty(t) oraz mnoc je lewostronnie przez


macierz eAt, otrzymujemy na mocy wasnoci (6.6)

dy (t )
= e At Bu(t) .
dt

(6.14)

Cakujc rwnanie (6.14) ze wzgldu na t od t0 do t, otrzymujemy:


t

y (t ) = y (t0 ) + e At Bu()d .

(6.15)

t0

Jeeli zadany jest wektor wartoci pocztkowych x(t0), to odpowiadajcy mu wektor


y(t0) moemy wyznaczy z rwnania (6.12), stosujc wasno (6.6)
y(t0) = e

At

x(t0) .

(6.16)

Uwzgldniajc rwnanie (6.15) wraz z podstawieniem (6.16) w rwnaniu (6.12), otrzymujemy nastpujce rozwizanie rwnania (6.2)

428

Metody numeryczne w C++Builder


(6.17)

x(t ) = e A ( t t0 ) x(t0 ) + e At e A Bu()d .


t0

Rwnanie (6.17) nie nadaje si do bezporedniego obliczenia numerycznego. Rozwizanie dokadne (6.17) rwnania (6.2) moemy jednak wykorzysta w metodzie krokowej, zastpujc to rwnanie rwnaniem rnicowym, przyjmujc t0 = kT i t = (k + 1)T

x[(k + 1)T ] = e AT x(kT ) + e A ( k +1)T

( k +1) T

(6.18)

Bu()d .

kT

W obliczaniu caek (6.18) mog wystpi trudnoci zwizane z wystpowaniem ujemnych i duych co do moduu wartoci wasnych macierzy A. Ze wzgldu na moliwo
takiego przypadku, musimy aproksymowa funkcj wektorow wymuszajc u(t), nie
zmieniajc jdra eAt w cace rwnania (6.18).
Niech zachodzi przypadek oglny, dla ktrego macierz A ma dzielniki elementarne:

( ) ,( )
p1

p2

,K, ( s ) s ,
p

gdzie wrd wartoci wasnych 1, 2,, s macierzy A bdcych, zgodnie z definicj,


zerami wielomianu charakterystycznego macierzy A

det (A I ) = 0
mog by liczby jednakowe; 1 pn N , przy czym p1 + p2 ++ ps = M. Dowodzi
si, e w takim przypadku istnieje taka macierz nieosobliwa S, e
A = S1 CS,

(6.19)

gdzie macierz C jest macierz quasi-diagonaln zwan kanoniczn macierz Jordana [30]

0
I p1 (1 )
0
I
(
p1 2 )

.
.
C=
.
.
.
.

0
0

K
0
i
K
.
1

K
.
; I pi (i ) = 0
K
.

K
.
0

K I pi (i )

0
i
1
0
0

0
0
i
1
0

K 0
K 0
K 0
K i
K 1

0
0
0

0
i

(6.20)

Stosujc transformacj (6.19), funkcj wykadnicz eAt moemy przeksztaci nastpujco:

e At = e ( S

1CS ) t

= eS

1 ( Ct ) S

Poniewa macierz C jest quasi-diagonaln, to:

= S 1 eCt S .

(6.21)

Rozdzia 6. Ukady rwna rniczkowych liniowych o staych wspczynnikach

e I p1 ( 1 ) t

0
eCt =
.

0
e

I p2 ( 2 ) t

.
0

I ps ( s ) t
e

0
0
.

429

(6.22)

Zgodnie z definicj macierzowej funkcji wykadniczej oraz macierzy (6.20) zachodzi [30]:

I p ( i ) t
1

e it

0
0 K 0
t

ei
0 K 0
te i

t
.
= e it te it
e it K
0
2!

KKKKKKKKKKKKKKKKKKKKK

t pi 1

t pi 2
t pi 3
i t
i t
i t
i t
e
e
e
K e

( pi 2)!
( pi 3)!
( pi 1)!

(6.23)

Wzory (6.17), (6.21) i (6.22) okrelaj struktur rozwizania rwnania rniczkowego


(6.2), a w szczeglnoci jego zwizek z wartociami wasnymi i wystpujcymi w kombinacjach funkcji e it przemnoonych przez wielomiany Pi(t) nie wikszego stopnia
ni pi 1, gdzie pi jest stopniem dzielnika elementarnego odpowiadajcego wartoci
wasnej i, tj. Pi (t )e it . Zamy w oglnym przypadku, e wartoci wasne i macierzy A
s zespolone

i = i + j i , (i = 1,2,,N).

(6.24)

Jeeli Re{i } = i > 0 , to odpowiednie skadniki rozwizania Pi(t) wzrastaj wykadniczo z czonem wielomianowym Pi(t) gdy czas t wzrasta. Jeeli i < 0, to odpowiednie
skadniki rozwizania Pi (t )e it malej gdy czas t wzrasta. W kadym przypadku, jeli
Im{i } = i 0 , to jak wiadomo i tworzy zespolon par sprzon z odpowiedni
wartoci wasn i , co odpowiada skadnikowi rozwizania sinusoidalnemu z wag
wykadnicz e it i wielomianow Pi(t)

Pi (t )eit sin i t .

(6.25)

6.1. Rwnania rnicowe dla rnych


aproksymacji funkcji wymuszajcych
Do numerycznego rozwizania ukadu rwna rniczkowych liniowych (6.2) moemy
wykorzysta rwnanie rnicowe (6.18), przyjmujc rn aproksymacj funkcji wymuszajcej u(t). W niniejszym opracowaniu podane bd konstrukcje tych algorytmw
dla trzech przypadkw, a mianowicie dla aproksymacji funkcji wymuszajcej w postaci
funkcji przedziaami staej, liniowej i kwadratowej.

430

Metody numeryczne w C++Builder

6.1.1. Wymuszenie aproksymowane funkcjami


przedziaami staymi
Niech wymuszenie wektorowe u(t) jest dane w postaci funkcji przedziaami staej,
takiej, e:
u(t) = u(kT) dla kT t (k+1)T, k = 0,1,2,

(6.26)

W takim przypadku wykonujc cakowanie w rwnaniu rnicowym (6.18) z uwzgldnieniem wzoru (6.8), otrzymujemy [7]:
( k +1) T
A

(6.27)

( k +1) T

Bu()d = -e

kT

A 1Bu(kT) =
kT

= e A ( k +1) T + e AkT A 1Bu(kT).

Umieszczajc powyszy wynik cakowania w rwnaniu (6.18), otrzymujemy:

(
x(kT) + (e 1)A

x[(k + 1)T ] = e AT x(kT) + e A ( k +1) T e A ( k +1) T + e AkT A 1Bu(kT) =


= e AT

AT

(6.28)

Bu(kT),

gdzie: 1 macierz jednostkowa.


W rwnaniu rnicowym (6.28) powinnimy, ze wzgldu na minimum operacji numerycznych, oblicza macierz (eAT 1)A1, nie wykonujc pomocniczych oblicze
macierzy eAT oraz A1, lecz wykorzystujc rwno:

(e

AT

( AT ) n
n =0 (n+1 )!

1)A 1 = T

(6.29)

wnikajc z definicji (6.3).


Gdy uwzgldnimy wic rwnanie (6.29) oraz oznaczenia macierzy:

F = e AT = T
n =0

( AT ) n
;
n!

(6.30)

( AT ) n
G 0 =
BT
n=0 (n + 1)!

(6.31)

x(k) = x(kT); u(k) = u(kT),

(6.32)

i wektorw

formua rekurencyjna (6.28) przyjmie posta:


x(k+1) = Fx(k) + G0u(k).

(6.33)

Rozdzia 6. Ukady rwna rniczkowych liniowych o staych wspczynnikach

431

Nie istnieje wic potrzeba obliczania macierzy odwrotnej A1, jak by to wynikao z rwnania (6.28). Majc na uwadze dalsz minimalizacj operacji numerycznych, powinnimy
zauway, e formowanie macierzy F i G0 (wzory (6.30) i (6.31)) naley prowadzi
rwnolegle ze wzgldu na wsplne elementy (AT) wystpujce w szeregach. Rwnanie
rnicowe (6.33) daje wic formu rekurencyjn, ktr mona atwo zaprogramowa
na komputerze, co pokazane bdzie w dalszych punktach.
Stosujc wzr rekurencyjny (6.33) do rozwizania numerycznego rwnania rniczkowego (6.2), odpowiadajcy aproksymacji wymusze funkcjami przedziaami staymi,
musimy w pierwszej kolejnoci wygenerowa macierze F i G0 okrelone wzorami (6.30)
i (6.31). Blok funkcyjny generujcy te macierze moe mie posta:



        
         





 !"
##   "
    $%$"
&'( ) ) (*"&'( ) ) (*$"
&'( ) ) (*$"
&'( ) ) (*%"&'( ) ) (*"


+,"
 (*-!' . $"
 (*-!' . " (*-!' . $"
  +   (*"
+/"#+ "# + "
+  0 1  "
 

22"
%+$,"
#0+"$+%,#"+2$"
# 0+2 "$+%,# "
$+$2$"
$+ (3)%"
,+  02 "
4 +"
+ 5//"
(6+ 7/8 
 9"
+," +$,"
 
/"
4
777


(*  !: *: *' ;"
 
 ;"
4
4

432

Metody numeryczne w C++Builder

6.1.2. Wymuszenie aproksymowane funkcjami


przedziaami liniowymi
Zakadamy, e wymuszenie u(t) jest funkcja cig przedziaami liniow, tak, e:
(6.34)
1
u( ) = u(kT ) + [u((k + 1)T ) u(kT)]( kT ) = f1 + f 2
T
dla
kT < (k + 1)T,

k = 0, 1, 2, ,

gdzie:
C

2
T

i
i +

( T

ds

f2 =

1
[u((k + 1)T ) u(kT)] .
T

(6.34a)

Wykonujc w takim przypadku cakowanie przez czci w rwnaniu rnicowym (6.18)


z uwzgldnieniem wzoru (6.8), otrzymujemy:
( k +1) T

A
1 - A
e Bu( )d = A e B(f1 + f 2 )

kT

( k +1) T

+
kT

( k +1) T

e - A Bf 2 d =

kT

1
= A 1e - AkT B + A 1 (e - AkT 1)B u(kT ) +
T

+ e - AT B A 1 (e - AT 1)B u(k + 1)T .


T

Gdy uwzgldnimy powyszy wynik cakowania oraz oznaczenie (6.32), rwnanie


rnicowe (6.18) przyjmie posta:

x(k + 1) = e AT x(k ) + A 1 e AT (e AT 1)A 1 Bu(k ) +


T

+ A 1 (e AT 1)A 1 1 Bu(k + 1) .
T

(6.35)

Uwzgldniajc wzory (6.30) i (6.29), rwnanie rekurencyjne (6.35) moemy przeksztaci do postaci:
x(k + 1) = Fx(k) + G1u(k) + Hu(k + 1),

(6.36)

( AT ) n
1

G 1 = A 1 e AT (e AT 1) A 1 B =
(BT) ,
T

n= 0 n!(n + 2)

(6.37)

( AT ) n
H = A 1 [(e AT 1)A 1 1]B =
(BT) ,
n= 0 (n + 2)!

(6.38)

gdzie:

natomiast macierz F wyraa si wzorem (6.30).

Rozdzia 6. Ukady rwna rniczkowych liniowych o staych wspczynnikach

433

Rwnanie rekurencyjne (6.36) daje wic algorytm wyznaczania rozwizania rwnania


rniczkowego w postaci (6.2). W obliczeniach komputerowych naley zauway, e
wyznaczanie macierzy F, G1 i H zgodnie z wzorami (6.30), (6.37) i (6.38) naley prowadzi rwnolegle ze wzgldu na wsplne elementy (AT)n wystpujce w szeregach
macierzowych tych wzorw, co minimalizuje liczb operacji numerycznych. W przypadku stosowania wzoru rekurencyjnego (6.36) niezbdne jest wygenerowanie macierzy
F, G1 i H (wzory (6.30), (6.37) i (6.38)), co mona zrealizowa w nastpujcym bloku
funkcyjnym:

  
 
  !

"
#$
%$
&'(
)%   

 *+, , 
%-* %$
 

"&'(
 *+%!  
.
-+ .  /

+ .
"
0)*1

2 3'45  05  0)*1165  05  0)*1165  05  0)*11
6"
5  05  0)*116&'5  05  0)*116(
)*))* *+)* *+
 
#7
8

9$:
)*;;;<;'  ) 2#=>?:
5  05  0)*11@)&():
A
. .2
4)  7:A
. .2
4  7:
A
. .2
4@  7:A
. .2
4(  7:
A
. .2
4&  7:A
. .2
4) #7:

8
)):2
B +47:
  )  2
4)7:
9=:;;<:;<=>?:;'=>?:
   )4<  )7:
2
B +4"7:
&:(:
 
8
9:
@):
;;9:
@;;:"":
;<49<7449'797:
@;<:&&:
;'9':
@;':((:
 4

=:
0 :
7
 4
.=:.0 :.7C
DC.D@C
DC.D:
   )49<7:
E 4 1 *+7:
2#2##2 4" *+F==7:

G42#1<>=?7 
<H:
)):&'&):(():
 
=:
E
4>>>7

434

Metody numeryczne w C++Builder


8
3
+ 9$I I 4<J7:
 
<J:
E
E

6.1.3. Wymuszenie aproksymowane wielomianem


stopnia drugiego
W tym przypadku dokonujemy we wzorze (6.18) zamiany zmiennych pod cak:

= s + kT gdzie 0 < s < T ,


co daje:
T

x[(k + 1)T ] = e AT x(kT ) + e A (T s ) Bu(kT + s )ds .

(6.39)

W celu obliczenia caki we wzorze (6.39) naley interpolowa u(kT + s) wielomianem


drugiego stopnia:
4s 4s 2
3s 2s 2
T
u(kT+s) = 1 + 2 u(kT ) + 2 u kT + +
T T
2
T T

(6.40)

s 2s 2
+ + 2 u((k+1 )T )
T T

Podstawiajc przyblienie (6.40) pod cak wzoru (6.39), otrzymujemy:


T

e
0

A ( T s )

3
1

Bu(kT + s)ds = C0 C1 + C 2 (BT)u(kT) +


2
2

(6.41)

T 1
1

+ (2C1 C 2 )(BT)u kT + + C1 + C 2 (BT)u((k + 1)T ).


2 2
2

gdzie:

Ci =

(6.42)

2i T A ( T s ) i
e
s ds dla i = 0,1,2.
T i +1 0

Obliczajc cak (6.42) dla poszczeglnych i = 0, 1, 2, otrzymujemy:

( AT ) n
,
n= 0 ( n + 1)!

C 0 = (e AT 1)(AT) =

] = 2 ((nA+T2))! ,

C1 = 2(e AT 1 AT ) (AT )

1 2

n= 0

1
( AT ) n

2
1 3
.
C 2 = 8e AT 1 AT (AT ) (AT ) = 8
2
n= 0 ( n + 3)!

(6.43)

Rozdzia 6. Ukady rwna rniczkowych liniowych o staych wspczynnikach

435

Gdy przyjmiemy oznaczenie (6.32) oraz uwzgldnimy wynik cakowania (6.41), rwnanie rekurencyjne (6.39) przyjmuje posta:

x(k + 1) = Fx (k ) + G 2 u(k ) + H 2 u k + + Ru(k + 1) ,


2

(6.44)

3
1

G 2 = C 0 C1 + C 2 (BT ) ,
2
2

(6.45)

H 2 = (2C1 C 2 )(BT ) ,

(6.46)

1
1
R = C1 + C 2 (BT ) ,
2
2

(6.47)

gdzie:

natomiast macierz F wyraa si wzorem (6.30).


Rwnanie rekurencyjne (6.44) daje algorytm wyznaczania rozwizania rwnania rniczkowego (6.2) w postaci dyskretnej x(k) (k = 0, 1,). W celu zminimalizowania
operacji numerycznych naley zauway, e formowanie macierzy F, G2, H2, R naley
prowadzi rwnolegle (wzory (6.30), (6.43), (6.45), (6.46), (6.47)) ze wzgldu na wsplne elementy (AT)n wystpujce w szeregach macierzowych tych wzorw. Zauwamy
1
rwnie, e jeeli x(t) jest liczone co T, to u(t) musi by zadane co T sekund.
2
Stosujc wzr rekurencyjny (6.44) odpowiadajcy aproksymacji wymusze wielomianem stopnia drugiego, musimy w pierwszej kolejnoci wygenerowa macierze F,
G2, H2, R (wzory (6.30), (6.45), (6.46) i (6.47)). Mona tego dokona w sposb pokazany w poniszym bloku funkcyjnym:

 
 
 






 !"#
"

$  % 


 !
 

& $! &  

'( 
! &

) *

+
, -./ ')/ ') **0/ ')/ ') **0/ ')/ ') *
*0
/ ')/ ') **0/ ')/ ') **0
/ ')/ ') **0   !  !


1
2

3
4
 5556575-
' '
+
64
/ ')/ ') **894
: &
&
+
.14: &
&
+
.814
: &
&
+
.914: &
&
+
.14
: &
&
+
.14: &
&
+
.14
: &
&
+
.14

2

436

Metody numeryczne w C++Builder


;<4+
= !'
.814

;
+
.14
3;>455;6456;6457;>?@45-;6?>A?>4
' '
;
.6
14
+
= !'
.14;8<564;8<574;8<5-4
 
2
3BB4
9;8<455;34
8;9<554;B8456;55.3B614
8;9<564;B8457;56.3B714
8;9<574;B845-;57.3B-14
8;9<5-4;B84
 .
 ;>4 );4 BB1
 .
&;>4&);4&BB18C DC&D;9C DC&D4
' '
<;
.3B614
E
 .' '
*; !14
+;++
. !F>>14
 .+*;6?>@1 
6A4

6;-?>48;<
64

6;G?>49;<
64
;B84;B94

6;G?>48;<
64

6;F?>49;<
64
 .
 ;>4 );4 BB1
 .
&;>4&);4&BB1C DC&D;C DC&D4
;8B94

6;6?>48;<
64

6;G?>49;<
64
;8B94;<4
;<4;<4;<4
 
>4
E
.???1
2
, !3 
.7614
 
764
E
E

6.1.4. Dobr kroku cakowania T ze wzgldu


na dobr grnej granicy bdu
obliczania macierzy eAT oraz ze wzgldu
na numeryczn stabilno rozwizania
W punktach 6.1.1, 6.1.2, 6.1.3 podano metody zastpowania rwnania stanu (6.2)
przyblionymi rwnaniami rnicowymi. W rwnaniach tych pojawiaj si macierze
dane w postaci szeregw:

( AT ) n
gdzie sn 1 dla n > 2
n! sn
n= 0

S=

(6.48)

Rozdzia 6. Ukady rwna rniczkowych liniowych o staych wspczynnikach

437

(patrz wzory (6.30), (6.31), (6.37), (6.38), (6.45), (6.46), (6.47)). W obliczeniach przybliamy S, biorc skoczon liczb skadnikw rozwinicia (6.48)
K
(6.49)
( AT ) n
S
= M = mij
n! s n
n= 0

[ ]

Macierz bdu wynosi wwczas

R=

(6.50)

(AT ) n
= rij
n=K +1 n! sn

[ ]

Niech A oznacza jedn z nastpujcych norm macierzy kwadratowej A stopnia N:


(6.51)

A = max aij
i

j =1

lub
(6.52)

A = max aij
j

i =1

Zgodnie z definicjami (6.51) lub (6.52) dla macierzy R zachodzi


(6.53)

rij R
dla wszystkich i, j. Ponadto zachodzi [7]:

(6.54)

AB A B .

Uwzgldniajc nierwnoci (6.53), (6.54) oraz rwnania (6.50), otrzymujemy (por. [7])

rij

(6.55)

1
element (i, j ) w macierzy ( AT ) n
n=K +1 n! s n

1
AT

n
!
sn
n=K +1

AT

K +1

( K + 1)! S K +1

[1 + AT + AT

+K .

Jeeli krok cakowania T jest tak dobrany, e AT <1, to szereg w nierwnoci (6.55)
jest zbieny, co daje:

rij

AT

K +1

( K + 1)! S K +1

1
= .
1 AT

(6.56)

Nierwno (6.56) daje grn granic bdu elementw macierzy M (6.49) uywanej
jako przyblienie macierzy S (6.48). Dla danego obcicia K sumy szeregw typu (6.48)
otrzymuje si najwikszy bd (6.56) dla przypadku gdy sn = 1 (n = 0, 1,), co odpowiada macierzy F = eAT (wzr (6.30)). Poniewa macierz ta wystpuje w konstrukcji
wszystkich trzech rozpatrywanych algorytmw (6.33), (6.36), (6.44), jako kryterium
bdu formowania macierzy wystpujcych w tych algorytmach mona przyj grny
bd obcicia w postaci (por. [9]):

438

Metody numeryczne w C++Builder

AT

K +1

1
.
( K + 1)! 1 AT

(6.57)

Przy zadanym wzr (6.57) moe posuy do wyznaczania kroku cakowania T. Jak
pokazano we wstpie, struktura rozwizania rwnania (6.2) zaley od wartoci wasnych macierzy A. Wykazuje si, e w celu zagwarantowania stabilnoci numerycznej,
krok czasowy cakowania T i liczba wyrazw K + 1 w rozwiniciu (6.49) musz by
tak dobrane, aeby najwiksza co do moduu warto wasna macierzy M (wzr (6.49))
bya mniejsza od jednoci. Warunki powysze bd sprawdzane w procedurach obliczeniowych podanych niej.

You might also like