VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV TELEKOMUNIKACÍ FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF TELECOMMUNICATIONS ANALÝZA STABILITY LINEÁRNÍCH SYSTÉMŮ BAKALÁŘSKÁ PRÁCE BACHELOR S THESIS AUTOR PRÁCE AUTHOR MICHAL JELEN
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ ÚSTAV TELEKOMUNIKACÍ FACULTY OF ELECTRICAL ENGINEERING AND COMMUNICATION DEPARTMENT OF TELECOMMUNICATIONS ANALÝZA STABILITY LINEÁRNÍCH SYSTÉMŮ LINEAR SYSTEM STABILITY ANALYSIS BAKALÁŘSKÁ PRÁCE BACHELOR S THESIS AUTOR PRÁCE AUTHOR VEDOUCÍ PRÁCE SUPERVISOR MICHAL JELEN Ing. JAROSLAV KOTON, Ph.D. BRNO 2012
VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Fakulta elektrotechniky a komunikačních technologií Ústav telekomunikací Bakalářská práce bakalářský studijní obor Teleinformatika Student: Michal Jelen ID: 125469 Ročník: 3 Akademický rok: 2011/2012 NÁZEV TÉMATU: Analýza stability lineárních systémů POKYNY PRO VYPRACOVÁNÍ: Popište metody využívané k analýze stability lineárních systémů vyšších řádů. Zvolte jednu metodu a na vybraném zapojení s proudovými či napěťovými konvejory analyzujte vliv kmitočtových limitů proudových a napěťových přenosů aktivního prvku na stabilitu systému. Kmitočtovou závislost těchto parametrů popište funkcí 1. a 2. řádu. DOPORUČENÁ LITERATURA: [1] Yuce, E., Tokat, S., Minaei, S., Cicekoglu, O.: Stability problems in universal current-mode filters, Int. J. Electron. Commun. (AEU), vol. 61, pp. 580-588, 2007. [2] Ogata, K.: Modern control engineering, New Jersey: Prentice Hall, 2009, ISBN 978-0136156734. Termín zadání: 6.2.2012 Termín odevzdání: 31.5.2012 Vedoucí práce: Ing. Jaroslav Koton, Ph.D. Konzultanti bakalářské práce: prof. Ing. Kamil Vrba, CSc. Předseda oborové rady UPOZORNĚNÍ: Autor bakalářské práce nesmí při vytváření bakalářské práce porušit autorská práva třetích osob, zejména nesmí zasahovat nedovoleným způsobem do cizích autorských práv osobnostních a musí si být plně vědom následků porušení ustanovení 11 a následujících autorského zákona č. 121/2000 Sb., včetně možných trestněprávních důsledků vyplývajících z ustanovení části druhé, hlavy VI. díl 4 Trestního zákoníku č.40/2009 Sb.
ABSTRAKT Tato bakalářská práce se bude zabývat analýzou stability lineárních systémů. V teoretické části bude zmíněna stabilita a její podmínky, kritéria stability, jejich rozdělení do skupin a popis jednotlivých kritérií. V praktické části se vybere jedno kritérium stability se kterým se následně bude pracovat. Zkoumaným obvodem bude filtr s proudovými konvejory, jakožto aktivními prvky, ze kterého bude získán charakteristický polynom. V příkladech se bude pracovat s přenosovými funkcemi aktivních prvků prvního i druhého řádu. Bude vytvořen program, který umožní automatizovat Routhovo kritérium stability a vykreslení grafických výstupů v závislosti na vstupních parametrech a jejich hodnotách. KLÍČOVÁ SLOVA kritéria stability, proudový konvejor, automatizace Routhova kritéria ABSTRACT This bachelor s thesis will be dealing with stability analysis of linear systems. In theoretical part will be mentioned stability and its conditions, stability criteria, their partition to groups and description of each criterion. In practical part will be chosen one stability criterion which will be working with afterwards. As examined circuit will be a filter with current conveyors as active elements which will be obtained a characteristic multinomial from. There will be working with transmittion functions of single and double pole model in examples. It will be created a computer programme which will enable an automatization of Routh s stability criterion and plot graphical outputs in depence on input parameters and their values. KEYWORDS stability criteria, current conveyor, automatization of Routh s criterion JELEN, Michal Analýza stability lineárních systémů: bakalářská práce. Brno: Vysoké učení technické v Brně, Fakulta elektrotechniky a komunikačních technologií, Ústav telekomunikací, 2012. 95 s. Vedoucí práce byl Ing. Jaroslav Koton, Ph.D.
PROHLÁŠENÍ Prohlašuji, že svou bakalářskou práci na téma Analýza stability lineárních systémů jsem vypracoval samostatně pod vedením vedoucího bakalářské práce a s použitím odborné literatury a dalších informačních zdrojů, které jsou všechny citovány v práci a uvedeny v seznamu literatury na konci práce. Jako autor uvedené bakalářské práce dále prohlašuji, že v souvislosti s vytvořením této bakalářské práce jsem neporušil autorská práva třetích osob, zejména jsem nezasáhl nedovoleným způsobem do cizích autorských práv osobnostních a/nebo majetkových a jsem si plně vědom následků porušení ustanovení S 11 a následujících autorského zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon), ve znění pozdějších předpisů, včetně možných trestněprávních důsledků vyplývajících z ustanovení části druhé, hlavy VI. díl 4 Trestního zákoníku č. 40/2009 Sb. Brno................................................. (podpis autora)
PODĚKOVÁNÍ Rád bych tímto chtěl poděkovat vedoucímu mé bakalářské práce panu Ing. Jaroslavovi Kotonovi, Ph.D. za odborné vedení, přínosné konzultace, trpělivost a podnětné návrhy k práci. Zároveň bych nerad opomněl Jakuba Chmelaře, který mi svými radami pomáhal při vývoji zdrojového kódu výsledného programu. Brno................................................. (podpis autora)
OBSAH Úvod 8 1 Stabilita 9 1.1 Podmínky stability............................ 10 2 Kritéria stability 11 2.1 Hurwitzovo kritérium stability...................... 11 2.2 Routhovo kritérium stability....................... 12 2.3 Routh-Schurovo kritérium stability................... 13 2.4 Nyquistovo kritérium stability...................... 14 2.5 Michajlovo-Leonhardovo kritérium stability............... 15 3 Aplikace Routhova kritéria 16 3.1 Proudový konvejor............................ 16 3.2 Analýza stability............................. 18 4 Automatizace analýzy stability 22 4.1 Program s uživatelským rozhraním................... 22 4.2 Grafické výstupy............................. 25 5 Závěr 28 Literatura 29 Seznam symbolů, veličin a zkratek 30 Seznam příloh 31 A Výpis kódu z Matlabu 32
SEZNAM OBRÁZKŮ 1.1 Příklady průběhů y(t) [3]......................... 9 1.2 Rozložení pólů v komplexní rovině pro průběhy podle obr. 1.1 [3]... 9 1.3 Oblasti komplexní roviny s [5]...................... 10 2.1 Příklady průběhů amplitudo-fázové kmitočtové charakteristiky [7].. 14 2.2 Příklady průběhů amplitudo-fázové kmitočtové charakteristiky [7].. 15 3.1 Rozdělení analogových struktur podle pracovního režimu [1]..... 16 3.2 Schématická značka GCC [2]....................... 17 3.3 První řešené schéma s konvejory [8]................... 18 3.4 Druhé řešené schéma s konvejory [8]................... 20 4.1 Náhled uživatelského rozhraní...................... 22 4.2 Principielní postup prováděných úkonů................. 23 4.3 Graf závislosti α 0 na ω 0 pro první způsob řešení............ 25 4.4 Graf závislosti α 0 na Q pro první způsob řešení............ 25 4.5 Graf závislosti Q na ω 0 pro první způsob řešení............ 26 4.6 Graf závislosti α 0 na Q pro druhý způsob řešení............ 26 4.7 Graf závislosti Q na ω 0 pro druhý způsob řešení............ 27
ÚVOD Stabilita je ve světě elektrotechniky, ale nejen v něm, důležitým pojmem. Při jejím zkoumání můžeme využít charakteristické rovnice, díky níž jsme schopni zjistit, zda je daný systém stabilní, či nikoliv. Zjišťování je ale mnohdy zdlouhavé a k cíli vede hned několik cest. V této bakalářské práci se jednou z nich vydáme a vypracujeme postup, který nám práci ulehčí. První kapitola je věnována stabilitě obecně, charakteristickému mnohočlenu a popisuje také podmínky stability spolu s pojmem kritéria stability. Těmi se více zabývá druhá kapitola, ve které jsou kritéria rozdělena do skupin a následně popsán jejich princip. Zejména pak ve třetí kapitole se zaměříme na jedno z kritérií, a to konkrétně Routhovo kritérium stability, se kterým nadále uvažujeme a počítáme. V této kapitole je zmíněn i proudový konvejor, který byl použit jako aktivní prvek v řešených schématech zapojení. Na konci práce jsou uvedeny dosažené výsledky ve dvou částech. Samotný program s uživatelským rozhraním, díky kterému můžeme výpočet automatizovat a samozřejmě také výsledné grafy ukazující jednotlivé oblasti stability, či nestability. 8
1 STABILITA Je to jeden ze základních požadavků, které klademe na dynamický systém. Stabilita dynamického systému je schopnost vrátit systém po vyvedení z jeho rovnovážného stavu vlivem poruchy nebo změny hodnoty dané veličiny do stavu původního nebo jiného, avšak opět rovnovážného. Jinak řečeno je stabilita schopnost obvodu udržet se v okolí rovnovážného stavu nebo se do něj opětovně navracet po odeznění vnějších faktorů, které způsobují jeho vychýlení. [7] Matematicky lze stabilitu definovat jako lim y(t) = 0. (1.1) t Z hlediska stability rozlišujeme systémy stabilní, na mezi stability a nestabilní. S tím, že systémy na mezi stability se považují za stabilní. Příklady průběhů jsou znázorněny na obr. 1.1. y (t) 5 4 1 Obr. 1.1: Příklady průběhů y(t) [3] 3 2 t 1 nestabilní aperiodický systém (kladné reálné kořeny) 2 nestabilní kmitavý systém (kladná reálná část komplexně sdružených kořenů) 3 systém na hranici stability (dva imaginární kořeny) 4 stabilní kmitavý systém (záporná reálná část komplexně sdružených kořenů) 5 stabilní aperiodický systém (záporné reálné kořeny) Im Im Im Im Im Re Re Re Re Re (a) průběh 1 (b) průběh 2 (c) průběh 3 (d) průběh 4 (e) průběh 5 Obr. 1.2: Rozložení pólů v komplexní rovině pro průběhy podle obr. 1.1 [3] 9
1.1 Podmínky stability Jedním z důležitých parametrů je postačující podmínka stability, která říká, že jakmile jsou všechny kořeny s i jmenovatele přenosu v levé části komplexní roviny, tzn. všechny póly mají zápornou reálnou část Re s i 0 pro i = 1,, n, (1.2) je lineární spojitý dynamický systém stabilní, viz obr. 1.3. Neméně důležitým parametrem je Stodolova nutná podmínka stability, pro jejíž splnění musíme zajistit, aby všechny koeficienty jmenovatele přenosu (polynomu) měly stejné znaménko a žádný z nich nebyl roven nule, resp. existovaly všechny koeficienty charakteristické rovnice. Charakteristická rovnice, nebo také tzv. charakteristický mnohočlen, lze podle [5] popsat vztahem P (s) = a n s n + a n 1 s n 1 + + a 2 s 2 + a 1 s + a 0, (1.3) kde a i jsou konstanty vypočtené z počátečních podmínek. Im Stabilní oblast Nestabilní oblast Re Mez stability Obr. 1.3: Oblasti komplexní roviny s [5] Kontrola stability spočívá v určení rozložení kořenů charakteristické rovnice v komplexní rovině. Pokud můžeme kořeny vyčíslit, použijeme Stodolovu nutnou podmínku stability a postačující podmínku stability. Jinak používáme pravidla, díky kterým lze rozhodnout o stabilitě i bez přímého výpočtu kořenů. Tato pravidla se nazývají kritéria stability. V následujících odstavcích jsou uvedena některá z často používaných. [7] 10
2 KRITÉRIA STABILITY Algebraická: Nemohou se použít při vyšetřování stability systémů s dopravním zpožděním. 1. Hurwitzovo (kapitola 2.1) 2. Routhovo (kapitola 2.2) 3. Routh-Shurovo (kapitola 2.3) Geometrická: Někdy též frekvenční. Jsou pracnější, neurčují však pouze stav stability, ale poskytují též informace o míře stability. 1. Nyquistovo (kapitola 2.4) 2. Michajlovo-Leonhardovo (kapitola 2.5) 2.1 Hurwitzovo kritérium stability Platí zde tzv. Stodolova nutná podmínka stability (kap. 1.1). Je-li charakteristický mnohočlen řádu n 2, Stodolova podmínka přechází v nutnou a postačující podmínku stability. V opačném případě je nutno sestrojit z koeficientů charakteristické rovnice Hurwitzův determinant n-tého stupně ve tvaru a n 1 a n 3 a n 5 0 a n a n 2 a n 4 0 H n 1 = 0 a n 1 a n 3 0. (2.1)..... 0 0 0 a 0 Hlavní rohové subdeterminanty jsou H 1 = a n 1, H 2 = a n 1 a n 3 a n 5 a n 1 a n 3 a n a, H 3 = a n a n 2 a n 4,, H n = a 0 H n 1. n 2 0 a n 1 a n 3 (2.2) Podle Hurwitzova kritéria je systém stabilní právě tehdy, když hlavní subdeterminanty jsou kladné, H i > 0 pro i = 2,, n 1. (2.3) První a poslední rohový subdeterminant se počítat nemusí, protože je-li splněna Stodolova podmínka, jsou dané subdeterminanty vždy kladné. Pokud je jeden z rohových subdeterminantů roven nule, systém se pak nachází na kmitavé mezi stability, 11
tzn. charakteristická rovnice má dvojici ryze imaginárních kořenů. Je-li ale koeficient charakteristické rovnice a 0 = 0 a všechny rohové subdeterminanty jsou kladné, systém je na nekmitavé mezi stability, tzn. char. rovnice má nulový kořen. [7] 2.2 Routhovo kritérium stability Opět se jedná o algebraické kritérium, které ke svému výpočtu využívá charakteristickou rovnici. Vychází z něj Routh-Schurovo kritérium stability (kap. 2.3). Routhovo kritérium stability je známá metoda k vyšetřování stability charakteristik filtrů. Při použití tohoto testování se uvažuje jednopólový model pro každý z proudových zesilovacích činitelů α 11 = α 110 /(1 + τ 1 s) a α 21 = α 210 /(1 + τ 2 s). Ty jsou následně dosazeny do jmenovatele D(s) ve vztahu (3.17). Póly jsou závislé na způsobu výroby obvodu. Definujme tedy ω α1 = 1/τ 1 a ω α2 = 1/τ 2, jež korespondují s α 11 a α 21. V blízkosti jedničky se nachází α 110 a α 210, které odpovídají stejnosměrnému proudovému zesílení α 11 a α 21. [8] Řešení více probíráno v kap. 3.2. Routhovo kritérium stability nám říká, zda-li jsou nebo nejsou kořeny charakteristické rovnice stabilní bez toho, aniž bychom je museli vyčíslovat. Kritérium se používá pouze na polynomy s konečným počtem kořenů. Při použití na systém, který chceme zkoumat, můžeme získat informace o stabilitě přímo z koeficientů charakteristické rovnice. [4] Nejprve je ale třeba mít mnohočlen ve tvaru a 0 s n + a 1 s n 1 + + a n 1 s + a n = 0, (2.4) kde všechny koeficienty jsou reálné a předpokládáme, že a n 0. Jestliže jsou všechny koeficienty kladné (v opačném případě nemusíme dále pokračovat v řešení), setřídíme je v řádcích a sloupcích následovně: s n a 0 a 2 a 4 a 6 s n 1 a 1 a 3 a 5 a 7 s n 2 b 1 b 2 b 3 b 4 s n 3 c 1 c 2 c 3 c 4 s n 4 d 1 d 2 d 3 d 4... s 2 e 1 e 2 s 1 f 1 s 0 g 1 Když jsou všechny koeficienty a záporné, můžeme obě strany rovnice vynásobit 1 a tím je převést do kladných hodnot. Nyní se dají postupně začít vyčíslovat koeficienty v jednotlivých řádcích. 12
b 1 = a 1a 2 a 0 a 3 a 1 b 2 = a 1a 4 a 0 a 5 a 1 b 3 = a 1a 6 a 0 a 7 a 1. Výpočet koeficientů b pokračuje do té doby, dokud zbývající nejsou samé nuly. Stejný princip výpočtu se dá využít i na koeficienty c, d, e, atd. Například: c 1 = b 1a 3 a 1 b 2 b 1 c 2 = b 1a 5 a 1 b 3 b 1 c 3 = b 1a 7 a 1 b 4 b 1. 2.3 Routh-Schurovo kritérium stability V tomto algebraickém kritériu opět vycházíme z charakteristické rovnice. Podle daného algoritmu provádíme postupnou redukci charakteristické rovnice na rovnici nižšího stupně, až se dostaneme ke kvadratické rovnici. Podle Routh-Schurova kritéria je systém stabilní právě tehdy, když se při redukci neobjeví záporné koeficienty a poslední tři koeficienty výsledné rovnice jsou kladné. Koeficienty seřadíme buď od nejvyšších nebo nejnižších mocnin a označíme si sudé koeficienty v pořadí. Každý sudý koeficient násobíme podílem prvních dvou a napíšeme pod předcházející řadu posunutý o člen vlevo. Výslednou řadu, která má členy vždy ob jeden předcházející řady, odečteme právě od řady nad ní. Výsledná řada koeficientů je pak o první člen kratší (snížil se stupeň předchozí rovnice). Stejným postupem pokračujeme, dokud z charakteristické rovnice nezbude pouze rovnice druhého stupně tři koeficienty. [7] Výpočet lze znázornit schématem: a n a n 1 a n 2 a n 3 a n 4 a n 5 a n a n 1 a n 1 a n a n 1 a n 3 a n a n 1 a n 5 0 a n 1 a n 2 an a n 1 a n 3 a n 3 a n 4 an a n 1 a n 5 a n 5..... 13
Toto kritérium je účelné použít obzvláště tehdy, když máme koeficienty charakteristické rovnice vyjádřeny číselně. Stodolova podmínka (kap. 1.1) je v tomto případě podmínkou nutnou. 2.4 Nyquistovo kritérium stability Je to kmitočtové kritérium, které rozhoduje o stabilitě zpětnovazebního obvodu na základě průběhu kmitočtové charakteristiky otevřeného zpětnovazebního obvodu. Tuto charakteristiku lze určit analyticky nebo i experimentálně, což při vyšetřování stability pomocí Nyquistova kritéria zvýhodňuje toto kritérium v porovnání s ostatními kritérii stability. Další výhodou je, že ho lze použít i pro zpětnovazební obvod s dopravním zpožděním. [7] Charakteristická rovnice uzavřeného zpětnovazebního obvodu je dána vztahem N(s) = 1 + G 0 (s) = 0, (2.5) kde G 0 (s) je přenos otevřeného regulačního obvodu. Nyquistovo kriterium stability pro stabilní otevřený zpětnovazební obvod zní: Je-li otevřený zpětnovazební obvod stabilní, pak uzavřený zpětnovazební obvod bude stabilní pravě tehdy, když amplitudo-fázová kmitočtová charakteristika otevřeného zpětnovazebního obvodu G 0 (jω) neobklopuje kritický bod [ 1, j0]. Im Im Im - 1 Re - 1 Re - 1 Re (a) stabilní systém (b) systém na mezi stability (c) nestabilní systém Obr. 2.1: Příklady průběhů amplitudo-fázové kmitočtové charakteristiky [7] Nyquistovo kriterium stability pro nestabilní otevřený zpětnovazební obvod zní: Je-li otevřený zpětnovazební obvod nestabilní a má x nestabilních kořenů, pak uzavřený zpětnovazební obvod bude stabilní pravě tehdy, když amplitudo-fázová kmitočtová charakteristika otevřeného zpětnovazebního obvodu obklopí kriticky bod [ 1, j0] x/2 krát. 14
x = 2 Im Im Im - 1 Re - 1 Re - 1 Re (a) stabilní systém (b) systém na mezi stability (c) nestabilní systém Obr. 2.2: Příklady průběhů amplitudo-fázové kmitočtové charakteristiky [7] V případě, že určujeme stabilitu lineárních zpětnovazebních obvodů a otevřený zpětnovazební obvod je stabilní, můžeme použít analytické formulace Nyquistova kritéria. To spočívá v určení modulu a fáze kmitočtového přenosu otevřeného zpětnovazebního obvodu nebo v určení reálné a imaginární části kmitočtového přenosu otevřeného zpětnovazebního obvodu. [7] Uzavřený zpětnovazební obvod bude stabilní právě tehdy, když arg G 0 (jω) = π modg 0 (jω) < 1 (2.6) nebo Im {G 0 (jω)} = 0 Re {G 0 (jω)} > 1. (2.7) 2.5 Michajlovo-Leonhardovo kritérium stability Vychází se z charakteristické rovnice uzavřeného obvodu (2.5). O stabilitě systému se rozhoduje z průběhu tzv. Michajlovy křivky F (jω), kterou dostaneme dosazením komplexního kmitočtu jω za komplexní proměnnou s do polynomu F (s), platí (s) = jω. F (jω) = [F (s)] s=jω = f n (jω) n + f n 1 (jω) n 1 + + f 1 ω + f 0 = U(ω) + jv (ω) (2.8) při podmínce: ω 0, ) U(ω) = f 0 f 2 ω 2 + f 4 ω 4 + (2.9) V (ω) = f 1 ω f 3 ω 3 + f 5 ω 5 + (2.10) Polynom F (s) je stabilní, pokud Michajlova křivka obchází bod [0, j0] v kladném smyslu, tj. proti směru hodinových ručiček. [7] 15
3 APLIKACE ROUTHOVA KRITÉRIA 3.1 Proudový konvejor Obecně můžeme analogové stavební bloky rozdělit do dvou základních režimů. A to, podle obr. 3.1, na režim napěťový a proudový. Některé bloky ale mohou pracovat v obou zmíněných režimech, protože mají brány napěťové i proudové. Většinou je podle [1] proudový konvejor trojbran, i když v dnešní době se již běžně pracuje i s mnohobrany. Analogové stavební bloky Napěťový režim (napěťový sledovač, napěťový OZ) Proudový režim (proudový sledovač, proudový OZ) Smíšený režim (konvejory) Obr. 3.1: Rozdělení analogových struktur podle pracovního režimu [1] Jedná se o aktivní prvek, který lze rozdělit do skupin první (i Y = i X ), druhé (i Y = 0) a třetí (i Y = i X ) generace s jednoduchým nebo rozdílovým vstupem. V průběhu let byly navrhovány různé typy proudových konvejorů, případně jejich modifikace. Za vrchol můžeme považovat univerzální proudový konvejor, pomocí kterého jdou realizovat všechny známé typy proudových konvejorů. Aby se mohlo uvažovat již při návrhu obvodů s co největším počtem proudových konvejorů, byl navrhnut tzv. zobecněný proudový konvejor (GCC) zobrazený na obr. 3.2. Podle [2] může být GCC popsán rovnicemi: u X = a u Y, i Y = b i X, i Z = c i X, (3.1) přičemž koeficienty mohou nabývat hodnot a = { 1; 1}, b = { 1; 0; 1}, c = { 1; 1}, 16
případně lze k popisu použít související maticovou rovnici u X i Y i Z = 0 a 0 i X b 0 0 u Y c 0 0 u Z GCC může být také interpretovaný obrázkem 3.2.. (3.2) i Y ix Y X GCC Z i Z u Y u X u Z Obr. 3.2: Schématická značka GCC [2] V kapitole 2.2 byl popsán přenos aktivního prvku jednopólovým modelem, jehož detailnější vyjádření lze najít například v [6]. Pro reálnější vyjádření je ale vhodné popisovat přenos vyššími řády, v našem případě dvoupólovým modelem, kdy α = α 0 ωα 2 s 2 + s ωα +. (3.3) Q ω2 α V tomto případě uvažujeme parametr Q = 2/2, tedy použití Butterworthovy maximálně ploché modulové charakteristiky. 17
3.2 Analýza stability Mějme postup výpočtu převzatý z [8]. I in X Z 1 + C I PP 1 MOCCCII Z C 2 2 + (1) Y Z 3 + Y X MOCCCII (2) Z 1 + Z 2 Z 3 + I DP I o1 I o2 I HP I in Obr. 3.3: První řešené schéma s konvejory [8] Díky použití standardního označení MOCCCII z obr. 3.3 můžeme definovat následující vztahy: I Y = 0, (3.4) I Zk = ±α k I X, (3.5) U X = U Y + R x I X, (3.6) kde plus nebo mínus α k pro (k = 1, 2,...) v (3.5) označuje k-tý kladný nebo záporný (I Z+ nebo I Z ) výstup MOCCCII. Frekvenčně závislý proudový zesilovací činitel α k je v ideálním případě roven jedné. Vnitřní odpor bipolární realizace MOCCCII je dán R x = U T 2I 0, (3.7) kde U T je termální napětí a I 0 proud nastavující vnitřní odpor konvejoru. Zanalyzujeme-li obvod, dostaneme následující přenosové funkce filtru: I DP I in = 1 D(s), (3.8) I PP I in = sc 2R x2 D(s), (3.9) a D(s), jenž je dán I HP I in = s2 C 1 C 2 R x1 R x2 D(s) (3.10) D(s) = s 2 C 1 C 2 R x1 R x2 + sc 2 R x2 + 1. (3.11) 18
Ve vztazích (3.8) (3.11) je R xi pro (i = 1, 2) vnitřní odpor i-tého konvejoru. Parametry ω 0 a Q daného filtru spočítáme jako 1 ω 0 =, (3.12) C 1 C 2 R x1 R x2 Q = C1 R x1 C 2 R x2. (3.13) Bereme-li v potaz proudový zesilovací činitel α, přechází přenosové funkce filtru a jejich jmenovatel na I HP I PP I DP I in = α 11α 22 D(s), (3.14) = sc 2R x2 α 12, (3.15) I in D(s) = s2 C 1 C 2 R x1 R x2 + sc 2 R x2 (1 α 13 ) + α 11 (α 21 α 23 ), (3.16) I in D(s) D(s) = s 2 C 1 C 2 R x1 R x2 + sc 2 R x2 + α 11 α 21. (3.17) Zde α ij (i = 1, 2 a j = 1, 2, 3) reprezentuje proudový zesilovací činitel j-tého výstupu Z z i-tého MOCCCII. Z důvodů zmíněných v kap. 2.2 přechází D(s) na α 210 D(s) = s 2 C 1 C 2 R x1 R x2 + sc 2 R x2 + α 11 0 1 + τ 1 s 1 + τ 2 s. (3.18) Přijmeme-li identičnost konvejorů, pak můžeme nahradit τ 1 = τ 2 = τ. Pak dále α 110 = α 210 = α 0. Při D(s) = 0 ze vztahu (3.18) je výsledkem rovnice čtvrtého řádu ( τ 2 s 4 + 2τ + ω ) ( 0 Q τ 2 s 3 + 1 + ω ) 0 Q 2τ s 2 + ω 0 Q s + ω2 0α0 2 = 0. (3.19) Routhovo kritérium stability může být použito podle kap. 2.2 následovně: s 4 τ 2 1 + ω 0 Q ω2 0α0, 2 s 3 2τ + ω 0 Q ω 0 Q s 2 B ω0α 2 0, 2 s 1 C, s 0 ω 2 0α 2 0. (3.20) Je známo, že výrazy B a C z (3.20) by měly být kladná reálná čísla, aby systém byl stabilní. Tedy B = ( 1 + ω 0 Q 2τ ) ( 2τ + ω 0 Q τ 2) ω 0 Q τ 2 2τ + ω 0 Q τ 2 > 0, (3.21) 19
ω 0 Q B ω2 0α 2 0 ( 2τ + ω 0 τ 2) Q C = > 0. (3.22) B Z posledních dvou vztahů je vidět, že čím máme menší Q a ω 0 a větší ω αi pro (i = 1, 2) pro zapojení na obr. 3.3, tím stabilnější filtr získáme. Z důvodů zmíněných v kap. 3.1 můžeme při vytváření charakteristické rovnice s přenosem aktivního prvku popsaným druhým řádem využít rovnic (3.3) a (3.18). Získáme tvar D(s) = s 2 C 1 C 2 R x1 R x2 + sc 2 R x2 + α 110 ω 2 α1 s 2 + s ω α1 Q + ω2 α1 α 210 ω 2 α2 s 2 + s ω α2 Q + ω2 α2. (3.23) Přijmeme-li opět identičnost konvejorů, pak můžeme nahradit ω α1 = ω α2 = ω α, α 110 = α 210 = α 0 a zjednodušit na tvar D(s) = s 2 α C 1 C 2 R x1 R x2 + sc 2 R x2 + 0 ωα 2 s 2 + s ωα + Q ω2 α Nyní uvažujeme obvod znázorněný na obr. 3.4. 2. (3.24) -I in I in Y X MOCCCII (1) Z 1 + Z 2 + I PZ IPP I o1 C 1 Y Z 2 - MOCCCII (2) Z 1 + X I DP C 2 I o2 Obr. 3.4: Druhé řešené schéma s konvejory [8] Pro tento obvod jsou odpovídající parametry následující I DP I in = ω2 0α 21 D(s), (3.25) 20
I PZ I in I PP = C 1 s ω0 α Q 12 I in C 2 D(s), (3.26) = s2 + s ω0 Q Mějme charakteristickou rovnici ( ) 1 C 1 C 2 α 11 + ω 2 0 α 22. (3.27) D(s) D(s) = s 2 + s ω 0 Q + ω2 0α 22 (3.28) se stejně vyjádřenými parametry ω 0 a Q jako v (3.12), resp. (3.13). Při nahrazení α 22 jednopólovým modelem přenosu α 0 /(1 + sτ) a D(s) = 0 dostáváme rovnici třetího řádu ( s 3 τ + s 2 1 + ω ) 0 Q τ + s ω 0 Q + ω2 0α 0 = 0, (3.29) na kterou se Routhovo kritérium použije následovně: s 3 τ ω 0 Q s 2 1 + ω 0 Q ω2 0α 0, s 1 B, s 0 C. (3.30) Aby byl systém stabilní, musí prvky B a C splňovat podmínky a ω 0 Q + ( ) 2 ω0 τ ω 2 Q 0α 0 τ > 0 (3.31) ω 2 0α 0 > 0. (3.32) Při zavedení zobecněného dvoupólového modelu přenosu aktivního prvku (viz kap. 3.1) do tohoto příkladu, obdržíme D(s) = s 2 + s ω 0 Q + α 0 ω ω2 α 2 0 s 2 + s ωα +. (3.33) Q ω2 α 21
4 AUTOMATIZACE ANALÝZY STABILITY 4.1 Program s uživatelským rozhraním V této kapitole je předvedeno uživatelské rozhraní programu pro testování stability daného systému, jsou stručně vysvětleny jeho jednotlivé části a popsáno, co může uživatel od programu čekat, případně, jaké má možnosti. Následující popis odpovídá jednotlivým blokům schématu programu z obr. 4.2. Obr. 4.1: Náhled uživatelského rozhraní Blok 1: Odpovídá prvnímu kroku, ve kterém uživatel do patřičných vstupních polí nejprve zadá charakteristickou rovnici. Je zde možno zadat jakýkoliv řetězec s tím, že přenosy aktivního prvku musí být označeny malým nebo velkým písmenem A a jednociferným číselným označením, např. A6, a0, apod. Program umí pracovat v rozmezí číselného označení 0 9. Tedy s deseti současně zadanými přenosy. Blok 2: Jedná se o druhý krok. Zde si uživatel může vybrat, jaký pólový model (řád modelování) přenosu chce použít při výpočtu. Doposud zadané hodnoty potvrdí tlačítkem. 22
START ZADÁNÍ VSTUPNÍCH HODNOT VÝBĚR ŘEŠENÍ A VYHLEDÁNÍ ČLENŮ ALFA ZADANÍ HODNOTY NALEZENÝCH ČLENŮ ALFA VÝBĚR Z MOŽNOSTÍ A ZADÁNÍ HODNOT NASTAVENÍ ROZLIŠENÍ PROVEDENÍ VÝPOČTU A VYKRESLENÍ KONEC Obr. 4.2: Principielní postup prováděných úkonů Blok 3: Třetí krok, který obsahuje hned několik součástí, indikuje, kolik bylo nalezeno členů α potřebných k výpočtu, poskytuje uživateli vstupní pole pro zadání hodnoty nalezených členů, dále se pak kliknutím na tlačítko provádí na pozadí mezivýpočet, který například upravuje charakteristickou rovnici na patřičný tvar. Při použití prvního způsobu řešení pak odpovídá (3.19). Tento krok taktéž zobrazuje generovaná pole v závislosti na počtu členů α v daných částech charakteristické rovnice potvrzených v bloku 2. Prvotní myšlenka byla taková, že si bude moci uživatel zadat pro všechny nalezené přenosy rozdílné hodnoty a tím docílit přesnějšího výpočtu. Tohle se ale ukázalo ve verzi Matlabu, ve které byl program vytvářen, s přihlédnutím na způsob programování, neproveditelné. Blok 4: Skládá se z kroků 4 7. Každý krok odpovídá jedné veličině, přičemž si uživatel může zvolit, kterou z nich dá na osu, případně na jakou, a jaké veličiny mají zůstat fixní. Při potřebě zadávání hodnot tzv. deset na několikátou, lze bez problémů využít zápisu s použitím písmenka e. Například tedy 1e6 nebo 3.5e-9. 23
Blok 5: Je to osmý krok plnící pouze jednu funkci. A to zjišťování zadané hodnoty v poli Počet bodů:, která určuje řád vykreslované matice. Zadá-li se tedy hodnota deset, matice bude mít rozměry 10 10, tudíž se bude počítat sto hodnot. Například při zadání hodnoty 300, se každý graf vykresloval přibližně hodinu. Pro srovnání, s hodnotou 10 vše trvalo kolem čtyř sekund. Program během výpočtu zobrazuje hodnotu, na které se zrovna nachází a na konci každého výpočtu vypíše čas, který uplynul od započetí výpočtu až po vykreslení. Blok 6: Závěrečný devátý krok. Asi nejkomplexnější z hlediska ověřování a kontroly vstupních parametrů a podmínek k výpočtu. Po stisknutí tlačítka vyhodnocuje data z většiny předešlých bloků (kroků), mimo jiné aplikuje Routhův algoritmus a následně, při dodržení kritérií, vykresluje maticovou plochu vyplněnou výsledky do grafu. Vykreslování stojí na principu nastavení výchozích hodnot jednotlivých prvků matice na nuly (černá nestabilní oblast) a při dodržení podmínky stability se prvky mění na jedničky (bílá stabilní oblast). Kompletní výpis kódu je uveden v příloze A. % vytvoreni zakladu matice z koeficientu matice = [ sude ; liche ]; % doplneni zbytku matice nulami nuly = zeros ( length ( sude )); matice = [ matice ; nuly ]; % zjisteni velikosti matice [ radky, sloupce ] = size ( matice ); % pro 3. a nasledujici radky for i = 3: radky % zjisti " leve " prvky lt = matice (i -2, 1); lb = matice (i -1, 1); % pro 2. a nasledujici sloupce for j = 2: sloupce % zjisti " prave " prvky rt = matice (i -2, j); rb = matice (i -1, j); % vypocet noveho prvku aktualni = ( lb* rt - lt* rb)/ lb; % ulozeni noveho prvku do matice matice (i, j -1) = aktualni ; Program 1: Ukázka části Routhova algoritmu 24
4.2 Grafické výstupy V této části jsou uvedeny výsledné grafy. První tři jsou pro první způsob řešení vycházející z obr. 3.3, další dva pak pro druhý způsob řešení korespondující s obr. 3.4. Všechny grafy zobrazují výsledky při modelovaní koeficientů α prvním řádem. Oblast stability v závislosti na ω 0 a α 0 při ω α = 10 7 rad/s a Q = 5. Obr. 4.3: Graf závislosti α 0 na ω 0 pro první způsob řešení Oblast stability v závislosti na Q a α 0 při ω α = 10 7 rad/s a ω 0 = 5 10 5 rad/s. Obr. 4.4: Graf závislosti α 0 na Q pro první způsob řešení 25
Oblast stability v závislosti na ω 0 a Q při α 0 = 1 a ω α = 10 7 rad/s. Obr. 4.5: Graf závislosti Q na ω 0 pro první způsob řešení Oblast stability v závislosti na Q a α 0 při ω α = 10 7 rad/s a ω 0 = 5 10 5 rad/s. Obr. 4.6: Graf závislosti α 0 na Q pro druhý způsob řešení 26
Oblast stability v závislosti na ω 0 a Q při α 0 = 1 a ω α = 10 7 rad/s. Obr. 4.7: Graf závislosti Q na ω 0 pro druhý způsob řešení 27
5 ZÁVĚR Tato bakalářská práce se věnovala analýze stability lineárních systémů. Teoretická část se zabývala stabilitou a jejími podmínkami, dále pak kritérii stability, jejich rozdělením do skupin a následného popisu jednotlivých kritérií. V praktické části se vybralo jedno kritérium stability, konkrétně Routhovo, se kterým se následně pracovalo. Jeho výhoda je v algebraicky přívětivém výpočtu algoritmu. Základem byl filtr s proudovými konvejory, jakožto aktivními prvky, ze kterého byl získán charakteristický mnohočlen. S tím se počítalo při analýze stability i v samotném zdrojovém kódu programu. Problematika byla demonstrována na příkladech s přenosovými funkcemi aktivních prvků prvního i druhého řádu. Hlavním výsledkem byl program s uživatelským rozhraním, díky kterému bylo automatizováno Routhovo kritérium stability a následné vykreslování grafických výstupů. V závislosti na daných parametrech a hodnotách je na nich možno pozorovat oblasti stability, zároveň tak oblasti, ve kterých se již systém chová nestabilně. Na konci práce byly uvedeny výsledky v podobě popisu programu a jeho uživatelského rozhraní a taktéž příklady některých výsledných grafů. Bohužel, i přes veškeré úsilí, se nezdařily adekvátně vykreslit průběhy zadaných veličin při modelování přenosů aktivních prvků funkcemi druhého řádu, tudíž nejsou uvedeny v konečných výsledcích, nicméně program jejich výpočet a vykreslení umožňuje. U modelování přenosů aktivních prvků funkcemi druhého řádu bylo očekáváno jisté zpřesnění daných výpočtů a promítnutí tohoto reálnějšího vyjádření do vykreslovaných grafů v podobě posunutí nestabilní oblasti do oblasti, kde se měl obvod chovat ještě stále stabilně, resp. posunutí meze stability. 28
LITERATURA [1] BEČVÁŘ D. Napěťové konvejory Brno: UMEL - VUT [online]. 13. 12. 2001, č. 51, [citováno 26. 5. 2012]. Dostupné z WWW: <http://www.elektrorevue.cz/clanky/01051/index.html>. [2] KOTON, J., MINARČÍK M. Využití grafů signálových toků pro analýzu obvodů s proudovými konvejory Brno: UTKO - VUT [online]. 18. 10. 2006, [citováno 26. 5. 2012]. Dostupné z WWW: <http://www.elektrorevue.cz/clanky/06039/index.html>. [3] NAVRÁTIL, Pavel. Stránky cvičení z předmětu Teorie automatického řízení I. [online]. Stránky vytvořeny 9. 7. 2007, [citováno 26. 5. 2012]. Dostupné z WWW: <http://195.178.89.122/ep_tar1>. [4] OGATA, K. Modern control engineering 5. vydání. New Jersey: Prentice Hall, 2009, 905 s. ISBN 978-0136156734. [5] ŠČEVÍK, Petr. Zpracování výukových textů z oblasti číslicové regulace v prostředí Internetu. Ostrava: VŠB - TUO, Fakulta strojní, Katedra automatizační techniky a řízení, 2008. Vedoucí diplomové práce Prof. Ing. Miluše Vítečková, CSc. Dostupné z WWW: <http://books.fs.vsb.cz/cislicovaregulace/data/images/pdf/6kapitola.pdf>. [6] ŠPONAR, R., VRBA, K. Measurements and Behavioral Modeling of Modern Conveyors. International Journal of Computer Science and Network Security (IJCSNS), vol. 6, no. 3A, pp. 57 65, 2006. Dostupné z WWW: <http://paper.ijcsns.org/07_book/200603/200603a08.pdf>. [7] TŮMA, Jiří, a kolektiv. Základy automatizace. 1. vydání. Ostrava: Ediční středisko VŠB TUO, 2007. 283 s. ISBN 978-80-248-1523-7. [8] YUCE, E., TOKAT, S., MINAEI, S., CICEKOGLU, O. Stability problems in universal current-mode filters. Int. J. Electron. Commun. (AEU), vol. 61, pp. 580 588, 2007. 29
SEZNAM SYMBOLŮ, VELIČIN A ZKRATEK α proudový zesilovací činitel α 0 proudový přenos C kondenzátor filtru G 0 přenos otevřeného regulačního obvodu GCC zobecněný proudový konvejor i branový proud u aktivního prvku I branový proud u funkčního bloku I 0 proud nastavující vnitřní odpor konvejoru I DP I HP I in I PP I PZ proud dolní propustí proud horní propustí vstupní proud konvejoru proud pásmovou propustí proud pásmovou zádrží MOCCCII řízený proudový konvejor druhé generace s více výstupy Q činitel jakosti R x vnitřní odpor konvejoru τ časová konstanta t čas u branové napětí u aktivního prvku U branové napětí u funkčního bloku U T termální napětí ω úhlový kmitočet ω 0 ω α charakteristický kmitočet filtru kmitočet pólu proudového přenosu 30
SEZNAM PŘÍLOH A Výpis kódu z Matlabu 32 31
A VÝPIS KÓDU Z MATLABU 32
function varargout = routhgui ( varargin ) gui_singleton = 1; gui_state = struct ( gui_name, mfilename,... gui_singleton, gui_singleton,... gui_openingfcn, @routhgui_openingfcn,... gui_outputfcn, @routhgui_outputfcn,... gui_layoutfcn, [],... gui_callback, []) ; if nargin && ischar ( varargin {1}) gui_state. gui_callback = str2func ( varargin {1}) ; if nargout [ varargout {1: nargout }] = gui_mainfcn ( gui_state, varargin {:}) ; gui_mainfcn ( gui_state, varargin {:}) ; function routhgui_openingfcn ( hobject, eventdata, handles, varargin ) handles. output = hobject ; guidata ( hobject, handles ); function varargout = routhgui_outputfcn ( hobject, eventdata, handles ) varargout {1} = handles. output ; function edit1_callback ( hobject, eventdata, handles ) function edit1_createfcn ( hobject, eventdata, handles ) 33
if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function edit2_callback ( hobject, eventdata, handles ) function edit2_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function edit3_callback ( hobject, eventdata, handles ) function edit3_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function pol2_callback ( hobject, eventdata, handles ) function pol1_callback ( hobject, eventdata, handles ) function pushbutton1_callback ( hobject, eventdata, handles ) % Naplneni promenych obsahem bunek s2 = get ( handles. edit1, String ); s0 = get ( handles. edit3, String ); 34
% Definice prohledavanych oblasti zaklad2 = sprintf ( %s, s2); zaklad0 = sprintf ( %s, s0); % Specifikovani hledanych znaku hledam = ([A]\d) ; nalezene2 = unique ( regexpi ( zaklad2, hledam, match )); nalezene0 = unique ( regexpi ( zaklad0, hledam, match )); % Osetreni pri zmene obsahu vychozich bunek pa1 = 0; pa2 = 0; pa1x = 0; pa2x = 0; set ( handles. s2_text_a1, Visible, Off ); set ( handles. s2_edit_a1, String,, Visible, Off ); set ( handles. s2_text_a2, Visible, Off ); set ( handles. s2_edit_a2, String,, Visible, Off ); set ( handles. s2_text_a3, Visible, Off ); set ( handles. s2_edit_a3, String,, Visible, Off ); set ( handles. s2_text_a4, Visible, Off ); set ( handles. s2_edit_a4, String,, Visible, Off ); set ( handles. s2_text_a5, Visible, Off ); set ( handles. s2_edit_a5, String,, Visible, Off ); set ( handles. s2_text_a6, Visible, Off ); set ( handles. s2_edit_a6, String,, Visible, Off ); set ( handles. s2_text_a7, Visible, Off ); set ( handles. s2_edit_a7, String,, Visible, Off ); set ( handles. s2_text_a8, Visible, Off ); set ( handles. s2_edit_a8, String,, Visible, Off ); set ( handles. s2_text_a9, Visible, Off ); set ( handles. s2_edit_a9, String,, Visible, Off ); set ( handles. s2_text_a10, Visible, Off ); set ( handles. s2_edit_a10, String,, Visible, Off ); set ( handles. s0_text_a1, Visible, Off ); set ( handles. s0_edit_a1, String,, Visible, Off ); 35
set ( handles. s0_text_a2, Visible, Off ); set ( handles. s0_edit_a2, String,, Visible, Off ); set ( handles. s0_text_a3, Visible, Off ); set ( handles. s0_edit_a3, String,, Visible, Off ); set ( handles. s0_text_a4, Visible, Off ); set ( handles. s0_edit_a4, String,, Visible, Off ); set ( handles. s0_text_a5, Visible, Off ); set ( handles. s0_edit_a5, String,, Visible, Off ); set ( handles. s0_text_a6, Visible, Off ); set ( handles. s0_edit_a6, String,, Visible, Off ); set ( handles. s0_text_a7, Visible, Off ); set ( handles. s0_edit_a7, String,, Visible, Off ); set ( handles. s0_text_a8, Visible, Off ); set ( handles. s0_edit_a8, String,, Visible, Off ); set ( handles. s0_text_a9, Visible, Off ); set ( handles. s0_edit_a9, String,, Visible, Off ); set ( handles. s0_text_a10, Visible, Off ); set ( handles. s0_edit_a10, String,, Visible, Off ); % Je - li pouzit jednopolovy model pro vypocet ( s2) if ( get ( handles.pol1, Value ) == get ( handles.pol1, Max )) % Zobrazeni tolika objektu, kolik bylo nalezeno Alfa ( s2) pa1x = length ( nalezene2 ); for pa1 = 1: pa1x if( pa1 == 1) set ( handles. s2_text_a1, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a1, Visible, On ); if( pa1 == 2) set ( handles. s2_text_a2, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a2, Visible, On ); if( pa1 == 3) set ( handles. s2_text_a3, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a3, Visible, On ); 36
if( pa1 == 4) set ( handles. s2_text_a4, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a4, Visible, On ); if( pa1 == 5) set ( handles. s2_text_a5, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a5, Visible, On ); if( pa1 == 6) set ( handles. s2_text_a6, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a6, Visible, On ); if( pa1 == 7) set ( handles. s2_text_a7, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a7, Visible, On ); if( pa1 == 8) set ( handles. s2_text_a8, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a8, Visible, On ); if( pa1 == 9) set ( handles. s2_text_a9, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a9, Visible, On ); if( pa1 == 10) set ( handles. s2_text_a10, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a10, Visible, On ); msgbox ( Bylo zadáno více než 10 parametrů Alfa., Chyba! ); 37
pa2x = length ( nalezene0 ); for pa2 = 1: pa2x % ( s0) if( pa2 == 1) set ( handles. s0_text_a1, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a1, Visible, On ); if( pa2 == 2) set ( handles. s0_text_a2, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a2, Visible, On ); if( pa2 == 3) set ( handles. s0_text_a3, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a3, Visible, On ); if( pa2 == 4) set ( handles. s0_text_a4, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a4, Visible, On ); if( pa2 == 5) set ( handles. s0_text_a5, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a5, Visible, On ); if( pa2 == 6) set ( handles. s0_text_a6, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a6, Visible, On ); if( pa2 == 7) set ( handles. s0_text_a7, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a7, Visible, On ); if( pa2 == 8) set ( handles. s0_text_a8, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a8, Visible, On ); 38
if( pa2 == 9) set ( handles. s0_text_a9, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a9, Visible, On ); if( pa2 == 10) set ( handles. s0_text_a10, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a10, Visible, On ); msgbox ( Bylo zadáno více než 10 parametrů Alfa., Chyba! ); % Je - li pouzit dvoupolovy model pro vypocet ( s2) if ( get ( handles.pol2, Value ) == get ( handles.pol2, Max )) % Zobrazeni tolika objektu, kolik bylo nalezeno Alfa ( s2) pa1x = length ( nalezene2 ); for pa1 = 1: pa1x if( pa1 == 1) set ( handles. s2_text_a1, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a1, Visible, On ); if( pa1 == 2) set ( handles. s2_text_a2, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a2, Visible, On ); if( pa1 == 3) 39
set ( handles. s2_text_a3, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a3, Visible, On ); if( pa1 == 4) set ( handles. s2_text_a4, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a4, Visible, On ); if( pa1 == 5) set ( handles. s2_text_a5, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a5, Visible, On ); if( pa1 == 6) set ( handles. s2_text_a6, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a6, Visible, On ); if( pa1 == 7) set ( handles. s2_text_a7, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a7, Visible, On ); if( pa1 == 8) set ( handles. s2_text_a8, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a8, Visible, On ); if( pa1 == 9) set ( handles. s2_text_a9, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a9, Visible, On ); if( pa1 == 10) set ( handles. s2_text_a10, String, nalezene2 { pa1 }, Visible, On ); set ( handles. s2_edit_a10, Visible, On ); msgbox ( Bylo zadáno více než 10 parametrů Alfa., Chyba! ); 40
pa2x = length ( nalezene0 ); for pa2 = 1: pa2x % ( s0) if( pa2 == 1) set ( handles. s0_text_a1, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a1, Visible, On ); if( pa2 == 2) set ( handles. s0_text_a2, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a2, Visible, On ); if( pa2 == 3) set ( handles. s0_text_a3, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a3, Visible, On ); if( pa2 == 4) set ( handles. s0_text_a4, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a4, Visible, On ); if( pa2 == 5) set ( handles. s0_text_a5, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a5, Visible, On ); if( pa2 == 6) set ( handles. s0_text_a6, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a6, Visible, On ); if( pa2 == 7) set ( handles. s0_text_a7, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a7, Visible, On ); if( pa2 == 8) 41
msgbox ( Zvolte jeden ze způsobu výpočtu., Chyba! ); set ( handles. s0_text_a8, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a8, Visible, On ); if( pa2 == 9) set ( handles. s0_text_a9, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a9, Visible, On ); if( pa2 == 10) set ( handles. s0_text_a10, String, nalezene0 { pa2 }, Visible, On ); set ( handles. s0_edit_a10, Visible, On ); msgbox ( Bylo zadáno více než 10 parametrů Alfa., Chyba! ); % Zviditelneni pevnych objektu v casti 3 set ( handles. text_3_1, Visible, On ); set ( handles. text_3_2, Visible, On ); set ( handles. text_3_3, String,( pa1x + pa2x ), Visible, On ); set ( handles. text_3_4, Visible, On ); set ( handles. text_3_5, Visible, On ); set ( handles. text_3_6, Visible, On ); set ( handles. text_3_7, Visible, On ); set ( handles. checkbox1, Visible, On ); 42
set ( handles. pushbutton2, Visible, On ); set ( handles. edit_a, Visible, On ); set ( handles. text_pom1, String,pa1x ); set ( handles. text_pom2, String,pa2x ); % Aktualizace GUI dat guidata ( hobject, handles ); function s2_edit_a1_callback ( hobject, eventdata, handles ) function s2_edit_a1_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function s2_edit_a2_callback ( hobject, eventdata, handles ) function s2_edit_a2_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function s2_edit_a3_callback ( hobject, eventdata, handles ) function s2_edit_a3_createfcn ( hobject, eventdata, handles ) 43
if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function s2_edit_a4_callback ( hobject, eventdata, handles ) function s2_edit_a4_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function s2_edit_a5_callback ( hobject, eventdata, handles ) function s2_edit_a5_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function s2_edit_a6_callback ( hobject, eventdata, handles ) function s2_edit_a6_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function s2_edit_a7_callback ( hobject, eventdata, handles ) 44
function s2_edit_a7_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function s2_edit_a8_callback ( hobject, eventdata, handles ) function s2_edit_a8_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function s2_edit_a9_callback ( hobject, eventdata, handles ) function s2_edit_a9_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function s2_edit_a10_callback ( hobject, eventdata, handles ) function s2_edit_a10_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); 45
function checkbox1_callback ( hobject, eventdata, handles ) function edit_a_callback ( hobject, eventdata, handles ) function edit_a_createfcn ( hobject, eventdata, handles ) if ispc && isequal ( get ( hobject, BackgroundColor ), get (0, defaultuicontrolbackgroundcolor )) set ( hobject, BackgroundColor, white ); function pushbutton2_callback ( hobject, eventdata, handles ) global x1; % Symbolicka deklarace syms omega_alfa Q s omega_0 ; syms s2_alfa s2_alfa1 s2_alfa2 s2_alfa3 s2_alfa4 s2_alfa5 s2_alfa6 s2_alfa7 s2_alfa8 s2_alfa9 s2_alfa10 ; syms s0_alfa s0_alfa1 s0_alfa2 s0_alfa3 s0_alfa4 s0_alfa5 s0_alfa6 s0_alfa7 s0_alfa8 s0_alfa9 s0_alfa10 ; % Naplneni promenych obsahem bunek s2 = get ( handles. edit1, String ); s0 = get ( handles. edit3, String ); % Definice prohledavanych oblasti zaklad_s2 = sprintf ( % s, s2); zaklad_s0 = sprintf ( % s, s0); % Specifikovani hledanych znaku hledam = ([A]\d) ; nalezene_s2 = unique ( regexpi ( zaklad_s2, hledam, match )); nalezene_s0 = unique ( regexpi ( zaklad_s0, hledam, match )); 46
% Osetreni pocet_alfa_s2 = 0; pocet_alfa_s0 = 0; pom1 = get ( handles. text_pom1, String ); pom2 = get ( handles. text_pom2, String ); s2_p1_a = 1; s2_p2_a = 1; s0_p1_a = 1; s0_p2_a = 1; s2_p1_a1 = 1; s2_p1_a2 = 1; s2_p1_a3 = 1; s2_p1_a4 = 1; s2_p1_a5 = 1; s2_p1_a6 = 1; s2_p1_a7 = 1; s2_p1_a8 = 1; s2_p1_a9 = 1; s2_p1_a10 = 1; s2_p2_a1 = 1; s2_p2_a2 = 1; s2_p2_a3 = 1; s2_p2_a4 = 1; s2_p2_a5 = 1; s2_p2_a6 = 1; s2_p2_a7 = 1; s2_p2_a8 = 1; s2_p2_a9 = 1; s2_p2_a10 = 1; s0_p1_a1 = 1; s0_p1_a2 = 1; s0_p1_a3 = 1; s0_p1_a4 = 1; s0_p1_a5 = 1; s0_p1_a6 = 1; s0_p1_a7 = 1; s0_p1_a8 = 1; 47
s0_p1_a9 = 1; s0_p1_a10 = 1; s0_p2_a1 = 1; s0_p2_a2 = 1; s0_p2_a3 = 1; s0_p2_a4 = 1; s0_p2_a5 = 1; s0_p2_a6 = 1; s0_p2_a7 = 1; s0_p2_a8 = 1; s0_p2_a9 = 1; s0_p2_a10 = 1; % Je - li pouzit jednopolovy model pro vypocet ( s2) if ( get ( handles.pol1, Value ) == get ( handles.pol1, Max )) if ( get ( handles. checkbox1, Value ) == get ( handles. checkbox1, Max )) s2_p1_a = s2_alfa /(1+((1/ omega_alfa )* s)); % Zobrazeni tolika objektu, kolik bylo nalezeno Alfa ( s2) pocet_a_s2 = length ( nalezene_s2 ); for pocet_alfa_s2 = 1: pocet_a_s2 if( pocet_alfa_s2 == 1) s2_p1_a1 = s2_alfa1 /(1+((1/ omega_alfa )* s)); if( pocet_alfa_s2 == 2) s2_p1_a2 = s2_alfa2 /(1+((1/ omega_alfa )* s)); if( pocet_alfa_s2 == 3) s2_p1_a3 = s2_alfa3 /(1+((1/ omega_alfa )* s)); if( pocet_alfa_s2 == 4) s2_p1_a4 = s2_alfa4 /(1+((1/ omega_alfa )* s)); if( pocet_alfa_s2 == 5) s2_p1_a5 = s2_alfa5 /(1+((1/ omega_alfa )* s)); if( pocet_alfa_s2 == 6) 48
s2_p1_a6 = s2_alfa6 /(1+((1/ omega_alfa )* s)); if( pocet_alfa_s2 == 7) s2_p1_a7 = s2_alfa7 /(1+((1/ omega_alfa )* s)); if( pocet_alfa_s2 == 8) s2_p1_a8 = s2_alfa8 /(1+((1/ omega_alfa )* s)); if( pocet_alfa_s2 == 9) s2_p1_a9 = s2_alfa9 /(1+((1/ omega_alfa )* s)); if( pocet_alfa_s2 == 10) s2_p1_a10 = s2_alfa10 /(1+((1/ omega_alfa )* s)); msgbox ( Bylo zadáno více než 10 parametrů Alfa., Chyba! ); % Je - li pouzit dvoupolovy model pro vypocet ( s2) if ( get ( handles.pol2, Value ) == get ( handles.pol2, Max )) if ( get ( handles. checkbox1, Value ) == get ( handles. checkbox1, Max )) s2_p2_a = s2_alfa *( omega_alfa ^2) /(( s ^2) +(s* omega_alfa /0.707) +( omega_alfa ^2) ); % Zobrazeni tolika objektu, kolik bylo nalezeno Alfa ( s2) pocet_a_s2 = length ( nalezene_s2 ); for pocet_alfa_s2 = 1: pocet_a_s2 49