Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
01143 011039 11044663 na godz. na dobę w sumie
Metody numeryczne w C++Builder - książka
Metody numeryczne w C++Builder - książka
Autor: , Liczba stron: 552
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-544-X Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> c++ builder - programowanie
Porównaj ceny (książka, ebook, audiobook).

Metody numeryczne są to sposoby rozwiązywania złożonych problemów matematycznych za pomocą narzędzi obliczeniowych udostępnianych przez popularne języki programowania. Jeden z najpopularniejszych języków -- C++, chociaż nie był projektowany z myślą o zastosowaniu go w obliczeniach numerycznych, posiada mechanizmy, które umożliwiają stosunkowo łatwą implementację algorytmów obliczeniowych. Dzięki uniwersalności mechanizmu szablonów programista może tworzyć procedury numeryczne, w których da się określić precyzję obliczeń zmiennoprzecinkowych. Procedury stworzone w C++ nadają się do przeprowadzania obliczeń zarówno w dziedzinie liczb rzeczywistych, jak i zespolonych.

Książka 'Metody numeryczne w C++Builder' przedstawia najczęściej wykorzystywane algorytmy numeryczne wraz z przykładami ich implementacji w języku C++. Każde zagadnienie jest omówione zarówno od strony teoretycznej, jak i praktycznej, co ułatwia jego zrozumienie i pozwala na modyfikacje zamieszczonych w książce kodów źródłowych. Książka zawiera również opis zagadnień związanych z językiem C++, niezbędnych do poznania i prawidłowego wykorzystywania biblioteki obliczeń numerycznych.

Nie wyważaj otwartych drzwi.
Wykorzystaj w swoich programach algorytmy numeryczne.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Metody numeryczne w C++Builder Autorzy: Bernard Baron, £ukasz Pi¹tek ISBN: 83-7361-544-X Format: B5, stron: 552 Metody numeryczne s¹ to sposoby rozwi¹zywania z³o¿onych problemów matematycznych za pomoc¹ narzêdzi obliczeniowych udostêpnianych przez popularne jêzyki programowania. Jeden z najpopularniejszych jêzyków — C++, chocia¿ nie by³ projektowany z myġl¹ o zastosowaniu go w obliczeniach numerycznych, posiada mechanizmy, które umo¿liwiaj¹ stosunkowo ³atw¹ implementacjê algorytmów obliczeniowych. Dziêki uniwersalnoġci mechanizmu szablonów programista mo¿e tworzyæ procedury numeryczne, w których da siê okreġliæ precyzjê obliczeñ zmiennoprzecinkowych. Procedury stworzone w C++ nadaj¹ siê do przeprowadzania obliczeñ zarówno w dziedzinie liczb rzeczywistych, jak i zespolonych. Ksi¹¿ka „Metody numeryczne w C++Builder” przedstawia najczêġciej wykorzystywane algorytmy numeryczne wraz z przyk³adami ich implementacji w jêzyku C++. Ka¿de zagadnienie jest omówione zarówno od strony teoretycznej, jak i praktycznej, co u³atwia jego zrozumienie i pozwala na modyfikacje zamieszczonych w ksi¹¿ce kodów ĥród³owych. Ksi¹¿ka zawiera równie¿ opis zagadnieñ zwi¹zanych z jêzykiem C++, niezbêdnych do poznania i prawid³owego wykorzystywania biblioteki obliczeñ numerycznych. • Algebra macierzy i równania liniowe • Ca³kowanie i ró¿niczkowanie numeryczne • Wybrane algorytmy interpolacji i aproksymacji • Wyznaczanie minimów funkcji • Rozwi¹zywanie równañ nieliniowych i wyznaczanie wartoġci w³asnych macierzy • Uk³ady równañ ró¿niczkowych liniowych i nieliniowych • Przekszta³cenia Fouriera i Laplace’a Spis treści Przedmowa......................................................................................... 7 Rozdział 1. Definicje typów, funkcji, klas i wzorców dla zagadnień numerycznych .. 9 1.1. Zastosowanie wzorców C++ w bibliotece obliczeń numerycznych........................10 1.2. Definicja wzorca klasy liczb zespolonych...................................................n............13 1.3. Organizacja biblioteki obliczeń numerycznych...................................................n....15 1.4. Funkcje konwersji liczb rzeczywistych zespolonych na łańcuch i odwrotnie ........16 1.5. Użycie wzorca klasy vector do implementacji wektorów w języku C++ ............18 1.5.1. Operacje na wektorach zdefiniowanych na bazie konteneru vector .............20 1.6. Macierz jako wektor wektorów ...................................................n............................21 1.7. Zapis i odczyt wektorów oraz macierzy na komponencie TStringGrid ...............24 1.8. Funkcje wzorcowe do zapisu i odczytu plików macierzy .......................................24 1.9. Wykorzystanie funkcji matematycznych zawartych w bibliotece math.h...............25 1.10. Przekazywanie wskaźników funkcji do procedur implnementujących algorytmy obliczeń numerycznych...................................................n....................27 1.11. DynamicArray i wzorzec valarray jako alternatywa dla wzorca klasy vector ........29 1.12. Wyświetlanie komunikatów o błędach i implementacja wskaźników postępu ......29 Rozdział 2. Algebra macierzy i równania liniowe ................................................. 33 2.1. Metoda bezpośredniego rozwiązywania układu równań macierzowych metodą eliminacji Gaussa ...................................................n..................................34 2.1.1. Skalowanie układu równań liniowych ...................................................n.......38 2.2. Rozwiązywanie układu równań liniowych według algorytmu Crouta....................40 2.3. Obliczanie macierzy odwrotnej metodą eliminacji Gaussa.....................................44 2.4. Obliczanie macierzy odwrotnej metodą Crouta ...................................................n...48 2.5. Obliczanie wyznacznika macierzy kwadratowej...................................................n..53 2.6. Wskaźnik uwarunkowania macierzy ...................................................n....................54 2.7. Obliczanie wartości własnej macierzy kwadratowej A o największym module .....56 2.8. Obliczanie wartości własnej macierzy 1 – αA o największym module .....................57 2.9. Rozwiązywanie układu równań liniowych metodą iteracji Jacobiego oraz Richardsona................................................n.........59 2.10. Rozwiązywanie układu równań metodą Gaussa-Seidela oraz metodą nadrelaksacji.....62 2.11. Pseudorozwiązanie układu nadokreślonego...................................................n.........65 2.12. Metoda najmniejszych kwadratów...................................................n.......................71 2.13. Algorytm Crouta rozwiązywania rzadkich układów równań liniowych.................73 2.14. Algorytmy iteracyjne Richardsona oraz Gaussa-Seidela dla macierzy rzadkich.......82 Przykłady ...................................................n...................................................n..........88 4 Metody numeryczne w C++Builder Rozdział 3. Praktyka badania funkcji................................................................. 111 3.1. Całkowanie i różniczkowanie numeryczne ...................................................n........111 3.1.1. Ekstrapolacja iterowana Richardsona i Aitkena .........................................111 3.1.2. Całkowanie numeryczne ...................................................n..........................119 3.1.3. Różniczkowanie numeryczne...................................................n...................131 3.1.4. Gradient funkcji wielu zmiennych ...................................................n...........142 3.1.5. Jacobian funkcji wektorowej wielu zmiennych ..........................................145 3.1.6. Hesjan funkcji wielu zmiennych ...................................................n..............147 3.2. Wybrane metody aproksymacji i interpolacji liniowej funkcji jednej zmiennej .....149 3.2.1. Aproksymacja metodą najmniejszych kwadratów......................................150 3.2.2. Aproksymacja funkcji dyskretnej wielomianem...........................................152 3.2.3. Aproksymacja układami funkcji ortogonalnych .........................................153 3.2.4. Aproksymacja wielomianami ortogonalnymi .............................................154 3.2.5. Implementacja metod aproksymacji ...................................................n........156 3.2.6. Interpolacja funkcji dyskretnej krzywą łamaną ..........................................169 3.2.7. Interpolacja wielomianem potęgowym Lagrange’a....................................170 3.2.8. Interpolacja funkcjami sklejanymi ...................................................n...........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 wielun zmiennych metodami bezgradientowymi ...................................................n..........................189 3.3.1. Wyznaczenie minimum funkcji wielu zmiennych bezgradientową metodą poszukiwań prostych Hooke’a-Jeevesa............191 3.3.2. Bezgradientowa metoda „złotego podziału” poszukiwania minimum .......193 3.3.3. Bezgradientowa metoda Powella poszukiwania minimumn funkcji wielu zmiennych ...................................................n..................................201 3.4. Wybrane metody poszukiwania minimum funkcji wielun zmiennych metodami gradientowymi ...................................................n................................205 3.4.1. Metoda ekspansji i kontrakcji geometrycznej z jednym testem badania współczynnika kroku przy poszukiwaniu minimum w kierunku ....206 3.4.2. Metoda aproksymacji parabolicznej z jednym testem badania współczynnika kroku przy poszukiwaniu minimum w kierunku ....210 3.4.3. Algorytm największego spadku ...................................................n...............214 3.4.4. Zmodyfikowany algorytm Newtona ...................................................n........217 Przykłady...................................................n...................................................n.........222 Rozdział 4. Równania nieliniowe, zera wielomianów, wartości własne macierzy . 263 4.1. Algorytmy rozwiązywania układów równań nieliniowych ...................................264 4.1.1. Rozwiązywanie układów równań nieliniowych metodą Newtona .............265 4.1.2. Rozwiązywanie układów równań nieliniowych metodą gradientową ........268 4.1.3. Rozwiązywanie układu równań nieliniowych zmodyfikowaną metodą Newtona ...................................................n........271 4.1.4. Rozwiązywanie układów nieliniowych metodą iteracyjną .........................275 4.1.5. Pseudorozwiązania nieliniowego układu nadokreślonengo metodą Hooke’a-Jeevsa...................................................n........................278 4.2. Wyznaczanie zer wielomianów metodami Bairstowa i Laguerre’a ......................280 4.2.1. Dzielenie wielomianów o współczynnikach rzeczynwistych przez czynnik liniowy według algorytmu Hornera .................................280 4.2.2. Dzielenie wielomianu przez czynnik kwadratowy .....................................282 4.2.3. Wyznaczanie dzielników wielomianu stopnia N 2 w postaci trójmianu kwadratowego metodą Bairstowa...........................282 4.2.4. Wyznaczanie zer wielomianów o współczynnikach rzeczywistych ...........287 4.2.5. Wyznaczanie zera wielomianu metodą Laguerre’a ....................................288 4.2.6. Wyznaczanie wszystkich zer wielomianu metodą Laguerre’a ...................290 Spis treści 5 4.3. Wyznaczanie wartości własnych macierzy metodami Bairstowa i Laguerre’a.....293 4.3.1. Wyznaczanie współczynników wielomianu charakterystycznego macierzy kwadratowej metodą Kryłowa ...............293 4.3.2. Wyznaczanie wartości własnych macierzy metodą Bairstowa ...................295 4.3.3. Wyznaczanie wartości własnych macierzy metodą Laguerre’a..................297 4.4. Wyznaczanie zer funkcji jednej zmiennej metodą połowienia przedziału.........298 Przykłady...................................................n...................................................n.........299 Rozdział 5. Układy zwyczajnych równań różniczkowych nieliniowych ................. 315 5.1. Układ równań różniczkowych jako klasa programowania obiektowego ..............317 5.1.1. Definicje typów do zadawania układu równań różniczkowych nieliniowych..........................................317 5.1.2. Definicja klasy prototypowej dla klas implementnujących rozwiązywanie układu równań różniczkowych ......................................318 5.1.3. Definicja klasy prototypowej dla klas potomnych ndotyczących rozwiązywania układu równań różniczkowych nieliniowych ................324 5.1.4. Aproksymacja dyskretnych wartości wektorów stanu ................................327 5.1.5. Funkcje pomocnicze do działania na wektorach stanu ...............................330 5.2. Metody Rungego-Kutty ...................................................n......................................331 5.3. Rozwiązywanie układu równań różniczkowych zwyczajnych metodą Rungego-Kutty z automatycznym doborem kroku całkowania.............337 5.4. Metody Fehlberga ...................................................n...............................................341 5.5. Rozwiązanie układu równań różniczkowych nieliniowycnh zwyczajnych metodą Fehlberga z automatycznym doborem kroku całkowania .....................349 5.6. Rozwiązanie układu równań różniczkowych nieliniowych zwyczajnych metodą Dormanda-Prince’a z automatycznym doborem kroku całkowania ........352 5.7. Metoda wielokrokowa rozwiązywania układu równań różniczkowych nieliniowych z członem przewidywania Adamsa-Bashfortha oraz członem korekcyjnym Adamsa- Multona z automatycznym doborem kroku i rzędu..............................................358 5.7.1. Algorytm Adamsa-Bashfortha ...................................................n.................358 5.7.2. Algorytm Adamsa-Multona ...................................................n.....................360 5.7.3. Algorytmy przewidywania i korekcji wyrażone przez macierz Nordsiecka ...................................................n....................363 5.7.4. Faza wstępna obliczeń...................................................n..............................373 5.7.5. Metody klasy TAdamsMultonAbstract i TAdamsMulton realizujące algorytm Adamsa-Multona ...................................................n377 5.8. Rozwiązywanie układu równań nieliniowych metodą sztywno stabilnych algorytmów Geara...................................................n............383 5.9. Metoda Gragga z ekstrapolacją Bulirscha-Stoera..................................................395 Przykłady...................................................n...................................................n.........403 Rozdział 6. Układy równań różniczkowych liniowych o stałych współczynnikach .. 425 6.1. Równania różnicowe dla różnych aproksymacji funkcjni wymuszających...................429 6.1.1. Wymuszenie aproksymowane funkcjami przedziałami stałymi .................430 6.1.2. Wymuszenie aproksymowane funkcjami przedziałami liniowymi ............432 6.1.3. Wymuszenie aproksymowane wielomianem stopnia drugiego ..................434 6.1.4. Dobór kroku całkowania T ze względu na dobór górnej granicy błędu obliczania macierzy eAT oraz ze względu na numeryczną stabilność rozwiązania ...................................................n436 6.2. Definicja typów dla liniowych równań różniczkowych ........................................438 6.3. Numeryczne rozwiązywanie równań różniczkowych liniowych o stałych współczynnikach dla aproksymacji wymuszeń funkcjami przedziałami stałymi......441 6 Metody numeryczne w C++Builder 6.4. Numeryczne rozwiązywanie równań różniczkowych linniowych o stałych współczynnikach dla aproksymacji wymuszeń funkcjami przedziałami liniowymi ...................................................n..................444 6.5. Numeryczne rozwiązywanie równań różniczkowych linniowych o stałych współczynnikach dla aproksymacji wymuszeń funnkcjami przedziałami kwadratowymi...................................................n............................447 Przykłady ...................................................n...................................................n.........450 Rozdział 7. Praktyka przekształceń Fouriera...................................................... 457 7.1. Dyskretna transformacja Fouriera według algorytmu Hornera .............................463 7.2. Szybkie przekształcenie Fouriera według algorytmu Cooleya-Tukeya ................465 7.3. Szybkie przekształcenie Fouriera według algorytmu Sandego-Tukeya ................473 7.4. Wyznaczanie współczynników zespolonego szeregu Fourinera dla dowolnej funkcji okresowej...................................................n.......................477 7.5. Obliczanie odwrotnej transformacji Fouriera dla dowolnej transformaty.............478 Przykłady ...................................................n...................................................n.........480 Rozdział 8. Praktyka przekształceń Laplace’a.................................................... 495 8.1. Numeryczne obliczanie transformacji odwrotnej Laplace’a w wybranej chwili czasu z zastosowaniem szeregów Fouriera ............................496 8.2. Numeryczne obliczanie transformacji odwrotnej Laplace’a w wybranej chwili czasowej z zastosowaniem szeregów Laguerre’a ................502 8.3. Numeryczne obliczanie transformacji odwrotnej Laplnace’a w wybranej chwili czasowej według algorytmu Valsa ......................................506 8.4. Obliczanie transformacji odwrotnej Laplace’a funkcjni wymiernej na podstawie jej pozostałości w biegunach ......................................510 8.4.1. Definiowanie klasy do obliczania odwrotnej trannsformacji Laplace’a funkcji wymiernej na podstawie jej pozostałości w biegunach ..............513 Przykłady...................................................n...................................................n.........518 Bibliografia ..................................................................................... 531 Skorowidz....................................................................................... 535 Rozdział 6. Układy równań różniczkowych liniowych o stałych współczynnikach Zadany jest układ N równań różniczkowych liniowych niejednorodnych: )( t dx i dt = N ∑ j 1 = )( txa ij j + W ∑ j 1 = )( tub ij j , (i = 1,2,…,N), (6.1) gdzie współczynniki aij oraz bij są rzeczywiste. Układ ten można zapisać w postaci macierzowej: )( td x dt Ax )( t + Bu )( t = , (6.2) gdzie: )( t x =           )( tx 1 )( tx 2 . . . )( t x N           ; )( td x = dt             )( t dx 1 dt dx 2 )( t dt . . . dx N )( t dt             ; A =       aa 11 12 K a 1 N aa 21 22 K a 2 N .. K . aa N 1 N 2 K a NN       ; 426 Metody numeryczne w C++Builder = B 21 11 bb bb       bb N 1 K K b 1 W b 2 W 12 22 .. K . b NW K 2 N       )( t u = ; 1 2 . )( tu )( tu         )(   tu . . w           . Na człony niejednorodne układu (6.1) składa się W wymuszeń uj(t) (j = 1, 2, …, W) występujących ze współczynnikami bij macierzy prostokątnej B. W teorii równania (6.2) centralną rolę odgrywa funkcja wykładnicza eAt , macierzy kwadratowej A prze- mnożonej przez zmienną niezależną t, zdefiniowaną szeregiem macierzowym [7]: t A e += t A1 + 1 !2 ( t A 2 ) + K + 1 ! k ( t A k ) + K = ∞ ∑ k 0 = ( A t k ) ! k . (6.3) Szereg macierzowy (6.3) jest równoważny z N2 gowych: zwykłych skalarnych szeregów potę- δ ij ( t A ) + + ij { ( 1 !2 t A 2 ) } ij + + K { ( 1 ! k t A k ) } K + ij , (i,j = 1,2,…,N) Dla zrozumienia konstrukcji całki ogólnej równania (6.2) niezbędne będą następujące własności funkcji wykładniczej eAt : 1. Jeżeli t = 0, to zgodnie z definicją (6.3) eA0 = 1 (macierz jednostkowa N⋅N-wymiarowa). 2. Jeżeli macierz A komutuje z macierzą B, a więc AB = BA, to: e⋅ eBt = e(A+B)t. 3. Ponieważ na mocy własności (6.5) eAt odwrotna macierzy eAt ma postać: [ e A t 1 − ] e–At = e(A – A)t = 1, więc macierz A t − = e . 4. Różniczkując obie strony równania macierzowego (6.3) ze wtzględu na t oraz wyłączając wspólny czynnik A z wyrazów szeregu nieskończonego, otrzymujemy: d dt A t e A t A e A t e A = = . (6.4) (6.5) (6.6) (6.7) 5. Mnożąc lewostronnie lub prawostronnie równanie macierztowe (6.7) przez A–1 (macierz odwrotna macierzy A), a następnie całkując tak otrzymywane równania ze względu na t od t1 do t2, otrzymujemy: Rozdział 6. ♦ Układy równań różniczkowych liniowych o stałych współczynnikach 427 A t e dt A = 1 − ( e A t 2 A t 1 e − ) = ( e A t 2 A t 1 e − ) A 1 − . (6.8) t 2 ∫ t 1 Do rozwiązania układu równań różniczkowych liniowych (6.2) można zastosować metodę uzmiennienia stałych. W tym celu najpierw rozpatruje się przypadek, gdy u(t) ≡ 0, co oznacza, że równanie (6.2) jest jednorodne td )( x dt Ax t )( = . Łatwo wykazać, że całka ogólna równania jednorodnego (t6.9) ma postać: gdzie y jest wektorem N-wymiarowym o składowych stałych. x(t) = eAt y , Istotnie, z własności (6.7) wynika tdx )( = dt d dt ( tye A t ) A)( = A t ye A= )t(x . (6.9) (6.10) (6.11) Zgodnie z metodą uzmiennienia stałych przyjmuje się dalej, że wektor y jest funkcją zmiennej t, co daje: x(t) = eAt y(t) , (6.12) a następnie podstawia się wyrażenie (6.12) do równania niejednorodnego (6.2) z uwzględ- nieniem własności (6.7) yA e A t )t( + A t e td )( y = dt Bu+yA )t( e A t )t( . (6.13) Upraszczając równanie (6.13) o człon AeAty(t) oraz mnożąc je lewostronnie przez macierz eAt, otrzymujemy na mocy własności (6.6) td )( y dt e A− tBu )t( = . Całkując równanie (6.14) ze względu na t od t0 do t, otrzymujemy: y t )( = y t ( ) + 0 t ∫ − e t 0 A t d)( ττBu . (6.14) (6.15) Jeżeli zadany jest wektor wartości początkowych x(t0), to odpowiadający mu wektor y(t0) możemy wyznaczyć z równania (6.12), stosując własność (6.6t) y(t0) = e –At x(t0) . (6.16) Uwzględniając równanie (6.15) wraz z podstawieniem (6.16) w równaniu (6.12), otrzy- mujemy następujące rozwiązanie równania (6.2) 428 Metody numeryczne w C++Builder t )( x e = A ( t t − )0 t ( x 0 ) + A t e t ∫ − e t 0 A τ Bu d)( ττ . (6.17) Równanie (6.17) nie nadaje się do bezpośredniego obliczenia numerycznego. Rozwią- zanie dokładne (6.17) równania (6.2) możemy jednak wykorzystać w metodzie kro- kowej, zastępując to równanie równaniem różnicowym, prztyjmując t0 = kT i t = (k + 1)T [ ( x k )1 T + ] A T e ( kT ) x + e = A ( k )1 + T ( k )1 T + ∫ − e A τ Bu d)( ττ . (6.18) kT W obliczaniu całek (6.18) mogą wystąpić trudności związane z występowaniem ujem- nych i dużych co do modułu wartości własnych macierzy A. Ze względu na możliwość takiego przypadku, musimy aproksymować funkcję wektorową wymuszającą u(t), nie zmieniając jądra eAt w całce równania (6.18). Niech zachodzi przypadek ogólny, dla którego macierz A ma dzielniki elementarne: ( λλ − 1 ) p 1 ( λλ − , ) p 2 2 ( λλ − ) sp s , , K , gdzie wśród wartości własnych λ1, λ2,…, λs macierzy A będących, zgodnie z definicją, zerami wielomianu charakterystycznego macierzy A ( A λ − I ) 0 = det mogą być liczby jednakowe; się, że w takim przypadku istnieje taka macierz nieosotbliwa S, że ≤1 ≤ n p N , przy czym p1 + p2 +…+ ps = M. Dowodzi gdzie macierz C jest macierzą quasi-diagonalną zwaną kanoniczną macierzą Jordana [30] A = S–1 CS, (6.19) C = I p 1 ( λ 1 ) 0 0 . . . 0 I p 1 ( λ ) 2 . . . 0           K K K K K K 0 . . . . I ip ( λ i )           ( λ i ) = ; I ip         λ i 1 0 0 0 0 λ i 1 0 0 0 0 λ i 1 0 K K K K K 0 0 0 λ i 1 0 0 0 0 λ i         (6.20) Stosując transformację (6.19), funkcję wykładniczą eAt możemy przekształcić nastę- pująco: A t e = e − 1 CS ) t ( S − (1 S = e SC t ) = Ponieważ macierz C jest quasi-diagonalną, to: 1 − S C e t S . (6.21) Rozdział 6. ♦ Układy równań różniczkowych liniowych o stałych współczynnikach 429 t C e = I p 1 )1( λ t e 0 0 . 0 I p 2 )2( λ t e . 0        0 0 . I sp ( λ ) ts e        . (6.22) Zgodnie z definicją macierzowej funkcji wykładniczej otraz macierzy (6.20) zachodzi [30]:             (6.23) .             ti λ e ti λ te 0 0 0 K ti λ e 0 0 K 2 t !2 ti λ e ti λ te ti λ e K 0 I ( 1 λ i p ) t e = KKKKKKKKKKKKKKKKKKKKK ip 1 − t ( p i − )!1 ti λ e ip 2 − t ( p i − )!2 ti λ e ip 3 − t ( p i − )!3 ti λ e ti λ e K Wzory (6.17), (6.21) i (6.22) określają strukturę rozwiązania równania różniczkowego (6.2), a w szczególności jego związek z wartościami własnymi λi występującymi w kom- λ przemnożonych przez wielomiany Pi(t) nie większego stopnia binacjach funkcji niż pi – 1, gdzie pi jest stopniem dzielnika elementarnego odpowiadającego wartości . Załóżmy w ogólnym przypadku, że wartości własne λi macierzy A własnej λi, tj. λ)( etP e ti ti i są zespolone αλ = i + i jβ i , (i = 1,2,…,N). (6.24) { } λ i i = 0 α Re , to odpowiednie składniki rozwiązania Pi(t) wzrastają wykład- Jeżeli niczo z członem wielomianowym Pi(t) gdy czas t wzrasta. Jeżeli αi 0, to odpowiednie maleją gdy czas t wzrasta. W każdym przypadku, jeśli składniki rozwiązania , to jak wiadomo λi tworzy zespoloną parę sprzężoną z odpowiednią λ)( etP { } λ Im β = ≠ 0 i i ti i wartością własną λ , co odpowiada składnikowi rozwiązania sinusoidalnemu z wagą ∗ i wykładniczą ti λ i wielomianową Pi(t) e etP )( i ti α sin β t i . (6.25) 6.1. Równania różnicowe dla różnych aproksymacji funkcji wymuszających Do numerycznego rozwiązania układu równań różniczkowych liniowych (6.2) możemy wykorzystać równanie różnicowe (6.18), przyjmując różną aproksymację funkcji wymu- szającej u(t). W niniejszym opracowaniu podane będą konstrukcje tych algorytmów dla trzech przypadków, a mianowicie dla aproksymacji funkcji wymuszającej w postaci funkcji przedziałami stałej, liniowej i kwadratowej. 430 Metody numeryczne w C++Builder 6.1.1. Wymuszenie aproksymowane funkcjami przedziałami stałymi Niech wymuszenie wektorowe u(t) jest dane w postaci funkcji przedziałami stałej, takiej, że: u(t) = u(kT) dla kT ≤ t ≤ (k+1)T, k = 0,1,2,… (6.26) W takim przypadku wykonując całkowanie w równaniu różnicowym (6.18) z uwzględ- nieniem wzoru (6.8), otrzymujemy [7]: T)1k( + T)1k( + (6.27) ∫ kT − A τ e Bu )( ττ d -= e − A τ 1 − BuA ( kT ) = ( −= kT − A T)1k( + e A T k − + e ) 1 − BuA ) ( .kT Umieszczając powyższy wynik całkowania w równaniu (6.18),t otrzymujemy: A T)1k( + − A T)1k( + e A kT − e + − ) 1 − BuA )kT( = (6.28) [ T)1k( x + ] = = e e A T )kT( x + A T )kT( x + gdzie: 1 — macierz jednostkowa. e ( e ( ) A T − 1 − BuA1 ),kT( W równaniu różnicowym (6.28) powinniśmy, ze względu na minimum operacji nu- merycznych, obliczać macierz (eAT – 1)A–1, nie wykonując pomocniczych obliczeń macierzy eAT oraz A–1, lecz wykorzystując równość: ( e A T ) 1 A − 1 − T = ( A T ) n )!+n( 1 ∞ ∑ n 0 = wnikającą z definicji (6.3). Gdy uwzględnimy więc równanie (6.29) oraz oznaczenia macietrzy: F e = A T T = ∞ ∑ n 0 = ( A T n ) !n ; G 0    ∞ = ∑ =0 n ( ( A T + n n ) )1 !    B T i wektorów x(k) = x(kT); u(k) = u(kT), formuła rekurencyjna (6.28) przyjmie postać: x(k+1) = Fx(k) + G0u(k). (6.29) (6.30) (6.31) (6.32) (6.33) Rozdział 6. ♦ Układy równań różniczkowych liniowych o stałych współczynnikach 431 Nie istnieje więc potrzeba obliczania macierzy odwrotnetj A–1, jak by to wynikało z rów- nania (6.28). Mając na uwadze dalszą minimalizację operacji numerycznych, powinniśmy zauważyć, że formowanie macierzy F i G0 (wzory (6.30) i (6.31)) należy prowadzić równolegle ze względu na wspólne elementy (AT) występujące w szeregach. Równanie różnicowe (6.33) daje więc formułę rekurencyjną, którą można łatwo zaprogramować na komputerze, co pokazane będzie w dalszych punktach. Stosując wzór rekurencyjny (6.33) do rozwiązania numerycznego równania różnicz- kowego (6.2), odpowiadający aproksymacji wymuszeń funkcjami przedziałami stałymi, musimy w pierwszej kolejności wygenerować macierze F i G0 określone wzorami (6.30) i (6.31). Blok funkcyjny generujący te macierze może mieć posttać: VGORNCVGENCUU6[R KPV/CE2QO XGEVQTXGEVQT6[R  #XGEVQTXGEVQT62[R  $ XGEVQTXGEVQT6[R  (XGEVQTXGEVQT6[R  ) 6[R66[RGRU6[RGRUYKPV0KPV9 ] KPV-$NCF 6[R550QTOC#6VGVC/9# XGEVQTXGEVQT6[R  #:#;#6$:$6 +PKELCELC/CEKGT[ #600 +PKELCELC/CEKGT[ #:00  +PKELCELC/CEKGT[ $:00  +PKELCELC/CEKGT[ #;00 +PKELCELC/CEKGT[ $609  VT[ ] #6# 6 /CEKGT,GFPQUVMQYC #:  /CEKGT,GFPQUVMQYC ( /CEKGT,GFPQUVMQYC $:  0QTOC#60QTOC/CEKGT[ #6  -55 VGVC0QTOC#6 Ō0QTOC#6  FQ ] -  #;#: #6 5-#:#; 5(( #: 5- #:#; 5 $:$: #: #:-QRKWL #;  VGVC 0QTOC#6 -   _YJKNG VGVC GRU  /9#/99/CE# (GRUY  KH /9#  TGVWTP $6$ 6)$: $6 TGVWTP _ ECVEJ  ] 2KU-QO$NCF4Q4QP   TGVWTP _ _ 432 Metody numeryczne w C++Builder 6.1.2. Wymuszenie aproksymowane funkcjami przedziałami liniowymi Zakładamy, że wymuszenie u(t) jest funkcja ciągłą przedziałami liniową, taką, że: )( τ u ( kT ) u + = 1 T [ u ( ( k )1 T + ) ] )kT( ( τ − u kT ) − = f 1 + f τ 2 (6.34) dla gdzie: kT ≤ τ (k + 1)T, k = 0, 1, 2,… , C i = i 2 T i + 1 T ∫ 0 e A ( T − s ) s i ds ; =f 2 [ u ( ( k + )1 T ) − u ])kT( . (6.34a) 1 T Wykonując w takim przypadku całkowanie przez części w równaniu różnicowym (6.18) z uwzględnieniem wzoru (6.8), otrzymujemy: ( k )1 + T A τ e Bu )( τ d τ −= A 1 − e A- τ ∫ kT ( fB 1 + f τ 2 ) ( k )1 + T ( k )1 + T + ∫ kT kT A 1 − e A- τ Bf d τ 2 = = A 1 − e A- kT       + AB 1 − ( e A- kT ) B1 − 1 T    ( u kT ) + A- T e − AB 1 − ( e A- T ) B1 − +    1 T    ( k u + )1 T .    Gdy uwzględnimy powyższy wynik całkowania oraz oznaczenie (6.32), równanie różnicowe (6.18) przyjmie postać: ( k x + )1 = e A T )( Akx + ( e − A T ) A1 − 1 − A T e 1 −    1 T    Bu )( k + (6.35) + 1 − A    ( e A T ) A1 − 1 − 1 T −  1   Bu ( k + .)1 Uwzględniając wzory (6.30) i (6.29), równanie rekurencyjne (6.35) możemy prze- kształcić do postaci: x(k + 1) = Fx(k) + G1u(k) + Hu(k + 1), gdzie: A=G 1 1 −    ( e − A T ) −− A1 1 − A T e 1 T    =B    ∞ ∑ =n 0 ( A (! nn ) T + n )2    ( BT ) , A=H 1 − [ ( e A T − ) =B1A1 − 1 − ]    ∞ ∑ n= 0 ( A T + n ( n ) )!2    ( BT ) , natomiast macierz F wyraża się wzorem (6.30). (6.36) (6.37) (6.38) Rozdział 6. ♦ Układy równań różniczkowych liniowych o stałych współczynnikach 433 Równanie rekurencyjne (6.36) daje więc algorytm wyznaczantia rozwiązania równania różniczkowego w postaci (6.2). W obliczeniach komputerowych należy zauważyć, że wyznaczanie macierzy F, G1 i H zgodnie z wzorami (6.30), (6.37) i (6.38) należy pro- wadzić równolegle ze względu na wspólne elementy (AT)n występujące w szeregach macierzowych tych wzorów, co minimalizuje liczbę operacji numerycznych. W przy- padku stosowania wzoru rekurencyjnego (6.36) niezbędne jest wygenerowanie macierzy F, G1 i H (wzory (6.30), (6.37) i (6.38)), co można zrealizować w następującym bloku funkcyjnym: #$ŌOCEKGTGWMđCFWTÎYPCēTÎľPKEMQY[EJF:FVK# : $ 7 0ŌTæFOCEKGT[#K( 9ŌNKEDCMQNWOPOCEKGT[$)* 6ŌY[DTCP[MTQMECđMQYCPKC GRUŌIÎTPCITCPKECDđúFWRT[DNKľGPKCOCEKGT[()* GRUYŌDđæFY[PCEGPKCPCLYKúMUGLEQFQOQFWđWYCTVQħKEK YđCUPGLOCEKGT[( VGORNCVGENCUU6[R KPV/CE2QO XGEVQTXGEVQT6[R  #XGEVQTXGEVQT6[R  $XGEVQTXGKEVQT6[R  ( XGEVQTXGEVQT6[R  )XGEVQTXGEVQT6[R  * 6[R66[RGRU6[RGRUYKPV0KPV9 ] KPV-$NCF 6[R55550QTOC#6VGVC/9#C XGEVQTXGEVQT6[R  #:#;#6#)#*$6 +PKELCELC/CEKGT[ #600 +PKELCELC/CEKGT[ #:00  +PKELCELC/CEKGT[ #;00 +PKELCELC/CEKGT[ #*00  +PKELCELC/CEKGT[ #)00 +PKELCELC/CEKGT[ $609  VT[ ] #6# 6/CEKGT,GFPQUVMQYC #:  0QTOC#60QTOC/CEKGT[ #6  -5555 VGVC0QTOC#6 Ō0QTOC#6  /CEKGT,GFPQUVMQYC (  #)#: C#*#: C FQ ] -  #;#: #6 55- #:#; 55(( #: 5  -   -  -  #:#; 5#)#) #: 5-  #:#; 5#*#* #: HQT KPVKK0K HQT KPVLL0L #:=K?=L?#;=K?=L? VGVC 0QTOC#6 -   _YJKNG VGVC GRU  /9#/99/CE# (GRUY  KH /9#  TGVWTP $6$ 6)#) $6*#* $6 TGVWTP _ ECVEJ  434 Metody numeryczne w C++Builder ] 2KU-QO$NCF4Q4QP   TGVWTP _ _ 6.1.3. Wymuszenie aproksymowane wielomianem stopnia drugiego W tym przypadku dokonujemy we wzorze (6.18) zamiany zmiennytch pod całką: s +=τ kT gdzie 0 s T , co daje: [ ( x k )1 T + ] A T = e ( x kT ) + A ( sT − ) Bu ( kT ) s ds + e . T ∫ 0 (6.39) W celu obliczenia całki we wzorze (6.39) należy interpolotwać u(kT + s) wielomianem drugiego stopnia: s kT )+( u = 1 −    s3 T + 2 s2 2 T    )kT( u +    s4 T − 2 s4 2 T       u kT + T 2  +  (6.40)   −+  s T + 2 s2 2 T    ( )T1k )+( u Podstawiając przybliżenie (6.40) pod całkę wzoru (6.39), otrzymtujemy: T ∫ 0 + gdzie: A )sT( − e Bu kT( + ds)s =    − C 0 3 2 + C 1 1 2 uBC )kT()T(    2 + (6.41) ( 2 uBCC ) )T( − 1 2 kT +    T 2  −+     1 2 + C 1 1 2 uBC )T( 2    ( ).T)1k( + C i = i 2 1 + i T T ∫ 0 A ( sT − ) e i dss dla i = 0,1,2. Obliczając całkę (6.42) dla poszczególnych i = 0, 1, 2, otrzymujemy: ( e A T ) )T( A1 − = =C 0 ∞ ∑ =n 0 ( A T ) n ( n )!1 + , ( 2 e A T =C 1 −− A1 T [ )( A T 21 − ] ∑∞ 2 = ) =n 0 ( A T n ) ( n + )!2 , (6.42) (6.43) =C 2 8    A T e −− A1 T − 1 2 ( A T 2 ) [ ( A T    31 − ] ∑ = 8 ∞ ) =n 0 ( A T + n n ) )!3 . ( Rozdział 6. ♦ Układy równań różniczkowych liniowych o stałych współczynnikach 435 Gdy przyjmiemy oznaczenie (6.32) oraz uwzględnimy wynik całkowania (6.41), rów- nanie rekurencyjne (6.39) przyjmuje postać: ( k x + )1 = Fx )( k + uG 2 )( k + uH 2 + k    1 2  +  Ru ( k + )1 , gdzie: = G 2    − C 0 3 2 + C 1 1 2 TBC ( 2    ) , H 2 = 2( TBCC − )( 1 2 ) , R −=    1 2 + C 1 1 2 TBC ( 2    ) , (6.44) (6.45) (6.46) (6.47) natomiast macierz F wyraża się wzorem (6.30). Równanie rekurencyjne (6.44) daje algorytm wyznaczania rozwiązania równania róż- niczkowego (6.2) w postaci dyskretnej x(k) (k = 0, 1,…). W celu zminimalizowania operacji numerycznych należy zauważyć, że formowanie macierzy F, G2, H2, R należy prowadzić równolegle (wzory (6.30), (6.43), (6.45), (6.46), (6.47)) ze względu na wspól- ne elementy (AT)n występujące w szeregach macierzowych tych wzorów. Zauważmy również, że jeżeli x(t) jest liczone co T, to u(t) musi być zadane co T 1 2 sekund. Stosując wzór rekurencyjny (6.44) odpowiadający aproksymacji wymuszeń wielo- mianem stopnia drugiego, musimy w pierwszej kolejności wygenerować macierze F, G2, H2, R (wzory (6.30), (6.45), (6.46) i (6.47)). Można tego dokonać w sposób poka- zany w poniższym bloku funkcyjnym: 0ŌTæFOCEKGT[#K( 9ŌNKEDCMQNWOPOCEKGT[$)*4 6ŌY[DTCP[MTQMECđMQYCPKC GRUŌIÎTPCITCPKECDđúFWRT[DNKľGPKCOCEKGT[()*C4 GRUYŌDđæFY[PCEGPKCPCLYKúMUGLEQFQOQFWđW YCTVQħEKYđCUPGLOCEKGT[( VGORNCVGENCUU6[R KPV/CE2QO XGEVQTXGEVQT6[R  #XGEVQTXGEVQT6[R  $XGEVQTXGEVQT6[R ( XGEVQTXGEVQT6[R  )XGEVQTXGEVQT6[R  * XGEVQTXGEVQT6[R  46[R66[RGRU6[RGRUY KPV0KPV9 ] KPV-$NCF 6[R555550QTOC#6VGVC/9#C XGEVQTXGEVQT6[R  #:#;#6#)#*#4$6 +PKELCELC/CEKGT[ #600 +PKELCELC/CEKGT[ #:00  +PKELCELC/CEKGT[ #;00 +PKELCELC/CEKGT[ #*00  +PKELCELC/CEKGT[ #)00 +PKELCELC/CEKGT[ #400  +PKELCELC/CEKGT[ $609  VT[ ] 436 Metody numeryczne w C++Builder #6# 6/CEKGT,GFPQUVMQYC #:  0QTOC#60QTOC/CEKGT[ #6  -55555 VGVC0QTOC#6 Ō0QTOC#6  /CEKGT,GFPQUVMQYC ( #)#: 5#*#: 5#4#: 5 FQ ] -  #;#: #655- #:#; 55(( #:555 -   #:#; 5#)#) #:55 -   #:#; 5#*#* #:55 -   #:#; 5#4#4 #: HQT KPVKK0K HQT KPVLL0L #:=K?=L?#;=K?=L? VGVC 0QTOC#6 -   _ YJKNG VGVC GRU  /9#/99/CE# (GRUY  KH /9#  TGVWTP CŌ#:#* C C#;#4 C #)#) #:#)#) #; C#:#* C CŌ#;#4 C HQT KPVKK0K HQT KPVLL0L #6=K?=L?#*=K?=L? #*#: #; CŌ#:#6 C C#;#4 C #4#: #;$6$ 6 )#) $6*#* $64#4 $6 TGVWTP _ ECVEJ  ] 2KU-QO$NCF4Q4QP   TGVWTP _ _ 6.1.4. Dobór kroku całkowania T ze względu na dobór górnej granicy błędu obliczania macierzy eAT oraz ze względu na numeryczną stabilność rozwiązania W punktach 6.1.1, 6.1.2, 6.1.3 podano metody zastępowania równania stanu (6.2) przybliżonymi równaniami różnicowymi. W równaniach tych pojawiają się macierze dane w postaci szeregów: S = ∞ ∑ =n 0 ( TA n ) ! sn n gdzie s n ≥ 1 dla n 2 (6.48) Rozdział 6. ♦ Układy równań różniczkowych liniowych o stałych współczynnikach 437 (patrz wzory (6.30), (6.31), (6.37), (6.38), (6.45), (6.46), (6.47)). W obliczeniach przy- bliżamy S, biorąc skończoną liczbę składników rozwinięcia (6.48) (6.49) S K ≅ ∑ =n 0 ( A T n ) ! sn n = M = [ m ij ] Macierz błędu wynosi wówczas ∞ = ∑ R K=n +1 (A T ) n ! sn n [ ] r ij = (6.50) Niech A oznacza jedną z następujących norm macierzy kwadratowetj A stopnia N: lub A = max i N ∑ j 1 = a ij A = max j N ∑ i 1 = a ij Zgodnie z definicjami (6.51) lub (6.52) dla macierzy R zachodzi R≤ r ij dla wszystkich i, j. Ponadto zachodzi [7]: AB ≤ A ≤ B . (6.51) (6.52) (6.53) (6.54) Uwzględniając nierówności (6.53), (6.54) oraz równania (6.50), otrzymujemy (por. [7]) r ij ≤ ∞ ∑ K=n + 1 1 sn ! n element i ),( wj macierzy ( A T ) n ≤ ≤ ∞ ∑ K=n + 1 1 sn ! n A T n ≤ K + 1 A T ( K )!1 S + K + 1 [ 1 + A T + A T 2 ]. K+ (6.55) Jeżeli krok całkowania T jest tak dobrany, że TA 1, to szereg w nierówności (6.55) jest zbieżny, co daje: r ij ≤ K + 1 A T 1 ( K )!1 S + K + 1 1 − A T ε= . (6.56) Nierówność (6.56) daje górną granicę błędu elementów macierzy M (6.49) używanej jako przybliżenie macierzy S (6.48). Dla danego obcięcia K sumy szeregów typu (6.48) otrzymuje się największy błąd (6.56) dla przypadku gdy sn = 1 (n = 0, 1,…), co odpo- wiada macierzy F = eAT (wzór (6.30)). Ponieważ macierz ta występuje w konstrukcji wszystkich trzech rozpatrywanych algorytmów (6.33), (6.36), (6.44), jako kryterium błędu formowania macierzy występujących w tych algorytmach można przyjąć górny błąd obcięcia w postaci (por. [9]): 438 Metody numeryczne w C++Builder K + 1 A T 1 ε = ( K )!1 + 1 − A T . (6.57) Przy zadanym ε wzór (6.57) może posłużyć do wyznaczania kroku całkowania T. Jak pokazano we wstępie, struktura rozwiązania równania (6.2) zależy od wartości wła- snych macierzy A. Wykazuje się, że w celu zagwarantowania stabilności numerycznej, krok czasowy całkowania T i liczba wyrazów K + 1 w rozwinięciu (6.49) muszą być tak dobrane, ażeby największa co do modułu wartość własna macierzy M (wzór (6.49)) była mniejsza od jedności. Warunki powyższe będą sprawdzane w procedurach obli- czeniowych podanych niżej.
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Metody numeryczne w C++Builder
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: