Katedra teoretické elektrotechniky Elektrotechnická fakulta ZÁPADOƒESKÁ UNIVERZITA V PLZNI Modelování v elektrotechnice Pánek David, K s Pavel, Korous Luká², Karban Pavel 28. listopadu 2012
Obsah 1 Úvod do skriptovacího jazyka Matlab 1 1.1 Prom nné a datové typy........................... 1 1.1.1 P íklady................................ 1 1.2 Rízení b hu programu............................ 2 1.2.1 Podmín ný p íkaz.......................... 2 1.2.2 Cykly................................. 2 2 e²ení soustav rovnic 5 2.1 Gaussova eliminace.............................. 5 2.2 Implementace Gaussovy eliminace ve skriptovacím jazyce MATLAB.. 6 3 Aproximace metodou nejmen²ích tverc 9 3.1 Úloha aproximace metodou nejmen²ích tverc.............. 9 4 Interpolace funkcí 12 4.1 Lagrangeova interpolace........................... 12 5 Numerické e²ení oby ejných diferenciálních rovnic 14 5.1 Numerické metody e²ení oby ejných diferenciálních rovnic........ 14 5.1.1 Jednokrokové metody........................ 14 5.1.2 Implementace jednokrokových metod................ 15
1 Úvod do skriptovacího jazyka Matlab Matlab je název pro interaktivní programové prost edí a zárove pro skriptovací jazyk. Práce v interaktivním prost edí je intuitivní pro kaºdého, kdo má zku²enost s libovolným vývojovým prost edím. Cílem této kapitoly je shrnout základní vlastnosti skriptovacího jazyka Matlab. 1.1 Prom nné a datové typy Matlab je jazyk se slabou typovou kontrolou. Prom nné nevyºadují deklaraci a typ prom nné je ur en p i jejím pouºití. Základním typem prom nné v Matlabu je matice. Matice m ºe mít libovolný po et rozm r, speciálními p ípady jsou skalár (matice 1 1), ádkový vektor (matice 1 n) a sloupcový vektor(matice n 1). Výchozím datovým typem prom nných je typ double. 1.1.1 P íklady P íkaz a = 10 vytvo í skalární prom nnou, a = [1, 1, 1] vytvo í ádkový vektor, a = [1; 1; 1] sloupcový vektor a = [1, 0, 0; 0, 1, 0; 0, 0, 1] vytvo í tvercovou matici 3 3. V²echny vytvo ené objekty obsahují reálná ísla typu double. V Matlabu lze p ímo pracovat s komplexními ísly. Pro ozna ení imaginární jednotky lze pouºít symbol i nebo j. Komplexní íslo lze vytvo it pomocí p íkazu 1 x = 1 + 1j. P ehled celo íselných typ je uveden v tabulce 1.1. Pouºité prom nné se ukládají. Pokud jsou prom nné dále nepot ebné lze je vymazat p íkazem clear. x = 10; clear x; 1 P i denici komplexního ísla je moºné pouºít i zápis x = 1 + j. Doporu ujeme v²ak tento zp sob zápisu nepouºívat, m ºe dojít ke kolizi s názvem prom nné. 1
KAPITOLA 1. ÚVOD DO SKRIPTOVACÍHO JAZYKA MATLAB Typ Rozsah Konverzní funkce 8-bitové íslo se znaménkem 128 127 int8 8-bitové íslo bez znaménka 0 255 uint8... 64-bitové íslo se znaménkem 2 63 2 63 1 int64 64-bitové íslo bez znaménka 0 2 64 1 uint64 Tabulka 1.1: P ehled celo íselných datových typ Matlabu 1.2 Rízení b hu programu Ve skriptovacím jazyce MATLAB jsou k dispozici v²echny základní ídící struktury. 1.2.1 Podmín ný p íkaz Podobn jako ve v t²in programovacích jazyk je v Matlabu k dispozici podmín ný p íkaz if. Syntaxe p íkazu if je: if vyraz prikazy Pokud je výsledek výrazu logická jedni ka (podmínka je spln na) provedou se v²echny p íkazy aº do do symbolu. P íkaz if je moºné roz²í it o nepovinou ást else if vyraz prikazy else prikazy Pokud není spln na podmínka, vykoná se ást programu mezi else a : a = 2; if a>1 else disp('a je vetsi nez jedna'); disp('a je mensi nebo rovno jedne'); 1.2.2 Cykly Cykly jsou ídící struktury, které umoº ují opakované vykonávání bloku p íkaz. Rozli- ²ujeme cykly s p edem daným po tem opakování (cyklus for) a cykly u kterých po et opakování p edem není znám (cyklus while). 2
KAPITOLA 1. ÚVOD DO SKRIPTOVACÍHO JAZYKA MATLAB Cyklus for Základní syntaxe p íkazu for je: for n = vektor prikazy P íkazy mezi klí ovými slovy for a jsou provedeny pro kaºdý prvek vektoru vektor. V kaºdé iteraci je p i azen prom nné n prvek vektoru vektor. Nap íklad: for n = 1:10 x(n) = sin(n*pi/10); >> x x = 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000 Cyklus while Na rozdíl od cyklu for, který vykoná skupinu p íkaz p edem daným po tem opakování, p íkaz while umoº uje provést skupinu p íkaz v závislosti na spln ní logické podmínky. Syntaxe p íkazu while je následující: while vyraz prikazy Kód níºe ukazuje pouºití p íkazu while. Uºivatel je poºádán o zadání libovolného (p edem neznámého po tu ísel). Zadávání ukon í uºivatel íslem 1. Poté je ze zadaných ísle vypo ítán aritmetický pr m r. Kód programu: soucet = 0; pocet = 0; cislo = 0; while ~(cislo == -1) retezec = input('zadej cislo:','s'); cislo = sscanf(retezec,'%d'); soucet = soucet + cislo; pocet = pocet + 1; prumer = soucet/pocet Výstup programu: 3
KAPITOLA 1. ÚVOD DO SKRIPTOVACÍHO JAZYKA MATLAB --> pokus Zadej cislo:1 Zadej cislo:2 Zadej cislo:3 Zadej cislo:4 Zadej cislo:5 Zadej cislo:-1 prumer = 2,3333 4
2 e²ení soustav rovnic 2.1 Gaussova eliminace Gaussova eliminace je pravd podobn nejznám j²í metodou e²ení soustav lineárních algebraických rovnic. Stru n popí²eme princip metody. P edpokládejme soustavu rovnic ve tvaru a 11 x 1 + a 12 x 2 + a 13 x 3... a 1n x n = b 1 a 21 x 1 + a 22 x 2 + a 23 x 3... a 2n x n = b 2. =.. (2.1) a n1 x 1 + a n2 x 2 + a n3 x 3... a nn x n = b n Je z ejmé, ºe soustavu rovnic lze vyjád it v maticovém tvaru a 11 a 12 a 13... a 1n a 21 a 22 a 23... a 2n......... x 1 x 2. = b 1 b 2... (2.2) a n1 a n2 a n3... a nn x 3 b 3 ƒasto budeme rovnici 2.2 zapisovat stru n ve tvaru Ax = b (2.3) Pokud aplikujeme ekvivalentní úpravy sou asn na matici A a na vektor b, víme, ºe se e²ení soustavy nezm ní. Mezi ekvivalentní úpravy pat í: vynásobení ádku matice íslem, zám na dvou ádk matice, p i tení ádku vynásobeného libovolným reálným(komplexním) íslem. Poda í-li se pomocí ekvivalentních úprav transformovat matici A na matici jednotkovou a aplikujeme-li zárove tyto úpravy na vektor b, bude po transformaci vektor b obsahovat e²ení soustavy. Gaussovu eliminaci lze rozd lit na dv ásti: dop edná redukce, zp tná substituce. 5
KAPITOLA 2. E ENÍ SOUSTAV ROVNIC P i dop edené redukci se snaºíme pomocí ekvivalentních úprav transformovat matici A na dolní trojúhelníkovou matici. V rámci zp tné substituce se snaºíme dolní trojúhelníkovou matici transformovat na matici jednotkovou. P íklad 2.1.1. Vy e²me soustavu rovnic 0 2 3 x 1 0 1 1 1 0 1 x 2 x 3 = 2 0 4 r 1 r 3 r 3 r 1. (2.4) Zám nou prvního a t etího sloupce získáme v prvním sloupci nuly pod hlavní diagonálou: 1 0 1 x 1 4 0 1 1 x 2 = 0. (2.5) 0 2 3 x 3 2 r 3 r 3 2 r 2 Chceme-li získat nulu pod hlavní diagonálou, p i teme ke t etímu ádku druhý ádek vynásobený 2. 1 0 1 x 1 4 0 1 1 x 2 = 0 r 2 r 2 + ( 1) r 3 (2.6) 0 0 1 x 3 2 Získali jsme dolní trojúhelníkovou matici a dop edná redukce je tedy hotová. P i zp tné substituci se nejprve pokou²íme získat nuly v posledním sloupci nad hlavní diagonálou. V na²em p ípad vynásobíme poslední ádek íslem 1 a p i teme k druhému ádku 1 0 1 0 1 0 0 0 1 x 1 x 2 x 3 = 4 2 2 r 1 r 1 + ( 1) r 3 (2.7). a poté ode teme poslední ádek od ádku prvního 1 0 0 x 1 2 0 1 0 x 2 = 2. (2.8) 0 0 1 x 3 2 Matice A byla transformována na dolní trojúhelníkovou matici a vektor b obsahuje e²ení soustavy. 2.2 Implementace Gaussovy eliminace ve skriptovacím jazyce MATLAB Je z ejmé, ºe Gaussovu eliminaci lze snadno algoritmizovat. V MATLABu lze provád t ádkové a sloupcové operace, takºe celou dop ednou substituci lze vy e²it pomocí dvouúrov ov vno ených cykl. Vn j²í cyklus prochází p es sloupce. Uvnit cyklu nejprve kontrolujeme zda diagonální prvek daného sloupce neobsahuje nulu. Pokud ano, zam níme p íslu²ný ádek s libovolným ádkem, který na odpovídající pozici nulu neobsahuje. Kód skriptu, který zam ní dva ádky v matici m ºe vypadat nap íklad takto: 6
KAPITOLA 2. E ENÍ SOUSTAV ROVNIC A = [1 2 3; 4 5 6; 7 8 0] radka = A(1,:) A(1,:)=A(3,:) A(3,:) = radka Výstup tohoto skriptu bude: A = 1 2 3 4 5 6 7 8 0 radka = 1 2 3 A = 7 8 9 4 5 6 7 8 0 A = 7 8 0 4 5 6 1 2 3 --> Druhou asto pouºívanou ekvivalentní operací je p i tení ádku vynásobeného konstantou, p íklad pouºití této operace ukazuje následující kód A = [1 2 3; 4 5 6; 7 8 0] A(2,:) = A(2,:)-A(2,1)*A(1,:) Výstup programu: A = 1 2 3 4 5 6 7 8 0 A = 1 2 3 0-3 -6 7 8 0 Úsek programu, který zajistí vynulování v²ech ísel v prvním sloupci (mimo diagonálního prvku), m ºe vypadat takto n = 3 A = [1 2 3; 4 5 6; 7 8 0] for i = 2:n A(i,:) = A(i,:)-A(i,1)*A(1,:)/A(1,1) Doplníme-li kód o vn j²í cyklus, který zajistí posouvání po sloupcích, máme hotový dop edný b h Gaussovy elimina ní metody 7
KAPITOLA 2. E ENÍ SOUSTAV ROVNIC n = 3 A = [1 2 3; 4 5 6; 7 8 0] for j = 1:2 for i = (j+1):n A(i,:) = A(i,:)-A(i,j)*A(j,:)/A(j,j) Skript pro zp tný b h Gaussovy elimina ní metody je analogický: for j = n : -1 : 1 for i = (j-1) : -1 : 1 A(i,:) = A(i,:) - A(i,j) * A(j,:) / A(j,j) 8
3 Aproximace metodou nejmen²ích tverc Denice 1. Základní pojmy Skalární sou in N-dimenzionálních vektor (x, y) N x i y i (3.1) i=1 Diskrétní skalární sou in funkcí f, g denovaných v bodech x 0,..., x n (f, g) n f(x i ) g(x i ) (3.2) i=1 Diskrétní norma funkce f denované v bodech x 0,..., x n indukovaná diskrétním skalárním sou inem f (f, f) (3.3) 3.1 Úloha aproximace metodou nejmen²ích tverc Jsou dány body x 0,..., x n a funkce f zadaná tabulkou hodnot v t chto bodech. Hledáme funkci ϕ M, kde M je námi zvolená t ída funkcí, která minimalizuje na této mnoºin M výraz n (f(x i ) ϕ(x i )) 2. (3.4) t=0 Pokud taková funkce f a existuje, nazýváme ji aproximací funkce f metodou nejmen²ích tverc (vzhledem k mnoºin M). Pokud mnoºina M je mnoºinou polynom nejvý²e stupn n, tato aproximace existuje vºdy. V ta 1. Nech funkce f je denovaná v bodech x 0,..., x n. Potom f a M je nejlep²í aproximace funkce f, tedy f f a < f ϕ pro v²echna ϕ M, práv kdyº platí (f f a, ϕ) = 0 ϕ M. (3.5) V ta 2. V mnoºin M existuje práv jedna aproximace f a funkce f, taková, ºe platí f f a = min f ϕ. (3.6) ϕ M 9
KAPITOLA 3. APROXIMACE METODOU NEJMEN ÍCH ƒtverc Na základ t chto v t (zejména v ty 2), m ºeme odvodit zp sob jakým lze aproximaci f a prakticky nalézt. ekli jsme, ºe M je prostor polynom nejvý²e stupn n. Tento prostor má bázi B = {e 1, e 2,..., e n } = {1, x, x 2,..., x n }. (3.7) Na²i aproximaci f a hledáme v p irozené podob f a = c n x n + c n 1 x n 1 +... + c 1 x + c 0. (3.8) Protoºe M je lineární prostor, je podmínka pro aproximaci f a (f f a, ϕ) = 0 ϕ M (3.9) z v ty 1 ekvivalentní tomu, ºe (f f a, e i ) = 0 e i B, (3.10) coº je po rozepsání výrazu pro f a ekvivalentní výrazu n c j (e j, e i ) = (f, e i ), i = 0,..., n (3.11) j=0 P edchozí rovnici je moºné zapsat maticov (e 0, e 0 )... (e n, e 0 )....... (e n, e 0 )... (e n, e n ) c 0.. c n = (f, e 0 ). (f, e n ). (3.12) 10
KAPITOLA 3. APROXIMACE METODOU NEJMEN ÍCH ƒtverc P íklad 3.1.1. Funkci f zadanou tabulkou proloºte polynomem prvního stupn. x 1 2 3 f(x) 0 2 1 e²ení Vzhledem ke zvolenému stupni aproximujícího polynomu má mnoºina M bázi B = {e 0 = 1, e 1 = x}. (3.13) P ímo z denice m ºeme psát (e 0, e 0 ) = 2 1 1 = 3 (3.14) i=0 (f, e 0 ) = (f, e 1 ) = (e 0, e 1 ) = (e 1, e 1 ) = 2 1 x i = x 1 + x 2 + x 3 = 1 + 2 + 3 = 6 (3.15) i=0 2 x i x i = x 2 1 + x 2 2 + x 2 3 = 1 + 4 + 9 = 14 (3.16) i=0 2 f(x i ) 1 = f(x 1 ) + f(x 2 ) + f(x 3 ) = 0 + 2 + 1 = 3 (3.17) i=0 2 f(x i ) x i = f(x 1 )x 1 + f(x 2 )x 2 + f(x 3 )x 3 = 0 + 4 + 3 = 7 (3.18) i=0 Pro koecienty c 0 a c 1 tedy dostaneme maticovou rovnici [ ] [ ] [ ] 3 6 c 0 3 = 6 14 c 1 7 (3.19) Po vy e²ení Gaussovou eliminací, vyjde c 0 = 0, c 1 = 0,5. Hledanou aproximací je tedy p ímka popsaná rovnicí f a (x) = 0,5x. (3.20) Výsledek aproximace: f(x) 2 1 f a (x) = 0,5x 0 0 1 2 3 4 5 6 x 11
4 Interpolace funkcí Interpolace (lat. inter-polare, vylep²it vkládáním) v numerické matematice znamená nalezení p ibliºné hodnoty funkce v n jakém intervalu, je-li její hodnota známa jen v n kterých jiných bodech tohoto intervalu. Pouºívá se v p ípad, ºe hodnoty funkce v ur itých bodech intervalu jsou bu to uvedeny v tabulce, získány m ením, nebo se vyplatí známou funkci nahradit funkcí jednodu²²í. 4.1 Lagrangeova interpolace P edpokládejme, ºe funkce f(x) je dána svými hodnotami v n+1 bodech x i, i = 0,..., n (body x i nazýváme uzly interpolace). Za nejjednodu²²ím zp sob interpolace lze pova- ºovat interpolaci Lagrangeovým polynomem. P i interpolaci Lagrangeovým polynomem hledáme polynom p n (x) = a n x n + a n 1 x n 1 + + a 1 x + a 0 stupn n tak, aby platilo p n (x 0 ) = f(x 0 ) p n (x 1 ) = f(x 1 ). p n (x n ) = f(x n ) (4.1) Soustava rovnic (4.1) p edstavuje n+1 rovnic pro n+1 neznámých koecient polynomu p n (x). Tuto soustavu lze e²it nap íklad Gaussovou eliminací. P íklad 4.1.1. Funkci f zadanou tabulkou proloºte Lagrangeovým polynomem druhého stupn p 2 (x) = a 2 x 2 + a 1 x + a 0. x 1 2 3 f(x) 0 2 1 e²ení Podle (4.1) sestavíme soustavu rovnic a 2 x 2 0 + a 1 x 0 + a 0 = f(x 0 ), a 2 x 2 1 + a 1 x 1 + a 0 = f(x 1 ), a 2 x 2 2 + a 1 x 2 + a 0 = f(x 2 ). Po dosazení íselných hodnot za x 0, x 1 a x 2 získáme soustavu rovnic ve tvaru a 2 1 + a 1 1 + a 0 = 0, a 2 4 + a 1 2 + a 0 = 2, a 2 9 + a 1 3 + a 0 = 1. 12
KAPITOLA 4. INTERPOLACE FUNKCÍ V maticové podob tedy 1 2 1 4 2 1 9 3 1 a 2 a 1 a 0 = 0 1 2 (4.2) Po vy e²ení soustavy získáme koecienty Langrangeova polynomu a 2 = 1,5, a 1 = 6,5, a 0 = 5. Výsledek interpolace: f(x) 2 1 0 1 2 3 4 5 p 2 (x) = 1,5x 2 + 6,5x 5 0 0.5 1.0 1.5 2.0 2.5 3.0 x 13
5 Numerické e²ení oby ejných diferenciálních rovnic Denice 2. Oby ejnou diferenciální rovnicí (ODR) prvního ádu rozumíme rovnici ve tvaru F (t, x, x ) = 0, (5.1) nebo ve speciálním p ípad, pokud je rovnice roz e²ena vzhledem k x ve tvaru x = f(t, x). (5.2) 5.1 Numerické metody e²ení oby ejných diferenciálních rovnic P i numerickém e²ení oby ejné diferenciální rovnice hledáme hodnoty neznámé funkce x ve zvolených bodech n jakého intervalu a, b. Nejjednodu²²í moºností volby bod pro vy íslení neznámé funkce x je rozd lení intervalu pomocí n+1 bod na n stejných dílk o velikosti h = b a n, (5.3) kde pro body t i platí t 0 = a, t i = t i 1 + h pro 0 < i < n, x n = b (5.4) a íslo h se nazývá krok. Hodnota p esného e²ení v bod t i bude ozna ována symbolem y(t i ), hodnota p ibliºného e²ení symbolem X i. 5.1.1 Jednokrokové metody Princip jednokrokových metod e²ení ODR spo ívá v náhrad derivace pomocí diference. x (t i ) x(t i+1) x(x i ), (5.5) h neboli po úprav x(t i+1 ) X i+1 = x(t i ) + hx (t i ). (5.6) Obvykle známe p esné e²ení pouze v krajním bod zkoumaného intervalu (po áte ní podmínka x(t 0 ) = x(a)), ve v²ech ostatních bodech známe pouze vypo tená p ibliºná e²ení X i. Rovnice (5.6) pak p ejde do tvaru X i+1 = X i + hx i (5.7) 14
KAPITOLA 5. NUMERICKÉ E ENÍ OBYƒEJNÝCH DIFERENCIÁLNÍCH ROVNIC y y(x i+1 ) Y i+1 y(x i ) h x i x i+1 x Obrázek 5.1: Princip Eulerovy metody P i náhrad derivace pomocí diference máme dv moºnosti jak vypo ítat p ibliºné e- ²ení. Nejprve p edpokládejme, ºe známe p esné e²ení X i v bod t i, potom m ºeme v tomto bod derivaci x (t i ) vyjád it vztahem x (t i ) = f(t i, x(t i )). (5.8) po dosazení do rovnice(5.7) získáme vztah pro p ibliºný výpo et e²ení v bod t i+1 (viz obrázek 5.1). X i+1 = x(t i ) + hf(t i, x(t i )). (5.9) Obvykle známe p esné e²ení pouze v krajním bod intervalu, které je dáno po áte ní podmínkou. Rovnice 5.9 dává itera ní p edpis pro výpo et e²ení, je v²ak t eba zohlednit, ºe výpo et kaºdého dal²ího bodu je zaloºen na p edchozích p ibliºných e²eních. Z tohoto faktu vyplývá relativn nízká stabilita explicitních metod, chyba aproximace se za ur itých okolností m ºe akumulovat. X i+1 = X i + hf(t i, X i ). (5.10) Metoda e²ení oby ejných diferenciálních rovnic zaloºená na p edpisu (5.10) je nazývána explicitní Eulerovou metodou. Druhý p ístup, implicitní Eulerovu metodu, k e²ení diferenciální rovnice pomocí náhrady derivace diferencí vyjad uje rovnice X i+1 = X i + hf(t i+1, X i+1 ). (5.11) Hledaná hodnota X i se vyskytuje i na pravé stran rovnice (5.11). K jejímu ur ení je t eba obecn e²it nelineární rovnici pro X i+1. P estoºe tato metoda je sloºit j²í neº explicitní Eulerova metoda, její výhody p evaºují. Za nejv t²í výhodu implicitní Eulerovy metody lze povaºovat bezpodmíne nou stabilitu. 5.1.2 Implementace jednokrokových metod Explicitní Eulerova metoda pro e²ení oby ejných diferenciálních rovnic je z hlediska implementace velice jednoduchá. P edpokládejme, ºe máme za úkol Eulerovou explicitní metodou vy e²it lineární diferenciální rovnici s konstantními koecienty ve tvaru x = f(t, x) = ax + b. (5.12) 15
KAPITOLA 5. NUMERICKÉ E ENÍ OBYƒEJNÝCH DIFERENCIÁLNÍCH ROVNIC Dále p edpokládejme, ºe budeme e²it rovnici s po áte ní podmínkou x(t 0 ) = x 0, na intervalu t 0, t 1. Vstupem metody tedy budou koecienty a a b, které popisují diferenciální rovnici, po áte ní podmínka x 0, interval e²ení a po et bod, na které bude interval e²ení rozd len. Po dosazení za f(t i, x i ) do rovnice (5.10) získáme p edpis pro metodu ve tvaru X i+1 = X i + h(ax i + b). (5.13) Napí²eme funkci, jejíº vstupními parametry budou koecienty a, b, po áte ní podmínka x(0) = x 0, interval e²ení 0, t 1 a po et element na které bude interval rozd len n. Okomentovaný skript, který e²í Eulerovu explicitní metodu je uveden níºe. function x = euler(a, b, x0, interval_len, n) % a, b - koeficienty dif. rov % x0 - pocatecni podminka % interval_len - delka intervalu % n - pocet kroku h = interval_len / n; % vypocet kroku metody x = zeros(1, steps + 1); % priprava vektoru pro reseni % (radkovy vektor) x(1) = x0; % prvni prvek vektoru je pocatecni podminka % vlastni smycka programu for i = 1:steps x(i+1) = x(i) + h * (a * x(i) + b); Pouºití funkce Euler ukazují následující ádky kódu. t = 0:0.01:10; % priprava casove osy x = euler(-1, 1, 10, 10, 1000); % volani funkce plot(t,x); % vykresleni grafu reseni 16