173
Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-1 P.Misāns (Pičs) Ievads inženiermatemātikas datorrealizācijā (Lekciju konspekts) Šis materiāls ir sagatavots ar Eiropas Savienības finansiālu atbalstu granta līguma "Latvijas elektronikas un elektrotehnikas rūpniecības nozares attīstības projekts: izglītība reģionos" ietvaros. Par šī materiāla saturu pilnībā atbild Latvijas Elektrotehnikas un elektronikas rūpniecības asociācija un tas nekādā ziņā neatspoguļo Eiropas Savienības viedokli. Esi Tu mīreigs - byusi Tu laimeigs ! (Latgaļu paruna) RTU, LETERA, VeA 2006

Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Embed Size (px)

Citation preview

Page 1: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-1

P.Misāns (Pičs)

Ievads inženiermatemātikas datorrealizācijā (Lekciju konspekts)

Šis materiāls ir sagatavots ar Eiropas Savienības finansiālu atbalstu granta līguma "Latvijas elektronikas un elektrotehnikas rūpniecības nozares attīstības projekts: izglītība reģionos" ietvaros. Par šī materiāla saturu pilnībā atbild Latvijas Elektrotehnikas un elektronikas rūpniecības asociācija un tas nekādā ziņā neatspoguļo Eiropas Savienības viedokli.

Esi Tu mīreigs - byusi Tu laimeigs ! (Latgaļu paruna)

RTU, LETERA, VeA

2006

Page 2: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-2 ©Copyright Pičs (P. Misāns)

Page 3: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-3

S a t u r s Ievads ..............................................................................................................................9

Pirmie soļi ar MATLAB .............................................................................................11

MATLAB starts...........................................................................................................13

Darbs komandu logā..................................................................................................13

Aktīvā darba kataloga (Current Working Directory) aktivizēšana ...........................13

Scenārija izpilde komandu logā ................................................................................14

Scenārija faila (Script-file) veidošana .......................................................................15

Scenārija starts...........................................................................................................17

Vides darba atmiņa (Workspace) ..............................................................................18

Komandu loga vides visbiežāk izmantotās komandas ..............................................19

Kā saglabāt darba rezultātus ?...................................................................................21

Izpildīto darbību vēsture (Command History) ......................................................21

Dialoga saglabāšana dienasgrāmatā (Diary) .........................................................21

Grafikas saglabāšana .............................................................................................22

Vides darba atmiņas (Workspace) saglabāšana un atjaunošana............................24

Atskaišu veidošana....................................................................................................25

Tekstuālās informācijas klonēšana........................................................................25

Vienkāršu atskaišu veidošana MS Worda un HTML formātos .............................26

MATLAB darba virsmas organizācija ......................................................................27

Darbs ar failiem (datnēm) aktīvā darba kataloga logā (Current Directory) ..........27

Dažas lietas, kas atvieglo darbu MATLAB-a vidē. ..................................................29

Darba izbeigšana ar MATLAB. ................................................................................30

Iepriekšējo komandu loga rindu izsaukšana..............................................................30

Tabulācijas taustiņa (Tab) izmantošana. ...................................................................31

Funkcijas help izmantošana. .....................................................................................31

Funkcijas whos izmantošana.....................................................................................33

Funkcijas open izmantošana......................................................................................33

Karstie taustiņi rediģēšanai komandu logā................................................................34

Galvenie jēdzieni. ........................................................................................................34

Kas ir objektorientēta programmēšanas sistēma? .....................................................34

MATLAB-a datu klases ............................................................................................35

Izteiksmes un mainīgie..............................................................................................36

Konstantes .................................................................................................................38

Fona piemērs .............................................................................................................38

Page 4: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-4 ©Copyright Pičs (P. Misāns)

Konstantes piešķiršana mainīgajam.......................................................................... 38

Skaitļu izvada formāts .............................................................................................. 39

Skaitļu izvada formātu piemēri............................................................................. 39

Atslēgas vārdi ("Nāc iekšā ! - viņa teica, - būsi aizvējā …" (dziesma no BetBet repertuāra)) .............................................................................................................. 40

Matricu (masīvu) ievads............................................................................................. 41

Vektora ievads. ......................................................................................................... 42

Vektoru ģenerācija ar kolona ":" operāciju. ......................................................... 43

Aritmētiskās izteiksmes.............................................................................................. 43

Operācija "" .............................................................................................................. 44

Dažas vienkāršas izteiksmes................................................................................. 44

Tipiskas kļūdas darbojoties ar matricu izteiksmēm.............................................. 45

Matricas elementu adresācija (subscripting) ............................................................ 46

Operācijas ar masīviem (vektoriālās operācijas). ...................................................... 47

Elementārās matemātiskās funkcijas ....................................................................... 49

Darbs ar elementārajām funkcijām........................................................................... 50

Ne tā kā Excel-ā.................................................................................................... 51

Vienkāršu funkciju tabulu veidošana ................................................................... 51

Konstanšu matricu formēšana. ..................................................................................... 51

Matricu inicializācija ................................................................................................ 52

Tukšā matrica []........................................................................................................ 52

Darbs ar kompleksiem skaitļiem .................................................................................. 53

Komplekso skaitļu ievads. ........................................................................................ 53

Darbības ar kompleksiem skaitļiem. ........................................................................ 54

Kompleksu skaitļu matricas ievads ...................................................................... 54

Kompleksu skaitļu matricas transponēšana.......................................................... 55

Kompleksu skaitļu saskaitīšanas ģeometriskā interpretācija................................ 55

Struktūras un šūnu matricas. .................................................................................... 56

Struktūras.................................................................................................................. 56

Šūnu matricas. .......................................................................................................... 58

Šūnu matricas radīšana...................................................................................... 58

Daudzdimensiju objekti. ............................................................................................ 59

Programmēšanas pamatkonstrukcijas........................................................................... 59

Cikla for "izmantošana"............................................................................................ 60

Operatora if-else "izmantošana"....................................................................... 61

Page 5: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-5

Cikla while izmantošana.......................................................................................62

Rezultātu grafiska attēlošana ar funkciju plot. ........................................................63

Grafikas attēlošanas īpatnības. ..................................................................................64

Kā uzzīmēt parametrisku līkni?.................................................................................66

Līkņu iesaldēšana. .....................................................................................................66

Kā uzzīmēt līkni logaritmiskā mērogā? ....................................................................67

3-dimensiju grafika. ....................................................................................................68

Līkņu izvads vairākos logos .......................................................................................70

Līkņu izvads vairākos apakšlogos viena grafiskā loga ietvaros................................70

Līkņu izvads vairākos grafiskajos logos ...................................................................71

Grafisko funkciju īss kopsavilkums ..........................................................................72

Ievads "rokturu" grafikā (Handle Graphics). ...........................................................73

Figure loga rediģēšanas līdzekļi ................................................................................76

Grafisko objektu īpašību redaktors Property Editor ..................................76

Grafiskais redaktors Plot Edit ........................................................................76

Datu kursors ..........................................................................................................77

Matricu konstruēšana ....................................................................................................77

Elementāru matricu (de)montāžas piemēri ...............................................................77

Funkcijas repmat izmantošana...............................................................................79

Funkcijas reshape izmantošana un vēl viens ":" pielietojums ..............................79

Teksta matricu montāža ar strvcat.......................................................................81

Matricu montāžas piemērs elektriskai ķēdei. ............................................................82

Scenāriji un funkcijas. ...................................................................................................84

Kādēļ ir vajadzīga funkcija?......................................................................................84

Kā sākt veidot funkciju?............................................................................................84

Funkcijas ......................................................................................................................85

Ko nedrīkst? ..............................................................................................................86

Elementāras funkcijas piemērs..................................................................................86

Salīdzināšanas un loģiskās operācijas .......................................................................87

Mēģinājums uzrakstīt signāla formētāju ar operatora if palīdzību. .....................88

Datu filtrācija. Loģiskā matrica.................................................................................89

Signāla formētājs ar datu filtrāciju. ...........................................................................90

Simboliskās matemātikas izmantošana .....................................................................91

Atvasinājuma meklēšana...........................................................................................91

Algebriskas darbības ar formulām. ...........................................................................92

Page 6: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-6 ©Copyright Pičs (P. Misāns)

Robežu meklēšana. ................................................................................................... 93

Simboliskā integrēšana. ............................................................................................ 93

Izvirzījums Teilora rindā. ......................................................................................... 94

Rindu summēšana..................................................................................................... 94

Vienādojumu risināšana. .......................................................................................... 94

Lineāru vienādojuma sistēmas risinājuma iegūšana analītiskā formā ...................... 95

Risinājums ar operāciju "" ................................................................................... 95\

Risinājums ar funkciju solve............................................................................. 96

LaTex interpretatora izmantošana izteiksmju attēlošanai ....................................... 97

Simbolisko funkciju zīmēšana ar ezplot .............................................................. 98

Simbolisko funkciju kopsavilkums .......................................................................... 99

Lineāru vienādojumu risināšanas elementi ........................................................... 101

Lineāru vienādojumu sistēmu skaitliskās risināšanas elementi.................................. 103

Kā rodas lineāru vienādojumu sistēmas?................................................................ 103

Lineāru vienādojumu sistēmas. .............................................................................. 104

Pretrunīgu vienādojumu sistēmas....................................................................... 105

Skaitliskās problēmas ..................................................................................... 106

Lineāri atkarīgu vienādojumu sistēma................................................................ 106

Skaitliskās problēmas ..................................................................................... 107

Vāji nosacītu vienādojumu sistēma .................................................................... 107

Kopsavilkums par vienādojumu sistēmu grupām............................................... 108

Ko drīkst darīt ar lineāru vienādojumu sistēmu?................................................ 108

Gausa izslēgšanas (Gaussian elimination) metode. ............................................... 109

Pirmā fāze ........................................................................................................... 109

Otrā fāze ............................................................................................................. 109

Gausa izslēgšanas metodes skaitliskas realizācijas piemērs............................... 110

Gausa metodes realizācija MATLAB-ā ............................................................. 111

Vairāku vienādojumu sistēmu vienlaicīga risināšana..................................... 112

Gausa-Džordana (Gauss-Jordan) metode .............................................................. 113

Gausa izslēgšanas metodes iespējamās skaitliskās problēmas ............................... 114

Iteratīvās vienādojumu risināšanas metodes........................................................... 115

Gausa-Zeideļa (Gauss-Seidel) iteratīvā metode ................................................. 115

Potenciālās problēmas. ................................................................................... 115

Operāciju skaits ...................................................................................................... 115

Operāciju skaits Gausa izslēgšanas metodē........................................................ 116

Page 7: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-7

Operāciju skaits determinantu metodei ...............................................................116

Vienādojumu risināšana ar determinantu metodi................................................117

Vienādojumu sistēmas ar kompleksiem koeficientiem...........................................118

Pirmie soļi nelineāro vienādojumu risināšanas metodēs .......................................121

Nelineāru vienādojumu risināšanas elementi. .............................................................123

Piemērs: Diodes taisngriezis ...................................................................................123

Ņūtona metode (Newton's method). ........................................................................125

Ņūtona metodes algoritma soļi............................................................................127

Ņūtona metodes realizācijas piemērs ar kalkulatoru...........................................127

Ņūtona metodes realizācijas piemērs funkcijā ....................................................129

Nelineāra vienādojuma sakņu meklēšana ar MATLAB-a funkcijām. ....................130

Funkcija fzero ..................................................................................................130

Polinoma sakņu meklēšana ar roots ................................................................132

Ņūtona metodes skaitliskās problēmas ...................................................................134

Ņūtona-Broidena metode. ...................................................................................135

Pirmie soļi funkciju aproksimācijā un interpolācijā .............................................137

Aproksimācija un interpolācija. ..................................................................................139

Piemērs ar diodes VA raksturlīkni. .........................................................................139

Lagranža interpolācija .........................................................................................141

Aproksimācija ar minimālo kvadrātu metodi..........................................................143

Interpolācija ar splainiem........................................................................................145

Pirmie soļi parasto diferenciālvienādojumu risināšanas metodēs ........................147

Parastie diferenciālvienādojumi ..................................................................................149

Diferenciālvienādojumu skaitliskās risināšanas nepieciešamība ............................149

Vienkārši elektrisku ķēžu piemēri...........................................................................149

1.kārtas parasto diferenciālvienādojumu skaitliskā risināšana................................150

Košī uzdevums ....................................................................................................150

Tiešās un netiešās metodes..................................................................................150

Alternatīvs skaidrojums.......................................................................................151

Kļūdas novērtējums.............................................................................................152

Diferenču formulu piemēri vienkāršām shēmām................................................153

RC shēma ........................................................................................................154

RC shēmas ierosināšanās ................................................................................156

Taisngrieža shēma...........................................................................................156

Taisngrieža simulācija ar netiešo Eilera metodi..........................................157

Page 8: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-8 ©Copyright Pičs (P. Misāns)

Diferenciālvienādojumu risināšana ar MATLAB-a līdzekļiem ......................... 158

Runges-Kutta formulas........................................................................................... 160

Augstāku kārtu diferenciālvienādojumu risināšana................................................ 160

Piemērs – vienpusperioda taisngriezis ar filtru................................................... 161

Stāvokļa mainīgā metode................................................................................ 162

Augstāku kārtu diferenciālvienādojumu pārvēršana par 1 kārtas parastu difereciālvienādojumu sistēmu ....................................................................... 163

Pirmie soļi skaitliskās integrēšanas metodēs.......................................................... 165

Skaitliskās integrēšanas metodes................................................................................ 167

Skaitliskās integrēšanas nepieciešamība ................................................................ 167

Noteiktais integrālis kā laukums............................................................................. 167

Trapeču metode ...................................................................................................... 168

Simpsona metode.................................................................................................... 169

Simpsona metodes „anatomijas” praktiska ilustrācija........................................ 170

Ņūtona-Kotesa (Newton-Cotes) formulas .............................................................. 172

Elementārās (Closed Newton-Cotes formulas) formulas................................. 172

Paplašinātās (Extended Newton-Cotes formulas) formulas................................ 172

Literatūra .................................................................................................................. 173

Page 9: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-9

Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā "Inženiermatemātikas datorrealizācija". Konspekts pamatā ir orientēts uz patstāvīgu darbu. Autora pamatkoncepcija ir:

Ideja → Darbība → Pieredze → Teorija → Pilnveidota darbība → Rezultāts

Citās zemēs šī priekšmeta nosaukums ir "Numerical methods" ("Skaitliskās metodes") un pats priekšmets ir saistīts ar skaitlisko metožu un algoritmu pielietošanu inžerniera praksē. Domāju, ka RTU izdomātais nosaukuma analogs labāk atspoguļo gan būtību, gan tehnoloģiskās tendences. Ja klasisko skaitlisko metožu apguvei pietiek ar papīru, zīmuli un, labākajā gadījumā, kalkulatoru, tad datora izmantošana paver pilnīgi kvalitatīvi jaunus apvāršņus un prasa arī papildus iemaņas. Mūsdienu elektroinženieru projekti ir ļoti komplicēti, kādēļ prasa vienlīdz labi pārzināt gan metodes gan instrumentus:

Prasme lietot instrumentu + Laba metožu pārzināšana = Kvalitatīvs Rezultāts Kā instruments šeit ir izmantots MATLAB. Tas nebūt nav vienīgais šobrīd pieejamais tehniskās skaitļošanas līdzeklis (Environment of Technical Computing), bet, autoraprāt vienīgais, kas ļauj sasniegt kvalitatīvu rezultātu maksimāli īsā laikā, realizējot ar elektroniku, telekomunikācijām un daudzām citām nozarēm saistītus projektus. Tas nebūt nenozīmē to, ka MATLAB un tā vizuālā apakšsistēma SIMULINK tiek galā ar visām inženierproblēmām.

Visefektīvākais šīs sistēmas pielietojums ir saistīts ar, uz mikrokontrolieriem un ciparu signālprocesoriem (Texas Instrument, Motorola) balstītu, sistēmu izstrādi (Embeded Systems). Pēdējo gadu laikā ir pavērusies iespēja ar SIMULINK-a palīdzību sekmīgi sintezēt arī ciparu programmējamās loģiskās shēmas (Xilinx, Altera un Mentor Graphics). Elementāru skaitlisko metožu apgūšana ir tikai viens solītis ceļā uz iemaņām, kas vajadzīgas minēto sistēmu izstrādē.

Ir skaidri jāsaprot to, kam MATLAB nav domāts. Tā, piemēram, ar MATLAB pagaidām nevar veikt (un diezin vai tuvākajā laikā varēs) elektronisko shēmu modelēšanu un plašu projektēšanu. Šim nolūkam ir domāta sistēma CADENCE (Spice simulators) un tai līdzīgas. Lai gūtu priekšstatu, ko ar MATLAB un SIMULINK var veikt, pietiek ieskatīties programmu paketei līdzi dotajās demonstrācijas programmās.

Šī ievadkursa pamatmērķis ir radīt pirmās iemaņas darbā ar MATLAB. Precīzāk, - iemācīties to izmantot kā ļoti gudru kalkulatoru un patstāvīgi veidot elementārus scenārijus un funkcijas MATLAB programmēšanas vidē un valodā, kura iesācēja līmeni ir vienkāršāka pat par elementāro BASIC valodu. MATLAB-a ievadkursiņš ir cieši saistīts ar ievadu skaitlisko metožu elementos. Kā ilustratīvi piemēri šeit tiek aplūkoti elementāru elektrisko ķēžu modeļi un to modelēšana. Te jāpatur prātā ka profesionāla elektrisko shēmu modelēšana notiek ar programmu SPICE un nevis ar MATLAB vai SIMULINK. MATLAB jums var palīdzēt kursa un laboratorijas darbu izstrādei elektriskajās ķēdēs, kā arī apgūstot ķēžu teoriju, bet ne profesionālu elektrisku shēmu darbības modelēšanā. Autors ļoti cer, ka jūs iemācīsities to izmantot arī daudzos citos priekšmetos.

Atcerieties, ka paketi MATLAB ir veidojuši spēcīgākie pielietojamās matemātikas pasaules mēroga pīlari un tā ir ļoti profesionāli nostrādāta. MATLAB ir domāts pamatīgam un radošam darbam.

Page 10: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-10 ©Copyright Pičs (P. Misāns)

Page 11: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-11

Pirmie soļi ar MATLAB

Page 12: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-12 ©Copyright Pičs (P. Misāns)

Page 13: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-13

MATLAB starts Vispirms uz MS Windows darba galda ir jāatrod programmas ikona. DEMO versijas gadījumā tā varētu izskatīties šādi:

Ja ikonas uz darba galda nav, tad programma ir jāatrod Start → Programs izvēlnē. Pēc sekmīga programmas starta būtu jāierauga MATLAB Comand Window (komandu logs programmas versijas 7.x gadījumā) un citi logi saskarsnes kreisajā pusē:

Zīm. 1. MATLAB vides saskarsnes kopskats

Darbs komandu logā Komandu logā ir iespējams:

♦ ievadīt un izpildīt lielāko daļu no komandām, operatoriem, scenārijiem un funkcijām,

♦ aplūkot daudzus desmitus (pat simtus) pēdējo izpildīto komandu rindu un izvadīto skaitlisko vai tekstuālo rezultātu.

♦ veikt ievadāmās vai agrāk ievadītās rindas rediģēšanu vienas rindas ietvaros, ♦ veikt komandas izpildi, nospiežot taustiņu Enter ♦ izsaukt iepriekš ievadītās rindiņas, izmantojot bultiņu ↑ un ↓ taustiņus, ♦ kopēt iezīmēto tekstuālo informāciju no jebkuras komandu loga vietas

(operācija Copy) Windows noliktuvē (Clipboard) vai ielīmēt (operācija Paste), sākot ar komandu loga pēdējo rindu,

♦ iezīmēto tekstu var "nomest lejā" izpildes rindā, pavelkot to ar peles kursoru, ♦ "pārvilkt" agrāk izpildītās komandas no History loga ♦ un tā tālāk …

☺ Viltībiņas: Ja pirms bultiņas ↑ taustiņa nospiešanas, uzrakstīsi kādu burtu(s), tad tiks meklētas tikai agrāk ievadītas komandas, kas sākas ar izvēlētajiem burtiem.

Aktīvā darba kataloga (Current Working Directory) aktivizēšana Pēc MATLAB starta tiek aktivizēts noklusētais darba katalogs – parasti tas ir ar piedēkli ..\work. Lietotājam darba sākumā ir noteikti jāaktivizē tas darba katalogs, kurā atrodas vajadzīgie faili. Var rasties neērtības, ja lietotājs mēģinās visus darba

Page 14: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-14 ©Copyright Pičs (P. Misāns)

failus saglabāt katalogā ..\work. Lai izvairītos no liekām neērtībām, kataloga aktivāciju vajadzētu veikt tūlīt pēc MATLAB starta.

MATLAB vidē darbs notiek ar lielu skaitu funkciju un scenāriju, kas tiek tematiski klasificēti un izvietoti atbilstošajos katalogos. Arī lietotājam ir iespēja veidot pašam savus tematiski nošķirtus katalogus un tos piereģistrēt tā, lai MATLAB kodols bez problēmām varētu atrast izsaucamo funkciju vai scenāriju. Šim nolūkam var izmantot funkciju addpath, izvēlni Current Directory vai dialoga logu Browse for folder. Aizrauties ar katalogu saraksta papildināšanu ir jēga tikai, tad ja vides lietotājs ir "saražojis" tematiski atšķirīgus produktus un to atrašanās vienā katalogā traucē darbam. Strādājot publiskajā tīklā, kataloga reģistrācijai nav sevišķi lielas jēgas, jo kāds cits reģistrēto katalogu var anulēt.

Zīm. 2. Aktīvā darba kataloga izvēles rīku josla

Pēc Browse for folder aktivācijas mēs varam izvēlēties vajadzīgo darba katalogu.

Zīm. 3. Katalogu izvēles dialoga logs.

Praktiskāks un profesionālāks variants (ja vien kataloga nosaukums nav aizmirsies vai arī tas ir garš) ir komandas cd izmantošana. Komandu logā atliek uzrakstīt:

cd kataloga_nosaukums vai arī cd('kataloga nosaukums')

Aktīvā darba kataloga nosaukumu var noskaidrot ar:

» cd

C:\DemoMATLAB701\work

» cd ..

ļauj nokļūt katalogu kokā par vienu stāvu augstāk

Browse for folder

Scenārija izpilde komandu logā Operatorus vai komandas MATLAB-ā atdala ar semikolu ";"vai komatu ",". Tādējādi vienā rindā var ievietot daudzus operatorus, taču vairāku operatoru ievietošana vienā rindā apgrūtina pārskatāmību. Optimālais skaits varētu būt no viena līdz pāris

Page 15: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-15

operatoriem rindā. Aplūkosim vienkāršu trīs operatoru (komandu) scenāriju, kas zīmē sinusoīdu grafiskajā logā:

Zīm. 4. Komandu logā ievadīta scenārija izpildes piemērs.

Pirmā scenārija rinda saformē laika vektoru, kurš satur 101 vērtību intervālā [0 1] ar soli 0.01. Otrā rinda saformē atbilsošās sinusoīdas vērtības katram laika momentam (arī 101). Pēdējā rindiņa šī sinusoīda tiek uzzīmēta. Pēc scenārija pēdējās rindas izpildes, uzzīmētā sinusoīda parādās atsevišķā grafiskajā logā, taču, veicot "pietauvošanu" (dock), šo grafisko logu var iekļaut kopējā MATLAB saskarsnes ansamblī. Pietauvošanu veic vai nu no izvēlnes Desktop → Dock Figure, vai arī, nospiežot atbilstošu pogu ( ) grafiskā loga augšējā labajā stūrī.

Scenārija faila (Script-file) veidošana Komandu logā ļoti ērta ir darbošanās ar īsiem scenārijiem. Pēc komandu loga aizvēršanas scenārijs pazūd, ja vien neņem vērā History logā saglabāto. Komandu logs ir ērts lietošanai kalkulatora režīmā un lielāku scenāriju atsevišķu fragmentu skaņošanai. Gadījumos, ja scenāriju ir nepieciešams izmantot atkārtoti vai scenārijs ir relatīvi liels, to ir lietderīgi saglabāt failā.

Scenāriju faila veidošanu veic ar teksta redaktora palīdzību. Šim nolūkam var izmantot jebkuru redaktoru, kas spēj saglabāt informāciju ASCII teksta formātā.

MATLAB videi ir savs redaktors-skaņotājs (Editor-Debugger), kas ir ļoti ērts scenāriju un funkciju veidošanai. Redaktoru var startēt vairākos veidos. Pats vienkāršākais ir jauna M-faila atvēršana ar ikonu vai no izvēlnes File → New → M File.

Redaktoru var startēt arī no komandu loga:

» edit vai arī, uzdodot faila nosaukumu: » edit('sin_plot.m')

Pēc redaktora starta, ja vien nosaukums nav piešķirts, mums paveras šāda aina:

Page 16: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-16 ©Copyright Pičs (P. Misāns)

Zīm. 5. Programmu redaktora-skaņotāja logs

Ļoti saprātīga ir noskaņoto scenārija fragmentu kopēšana no komandu loga uz redaktora logu. To var veikt klasiski ar komandām Copy (Ctrl+C) un Paste (Ctrl+V) caur Window-a noliktuvi (Clipboard), vispirms vajadzīgo teksta fragmentu iezīmējot (Selection) komandu logā. Taču daudz vienkāršāk to var izdarīt, pārvelkot ar peles kursoru iezīmēto tekstu uz redaktora logu:

Zīm. 6. Komandu logā izpildīta scenārija klonēšana redaktora logā.

Lai iekopētās teksta rindas pārvērstu par pilnvērtīgu scenāriju, ir jāizdara diva lietas:

• tekstā ir jānodzēš MATLAB-a komandu loga uzaicinājumi "»"

• teksts ir jānoglabā scenārija failā ar izvēlēto nosaukumu (šoreiz sine_plot.m)

Pēc minēto operāciju veikšanas redaktora loga augšdaļā parādās pilns faila nosaukums:

Pēc scenārija modifikācijas neaizmirsti to saglabāt !

Zīm. 7. Redaktorā noformēta scenārija paraugs.

Jāpatur prātā, ka scenāriju un funkciju failu paplašinājumam ir jābūt *.m.

Page 17: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-17

☺ Viltībiņas: Komandu loga uzaicinājumus, ja to ir daudz, visātrāk no rediģējamā teksta var izvākt šādi:

♦ iezīmē uzaicinājumu » ♦ atver izvēlni Edit → Replace (Ctrl+H) ♦ nospied pogu Replace All

Scenārija starts

Kad scenārija vai funkcijas (par tām vēlāk) fails ir izveidots, to var izpildīt (Run). Autors neiesaka iesācējiem izmantot redaktora izvēlnes iespēju Debug → Run. Visērtāk scenāriju var startēt no komandu loga, uzrakstot scenārija nosaukumu (šoreiz – sin_plot), kuram ir obligāti jāsākas ar burtu un tas drīkst saturēt tikai burtus, ciparus un zīmi "_" (underscore):

» sin_plot

??? Undefined function or variable 'sin_plot'.

Šoreiz ir mēģinājums startēt agrāk uzrakstītu scenāriju, bet ir aizmirsts par kataloga, kurā atrodas vajadzīgais scenārijs, maiņu. Ja vajadzīgais katalogs jau ir bijis iestādīts, tad problēmu, protams nebūs:

Zīm. 8. Scenārija sin_plot starts no komandu loga un iegūtais grafiks.

Šoreiz, tāpat kā iepriekš, pēc grafika uzzīmēšanas ir veikta manuāla Figure loga pietauvošana. Komandu logā mēs drīkstam izpildīt arī citas komandas, kas ir papildinošas jau izpildītajam scenārijam vai pilnīgi nesaistītas ar to, piemēram, uzklāt grafikam tīklu vai veikt citas darbības.:

Zīm. 9. Iepriekš iegūtā grafika papildināšana ar tīklu.

Page 18: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-18 ©Copyright Pičs (P. Misāns)

Vides darba atmiņa (Workspace) Pēc scenārija izpildes lietotājam ir pieejama vides darba atmiņa (Workspace), kurā glabājas visi pēdējā vai iepriekšējo seansa laikā izpildīto scenāriju skaitliskie rezultāti. Lietotājam ir brīvi pieejami visi skaitļi un matricas, kas ir ievadītas vai izrēķinātas. Tā, piemēram, lai uzzinātu, kas mums ir palicis pēc scenārija sin_plot darbības, pietiek ievadīt komandu whos:

» Name Size Bytes Class whos

t 1x101 808 double array y 1x101 808 double array Grand total is 202 elements using 1616 bytes

Darba atmiņas koncepcija ir ļoti elastīga un iesācējiem noderīga, taču vajadzēu paturēt prātā, ka ja divi, vai vairāki scenāriji ir izmantojuši vienu un to pašu mainīgo, tad tajā saglabājas rezultāts, kurš iegūts pēdējā scenārija darbības laikā. Funkcijas izmanto lokālos mainīgos, tie komandu loga darba atmiņā nenonāk un lietotājam ārpus funkcijas nav redzami.

Ar darba atmiņas mainīgajiem ir iespējamas jebkuras vidē atļautās manipulācijas. Tos var izmantot citu scenāriju vai funkciju "barošanai". Tā, piemēram, mēs varam apskatīt, kas "lācītim vēderā":

» y(t<0.05) ans = 0 0.1253 0.2487 0.3681 0.4818

☺ Viltībiņas: Vēlams izvairīties no lielu matricu vai vektoru satura apskata komandu logā, jo, pirmkārt, tas var aizņemt krietnu laiku, un, otrkārt, var apgrūtināt iepriekš izpildīto darbību apskati. Daudz labāk šim nolūkam ir izmantot logu Workspace.

Ja kādreiz kādam laboratorijas darbam vai ļoti atbildīgai prezentācijai ir nepieciešama rezultātu "uzlabošana", tad var noderēt matricu redaktors (Array Editor), ar kura palīdzību var rakāties pa matricu iekšieni un veikt nepieciešamos uzlabojumus. Izmēģini, - bet Pičs par sekām neatbildēs. Workspace Browser (precīzāk Workspace), caur kuru ir ērti aktivēt matricu redaktoru, ir atrodams saskarsnes kreisajā pusē pie nosacījuma, ja ir izdarīta atzīme izvēlnē Desktop → Workspace.

Zīm. 10. Workspace loga izvēlne Plot selection.

Page 19: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-19

Ja datu ir daudz, tad ļoti bieži ir ērti tos apskatīt grafiski, izmantojot dažādus attēlošanas veidus (Plot selection). Lai datus varētu apskatīt vai rediģēt, vajadzīgā matrica ir jāiezīmē un jāatver ar peles dubulklikšķi vai pogu Open selection.

Zīm. 11. Masīvu redaktora Array Editor logs.

Ja ir vajadzība (tikai padomā par sekām), mainīgā nosaukumu var mainīt. To var izdarīt līdzīgi, kā mainot datnes (faila) nosaukuma MS Windows vidē.

Matricu redaktoram ir dažādas iespējas. Ievērības cienīga ir iespēja veikt datu importu no MS Excel vides ar ielīmēšanas Edit → Paste Excel Data palīdzību. Tiek pārnestas tikai lauciņu skaitliskās vērtības. Protams, datus ar Clipboard palīdzību var pārnest arī uz Excel. Nopietnākiem "sakariem" starp MATLAB un Excel kalpo speciāla līdzekļu kopa Excel Link Toolbox.

Komandu loga vides visbiežāk izmantotās komandas Ja Jūs esat strādājis DOS vidē, tad nebūs grūti izmantot dažas pazīstamas šīs vides komandas arī vidē MATLAB. Šo komandu lietošana nav eksotika, bet gan liela ērtība, ja gribat strādāt ātri. Bez tam jebkuru no komandām var iekļaut lietotāja programmās, kas lietotājam paver daudzas iespējas

» dir s*.m sin_plot.m

! Pēc komandas (dir) noteikti ieliec atstarpi ☺.

» type sin_plot % Sinusa zi'me's'ana. t = 0:0.01:1; y = sin(2*pi*2*t); plot(t,y)

» help sin_plot Sinusa zi'me's'ana. Ja scena'rija vai funkcijas sa'kuma' esi uzraksti'jis komenta'rus, tie kalpos ka' help rindas. Komenta'ros neesi liekva'rdi'gs.

dir bez parametriem ļauj apskatīt lakonisku visu failu sarakstu. Šajā piemērā tiek rādīti tikai tie M-faili, kuri sākas ar burtu "s"

type izvada M-faila saturu uz ekrāna, ja nenorādam faila paplašinājumu. Gariem failiem ērtāk izmantot teksta redaktoru. Ja gribi aplūkot citus teksta failus (ne-M-failus), raksti pilnu datnes nosaukumu. Pievērs uzmanību tam, ka datnē ir komentārs (sākas ar %). Tas vēl lieti noderēs.

Ja neesi slinkojis, un programmai esi uzrakstījis sākuma komentārus, t.i. tādus, kuri seko rindu aiz rindas līdz pirmajai ne-komentāra rindai, tad tiksi atalgots ar automātisku palīdzību nākotnē. Komanda help ir visātrākais ceļš, kā iegūt informāciju par jebkuru funkciju vai scenāriju. Visbiežāk tā ir pietiekama darbam.

Page 20: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-20 ©Copyright Pičs (P. Misāns)

Ja ir nepieciešams var izpildīt arī jebkuru citu MS Windowsvides komandu, kura neietilpst paša MATLAB sastāvā. Faktiski no komandu loga var nodot izpildei jebkādu komandu rindu MS Windows videi.

» !copy sin_plot.m plot_sin.m 1 file(s) copied.

Izsaukuma zīme nodod operētājvidei rindu, kas atrodas aiz !, un liek to izpildīt. Šoreiz tiek kopēta datne. Ja izaukuma zīme ļauj griezties pie jebkuras operētājvides, kurā tiek darbināts MATLAB (Unix, Mac OS, utt.). Programmās ērtāk ir iebūvēt funkciju system:

» system('copy sin_plot.m plot_sine.m'); 1 file(s) copied.ans =

Šī funkcija ir neatkarīga no operētājvides, taču jāatceras, ka operētājvidei nododamo komandu nosaukumi var atšķirties.

Klasisks piemērs ir "dos-iska" datņu kataloga apskate

» system('dir'); Volume in drive C has no label. Volume Serial Number is xxxx-xxxx Directory of C:\DemoMATLAB701\work\EIMDR 07/04/2006 12:56 PM <DIR> . 07/04/2006 12:56 PM <DIR> .. 07/04/2006 11:58 AM 174 plot_sin.m 07/04/2006 11:58 AM 174 plot_sine.m 07/04/2006 11:58 AM 174 sin_plot.m 3 File(s) 522 bytes 2 Dir(s) 10,955,653,120 bytes free

Unix vidē dir vietā būs jāizmanto ls un arī atbilde būs citāda.

Īpaši ir jāatzīmē, ka gandrīz visas MATLAB komandas var izmantot arī kā funkcijas. Taču, ja rodas tāda vajadzība, noteikti pārbaudi šo iespējamību. Ir gadījies, ka dualitāte nenostrādā. Nobeigumā vēl pāris derīgu komandu (funkciju).

» clear t y » whos Name Size Bytes Class ans 1x1 8 double array Grand total is 1 element using 8 bytes

clear attīra darba atmiņu no uzskaitītajiem mainīga-jiem. Šajā piemērā no atmiņas tiek izdzēsta informācija par mainīgajiem t un y un arī to saturs. Ar šo komandu var veikt arī citas derīgas darbības. Apskaties palīdzību !

Tā, piemēram, testa funkcija exist pārbauda, vai objekts (datne, mainīgais utt.) eksistē:

» exist('sin_plot.m') ans = 2

exist caurskata aktīvo un visus MATLAB reģistrētos katalogus, un meklē failu ar uzdoto nosaukumu. Ja fails tiek atrasts, tad funkcijas rezultāts ir 2. Ja tas netiek atrasts, tad rezultāts ir 0. Funkciju visbiežāk izmanto operatoros if-else un while. Funkcija māk atrast arī daudz ko citu. Apskaties palīdzību !

Page 21: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-21

» exist('sinplot.m','file') ans = 0

Kā saglabāt darba rezultātus ? Vispirms vajadzētu tikt skaidrībā, kas ir darba rezultāti. Tos mēs varam sagrupēt vairākās kategorijās:

• komandu logā ievadītās darbības (komandas, funkciju un scenāriju izsaukumi), • komandu logā izvadītie objekti (mainīgo saturs, funkciju formējamie rezultāti

utt.), • grafiskaj(ā)-os log(ā)-os izvadītie grafiki, • darba gaitā radītās datnes (faili)

Izpildīto darbību vēsture (Command History) Visas darbības, kas tiek ievadītas komandu logā tiek saglabātas logā Command History.

Darbības tiks saglabātas tikai tad, ja izvēlnē File → Preferences → Command History ir pareizi uzstādīta izvēle Saving.

Zīm. 12. Izpildīto darbīvu vēstures logs Command History.

Notikušās darbības var atkārtot, tās pārvelkot uz komandu logu vai vienkārši iezīmējot un nospiežot taustiņu Enter. Ar peles kursoru iezīmētās darbības var pārvilkt arī uz redaktora logu kā teksta rindas. Katra seansa vēsture tiek atbilstoši nomarķēta. Lietotājam ir pieejamas visas darbības, kas ir saglabātas iepriekš citos seansos. Seansa laikā izsauktās komandas netiek saglabātas, ja kaut kāda iemesla dēļ MATLAB vides darbība tiek pēkšņi pārtraukta (piemēram, dators tiek nepareizi izslēgts).

☺ Viltībiņas: Nereti visoperatīvāk kādu vecu komandu (kura, varbūt, ir ļoti gara, lai to pārrakstītu) var sameklēt nevis Command History logā, bet gan Command Window logā, uzdrukājot kādu bur(u)s un nospiežot bultiņu Up.

!!! Darbības, kuras tiek izpildītas ar pogām vai no izvēlnēm Command History logā saglabātas netiek. Tas arī ir viens no iemesliem, kādēļ podziņu lietošana pieredzējušākam lietotājam var nebūt ērta.

Dialoga saglabāšana dienasgrāmatā (Diary) Bieži rodas vajadzība teksta failā saglabāt visu to, kas ir norisinājies komandu logā. Tas nozīmē ka var iegūt ne tikai visu veikto darbību protokolu, bet arī izvadītos teksta rezultātus. Šim nolūkam ir jāizmanto funkciju diary.

Page 22: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-22 ©Copyright Pičs (P. Misāns)

» diary('sineaf.m')

» t = 0:0.01:1;

» A = input('A = ');

A = 1.5

» f = input('f = ');

f = 3

» y = sin(2*pi*f*t);

» plot(t,y,t,A*y,t,0*t,':')

» diary('off')

Dienasgrāmātā, atšķirībā no komandu vēstures loga, tiek reģistrētas arī daļa darbību, kuras tiek veiktas ar pogu vai izvēlnes palīdzību. Detaļas šeit neaplūkosim.

Lai veiktu darba protokolēšanu (diary (angl.)- dienasgrāmata), funkcijai vēlams norādīt datnes nosaukumu. Ja tas netiek izdarīts, tad noklusētais nosaukums ir 'diary.' vai arī tekošajā seansā pēdējā izmantotā dienasgrāmatas faila nosaukums. Visvēlamākais ir datnes piedēklis ".m".

Pēc protokolēšanas beigām dienasgrāmatas datne ir jāatslēdz.

Atkārtotas dienasgrāmatas ieslēgšanas gadījuma komandu loga dialogs tiks pievienots agrāk radītā dienasgrāmatas datnes beigās.

Pēc tam, kad dienasgrāmatas datne ir noformēta, to var izmantot visdažādākajiem nolūkiem. Pārsvarā gadījumu to var izmantot par pamatu scenārija veidošanai, kādēļ dienasgrāmatas datnei vajadzētu būt M-failam. Vienīgi būtu jāpatur prātā, ka datne satur arī komandu logā izvadītos rezultātus. Tos vajag nodzēst (tikko apskatītajā piemērā jānodzēš izceltās rindas). Pēc minētajiem labojumiem ar teksta redaktoru un komentāru pievienošanas fails sineaf.m varētu izskatīties šādi:

Zīm. 13. Teksta redaktora logs ar rediģētu datni sineaf.m.

Tālāk izveidotais scenārijs ir vienkārši jāekspluatē, to izsaucot no komandu loga:

Funkcija input dialogâ ļauj ievadīt sinusoīdas amplitūdu un frekvenci.

Attēlojamās sinusoīdas amplitūda ir 2.5, bet frekvence 4. Izmēģini arī ar citiem skaitļiem !

» sineaf A = 2.5 f = 4

Grafikas saglabāšana Visbiežāk mums ir vajadzība saglabāt grafiskos rezultātus. Ja scenārijs grafiku izveido ātri tad speciāla grafiskā loga satura saglabāšana nav nepieciešama, jo jebkurā brīdi mēs varam atkārtoti izsaukt scenāriju, iegūt rezultātu un to izmantot. Taču var gadīties tā, ka līknes vai zīmējumi veidojas ilgākā laika posmā un atkārtota scenārija

Page 23: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-23

izsaukšana nav vēlama vai ir pat neiespējama. Tad noder MATLAB iespēja grafiku pārvērst par zīmējumu un saglabāt grafiskajā datnē (failā).

Zīm. 14. Figure dialoga logs Save as.

Lai grafisko logu saglabātu tādu, kāds tas ir, kādā no grafiskajiem formātiem, ir jāizmanto izvēlne File → Save As. Tālāk izvēlamies grafiskās datnes tipu, piemēram *.jpg. Šajā piemērā tā ir izvēlēta datne (fails) a2_5f4_0.fig. Tas ir paša MATLAB formāts. Turpmāk grafiskais logs ar visu tā saturu būs ieraugāms šādi:

» open('a2_5f4_0.fig')

Ir jāpiebilst, ka *.fig fails patiesībā ir MATLAB datu bāzes fails (*.mat) un funkcija (metode) open to pārvērš par grafisku objektu. Saglabāto datu bāzes failu pēc vajadzības var pārvērst praktiski jebkurā grafiskajā formātā, izmantojot open un tam sekojošo File → Save As.

Visbiežāk līknes un citas grafiskas lietas mums ir jāsaglabā "cietā veidā" uz papīra un vēl biežāk grafikiem ir jābūt iekļautiem kādās atskaitēs vai dokumentos. Minētajos gadījumos noderīga ir grafiskā loga satura kopēšana kādā teksta dokumentā ar pēc tam sekojošu izdruku. To veic ar Edit → Copy Figure:

Zīm. 15. Grafiskā loga satura kopēšana ar Clipboard palīdzību.

Worda (arī cits) dokuments

0 0.2 0.4 0.6 0.8 1-3

-2

-1

0

1

2

3

Clipboard

Ctrl + V

Grafiku kopējot tiek izmantots kāds no uzstādītajiem formātiem. To iestāda izvēlnē Edit → Copy Options vai File → Preferences → Copy Options.

Itkā daudzsološs ir t.s. Windows Meta File formāts. Tas ir objektorientēts grafiskā faila apraksta veids, ko saprot vairums no vidēm, taču MS Word programmai ir pagrūti to pareizi interpretēt. Visdrošāk ir izvēlēties Windows Bitmap formātu.

Ja drukājot atskaites, ir vēlēšanās taupīt pulveri vai tinti, tad ir iespējams pārstādīt grafiskā loga fonu no pelēkā uz baltu.

Page 24: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-24 ©Copyright Pičs (P. Misāns)

» set(gcf,'Color',[1,1,1])

Dažreiz, piemēram, ilgstoši strādājot ir vajazība atpūtināt acis. Tādā gadījumā līknes vēlams aplūkot nevis uz balta fona bet gan uz melna fona. Asu fonu var mainīt ar funkciju: » whithebg !!! Tikai jāatceras, ka šī komanda darbojas kā slēdzis. Izpildot

to 2 reizes pēc kārtas, viss paliek pa vecam.

Melnais fons ir noderīgs arī prezentācijās, strādājot ar projektoru, ja telpā ir relatīvi gaišs.

Grafiku ir iespējams izdrukāt arī tieši uz papīra un tad tā kvalitāte ir visaugstākā. Taču šāda pieeja apgrūtina pilnvētīgu atskaites noformēšanu, jo parasti grafiki nav vienīgie iespējamie atskaitē izmantojamie objekti.

Vides darba atmiņas (Workspace) saglabāšana un atjaunošana Sarēķinātos datus var saglabāt MATLAB datu bāzu datnēs *.mat un ielasīt no tām, izmantojot

• funkcijas (komandas) save un load, • vides izvēlnes File → Save un File → Open, • Workspace pogas Load data un Save.

Ja beidzot darbu vēlaties saglabāt sarēķinātās matricas, vektorus vai skaitļus tā, lai tos varētu izmantot nākotnē, izmantojiet funkciju vai komandu save: » save('sineaf')

» Visi vides darba atmiņas mainīgie un to saturs tiks saglabāti failā ar nosaukumu sineaf.mat speciālā formātā.

» save('sineafty','t','y')

»

Failā var saglabāt arī tikai izvēlētus mainīgos (šoreiz t un y).

Pirms datu saglabāšanas ar izvēļņu palīdzību ir jāveic vajadzīgo mainīgo iezīmēšana. Vairāku mainīgo iezīmēšana pirms to satura saglabāšanas notiek tāpat kā datņu (failu) iezīmēšana – vai nu ar peles kreiso taustiņu un vienlaicīgi piespiestu Ctrl taustiņu, vai arī ar bultiņu taustiņu un piespiesta Shift palīdzību (ja mainīgie atrodas blakus). Saglabāšanu var veikt aŗī Workspace logā, piespiežot peles labo taustiņu, izvēloties Save As un pēc tam uzrakstot datnes nosaukumu atbilstošajā lauciņā.

Ja tas ir nepieciešams, darba atmiņu var atjaunot ar komandu vai funkciju load: » load('sineaf')

» Tiek atjaunoti visi mainīgie, kas glabājas datnē ar nosaukumu sineaf.mat.

Jāatceras, ka atjaunojot darba atmiņas mainīgos, vienāda nosaukuma mainīgajiem to iepriekšējais saturs tiek aizvietots ar mainīgā saturu, kas tiek ielasīts no datnes. » load('sineafty','t','y')

»

No datnes var nolasīt arī tikai vajadzīgos mainīgos (šoreiz t un y).

Page 25: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-25

Ar komandām save un load var saglabāt informāciju un nolasīt to no datnes, kas ir noformēts teksta (ASCII formātā). Tādā gadījumā ir jāizmanto papildus atslēga (sk. help).

Nopietnākiem darbiem ar datnēm ir paredzētas fwrite, fread, fprintf, fscanf un vēl citas funkcijas, kuras domātas lietotājam ar zināmu pieredzi. Izstudē un izmanto!

Atskaišu veidošana Interaktīvu atskaišu veidošanai ļoti ērta ir MATLAB Notebook izmantošana. Tā ļauj darbināt MATLAB, sūtīt uz MATLAB scenārijus un saņemt rezultātus, neizejot no Word-a teksta redaktora. Autoraprāt, no vienas puses darbs ar Notebook varētu būt ērts lietotājiem, kuru iemaņas Windows un Word vidēs vēl nav sasniegušas zināmu līmeni. No otras puses, tas ļoti noderīgs ir profesionāliem MATLAB lietotājiem. "Vidējas klases" lietotājiem Notebook varētu būt par lēnu (no trenēšanās viedokļa).

MATLAB-a Notebook sevī ietver līdzekļus dinamiskai datu apmaiņai (DDE -Dynamic Data Excahange) starp MATLAB-a un Word-a vidēm. Šajā gadījumā scenārijus pilnībā var rakstīt Word-a dokumentā un to aktivācija MATLAB-ā arī notiek no Word-a. Detalizētāku informāciju par to, kā strādāt ar Notebook , var atrast 2003 gada konspekta versijā. Šeit aplūkosim nedaudz svaigākas, lai arī ne līdzvērtīgas, atskaišu ģenerācijas iespējas.

Tekstuālās informācijas klonēšana Pats vienkāršākais un ātrākais paņēmiens atskaites tekstuālās daļas veidošanā ir teksta klonēšana. To, protams, var izmantot ne tikai atskaitēm. Kā jau tas nodemonstrēts nodaļā par scenārija faila veidošanu, komandu logā esošo tekstuālo informāciju ir iespējams iekopēt Windows noliktuvē (Clipboard). Tālāk to var pārnest uz jebkuru citu Windows programmu logu, kurā vien to ir iespējams ielīmēt. Šādā veidā var klonēt un saglabāt gan scenāriju tekstu fragmentus, gan teksta veidā izvadīto skaitlisko informāciju:

Word-a (vai arī kāds cits) dokuments

% Sinusa zīmēšana % A - amplitūda, f - frekvence t = 0:0.01:1; A = input('A = '); f = input('f = '); y = sin(2*pi*f*t); plot(t,y,t,A*y,t,0*t,':')

Clipboard

Ctrl + C

Ctrl + V

Klonējamo tekstu vari izvēlēties ne tikai MATLAB komandu logā, bet arī jebkurā citā, piemēram, teksta redaktora logā.

Zīm. 16. Komandu logā esošās tekstuālās informācijas klonēšana.

Page 26: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-26 ©Copyright Pičs (P. Misāns)

Vienkāršu atskaišu veidošana MS Worda un HTML formātos MATLAB versija 7.x ļauj veidot atskaites vairākos formātos – HTML,XML, LaTeX, Word un Power Point. Lai izveidoto visvienkāršāko atskaites failu, mums ir jāizmanto teksta redaktora izvēlne File → Publish To → Word Document:

Zīm. 17. Atskaišu veidošanas iespējas Publish To Word Document izvēles piemērs.

Rezultātā mums izveidojas Word-a datne \html\sineaf.doc ar sekojošu saturu:

% Sinusa zi'me's'ana % A - amplitu'da, f - frekvence t = 0:0.01:1; A = input('A = '); f = input('f = '); y = sin(2*pi*f*t); plot(t,y,t,A*y,t,0*t,':')

Error using ==> input Cannot call INPUT from EVALC.

Kā redzam, ģenerējot atskaiti, ir jārēķinās ar ierobežojumiem. Interaktīvas funkcijas scenārijs nedrīkst saturēt. Gadījumos, ja input netiks izmantota, Word-a datne saturēs arī uzzīmēto grafiku.

Vienkāršas atskaites veidošana HTML formātā notiek līdzīgi kā Word-ā. Šoreiz ir redzams arī grafiks, kurš pēc noklusējuma tiek glabāts *.png tipa datnē. Hiperteksta datnes rediģēšanai var izmantot MATLAB-a teksta redaktoru. *.html datne pēc noklusējuma tiek saglabāta failā \html\sin_plot.html. Veiksmīga atskaites ģenerācija ir notikusi tikai tādēļ, ka scenārijs sin_plot atšķirībā no iepriekšējā piemēra nesatur interaktīvas funkcijas.

Lai atskaite izveidotos, ir laiciņš jāpagaida. Ja trūkst pacietības, tad labāk ir izmantot kopēšanu un līmēšanu (sk. par klonēšanu).

Kļūda radās tādēļ, ka scenāŗijā ir izmantota funkcija input.

Momentfoto attēlo tikai fragmentus no scenārija teksta un zīmējuma. Paritinot ekrānu var apskatīt arī pārējo.

Zīm. 18. HTML atskaites fragmenta piemērs MATLAB Web Browser logā.

Page 27: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-27

Kā redzam, MATLAB videi ir pašai savs elementārs Web Browser, kuru var startēt asociatīvi, atverot *.html datnes no izvēlnes File → Open vai ar komandu open no komandu loga.

Iespēja Publish To ļauj veidot pavisam vienkāršas atskaites. Ja ir vajadzība pēc nopietnāka un pilnvērtīgāka produkta ar satura radītājiem un hipersaitēm, tad ir jāizmanto MATLAB atskaišu ģenerators (Report Generator).

MATLAB darba virsmas organizācija Tagad nedaudz pakavēsimies pie MATLAB vides darba virsmas organizācijas. Uz darba galda var izvietot vairākus logus, kas var būt noderīgi darbam:

• Komandu logs (Command Window) – galvenā "cīņas arēna", kurā var inicializēt lielāko daļu no darbībām,

• Aktivitāšu vēstures logs (Command History) – tajā tiek saglabātas visas darbības, kas tiek nodotas izpildīšanai no komandu loga,

• Aktīvais darba katalogs (Current Directory) – var apskatīt aktīvā darba kataloga datņu (failu) sarakstu,

• Darba atmiņa satura logs (Workspace) – tajā ir redzami visu darba atmiņā esošo objektu saraksts,

• Palīdzības logs (Help) – var atrast palīdzību praktiski par jebkuru informāciju MATLAB-a uzbūvi, iespējamajām darbībām utt.,

• Koda veiktspējas novērtēšanas logs (Profiler) – ļauj optimizēt izstrādājamā koda ātrdarbību.

Katrā no minētajiem logiem ir iespējams interaktīvs darbs. Iepriekš mēs konspektīvi iepazināmies ar logiem Command Window, Workspace un History.

Automātiskais vai manuālias logu izvietojums ir iespējams, izmantojot izvēlnes Desktop → Desktop Layout iespējas. Visoptimālākais ir noklu-sētais rīku izvietojums Default. Lietotājs var pats konfigurēt savu darba virsmu un pēc tam to saglabāt ar Save Layout. Lasītājs to var izstudēt patstāvīgi.

Zīm. 19. MATLAB vides darba virsmas konfigurācija.

Darbs ar failiem (datnēm) aktīvā darba kataloga logā (Current Directory) Lasītājs droši vien ir nopratis, ka autors dod priekšroku treniņam ar dažādu MATLAB-a komandu apguvi un ne tik daudz treniņam ar "pogu spaidīšanu". Pamatojums tam ir pieredze programmēšanā, taču nekādā gadījumā netiek noliegta iespēja interaktīvi darboties ar logu saskarsnēm.

Pieņemsism, ka ir izvēlēta noklusētā darba virsma. Tādā gadījumā darba virsmas kreisajā pusē ir pieejams arī logs Current Directory.

Page 28: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-28 ©Copyright Pičs (P. Misāns)

Zīm. 20. Current Directory logs.

Šajā apakšlogā ir redzams agrāk sastrādāto datņu nosaukumi līdzīgi kā MS Explorer logā. Tālākā darbošanās ir atkarīga no lietotāja vēlmēm un ir ļoti līdzīga darbam tajā pašā MS Explorer. Tā, piemēram, ar peles dubultklikšķi varam atvērt izvēlēto datni redaktorā. Turpretī, ja vērsim vaļā datni ar piedēkli *.mat, tad visi mainīgie nokļūs darba atmiņā un, protams, būs pieejami logā Workspace.

No specifiskām šī loga īpatnībām ir jāpiemin iespēja Open Outside MATLAB, kas ir aktivizējama, nospiežot peles labo taustiņu. Šī iespēja nozīmē to, ka visas "tīrās" MATLAB-a datnes tiks atvērtas, startējot vēl vienu MATLAB kopiju un asociēto programmu, bet pārējās datnes tiks atvērtas ar kādu no MS Windows programmām. Tā, piemēram, *.html datnei tiks izmantots nevis MATLAB Web Browser, bet gan Internet Explorer vai Mozilla.

Vēl viena interesanta iespēja ir saistīta ar Import Data. Tā ļauj datnes informāciju saglabāt darba atmiņas mainīgajā. Tā, piemēram, ja ir vēlēšanās, teksta datnes sineaf.m saturu (programmas tekstu) var saglabāt šūnu matricā – katru rindu savā šūnā. To veic arImport Wizard palīdzību.

Zīm. 21. Current Directory logā iespējamo darbību izvēlne (peles labais taustiņš).

Zīm. 22. Datu importa dialoga logs Import Wizard.

Page 29: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-29

Ja ar Import Wizard apstrādāsim *.mat datni, tad darba atmiņā varam ielādēt tikai vajadzīgos mainīgos un ignorēt nevajadzīgos.

Programmētājiem ļoti noderīga ir iespēja Source Cotrol. Lai tā darbotos, ir jābūt instalētai kādai no programmu koda kontroles sistēmām, piemēram MS WinSource. Šī sistēma ļauj ērti darboties ar daudzām datņu versijām.

Vesela rindu programmētājam noderīgu lietu var atrast izvēlnē Directory Reports. Tā, piemēram, M-Lint Code Check Report palīdz atrast potenciālās kļūdas programmas kodā un uzlabot to. Savukārt, File Comparison Report ļauj salīdzināt divus failus un noskaidrot atšķirības. Detalizētāk ar pārējām Current Directory iespējām lasītājs var iepazīties, darbojoties patstāvīgi.

Zīm. 23. Directory Reports izvēlne.

Palīdzības logu Help šeit neapskatīsim, jo darbošanās tajā ir analoģiska jebkurai citai palīdzības sistēmai. Atzīmēsim tikai, ka no izvēlnes Go → Evaluate Selection ir iespējams veikt Help-a vidē iezīmēto piemēru rindiņu izpildi, izvairoties no kopēšanas.

Saruna par Profiler logu ir jāatliek uz brīdi, kad runāsim nopietnāk par programmu koda izpildes laika optimizāciju.

Dažas lietas, kas atvieglo darbu MATLAB-a vidē. Lai darbiņi veiktos labāk, var izmantot veselu rindu komandu (funkciju), kas lielā mērā atgādina UNIX un DOS-a komandas. Nekādā ziņā tas nav arhaisms, bet labs papildinājums, lai lietas sekmētos. Paralēli tekošajiem darbiņiem, ik pa brīdim vari ielūkoties šajā nodaļā un piepulcēt saviem palīgiem vēl kādu jaunu un čaklu rūķīti. Atceries, ka rūķi ir nenogurdināmi. Tabula 1. Funkcijas darbam komandu logā.

FUNKCIJAS DARBAM VIDĒ

help on-line palīdzība (konspektīvs funkcijas (scenārija) apraksts) helpwin klasificēts un konspektīvs funkciju apraksts doc dokumentācija *.html formātā

dir apskatīt aktīvā kataloga saturu ls apskatīt aktīvā kataloga saturu cd aktīvā kataloga nosaukums, kataloga nomaiņa type ASCII teksta (pēc noklusēšanas *.m) faila satura izvads uz ekrāna whos darba atmiņas (Workspace) mainīgo saraksts (pilnā forma) ar informāciju

par objekta tipu un izmēriem clear darba atmiņas attīrīšana

Page 30: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-30 ©Copyright Pičs (P. Misāns)

FUNKCIJAS DARBAM VIDĒ

delete faila dzēšana, grafiskā objekta un tā atvašu dzēšana diary MATLAB-a seansa pilna protokolēšana ! operētājsistēmas komandu izsaukums system operētājsistēmas komandu izsaukums clc komandu loga attīrīšana quit darba izbeigšana ar MATLAB-a vidi edit teksta redaktora-skaņotāja starts open faila vai mainīgā atvēršana, asociētās programmas izvēle ir atkarīga no

faila formāta notebook MS Word-a M-book starts version MATLAB-a versijas izvads komandu logā ver Visu MATLAB-a līdzekļu kopu versiju izvads komandu logā

!!! Šajā tabulā ir uzrādīta tikai maza daļa no komandām (funkcijām), kuras var izmantot darba vides organizēšanai un pārraudzībai.

Darba izbeigšana ar MATLAB. Korekti to var izdarīt ar komandu quit, exit vai arī no izvēlnes File→Exit MATLAB (arī ar karsto taustiņu Ctrl+Q). Aizverot MATLAB logu klasiskā veidā (ar klikšķi uz stūra krustiņa) reizēm var parādīties problēmas ar korektu darba pabeigšanu MS Windows vidē.

Ja vēlies darbu pabeigt ar "mūziku" – Tevis definētām darbībām, tad vari savas vēlmes ieprogrammēt failā finish.m, ko vislabāk ir izvietot aktīvajā darba katalogā.

Iepriekšējo komandu loga rindu izsaukšana. Kā jau iepriekš minēts, ar bultiņas ↑ palīdzību var piekļūt vairākiem desmitiem seansa laikā iepriekš ievadīto rindiņu. Sākot ar 6.-o versiju varam izsaukt arī iepriekšējo seansu rindas, ja tās ir saglabājušās Command History logā. Bez tam, uzrakstot dažus sākuma burtus no kādas iepriekš izpildītas rindas, ar bultiņas palīdzību mēs varam tikt pie pilnas rindiņas, speciāli neritinot visu lērumu rindu, kas ir izpildītas pēc meklējamās rindiņas.

Page 31: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-31

MATLAB 7.x versijā ir iespēja ceļot pa komandu logu ar bultiņu palīdzību, ja ir uzstādīta iespēja:

Preferences →

Command History →

Accessibility → Arrow keys ...

Iezīmēt(o)ās darbīb(u)as, nospiežot Enter var izpildīt. Autoram šī iespēja nelikās pārāk ērta, bet lasītajam tā noteikti ir jāizmēģina.

Zīm. 24. Dialoga logs Preferences.

Tabulācijas taustiņa (Tab) izmantošana. Tā ir aizgūta no UNIX komandu loga. Ja Jūs kādam objektam zinat nosaukumu, tad, nospiežot Tab taustiņu, MATLAB palīdzēs restaurēt pilnu nosaukumu. Ja objekti ir ar vienādiem sākuma simboliem, tad ir jāuzraksta nosaukums līdz pirmajam atšķirīgajam simbolam. Tā, piemēram, ja es vēlos nokļūt katalogā c:\mani_darbi_10, tad pietiek uzrakstīt:

» cd c:\man

lai sistēma pēc Tab nospiešanas restaurētu pārējo:

» cd c:\mani_darbi_10\

Līdzīgi var rīkoties, ja ir vajadzība iegūt kāda objekta atribūtu. Ja Tu gribi iegūt kādas īpašības pilnu nosaukumu izvēlētajam grafiskajam objektam, tad ir jāzina tikai izvēlētās īpašības nosaukuma pirmie burti. Piemēram, pietiek tikai uzrakstīt:

» get(0,'Co)

un MATLAB paveiks pārējo, lai noskaidrotu komandu loga izmērus:

!!! Kursoram ir jābūt tai vietā, kurā vajag turpinājumu

» get(0,'CommandWindowSize')

Dažreiz, lai dabūtu pilnu kāda objekta vai atribūta nosaukumu, Tab taustiņš ir jālieto vairākas reizes pamīšus ar simbolu taustiņiem.

Ja Tab taustiņu iemācās prasmīgi izmantot, tas stipri atvieglo un paātrina darbu, taču jāpatur prātā, ka minētā iespēja darbojas tikai tad, ja ir uzstādīta iespēja:

Preferences → Command Window → Keyboard & Indenting →

Tab key → Enable tab completions

Funkcijas help izmantošana. Ja ir vajadzība pēc kādas funkcijas detalizētāka apraksta, tad ir jāizmanto komanda helpdesk (ver. 5.x) vai doc (ver. >6.x). Ja vien palīdzības sistēma ir instalēta, ar to mēs varam iegūt informāciju angliski par jebkuru MATLAB-a lietu ar visām hipersaitēm uz citām MATLAB-a lietām. Vēl detalizētāku informāciju var iegūt, lasot lietotāja rokasgrāmatas (User's Guides), kas ir brīvi pieejamas *.pdf formātā.

Page 32: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-32 ©Copyright Pičs (P. Misāns)

Vairumā gadījumu var iztikt ar on-line palīdzību. Vienas pašas funkcijas help izsaukums parāda visas iespējamās sadaļas (topics), par kurām lietotājs var iegūt on-line palīdzību angliski.

» help HELP topics:

matlab\general - General purpose commands.

matlab\ops - Operators and special characters.

. . .

simulink\simulink - Simulink

. . .

toolbox\symbolic - Symbolic Math Toolbox.

Redzamo sadaļu skaits ir atkarīgs no instalēto komponenšu skaita. Piemērā ir uzrādītas tikai dažas sadaļas.

Ja vēlamies ātri uzzināt, kādas funkcijas ir atrodamas attiecīgajā sadaļā, tad kā parametru komandai help uzrādam sadaļas nosaukumu, piemēram:

» help symbolic . . .

Calculus.

diff - Differentiate.

Te ir nodzēsta informācija par vēl aptuveni 150 simboliskās (analītiskās) matemātikas funkcijām.

int - Integrate.

limit - Limit.

. . .

Uzdodot konkrētās funkcijas vai cita MATLAB-a atribūta nosaukumu, iegūstam pavisam konkrētu informāciju par to:

» help char/diff DIFF Alternative entry to the symbolic differentiation function.

DIFF(F,...) is the same as diff(sym(F),...).

See also SYM/DIFF.

!!! Sākot ar 5.-o versiju, MATLAB ir objektorientēta sistēma, tādēļ funkcija dažādus objektus var apstrādāt dažādi un arī apraksti vienai un tai pašai funkcijai var būt vairāki.

Šajā piemērā mēs palūdzām palīdzību tikai tādai funkcijas diff versijai, kura strādā ar teksta veidā uzdotu formulu. Tā, piemēram, ML 7.x versijā ir iespējami pavisam 9 dažādi funkcijas diff pielietojumi un līdz ar to arī apraksti. Lai redzētu atsauces uz visiem iespējamajiem aprakstiem, help rindā pietiek uzdot tikai funkcijas nosaukumu. Atrodi pats visus iespējamos diff aprakstus!

Page 33: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-33

Funkcijas whos izmantošana. Šī funkcija ir īpaši noderīga tajos gadījumos, kad ir kādas problēmas ar objektu nesaderību, Piemēram, Jūs cenšaties uzzīmēt grafiku, bet vektori ir dažāda izmēra:

» plot(t,y) ??? Error using ==> plot

Vectors must be the same lengths.

Lai noskaidrotu vektoru izmērus, var izmantot funkciju size, bet ja ir vajadzība redzēt vienlaicīgi vairāku vektoru izmērus, ērtāk ir lietot whos.

» whos t y % s = whos('t','y');

Name Size Bytes Class

Šoreiz mēs palūdzām informāciju tikai par diviem mainīgajiem (t,y). Pārējie netiek rādīti.

t 1x101 808 double array

y 1x50 400 double array

Grand total is 151 elements using 1208 bytes

!!! Funkcijas izsaukums ar mainīgo sarakstu nedarbojas agrīnās MATLAB-a versijās.

!!! Jāatceras, ka whos kaut ko rādīs, ja ir izpildītas darbības komandu logā vai arī ir darbināts scenārijs. Pēc funkcijas izsaukuma darba atmiņā nepaliek funkcijas lokālo mainīgo saturs. Informāciju par lokālajiem mainīgajiem var uzzināt lietojot skaņotāju (Debugger) vai arī izsaucot whos no funkcijas iekšienes.

Protams, daudz operatīvāk ''pliku" informāciju par mainīgo parametriem var iegūt no Workspace loga. Taču whos funkcijas priekšrocība ir iespējā to izmantot programmas kodā un saglabāt informāciju par mainīgajiem struktūrā:

» s = whos('t','y');

Funkcijas open izmantošana. Atkarībā no tā, kāda tipa objektu mēs gribam aplūkot vai labot, tiek izsaukta atbilstoši asociēta programma. Tā, piemēram, ja mēs vēlamies aplūkot mainīgo A, kas atrodas darba atmiņā, tad ar funkcijas izsaukumu:

» open('A')

tiks startēts Workspace Browser (5.x) vai Array Editor (>6.x).

Līdzīgi var atvērt arī M-failu. Šajā gadījumā tiks startēts Editor-Debugger. Cita tipa failu vai objektu gadījumā tiks izsauktas atbilstoši asociētas programmas. Izmēģini pat(i)s!

Tās vietā tikpat sekmīgi var izmantot interesējošā objekta iezīmēšanu un konteksta izvēlnes (nospiežot peles labo taustiņu), iespēju Open Selection. Atceries, ka, ja gribi redzēt mainīgo vārdus, tad izmanto whos, bet ja aktīvā kataloga failus, tad dir vai ls.

Page 34: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-34 ©Copyright Pičs (P. Misāns)

Karstie taustiņi rediģēšanai komandu logā. Tie var lieti noderēt un atvieglot darbu, ja ir vajadzība strādāt ātri. Tabula 2. Komandu loga karstie taustiņi.

Taustiņš Kombinācija Darbība

↑ Ctrl+P Izsaukt iepriekšējo rindiņu

↓ Ctrl+N Izsaukt nākošo rindiņu

← Ctrl+B Pārvietoties par vienu simbolu atpakaļ

→ Ctrl+F Pārvietoties par vienu simbolu uz priekšu

Ctrl+→ Pārvietoties par vienu vārdu pa labi

Ctrl+← Pārvietoties par vienu vārdu pa kreisiHome Ctrl+A Pārvietoties uz komandu rindas sākumuEnd Ctrl+E Pārvietoties uz komandu rindas beigām

Ctrl+Home Pārvietoties uz komandu loga sākumuCtrl+End Pārvietoties uz komandu loga beigām

Esc Ctrl+U Nodzēst komandu rinduDelete Ctrl+D Nodzēst simbolu pēc kursora

Backspace Ctrl+H Nodzēst simbolu pirms kursora Ctrl+K Nodzēst saturu no kursora līdz komandu rindas beigām

Shift+Home Iezīmēt tekstu līdz rindas sākumamShift+End Iezīmēt tekstu līdz rindas beigām

Uzrādītās kobinācijas darbosies kā solīts, ja būs uzstādīts:

Preferences → Command Window → Keyboard & Indenting → Command line key bindings → Emacs (...

Galva nav telefona grāmata – tā ir dzirdēts sakām. Ko atcerēties un ko neatcerēties? Smags jautājums. Šķiet, ka tas bija kādā Hemingveja stāstā. Kāds medicīnas skolu beidzis zēns bija pārliecinās, ka pietiek tikai paņemt feldšera rokasgrāmatu, jāatrod vajadzīgā vaina un jārīkojas pēc priekšrakstiem. Reiz viens dullais sevi izkastrēja. Gudrītis nu ķēra pēc rokasgrāmatas – bet minētais gadījums tur nebija aprakstīts ... Dullais noasiņoja unnomira ...

Galvenie jēdzieni.

Kas ir objektorientēta programmēšanas sistēma? Korekta atbilde uz šo jautājumu varētu būt pagara, taču intuitīvu priekšstatu par to var gūt katrs. Objektorientētas programmēšanas sistēmas darbojas ar objektiem. Objektus rada (definē) ar t.s. konstruktoriem. Darbības ar objektiem realizē t.s. metodes. Aplūkosim dažādus objektus, kuru starpā ir realizēta metode add (summēt): Tabula 3. Objektorientētu operāciju piemēri.

Page 35: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-35

Objektu summēšana Sintakse programmā (rezultāts) Objekta (rezultāta) tips

2 add 3 c c = 2 + 3 (c == 5) reāla konstante

a add b c c = a + b (c==a+b) izteiksme, mainīgais

(1+2j) add (1+j) c c = (1+2j)+(1+j)

(c == 2+3j) kompleksa skaitļa

konstante

[1, 2, 3] add [4, 5, 6] c c = [1, 2, 3] + [4, 5, 6]

(c == [5, 7, 9]) reālu skaitļu matrica

(rinda-vektors)

g add t c c = Konsole + Jumts

(c == ) būvniecības elementi,

māja

c = Juris + Ilze)

(c = [Aldis, Zane, Paulis] ) cilvēks

Lasītājam būtu jāpatur prātā, ka darbības tiek veiktas ar viena tipa objektiem. Jāatceras arī, ka katram objektam ir virkne īpašību. Matricai, piemēram, ir tās izmēri un elementu vērtības. Reālu skaitli var uzskatīt par kompleksa skaitļa specgadījumu, kad imaginārā daļa ir vienāda ar nulli utt. Tīrus datu objektus mēdz saukt arī par datu klasēm. Tabulas pēdējās divās rindās redzamie objekti noteikti nav tipiskākie datu klašu pārstāvji. Tie varētu būt drīzāk grafiskie objekti un/vai funkcionālie objekti.

Vajadzētu iegaumēt, ka muļķīgi būtu prasīt no kādas MATLAB-a funkcijas, lai tā mēģinātu saskaitīt, piemēram, attēlu (grafisks objekts) ar skaitli utt.

MATLAB-a datu klases MATLAB ir tipiska objektorientēta sistēma no paketes dzimšanas brīža. Pamatobjekts, ar kuru operē programma, ir taisnstūra k o m p l e k s a m a t r i c a ar double precizitāti (analoģiska C valodas double precizitātei). Kā zināms, tas ir pamatobjekts arī gandrīz visos ar elektriskajām un citām fizikālajām parādībām saistītajos aprēķinos. Kā speciāli gadījumi ir reālu skaitļu matricas, vektori - r i n d a s, vektori-k o l o n n a s, s k a l ā r i un t e k s t a m a s ī v i.

Minētie objekti nebūt neizsmeļ visu iespējamo pamatobjektu sarakstu. Sākot ar MATLAB 5, tiek izmantotas papildus vēl tādas datu klases kā šūnu matricas (cell array), struktūras (structure) un lietotāja definētas datu klases (user classes). Sākot ar 6.-o versiju ir parādījušies Java klases, loģiskie masīvi (logical). Būtisks papildinājums ir single precizitātes masīvi (precizitāte analoģiska C valodas single), kas ir saistīts ar šīs precizitātes skaitļu izmantošanu mikrokontrolieros un signālprocesoros ar peldošā punkta aritmētiku. Bez tam, lai ātri varētu strādāt ar attēliem un citiem pielietojumiem, ir ieviesti arī veselā tipa skaitļi ar dažādu bitu skaitu (kā int un unsigned int C valodā).

Page 36: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-36 ©Copyright Pičs (P. Misāns)

Zīm. 25. MATLAB-a datu klašu hierarhija (aizguvums no MATLAB Guide)

Protams, datu klašu bagātība rada sarežģījumus lietotājam un MATLAB vairs nav tik "beisicisks" kā savas attīstības pirmsākumos, bet ar to diemžēl jāsamierinās, ja ir vēlme izbaudīt visus šīs vides jaukumus. Protams, pamatklase, kas saistīta ar visbiežāko pielietojumu ir double. Starp citu, funkcija, ar kuras palīdzību var noskaidrot objekta tipu, ir class:

» class(y) ans = double

Izteiksmes un mainīgie. MATLAB valodas pamats ir izteiksmes, kas līdzīgas izteiksmēm citās programmēšanas valodās. Tradicionālais izteiksmju pieraksta veids ir formā:

mainīgais = izteiksme ;

vai arī :

izteiksme

Izteiksmes sastāv no operatoriem un citiem speciālajiem simboliem, no funkcijām un mainīgo nosaukumiem. Šo izteiksmju izskaitļošana dod matricu, kas tiek attēlota uz ekrāna (! ja vien pēc izteiksmes neseko ";") un tiek piešķirta mainīgajam tālākai izmantošanai. Ja mainīgā nosaukums un "=" netiek lietoti, tad tiek automātiski izveidots mainīgais ar nosaukumu "ans". Piemēram, ievadot :

1/3

iegūstam :

ans =

0.3333

Page 37: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-37

Ja izteiksme ir tik gara, ka tā neievietojas vienā rindā, tad tās turpinājumu var veidot, nobeidzot rindu ar "..." :

s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + …

1/7 - 1/8 + 1/9 - 1/10 + 1/11 -1/12;

Tukšuma zīmes šeit tiek lietotas tikai lasāmības uzlabošanai.

Mainīgo un funkciju nosaukumiem ir jāsākas ar burtu un tas var saturēt burtus, ciparus un "_" .

Pareizi mainīgo nosaukumu piemēri Nepareizi mainīgo nosaukumi A, Saules_masa, b123, x, y 23a, a&b, W$, x y

Mainīgā nosaukums var saturēt līdz 28 simboliem. Ja mainīgā nosaukuma garums pārsniedz šo ierobežojumu, pāri palikušie simboli tiek ignorēti. MATLAB ir jūtīgs pret burtu reģistru, piemēram mainīgais "A" nav viens un tas pats, kas "a". Iebūvēto funkciju (built-in functions) (tām nav pieejami programmu kodi) nosaukumi ir jālieto ar mazajiem burtiem, bet izsaucot pārējās funkcijas (paša MATLAB un lietotāja funkcijas) burtu reģistru var ignorēt (tāpat kā DOS-ā !). Reģistra ignorēšana neattiecas uz mainīgo nosaukumiem.

MATLAB-ā ir pieejami vairāki speciālie mainīgie, kas ir uzskaitīti tabulā: Tabula 4. Speciālie mainīgie

Mainīgais Vērtība

ans Noklusētais mainīgais, kas tiek izmantots rezultāta glabāšanai

pi Skaitlis π

eps Skaitļu relatīvās mazākās atšķirības lielums. Ja to pieskaita, piemēram, pie 1, tad pie rezultātu salīdzināšanas ar 1, dators atšķir, ka pirmais ir lielāks par 1. Ja turpretī izmantosiet minētajās darbībās ko mazāku par eps, tad atšķiršana nenotiks (Pārliecinies par to pats !). Konstantes lielums ir atkarīgs no lietojamā datu tipa.

Inf Bezgalība (infinity), piem. 1/0

NaN Ne-skaitlis (Not-a-Number). Matemātiskā nenoteiktība, piem. 0/0

i un j i = j = √-1, imaginārā vienība

realmin Mazākais izmantojamais pozitīvais reālais skaitlis

realmax Lielākais izmantojamais pozitīvais reālais skaitlis

Neslinko un apskaties šo mainīgo saturu. Mainīgo satura nomaiņa gan nebūtu vēlama.

Nedaudz pakavēsimies pie kļūdas eps. Tā parāda distanci (attālumu) līdz tuvākajam skaitlim, kāds iespējams izvēloties atbilstošo datu tipu. Šī kļūda palielinās,

Page 38: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-38 ©Copyright Pičs (P. Misāns)

palielinoties skaitļa modulim, bet eps dalījums ar skaitļa moduli ir nemainīgs, ja vien skaitlis ir divnieka pakāpe.

» eps(double(1)) ans = 2.2204e-016 » eps(double(2)) ans = 4.4409e-016 » eps(double(-8))/abs(-8) ans = 2.2204e-016

» eps(single(1)) ans = 1.1921e-007 » eps(single(2)) ans = 2.3842e-007 » eps(single(-8))/abs(-8) ans = 1.1921e-007

Konstantes Skaitļu pierakstam izmanto klasisko, programmēšanas valodās pieņemto, decimālo skaitļu pierakstu ar neobligātu decimālo punktu un desmitnieka pakāpi, kurai desmitnieka vietā izmanto burtu e (Exponent). Šeit ir tikai daži piemēri:

3 -99 0.00001

9.6397238 1.60210E-20 6.02252e23

Datoros, kuros tiek lietots t.s. IEEE-aritmētikas standarts, relatīvo precizitāti nosaka speciāla konstante eps un tā šeit ir aptuveni 16 decimālās zīmes. Skaitļu diapazons ir aptuveni no 2e-308 līdz 2e+308. Ja vēlies, vari šo konstanšu lielumus uzzināt pavisam precīzi, uzdodot atbilstošā speciālā mainīgā nosaukumu (sk. Tabula 4).

Fona piemērs Turpmāk dažādu MATLAB pamatlietu demonstrācijai tiks izmantota sekojoša elektriska shēma:

R1

R3

R2 R5

R4 R6

R7

1

E3

E2

I1k I2k I3k

E

Zīm. 26. Trīskontūru rezistīvas elektriskas shēmas piemērs, R1-R7=1-7 Ω.

Konstantes piešķiršana mainīgajam Izmantosim Zīm. 26 aplūkoto shēmu. Konstanšu piešķiršana mainīgajiem MATLAB-ā tiek veikta līdzīgi kā citās programmēšanas valodās. Atbilstoši mūsu piemēran varam definēt pretestību lielumus, komandu logā vai scenārija datnē, uzrakstot:

» R1=1; R2=2; R3=3; R4=4; R5=5; R6=6; R7=7;

Page 39: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-39

No piemēra redzam, ka vienā teksta rindā varam izvietot pēc patikas daudz izteiksmju, atdalot tās ar semikolonu vai komatu.

Skaitļu izvada formāts MATLAB-a vidē visi aprēķini pēc noklusējuma tiek veikti ar t.s. dubulto precizitāti (double). Tas nozīmē, ka skaitļa precizitāte tiek definēta ar aptuveni 16 decimālajām zīmēm. Ja ir vajadzība, lietotājs var apskatīt 15 no šīm zīmes. Pēc noklusēšanas uz ekrāna tiek izvadītas tikai 4 decimālās zīmes (format('short')) aiz komata, kas no inženiera viedokļa pārsvarā ir pietiekami. Veselu skaitļu matricai mēs saņemam veselu skaitļu izvadu, ja vien lielākā veselā skaitļa izmērs nepārsniedz 9 decimālās zīmes.

Ja lietotājs vēlas redzēt skaitli precīzākā izskatā, var izmantot funkciju (vai komandu) format kas palīdz izvēlēties piemērotāko no standartveida izvadiem. Uzstādītais skaitļa izvada formāts paliek spēkā līdz nākošajam funkcijas vai komandas format izsaukumam . Šo funkciju var ievadīt tieši no komantu loga, vai arī iebūvēt scenārijos un funkcijās, kas ļauj mainīt izvadāmo skaitļu formātu tieši programmu izpildes gaitā. Formātu var pārslēgt arī no MATLAB-a izvēlnes File Preferences General Numeric Format . Ja piedāvātie standartveida izvadi neapmierina, tad ir jāizmanto funkcija sprintf , kas pārveido skatļus tekstā saskaņā ar uzdotajām formātu specifikācijām (ļoti līdzīgi kā valodā C).

Nereti (starp citu, pat diezgan vienkāršos aprēķinos), skaitļu dubultā precizitāte aprēķinos var būt nepietiekama. Tad ir jāizmanto mainīgās precizitātes aritmētika (VPA - Variable Precision Arithmetic). Tā ir pieejama, ja ir instalēta simboliskās matemātikas līdzekļu kopa (Symbolic Toolbox) vai arī MATLAB-a studentu versija. Uzreiz jāatzīmē, ka aprēķini šajā gadījumā notiek nesalīdzināmi lēnāk, nekā aprēķini ar dubulto precizitāti.

Skaitļu izvada formātu piemēri Neslinko, bet izmēģini visus iespējamos standartveida formatus pats. Šeit ir parādīti tikai daži. Pirms darba sākuma uzstādi format('compact') - tas izvada laikā novāc visas liekās tukšās rindas un padara komandu logu ietilpīgāku.

» format('long') » pi ans = 3.14159265358979

» format('rat') » pi ans = 355/113

» format long g; » A=[1.23, 0.00001] A = 1.23 1e-005

» format('short') » A=[1.23, 0.00001] A = 1.2300 0.0000

Visekonomiskākais, protams, ir noklusētais izvada formāts short, taču, kā redzams piemērā zīmīgais cipars tiek pazaudēts un var sanākt ziepes, ja šī skaitļa ekrāna kopiju izmantosim aprēķiniem.

Ja lietotājs grib iegūt pilnīgu kontroli pār izvadāmā skaitļa izskatu, tad ir jāizmanto formatētu skaitļu konversijas funkcija sprintf:

» disp(sprintf('Pretestîbu nominâli: R1=%g\tR7=%3.1f',R1,R7)) Pretestîbu nominâli: R1=1 R7=7.0

Funkcija pārveido skaitli par tekstu saskaņā ar formāta specifikāciju, kura tiek definēta ar "%", bet metasimbols "\t" – tekstā iestarpina tabulācija. Tiem lasītājiem, kuri ir

Page 40: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-40 ©Copyright Pičs (P. Misāns)

pazīstami ar C valodas funkciju printf, nebūs problēmu izmantot iepriekš minēto konversijas funkciju.

Ja lasītājs ir Brauna grāmatas "Da Vinči kods" cienītājs, tad īstā reize ir palūkoties uz zelta šķēlumu ar 50 zīmēm:

» vpa(sym('(1+sqrt(5))/2'), 50) ans = 1.6180339887498948482045868343656381177203091798058

Uzreiz jāpiebilst, ka tas, kas ir redzams uz ekrāna nav skaitlis, bet gan simboliskās matemātikas izteiksme sym (faktiski formula!), kas pierakstīta kā ciparu virkne.

» class(vpa(sym('(1+sqrt(5))/2'), 50)) ans = sym

Darbošanās ar formulām ir salīdzinoši desmitiem reižu lēnāka, nekā ar skaitļiem.

Atslēgas vārdi ("Nāc iekšā ! - viņa teica, - būsi aizvējā …" (dziesma no BetBet repertuāra)) Mainīgo un konstanšu nosaukumos nevajadzētu izmantot operatoru, apritē esošo funkciju, scenāriju, speciālo mainīgo un citus atslēgu vārdus. Bez šaubām, iesācējs nevar zināt, kuri bez jau minētajiem speciālajiem mainīgajiem ir atslēgu vārdi. Taču par šo nezināšanu nav vērts raizēties. Vai lietotāja izvēlētajam vārdam ir kāda misija, vai nav, var noskaidrot komandu rindā ievadot burvju vārdiņu help un atbilstošo testējamo vārdu. Ja MATLAB par testējamo vārdu nekādas tuvākas ziņas nesniegs, tad varat droši šo vārdiņu izmantot mainīgā nosaukumā.

Tā, piemēram, ja aiz pārpratuma mēģināsi piešķirt konstanti mainīgajam ar operatora for atslēgas vārdu, tad tas tik lēti vis neizdosies:

» for=1.5 ??? for= | Missing index_name in "for" loop. Usage is: for index_name = expression Ja vēlies taupīt laiku, tad mainīgā testēšanu var veikt pavisam vienkārši:

» help pitch pitch.m not found.

Kāda necieņa! - MathWorks nav parūpējies par to, lai iemūžinātu piķi (arī citas mantas) un reizē arī Piču …

Turpretī, ja atslēgas vārds tiek jau izmantots, tad paziņojums būs lakonisks un informatīvs:

» help sin SIN Sine. SIN(X) is the sine of the elements of X. See also asin, sind. Uzrakstot šādu komandrindu,

saņemsi nedaudz atšķirīgu aprakstu, jo minētā funkcija tiek izmantota ne tikai skaitliskajiem aprēķiniem …

Page 41: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-41

Overloaded functions or methods (ones with the same name in other directories) help sym/sin.m

Starp citu, komandas help sniegtā lakoniskā informācija pārsvarā gadījumu ir pietiekama, lai varētu sekmīgi strādāt. Var, protams, atslēgas vārdu ierakstīt arī Help sistēmas meklētājā Search, bet tas ir lēni un nepraktiski.

Vēl viens paņēmiens, kā var testēt atslēgas vārdus (funkciju eksistences pārbaude), ir izmantot funkciju which:

» which('sin') C:\DemoMATLAB701\toolbox\matlab\elfun\sin.m

Matricu (masīvu) ievads. Pastāv sekojošas matricu veidošanas iespējas :

♦ tiešs ievads no klaviatūras dialoga laikā;

♦ matricas tiek formētas ar operatoru un funkciju palīdzību;

♦ matricas tiek veidotas M-failos;

♦ tiek ievadītas no ārējiem failiem.

MATLAB valodā, atšķirībā no citām programmēšanas valodām, nav operatoru, kuri nosaka matricas tipu vai izmērus. Atmiņa matricām tiek izdalīta automātiski, bet ievadāmo matricu lielums ir atkarīgs tikai no datora atmiņas lieluma. Tiesa, pastāv datu tipu konversijas funkcijas, ar kuru palīdzību no viena datu tipa var iegūt citu datu tipu. Noklusētais datu vienmēr ir double, bet apostrofos ieslēgtais – char.

Kā jau minēts, matricu dimensijas var būt jebkura skaita, tādēļ korektāk būtu runāt nevis par matricām, bet gan par masīviem. Terminoloģiski mēs lietosim vārdu matrica attiecībā uz 2-dimensiju taisnstūra datu objektu. Pagaidām neaplūkosim šūnu matricas, kas ir pieejamas, sākot ar MATLAB 5.

Matricas pieraksts (ievadot no klaviatūras vai M-faila) satur ierobežojošas kvadrātiekavas "[", "]" starp kurām tiek izvietoti matricas elementi. Rindas tiek atdalītas ar ";", bet atsevišķie elementi ar tukšumiem vai/un ",". Ja matricas elementu vietā tiek lietotas izteiksmes, tad drošāk atdalošā simbola vietā lietot komatu",".

Agrāk aplūkotās shēmas pretestību matricu varam ievadīt sekojoši:

» R = [6 -2 0;-2,11,-5;0, -5, 18]; vai arī daudz uzskatāmāk, bet neekonomiskāk no aizņemto rindu skaita viedokļa:

» R = [6 -2 0; -2 11 -5; 0 -5 18];

Semikols atdala vienu matricas rindu no otras, …

Matricu elementu vietā var būt jebkuras MATLAB-a izteiksmes. Konkrētajā gadījumā, no programmēšanas viedokļa, pretestību matricas aizpildīšanai daudz saprātīgāk (Padomā, kādēļ?) ir izmantot jau agrāk ievadītos pretestību izsakošus mainīgos R1,R2, …,R7:

Page 42: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-42 ©Copyright Pičs (P. Misāns)

» R=[R1+R2+R3, -R2, 0; -R2, R2+R4+R5, -R5; 0, -R5, R5+R6+R7];

Visos trijos gadījumos, pēc R satura pieprasījuma no komantu loga vai ar Array Editor, iegūstam vienu un to pašu rezultātu:

» R R = 6 -2 0 -2 11 -5 0 -5 18

Zīm. 27. Matricas R saturs Array Editor logā.

Pievērsiet uzmanību tam, ka aplūkotajā piemērā semikolonam ";" ir divējāda nozīme. Vienā gadījumā tas atdala matricas rindas, bet citā kalpo par izteiksmes beigu pazīmi. Aizvācot to no izteiksmes beigām, izteiksmes izpildes laikā mēs iegūstam automātisku rezultāta izvadu uz ekrānu. Ģeniāli vienkāršs ātrs skaņošanas un kontroles līdzeklis.

Vektora ievads. Tas principiāli neatšķiras no matricas ievada. Piemērā pievērsiet uzmanību transponēšanas operācijai.

Atsevišķu iepriekš aplūkotās trīskontūru shēmas rezistoru pretestību vērtības mēs varam glabāt, ja vēlamies vienrindas matricā (vektor-rinda):

» r = [1 2 3 4 5 6 7];

Šādai koncepcijai, salīdzinot ar iepriekšējo, katras pretestības saglabāšanu atsevišķā mainīgajā, ir savi plusi un savi mīnusi. Par to pagaidām nediskutēsim.

Ļoti bieži mums ir nepieciešamība ievadīt vektor-kolonnu. To var izdarīt trejādi:

» E = [1; -2; -3] E = 1 -2 -3

» E = [1 -2 -3];

» E = [1 -2 -3]' E = 1 -2 -3

… bet šeit pabeidz izteiksmi

Tā ir t r a n s p o n ē š a n a ! (Šis simbols ir uz viena taustiņa ar

pēdiņām ")

Pirmajā piemērā semikolons tiek izmantots kā matricas rindu atdalītājs. Otrajā piemērā netiek rindu atdalīšanai netiek izmantoti semikoloni. Ja matricas katru rindu pieraksta savā rindā, tad semikolons nav nepieciešams, taču labāk jau to tur savlaicīgi ielikt. Var gadīties, ka pēc kāda laika Jūs vēlēsities programmas gabalu "saspiest" un tad semikolona trūkums var Jūs nevajadzīgi aizkavēt.

Trešajā piemērā mēs atkal ieguvām stabiņveida vektoru, jo izteiksmi beigās papildinājām ar apostrofu "'", bet tas savukārt nozīmē transponēšanu. Matricām tas nozīmētu atbilstošo rindu elementu pārvēršanos par kolonnu elementiem.

Page 43: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-43

Vektoru ģenerācija ar kolona ":" operāciju. Kolona zīmei MATLAB-ā ir vismaz trejāda nozīme. Šeit aplūkosim tikai vienu tās iespējamo pielietojumu. Par pārējiem pielietojumiem parunāsim vēlāk.

Ļoti bieži MATLAB-ā tiek lietoti vektori, kuru elementi ir aritmētiskās progresijas locekļi, t. i. vērtības atšķiras par konstantu soli. Šādu vektoru var uzģenerēt uzrādot sākuma vērtību, soli un beigu vērtību, atdalot tos ar kolonu ":".

» r = 1:1:7 r = 1 2 3 4 5 6 7

Ja solis ir +1, tad to var nerakstīt:

» r = 1:7 r = 1 2 3 4 5 6 7

Saistībā ar konkrēto shēmas piemēru ir jāsaka, protams, ka tā ir nejaušība, ka pretestībām ir šādas vērtības. Taču daudzos pielietojumos var būt noderīgi, piemēram, pāra un/vai nepāra skaiļu vektori:

» odd_nums = 1:2:9 odd_nums = 1 3 5 7 9

Tipiska ir laika vektoru ģenerācija. Šeit mēs ievadīsim laika t vektoru ar soli 10 ms un beigu vērtību 2π:

» t=0:10e-3:2*pi;

Ja vēlaties nedaudz uzjautrināties, tad paeksperimentējiet, uzstādot soli 1e-4 un novācot semikolonu izteiksmes beigās.

Kā Jūs jau nopratāt, izteiksmju elementu vietā var stāvēt gan konstantes, gan mainīgie gan arī izteiksmes.

Aritmētiskās izteiksmes Ja izteiksmēs ir tikai skalāri mainīgie un konstantes, tad to veidošanā nekādu problēmu nepastāv, ja vien esat rakstījuši izteiksmes kādā no eksistējošām programmēšanas valodām. Jāatzīmē, ka operācija "\" dala, šai zīmei labā pusē stāvošo operandu ar kreisā pusē stāvošo operandu. Darbībās ar matricām pie zināmiem nosacījumiem šī operācija veic lineāru vienādojumu sistēmas risināšanu ar Gausa izslēgšanas metodi. Izteiksmju veidošanai tiek plaši lietotas iekavas "(" un ")". Lielāko daļu no standartfunkcijām apzīmē tāpat kā zinātniskajos kalkulatoros vai citās programmvidēs ( piemēram : abs, sin, sqrt u.t.t.).

Gadījumos, kad izteiksmju objekti ir matricas, spēkā ir matricu algebras principi. Ja neesat tos aizmirsuši, tad strādāt ar MATLAB-u ir viegli. Nebēdājieties, ja ir kaut kas piemirsies. MATLAB Jums palīdzēs ātri atcerēties un dažreiz pat iemācīties.

Masīvu (vektoru) operācijas ir noderīgas, kad ir jāveic atbilstošās operācijas starp vienāda izmēra matricu vai vektoru identiski indeksētiem elementiem.

Izteiksmes veido izmantojot aritmētiskās operācijas un iekavas tāpat kā jebkurā programmēšanas valodā. Tabulā tās ir sarindotas pēc pieaugošām prioritātēm:

Page 44: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-44 ©Copyright Pičs (P. Misāns)

Tabula 5. Aritmētiskās operācijas

Operācijas ar MATRICĀM Operācijas ar MASĪVIEM (arī skalāriem) (elements-elements)

+ saskaitīšana + saskaitīšana

- atņemšana - atņemšana

* reizināšana .* reizināšana

/ dala kreiso pusi ar labo pusi ./ dala kreiso pusi ar labo pusi

\ dala labo pusi ar kreisās pusi .\ dala labo pusi ar kreisās pusi

^ pakāpe .^ pakāpe

' transponēšana (kompleksi- .' transponēšana

saistīta matrica)

Operācija "\" Vispirms aplūkosim tādu citām valodām netipisku dalīšanas operāciju, kā dalīšanu no labās puses:

» 3\1 » 3/1 ans = 0.3333

ans = 3

Lasītājam nevajadzētu pārlieku aizrauties ar šādu pārgudru izteiksmju iebūvēšanu savās programmās

Taču šī dīvainā operācija ir neatsverama gadījumos, kad ir jārisina lineāru vienādojumu sistēmas. Šoreiz mēs to izmēģināsim atrodot kontūrstrāvas visos trijos kontūros, izmantojot iepriekš ievadītos datus par rezistoru pretestībām un EDS lielumiem. Pie reizes veiksim arī iegūto rezultātu pārbaudi ar vienkāršu matricu reizināšanu un salīdzināšanu ar kļūdu eps:

» I = R\E I = 0.0735 -0.2795 -0.2443

» R*I » (E-R*I)>eps ans = ans = 1.0000 0 -2.0000 0

MATLAB-ā ar masīvu (vektoru) operācijām (array operations) saprot darbības starp vienādi indeksētiem matricu elementiem.

Normālā dalīšana

"\" - Gausa izslēg-šanas metode

-3.0000 0

Redzam, ka EDS vērtības datora kļūdas robežās sakrīt ar ievadītajām vērtībām.

Dažas vienkāršas izteiksmes Pārbaudisim Kirhofa likumu spriegumu kritumiem otrajā kontūrā:

» E2=(-R2)*I(1)+(R2+R4+R5)*I(2)+(-R5)*I(3) E2 = -2.0000

Page 45: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-45

Šajā un nākošajā izteiksmē tiek izmantota matricas elementu adresācija, par kuru runāsim nedaudz vēlāk.

» E2=(-r(2))*I(1)+sum(r([2,4,5]))*I(2)+(-r(5))*I(3) E2 = -2.0000

Lai atrastu sprieguma kritumu uz rezistoru R2 (r(2)), pietiek ar:

» Ur2 = (I(2)-I(3))*R2 Ur2 = -0.0704

Tipiskas kļūdas darbojoties ar matricu izteiksmēm Darbojoties ar matricām ir jāatceras matricu algebras pamati. Ja nu gadījumā matricu izmēri matricu darbībai nav pieskaņoti, tad MATLAB atsakās veikt operāciju un izdod atbilstošu paziņojumu. Lai operācija tiktu realizēta, Jums ir jānovērš kļūdas cēlonis. Šoreiz nepareizību imitēsim, samainot matricu un vektoru vietām:

» I*R ??? Error using ==> mtimes Inner matrix dimensions must agree.

Paziņojums vēsta, ka matricu izmēriem ir jābūt saskaņotiem

Bieži vien ir nepieciešams uzzināt matricu īstos izmērus. Ja matricas ir nelielas, tad rindas un kolonnas var saskaitīt. Lielākiem objektiem daudz profesionālāka ir funkcijas size izmantošana. Taču konkrētajā gadījumā varēja izmantot arī informāciju no loga Workspace.

» size(I), size(R) ans = 3 1 ans = 3 3

Komats šeit atdala divas dažādas izteiksmes, kuru rezultāts ir jāizvada uz ekrāna

Pirmais skaitlis norāda uz matricas rindu skaitu, bet otrais uz kolonnu skaitu. Informā-cija par objektu izmēriem ļauj bieži vien veikt pirmo soli ceļā uz kļūdu novēršanu.

Līdzīgā kļūda var parādīties, mēģinot, piemēram izmantot kāpināšans operāciju "^":

» I^2 ??? Error using ==> mpower Matrix must be square.

Šāda situācija ir radusies tādēļ, ka parastā kāpināšana matricu gadījumā prasa kvadrātisku matricu. Turpretī, ja ir jāiegūst katras kontūrstrāvas kvadrāts, mums ir jālieto vektoriāla operācija (par tām detalizētāk nedaudz vēlāk). Šeit tikai aplūkosim, kā pareizi būtu veicams jaudas aprēķins uz rezistoriem R1, R4, R6:

» Pr1r4r6 = (I.^2).*[R1,R4,R6]' Pr1r4r6 = 0.0054 0.3125 0.3581

Page 46: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-46 ©Copyright Pičs (P. Misāns)

Matricas elementu adresācija (subscripting) Ļoti bieži, strādājot ar matricām vai vektoriem, rodas nepieciešamība pēc atsevišķiem tās elementiem vai elementu grupām (vektoriem, submatricām u.t.t). MATLAB ļauj griezties vienlaicīgi pie daudziem matricas elementiem un izdalīt tos. Jāatceras tikai, ka izdalīšanas rezultātam noteikti ir jābūt taisnstūrveida objektam (matricai, vektoram vai skalāram).

Nodaļā par izteiksmēm mēs jau faktiski izmantojām vektoru elementu indeksus. Pieeja atseviškiem matricas elementiem ir iespējama, izmantojot indeksus, ietvertus "(",")". Tā, piemēram, ja iztirzājamajā shēmas piemērā mēs vēlamies atrast sprieguma kritumu uz rezistora R7, mums no kontūrstrāvu vektora ir jāizdala trešā kontūra strāva un jāpareizina ar izvēlētās pretestības lielumu:

Nodaļā par izteiksmēm mēs jau faktiski izmantojām vektoru elementu indeksus. Pieeja atseviškiem matricas elementiem ir iespējama, izmantojot indeksus, ietvertus "(",")". Tā, piemēram, ja iztirzājamajā shēmas piemērā mēs vēlamies atrast sprieguma kritumu uz rezistora R7, mums no kontūrstrāvu vektora ir jāizdala trešā kontūra strāva un jāpareizina ar izvēlētās pretestības lielumu.

» U7=I(3)*R7 U7 = -1.7101

Divdimensiju matricas gadījumā jāizmanto ar komatu atdalīti divi indeksi, kur pirmais indekss nozīmē matricas rindu(as), bet otrais kolonnu(as). Tā, piemēram, lai izdalītu no R pēdējās rindas vidējo elementu, rakstam:

» R(3,2) ans = -5

Indeksu vietā, protams, var izmantot izteiksmes-vektorus. Ja rodas nepieciešamība, varam izvilkt laukā arī lielākas elementu grupas. Tā, piemēram, ja gribam izdalīt pirmo un pēdējo rindu, pietiek uzrakstīt:

» R([1,3],1:3) ans = 6 -2 0 0 -5 18

Gadījumos, kad no matricas ir jāizdala pilna rinda vai kolonna, noderīga ir kolona simbola ":"izmantošana. Šādas trīs izteiksmes ir ekvivalentas:

» R(2,:) ans = -2 11 -5

» R(2,1:1:end)

ans = -2 11 -5

» (R(2,1:end)

ans = -2 11 -5

Atslēgas vārds end, kuram MATLAB-ā ir divas nozīmes, šoreiz tiek izmantots kā pēdējā elementa indekss. Šo mainīgo var izmantot dažādās gudrās manipulācijās ar matricu elementu izdalīšanu.

» R(2,end:-1:1) » R(2,1:end-1) » R(end,[end,1:end-1]) ans = ans = ans = -5 11 -2 -2 11 18 0 -5

2.-ās rindas elementi

reversā kārtībā 2.-ā rinda līdz priekšpē-

dējam elementam Pēdējā rinda ir mazliet

sajaukta – izdomā, kā?

Page 47: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-47

Operācijas ar masīviem (vektoriālās operācijas). Daudzos praktiskos pielietojumos ir nepieciešams veikt aritmētiskās darbības starp vienādi indeksētiem matricu elementiem. Vienkāršākajā gadījumā, kad objekts ir vektors, šīs operācijas mēdz saukt par vektoriālajām operācijām. Vispārīgā gadījumā MATLAB-ā var darboties ne tikai ar parastām matricām, bet arī ar trīsdimensiju matricām (tenzoriem) vai praktiski jebkura dimensiju skaita matricām. Šī iemesla dēļ MATLAB-ā tiek lietots jēdziens m a s ī v u (array) operācijas.

Galvenā sintaktiska iezīme (sk. tab. 2.) ir punkta izmantošana aiz tā mainīgā, ar kuru tiek veikta atbilstošā operācija. Saskaitīša-nas un atņemšanas gadījumā tās ir identiskas ar matricu operā-cijām. Masīvu operāciju gadīju-mā rezultāta matricas katrs elements tiek iegūts, veicot at-bilstošo operāciju ar vienādi in-deksētiem operandu elementiem.

2 -2 12

-8 5 30

ans =

[1 2 3;4 5 6].*[2 -1 4; -2 1 5]

Tieši tāpat var veikt divu masīvu elementu savstarpēju dalīšanu, kāpināšanu utt.

0.5000 -2.0000 0.7500

-2.0000 5.0000 1.2000

ans =

[1 2 3;4 5 6]./[2 -1 4; -2 1 5]

Nekādu principiālu problēmu nav arī ar kompleksiem skaitļiem

Dažreiz rodas vajadzība veikt konstanšu matricas dalīšanu ar skaitļu matricu. Vienkāršākais risinājums ir konstantei galā pielikt punktu un veikt šo dalīšanu:

[1+2j, 2+3j].*[2+j, 3-2j] ans =

0 + 5.0000i 12.0000 + 5.0000i

1.5./[1 2; 3 4] ans =

1.5000 0.7500

0.5000 0.3750

Demonstrētā pieeja ir nedaudz bīstama, jo ir gadījies, ka rezultāts iznāk kļūdains (no pieredzes ar 5.x versiju). Tādēļ drošāk ir, ja vienas konstantes vietā izmanto konstanšu matricu un demonstrētās izteiksmes vietā raksta, piemēram 1.5*ones(size(A))./A, kur A ir izmantojamā matrica.

Visbiežāk izmantotās ir reizināšana un kāpināšana. Tā, piemēram, reizināšanu var izmantot jaudas aprēķiniem, bet kāpināšanu, enerģijas aprēķiniem elektriskajās ķēdēs.

Mūsu piemērā ar shēmu masīvu reizināšana var noderēt, ja vienlaicīgi gribam atrast spriegumu kritumus vairākos neatkarīgajos zaros:

» [R3, R4, R7].*[I(1),I(2),I(3)] Šāds rēķins ir korekts, jo zaru strāvu lielumi izvēlētajos zaros ir vienādi ar kontūrstrāvu lielumiem

ans = 0.2205 -1.1180 -1.7101

Veiktā operācija ir ekvivalenta šādai:

Page 48: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-48 ©Copyright Pičs (P. Misāns)

» [R3*I(1), R4*I(2), R7*I(3)] ans = 0.2205 -1.1180 -1.7101

"Īstenie" sevi cienošie matlabisti gan rakstītu šādi:

» [R3, R4, R7].*I' ans = 0.2205 -1.1180 -1.7101

Vienkāršu izteiksmju gadījumā punkts ir jāliek aiz pirmā operanda un vislabāk ir, ja operandu(s) ieliek iekavās. Ja rodas grūtības ar punktu izvietošanu, pareizu "vektorizēto" izteiksmi var iegūt, vajadzīgo izteiksmi apstrādājot ar funkciju vectorize:

» vectorize('exp(-2*x^3+3*x2-4)/(x^2+x)') ans = exp(-2.*x.^3+3.*x2-4)./(x.^2+x)

Iegūtais rezultāts ir teksta rinda (char). Izmantojot reālā laika interpretatora funkciju eval, iegūto rezultātu ir iespējams uzreiz apstrādāt, taču iesācējiem autors izteiksmi iesaka vienkārši nokopēt vajadzīgajā vietā.

Vienkāršs praktisks piemērs ir elektronikā plaši izmantojamais sprieguma dalītājs. Atgādināsim, ka pie EDS avota tiek virknē pieslēgti divi rezistori ar pretestībām Ri un Rx. Interesē, kāda daļa no EDS sprieguma nonāk uz Rx, mainot Rx lielumu. Atbilstošā aprēķinu formula un scenārijs ir sekojoši:

0 0.1 0.2 0.3 0.4 0.50

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Rx

k Ux

xi

xxUx RR

RE

Uk+

== (1)

» Ri = 0.1; » Rx = 0:0.01:0.5; » kUx = Rx./(Ri+Rx); » plot(Rx,kUx)

Page 49: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-49

Elementārās matemātiskās funkcijas Funkcijas tiek lietotas katram no matricas elementiem atsevišķi un ja funkcijas arguments ir matrica tad arī rezultāts pārsvarā gadījumu ir tāda paša izmēra matrica.

Vēlreiz jāatzīmē, ka abās nākošajās tabulās dotās funkcijas meklē funkcijas vērtību katram matricas elementam (arī kompleksam) un formē tāda paša izmēra matricu, pildītu ar atbilstošajām funkcijas vērtībām.

Tabula 6. Elementārās funkcijas

ELEMENTĀRĀS FUNKCIJAS

Eksponenciālās un logaritmiskās Darbam ar kompleksiem skaitļiem

exp ex abs absolūtā vērtība vai modulis sqrt √x kvadrātsakne angle fāzes leņķis log ln(x) real reālā daļa

log10(x) imag imaginārā daļa log10 log2(x) conj log2 kompleksi saistīta matrica

Noapaļošana Atlikums

round noapaļošana uz tuvāko veselo rem atlikums pēc dalīšanas (sk. help) fix noapaļošana uz "0" pusi mod atlikums pēc dalīšanas (sk. help) floor noapaļošana uz -Inf pusi sign zīmes funkcija sign(1.4)=1, ceil noapaļošana uz +Inf pusi sign(-17.7)=-1, sign(0)=0

Tabula 7. Trigonometriskās funkcijas

TRIGONOMETRISKĀS FUNKCIJAS

sin sinuss sin(x) sinh hiperboliskais sin(x)

kosinuss cos(x) cosh hiperboliskais cos(x) cos tan tangenss tg(x) tanh hiperboliskais tg(x) asin arksinuss arcsin(x) asinh hiperboliskais arcsin(x) acos arkkosinuss arccos(x) acosh hiperboliskais arccos(x) atan2 arctg(x) (tan-1(x)) , [-π ,+π ] atanh hiperboliskais arctg(x) atan arktangenss arctg(x) (tan-1(x)) , [-π/2,+π/2 ] sec sekanss sec(x) sech hiperboliskais sec(x) csc kosekanss cosec(x) csch hiperboliskais cosec(x) asec arksekanss arcsec(x) asech hiperboliskais arcsec(x) acsc arkkosekanss arccosec(x) acsch hiperboliskais arccosec(x) cot kotangenss ctg(x) coth hiperboliskais ctg(x) acot acoth inversais hiperboliskais ctg(x) arkkotangenss arcctg(x)

Page 50: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-50 ©Copyright Pičs (P. Misāns)

Darbs ar elementārajām funkcijām

Ja vēlies redzēt arī pārējo elementāro funkciju nosaukumus un paskaidrojumus par tām, uzraksti:

» help elfun

Lai funkcijas sekmīgi izmantotu, protams, ir jāzina to matemātiskā jēga, citādi var gadīties ieraudzīt arī brīnumus.

exp(1)ans = 2.7183 format long

Ja gribi redzēt visus cipariņus, tad uzstādi Dažreiz studentes apmulst, ja grib iegūt

skaitli e. Taču tas ir tik vienkārši – ir jāizmanto funkcija exp:

Jāpatur prātā, ka funkcijas ir spējīgas strādāt ar kompleksiem skaitļiem, tādēļ nevajag brīnīties, ka apstrādājot reālus skaitļus, izdodas iegūt kompleksus skaitļus:

» log(-3) ans =

1.0986 + 3.1416i

Relatīvi bieži ir jāsastopas ar arctg funkcijas pielietojumu. Jāpatur prātā, ka tiek izmantotas divas funkcijas, kas var dot atšķirīgu rezultātu.

Vispopulārākā ir atan2, kas rēķina vektora leņķi radiānos [-π, π] visos četros kvadrantos. Šai funkcijai ir divi argumenti, no kuriem pirmais ir Y koordināte, bet otrais X koordināte, piemēram. rad2deg pārvērš radiānus grādos.

» rad2deg(atan2(1,-1))

Ja argumenti ir kompleksi skaitļi, tad tiek izmantotas tikai reālās daļas.

ans =

135

» rad2deg(atan(-1)) ans = -45

Savukār funkcijai atan ir vajadzīgs tikai viens arguments un tā formē leņķi tikai divos kvadrantos [-π/2, π/2]:

Elektronikā bieži kompleksi skaitļi ir jāinterpretē kā vektori, tad lieti noder funkcija angle:

Saimniecībā nereti noder arī funkcijas, kas rēķina atlikumu. Piemēram, izmantojot funkciju rem, mēs varam noģenerēt zāģveida funkciju:

» rad2deg(angle(-1+j)) ans = 135

t = 0:0.001:5;

y = 2*rem(t,1.5);

plot(t,y)

rem dala pirmo argumentu ar otro tik ilgi, kamēr paliek atlikums mazāks par dalītāju.

Par plot uzzināsi nedaudz vēlāk. Vakarā, vakarā – kārumniec ...

Page 51: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-51

Vēlreiz ir jāatgādina, ka lielākā daļa MATLAB funkciju ir orientēta uz matricu (vektoru) apstrādi. Atsauksim atmiņā piemēru no ievadnodaļas ar sinusa zīmēšanu.

» t = 0:0.2:1 t = 0 0.2000 0.4000 0.6000 0.8000 1.0000 » y = sin(2*pi*1*t) y = 0 0.9511 0.5878 -0.5878 -0.9511 -0.0000

Redzam, kā funkcija sin tiek galā ar 6 vērtību laika vektoru. Kā jau minēts matricu lielumu ierobežo praktiski tikai datora atmiņa. Lai iegūtu grafiku var izmantot iepriekš demonstrēto funkciju plot. Ja, ģenerējot laika vektoru, tiks izmantots mazāks solis, tad funkcijas vērtību tajā pašā laika intervālā, protams, sanāks vairāk.

Ne tā kā Excel-ā MATLAB-a videi ir viena būtiska konceptuāla atšķirība no MS Excel-a. Ja mēs nomainam kādus datus Excel lauciņā, tad pēc noklusējuma automātiski tiek pārrēķināti visi pārējie atkarīgie lauciņi.

Savukārt, MATLAB valoda ir veidota kā klasiska "virknes" valoda, kurā darbības tiek izpildītas secīgi viena pēc otras. Tādēļ, atgriežoties pie iepriekšējā piemēra, ja mēs vēlamies pārrēķināt y citām laika vektora vērtībām ar izmainītu laika soli, tad mums šī izteiksme ir vēlreiz jāpārrēķina. Arī plot ir jāatkārto, ja ir vajadzība grafiku pārzīmēt.

» t = 0:0.01:1; » y = sin(2*pi*1*t); » plot(t,y)

Vienkāršu funkciju tabulu veidošana

Vienkāršas tabulas komandu logā varam iegūt, izmantojot funkiju disp un vektorrindas pārvēršot par vektorkolonnām ar transponēšanu. Funkcija disp(lay) ļauj izvadīt matricas un tekstu. Matrica, parādās arī bez šīs funkcijas līdzdalības, taču tādā gadījumā uz ekrāna parādās arī mainīgā nosaukums.

» disp([t',y']) 0 0 0.2000 0.9511 0.4000 0.5878 0.6000 -0.5878 0.8000 -0.9511

Šis, protams, nav MATLAB-a griestu demonstrācijas piemērs. Ja esi strādājis ar C valodu, tad vari izmantot funkciju sprintf (apskaties help). Tā palīdz formēt arī izsmalcinātākās tabulas.

Konstanšu matricu formēšana. Ļoti bieži aprēķinos ir jāizmanto matricas vai vektori, kuri ir pildīti ar vienu un to pašu konstanti. Šim nolūkam var izmantot funkciju zeros vai ones, kuras formē uzdotā izmēra matricu pildītu ar nullēm vai vieniniekiem. Ja vēlaties iegūt konstašu matricu, tad pie nuļlu matricas pieskaitiet vajadzīgo konstanti vai arī ar šo konstanti pareiziniet vieninieku matricu.

» zeros(2,3) ans = 0 0 0 0 0 0

» pi*ones(1,3) ans = 3.1416 3.1416 3.1416

Page 52: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-52 ©Copyright Pičs (P. Misāns)

Pieņemsim, ka mūsu aplūkotās shēmas pirmajā kontūrā ir ieslēgts laikā mainīga sinusoidāla sprieguma avots, otrajā kontūrā avots ar 0.5 V spriegumu, bet trešajā kontūrā avots ar trīs reizes augstāku frekvenci nekā pirmajā kontūrā. Lai veiktu korektu shēmas simulāciju, mums ir jāizveido EDS matrica, kura saturēs trīs rindas un tik kolonnu, cik ir analizējamo laika momentu:

» t = 0:0.01:1; » E = [sin(t); zeros(1,length(t))+0.5; sin(3*t)];

» length(t) Funkcija length nosaka vektora (t) garumu. Ja šo funkciju pielieto matricām, tad tā nosaka vislielāko no izmēriem. length jālieto, lai nevajadzētu skaitīt.

ans = 101

Lai matricas elementi nebūtu jāmeklē ārpus monitora ekrāna, aplūkosim tikai dažas matricas kolonnas:

» E(:,1:5) ans = 0 0.0100 0.0200 0.0300 0.0400 0.5000 0.5000 0.5000 0.5000 0.5000 0 0.0300 0.0600 0.0899 0.1197 t=0.0 t=0.01 t=0.02 t=0.03 t=0.04

» size(E) Notestēsim iegūtās matricas izmērus ar funkciju size. Tā ir ērta, programmējot, un atšķirībā no length ir piemērota darbam ar matricām.

ans = 3 101

Lai Jūs nemulsina lielais matricas kolonnu skaits. MATLAB tiek galā arī ar daudz lielākām konstrukcijām, ja vien datora atmiņa ir pietiekama.

Matricu inicializācija Lai veiktu shēmas simulāciju, t.i. atrastu strāvu un spriegumu izmaiņas uz elementiem atkarībā no laika, mums katrā laika momentā ir jārisina lineāru vienādojumu sistēma, kuras koeficientu matricu nosaka R, bet labās puses EDS vektoru, matricas E atbilstošais stabiņš. Kā jau tika demonstrēts iepriekš, kontūrstrāvu vektoru var atrast izmantojot operāciju "\". Tā kā mums ir daudz laika momentu, tad katrā no tiem būs cits kontūrstrāvu komplekts. Lai vēlāk varētu iegūt kontūrstrāvu atkarību no laika, mums šie trīselementu vektori kaut kur ir jāuzkrāj. Apzīmēsim vajadzīgo matricu ar It un nodefinēsim to:

» It = zeros(size(E));

Šajā gadījumā matricas inicializācija vairāk ir domāta programmēšanas "klasiķiem", bet MATLAB-ā matricas var veidot, palielināt un samazināt dinamiski programmas darba laikā. Jāpiezīmē, ka ja nav speciālas vajadzības pēc dinamiskas objektu izmēru maiņas, tad inicializāciju vēlams veikt tikai vienreiz. Lielu objektu gadījumā daudzkārtēja inicializācija var stipri palēnināt programmas darbību.

Katrs matricas stabiņš atbilst spriegumu komplektam atbilstošajā laika momentā

Pārbaudi, vai It izmērs ir tāds pats kā E izmērs

Tukšā matrica [] Tas ir ļoti noderīgs objekts, kuru var izmantot matricu montāžā un demontāžā, par kurām runāsim nedaudz vēlāk. Šeit tikai gūsim pirmo ieskatu par to. Ja matricu definē kā tukšu, tā nesatur neko un tai tikai ir nosaukums:

Page 53: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-53

» It = [] It = [] » whos It Name Size Bytes Class It 0x0 0 double array

Matricu [] var izmantot dinamiskai datu masīva audzēšanai. Uzmanīgi papēti nākošos trīs secīgi izpildītos piemērus kontekstā ar tikko nodefinēto It: » It = [It, 1] » It = [-1, It]

It = -1 1

» It = [It,0] It = -1 1 0

It = 1

Darbs ar kompleksiem skaitļiem MATLAB ļauj darboties ar kompleksu skaitļu matricām un masīviem tikpat brīvi kā ar parastu skaitļu matricām un masīviem. Pēc noklusēšanas kā imaginārās vienības tiek izmantoti speciālie mainīgie i un j . Par to mēs varam pārliecināties, piemēram, paceļot šos skaitļus kvadrātā:

» j^2 ans = -1

Pievērs uzmanību tam, ka imaginārā vienība vienmēr tiek izvadīta tā, kā pieņemts matemātikā ar i.

» i^2 ans = -1

Komplekso skaitļu ievads. Kā jau redzējām iepriekš, imaginārās vienības ievadam varam izmanot gan i gan j :

» 2+j*3

ans = 2.000 + 3.000i

Imagināro vienību var pierakstīt pirms vai aiz izteiksmes imaginārās daļas, atdalot to ar reizināšanas zīmi. Ja reizināšanas zīmi nelieto, tad i vai j drīkst rakstīt tikai aiz konstantes.

» 2+3i

ans = 2.000 + 3.000i

Kā jebkurus MATLAB vides speciālos mainīgos, imagināro vienību i vai(un) j var pārdefinēt ("sabojāt"). Ir zināms, ka programmēšanas praksē mainīgie i un j bieži tiek izmantoti kā cikla skaitītāji un masīvu indeksi. Šoreiz sabojāšanu vienkārši imitēsim un palūkosimies, kādas būs sekas:

» j=2; 2+3*j

ans = 8

Ja imagināro vienību rakstam aiz konstantes bez reizināšanas zīmes, netiek interpretēts šī speciālā mainīgā saturs un rezultāts ir pareizs, atšķirībā no piemēra kreisajā pusē.

» j=2; 2+3j

ans = 2.000 + 3.000i

Diemžēl, izteiksmju sintaktiskās ierobežotības dēļ imagināro vienību bez pavadošās reizināšanas zīmes mēs varam izmantot tikai aiz reāla tipa konstantes. Tas ierobežo vai padaru grūti saprotamu dažādu izteiksmju (kas atšķiras no "plikas" konstantes) izmantošanu imaginārās daļas vietā.

Ja strādājot, vēlaties izmantot komplekso izteiksmju ievadu, tad vēlams rūpēties par to, lai pirms kompleksās izteiksmes ievada izmantojamās imaginārās vienības saturs tiktu atjaunots, ja tas pirms tam ir sabojāts. Imaginārās vienības atjaunošanu var izdarīt ļoti vienkārši un jāatjauno ir tikai tā imaginārā vienība (šoreiz mainīgā j saturs), kura ir sabojāta un kuru grasaties lietot:

Page 54: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-54 ©Copyright Pičs (P. Misāns)

» 2+3*j ans = 8

Atceries imaginārās vienības definīciju:

i = √-1

» j=sqrt(-1); 2+3*j ans = 2.0000 + 3.0000i

Darbības ar kompleksiem skaitļiem. Ar kompleksiem skaitļiem (arī ar kompleksu skaitļu matricām un masīviem) var veikt aritmētiskās darbības tāpat kā ar reāla tipa skaitļiem. Aplūkosim divus kompleksi saistītus (conjugate) skaitļu reizinājumu un summu: » z1 = 2+1*j; » z2 = conj(z1); » z1*z2 ans = 5

Kompleksi saistītu skaitli (matricu) var iegūt, izmantojot funkciju conj vai arī, izmantojot transponēšanas zīmi "'".

» z1+z2 ans = 4 » z1+z1' ans = 4

Izmantojot funkcijas real, imag, abs un angle ir iespējams izdalīt kompleksa skaitļa (matricas) reālo daļu, imagināro daļu, moduli (magnitude, modulus) un fāzi (radiānos): » real(z1) ans = 2 » imag(z2) ans = -1

Funkcija abs, ja to izmanto reāla tipa skaitļiem (matricām), atrod absolūto vērtību.

Starp citu, ar reizinātāju 180/pi konversija uz grādiem ir par diviem simboliem īsāka nekā ar funkciju rad2deg().

» abs(z1) ans = 2.2361 » angle(z1)*180/pi ans = 26.5651

Vairums no MATLAB funkcijām, spēj operēt ar argumentiem, kas ir kompleksu skaitļu matricas. Mēs šeit aplūkosim inženierpraksē visai bieži sastopamu gadījumu, kad ir zināmas kompleksi saistītas polinoma saknes un ir jārestaurē pats polinoms. Minētā darbība var būt lietderīga, piemēram, gadījumos, kad pēc polinoma sakņu atrašanas ir jāpārbauda iegūtā rezultāta korektums:

» poly([z1,z2])

Funkcija poly formē koeficientus, sākot ar ar augstāko pakāpi:

» roots([1 -4 5]) ans = ans = 2.0000 + 1.0000i 1 -4 5 x2 - 4x + 5 2.0000 - 1.0000i

Kompleksu skaitļu matricas ievads Kompleksas matricas ievads notiek tieši tāpat kā parastas matricas ievads, ievērojot iepriekš apskatītās kompleksu skaitļu pieraksta formas:

» A = [1+2j, 3+j; 4-2*j, 5-6j] A = 1.0000 + 2.0000i 3.0000 + 1.0000i 4.0000 - 2.0000i 5.0000 - 6.0000i

Page 55: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-55

Kompleksu skaitļu matricas transponēšana Šeit ir nedaudz jāuzmanās. Izmantojot parasto transponēšanas zīmi "'", tiek iegūta kompleksi saistīta un transponēta matrica (Ermita matrica). Lai iegūtu transponētu komplekso matricu, kuras elementu imaginārās daļas nemaina zīmi:

» A' ans = 1.0000 - 2.0000i 4.0000 + 2.0000i 3.0000 - 1.0000i 5.0000 + 6.0000i

Atsauksim atmiņā vēlreiz oriģinālo ievadīto matricu:

» A = [1+2j, 3+j; 4-2*j, 5-6j] A = 1.0000 + 2.0000i 3.0000 + 1.0000i 4.0000 - 2.0000i 5.0000 - 6.0000i

Savukārt, pielietojot ".'"

» A.' ans = 1.0000 + 2.0000i 4.0000 - 2.0000i 3.0000 + 1.0000i 5.0000 - 6.0000i

Kompleksu skaitļu saskaitīšanas ģeometriskā interpretācija

Atcerēsimies no matemātikas, kā saskaita divus kompleksus skaitļus:

Z z z z z j z z= + = + + +1 2 1 2 1 2Re( ) Re( ) (Im( ) Im( )) (2)

Šoreiz komplekso skaitļu summa uzreiz izteiksmes veidā tiek ievietota vektorā kopā ar pašiem skaitļiem. Tas ir tādēļ, lai funkcija compass, kura domāta vektoru zīmēšanai, varētu attēlot visus vajadzīgos vektorus.

» z1 = 2+1*j;

» Z = [z1,z1',z1+z1']; » compass(Z), zoom on;

compass ir gudra funkciju un tās darbību šeit neanalizēsim. Ar zoom on panāk to, lai no grafika izdalītu mūs interesējošo. Jāatzīstas, ka raustītās līnijas, kas savieno vektoru galapunktus autors ir piezīmējis ar plotedit, kuras darbību apskatīsim vēlāk. Visu pārējo - vektorus, grādu un tīkla marķējumus utt. zīmē compass.

Zīm. 28. Divu kompleksi saistītu vektoru summa, attēlota ar funkciju compass.

Page 56: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-56 ©Copyright Pičs (P. Misāns)

Struktūras un šūnu matricas.

Lai arī daudzos inženiertehniskajos uzdevumos komplekso skaitļu matricas ir pietiekami informatīvs objekts, tomēr eksistē dažādi uzdevumi, kuros ar šo relatīvi universālo objektu ir par maz. Tādēļ, sākot ar MATLAB 5.-o versiju, tika ieviests s t r u k t ū r u m a s ī v s (līdzīgs C valodas struktūrām). Otrs unikāls objekts, kas ir raksturīgs tikai MATLAB-am ir š ū n u m a s ī v s (cell array), jeb vienkāršākajā gadījumā – š ū n u m a t r i c a . Šūnu matrica ir radniecīgs objekts struktūrai, taču daudzos gadījumos ērtāks lietošanā.

Struktūras.

Struktūru masīvs (structure array), ko turpmāk sauksim vienkārši par struktūru ir datu glabāšanas konteiners, kurš no matricas atšķiras ar to, ka struktūrā mēs varam glabāt dažādu tipu datus – skaitļus, matricas, tekstu, objektu rokturus utt. Atšķirībā no matricas tai nav regulāras taisnstūra konfigurācijas. Galvenie struktūras atribūti ir tās nosaukums (name), lauciņi (fields) un lauciņu saturs (values). Lauciņi struktūrā tiek atdalīti ar punktu (tāpat kā C valodā).

Struktūru var radit divējādi, pirmkārt, tiešā veidā, uzrakstot struktūras un atbilstošā lauciņa nosaukumu, bet pēc tam piešķirot izvēlētajam lauciņam glabājamo vērtību, piemēram:

» R_all.r1 = 'R1' R_all = r1: 'R1'

Procesu var turpināt, pievienojot pa vienam lauciņus un to saturu. Šajā piemērā lauciņam, kurā jau glabājas rezistora nosaukums, piepulcēsim arī lauciņu, kas satur pretestības vērtību:

Nupat nodemonstrētajai pieejai ir viena nepilnība – lauciņu pievienošana struktūrai notiek pa vienam, kas nereti izvēršas par garu procedūru un nav pārāk ērti. Tā vietā mēs varam izmantot funkciju struct, kas rada vajadzīgo struktūru. No objektorientētās programmēšanas viedokļa minētā funkcija ir t.s. konstruktors. Šai funkcijai mēs varam kā argumentus uzdot lauciņu nosaukumus un atbilstošās vērtības pa pāriem vai arī veidot lauciņu vai struktūru masīvus:

Ja ir vajadzība, piemēram, noskaidrot otrā rezistora pretestību, pietiek uzrakstīt:

» R_all.r1v = 10 R_all = r1: 'R1' r1v: 10

» R_visi= struct('nos',{'r1','r2','r3'}, 'vert',{10,20,30}) R_visi = 1x3 struct array with fields: nos vert

Struktūra šoreiz ir trīs elementu masīvs. Vērtības var ievadīt ar šūnu matricu palīdzību, ja atbilstošajā šūnas elementā ieraksta vajadzīgo lauciņa vērtību.

» R_visi(2).vert

ans = 20

Page 57: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-57

Kā jau minēts, arī lauciņus var veidot kā masīvus. Šajā gadījumā šūnu matricu vietā ir jāizmanto parastās matricas:

Lai iegūtu vajadzīgā lauciņa vērtību, šoreiz ir jāpatur prātā, ka mums ir nevis struktūru masīvi, bet gan lauciņu masīvi:

Ar struktūru lauciņa vērtību var rīkoties tieši tāpat kā ar jebkuru MATLAB-a mainīgo – to var izmantot izteiksmēs, piešķirt kādam citam mainīgajam utt. Arī struktūru drīkst piešķirt mainīgajam.

Vai kāds mainīgais ir vai nav struktūra, var noskaidrot dažādi. Var, piemēram, izmantot funkcija class. Vispiemērotākā testa funkcija, ko var izmantot operatorā if, ir isstruct:

Struktūras lauciņu nosaukumus var noskaidrot ar funkciju fieldnames. Šī funkcija ļauj lauciņu nosaukumus saglabāt šūnu matricā (funkcija, starp citu, der arī Java objektiem):

Veidojot programmas ar intensīvu struktūru pielietojumu, tiešās lauciņa adresācijas vietā (ar atdalītāju kā punktu ".") ērtāka varētu būt funkcijas setfield (vērtības piešķiršanai) un getfield (vērtības iegūšanai) izmantošana:

» R_visi = struct('nos',['r1';'r2';'r3'], 'vert',[10,20,30]) R_visi = nos: [3x2 char] vert: [10 20 30]

Salīdzinājumā ar iepriekšējo varianu mūsu struktūrai ir citāda "struktūra". Apskaties un salīdzini

» R_visi.vert(2) ans = 20

» isstruct(R_new)

ans =

1

» R_lauc=fieldnames(R_new) R_lauc = 'nos' 'vert'

» R_new = R_visi R_new = nos: [3x2 char] vert: [10 20 30]

» s.a.b.c = 15; » getfield(s,'a','b','c') ans = 15

Lai pilnvērtīgi darbotos ar struktūrām, iepazīsties patstāvīgi arī ar citām, ar struktūrām saistītajām funkcijām:

isfield, rmfield, substruct, deal, struct2cell utt.

Uz priekšu – veiksmes gadijumā varbūt izdodas piekļūt ES strukturālajiem fondiem ...

Page 58: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-58 ©Copyright Pičs (P. Misāns)

Šūnu matricas.

Struktūras ir ērtas kā dažāda tipa datu konteineri, taču zināma smagnējība parādās to izmantošanā. Tā, piemēram, Jūs nevarat piekļūt lauciņam, izmantojot indeksāciju, kā tas ir, strādājot ar matricām. Indeksācija ir ļoti ērta, ja mēs, piemēram, datu apstrādei gribam izmantot ciklus. Īsi sakot, indeksācija paver ceļu lakonismam un virknei ērtību darbā ar datu konteineriem. Šai sakarībā MATLAB-ā ir izstrādāts speciāls datu tips – š ū n u m a t r i c a .

Datu struktūru var vienkārši konvertēt par šūnu matricu, izmantojot funkciju struct2cell:

» R_cell=struct2cell(R_new) R_cell = [3x2 char ] [1x3 double]

Pārliecināties par to, vai iegūtais objekts patiešām ir šūnu matrica, var, izmantojot funkciju iscell:

Šūnu matricas galvenais atribūts ir figūriekavas "{}" (curly brackets). Indeksācija ir tāda pati kā matricām:

» iscell(R_cell) ans = 1

» R_cell{2,1} ans = 10 20 30 Šajā piemērā mēs pieprasījām otrās rindas

pirmo kolonnu, kura ir vektors.

Ja ir vajadzība līst dziļāk, tad indeksācija ir līdzīga. Lai iegūtu otrā rezistora pretestību, mums indeksi jāveido tāpat kā matricai, jo izvēlētajā šūnā glabājas matrica:

Līdzīgā veidā var piekļūt arī rezistora nosaukumam, izvēloties no nosaukumu matricas visu otro rindu:

» R_cell{1,1}(2,:) ans = r2

» R_cell{2,1}(1,2) ans = 20

Pievērsiet uzmanību tam, ka otrā līmeņa indeksācijā tika izmantotas nevis figūriekavas, bet gan parastās iekavas (parenthesis) kā matricu indeksācijā. Ja šūnu matricas šūna saturētu citu šūnu matricu, tad otrā līmeņa indeksācijā arī vajadzētu izmantot figuriekavas.

» [Rn,Rv]=deal(R_cell{:})

Izpēti konkrēto kolona pielietojumu patstāvīgi!

Rn = r1 r2 r3 Rv = 10 20 30

Ja rodas vajadzība no šūnu matricas izdalīt šunu saturu un novirzīt katru šūnu savā objektā, tad ir jāizmanto funkcija deal:

Iegūtie objekti Rn un Rv ir atbilstoši teksta char un parasta double matricas.

Šūnu matricas radīšana. To var veikt tiešā veidā, līdzīgi kā veido matricas, tikai parasto iekavu vietā ir jāizmanto figūriekavas, piemēram:

» A{2,2} = 'Ku Kuu!' A = [] [] [] 'Ku Kuu!'

Page 59: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-59

Redzam, ka neaiztiktās šūnas piepildījās ar tukšajām matricām. Kad matrica ir izveidota, mēs jebkurā brīdī varam aizpildīt vai mainīt šūnu saturu, atbilsotši izmantojot indeksāciju:

» A{1,2} = [4,5] A = [] [1x2 double] [] 'Ku Kuu!'

Līdzīgi kā matrica, šūnu matrica arī ir taisnstūrveida objekts. Konceptuāla atšķirība no parastajām matricām ir tāda, ka šūna var saturēt citu šūnu matricu.

Šūnu matricu var veidot, izsaucot konstruktora funkciju cell. Tādā gadījumā mums rodas šūnu matrica ar tukšām šunām:

» B = cell(1,2) B = [] []

Ja rodas vajadzība, šūnu matricas var konvertēt par struktūru ar funkciju cell2struct, kur pirmais arguments ir šūnu matrica ar lauciņu saturu, bet otrais arguments ir atbilstošie lauciņu nosaukumi, bet trešais arguments ir struktūras dimensija:

Pievērs uzmanību tam, ka šoreiz iegūtā struktūra atšķiras no agrāk iegūtajām.

» cell2struct({10,20,30},{'R1';'R2';'R3'},2) ans = R1: 10 R2: 20 R3: 30

Daudzdimensiju objekti.

Ja rodas nepieciešamība pēc vairāk nekā divu dimensiju objektiem, tad tos radīt nav īpašu problēmu. Tā, piemēram, ja vajag 3 dimensiju matricu (tenzoru), tad to rada, vienkārši pievienojot trešo indeksu:

Te mēs redzam, ka mums ir divas matricas, kas atrodas katra savā plaknē.

Līdzīgi var veidot arī šūnu matricas. Strādājot ar daudzdimensiju objektiem, ir jāmāk skaidri vizualizēt objekts, pretējā gadījumā darbošanās var būt visai apgrūtinoša.

» C(2,3,2) = 232 C(:,:,1) = 0 0 0 0 0 0 C(:,:,2) = 0 0 0 0 0 232

Programmēšanas pamatkonstrukcijas MATLAB vidi var izmantot kā gudru kalkulatoru, lai atrisinātu daudzas jo daudza inženiertehniskas problēmas, taču ir situācijas, kad ir jāmāk izveidot elementāras programmu konstrukcijas, lai sasniegtu vēlamo rezultātu. Tādēļ aplūkosim īsumā dažādus MATLAB operatorus. Tiem, protams, ir liela līdzība ar citu programmēšanas valodu operatoriem.

Page 60: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-60 ©Copyright Pičs (P. Misāns)

Cikla for "izmantošana" Šim operatoram daudzos pielietojumos ir zināma līdzība ar C valodas vai citu valodu atbilstošajiem do un for operatoriem.

Cikla for pamatforma ir sekojoša :

for v = <izteiksme>, Komats šeit nav obligāts, taču noder nākotnei, ja for pēkšņi izdomāsi pārrakstīt vienā rindiņā!

< operatori >

end Cikls ļauj atkārtot komandu grupu uzdoto reižu skaitu. Piemēram :

» for k=1:5, x(k) = 0; end;

Katrā cikla izpildes iterācijā no izteiksmes matricas tiek paņemta kolonna un tā tiek piešķirta cikla mainīgajam v (k). Šajā gadījumā izteiksme mums ir vektors un tādēļ cikla mainīgais k katrā solī saņem naturālu skaitli no 1 līdz 5. Uzreiz ir jāpiebilst, ka MATLAB-ā šāds for pielietojums masīva inicializācijai ir galīgi nevajadzīgs, jo tā vietā var iztikt ar daudz ātrāk strādājošu funkciju zeros, kuru jau aplūkojām iepriekš: » x = zeros(1,5);

Citās valodās pieredzējušiem programmistiem jācenšas pakāpeniski apgūt izvairīšanos no cikla for, jo tas var būtiski paātrināt koda darbību. Tas, protams, nav par jebkuru cenu sasniedzams pašmērķis. Turklāt eksistē pietiekami daudz situāciju, kad no for lietošanas izvairīties vienkārši nevar. Labi uzrakstītās MATLAB-a programmās, kā likums, for lietojuma intensitāte ir vairākkārt zemāka nekā citās valodās.

Lai noskaidrotu, kā lietot vai nelietot ciklu, aplūkosim mūsu trīskontūru shēmas simulāciju. Viens variants, kā var imitēt shēmas darbību laikā, ir katrā cikla iterācijā rēkināt EDS vektorkolonnu, pēc tam shēmu aprakstošo vienādojumu sistēmu:

t = 0:0.01:1; It = []; %tukšo matricu izmantosim kontūrstrāvām for tc = 0:0.01:1, E = [sin(2*pi*1*tc);0.5;sin(2*pi*3*tc)]; Itc = R\E; % risinam vienādojumu sistēmu It = [It,Itc]; % tiek uzkrātas kontūrstrāvu kolonnas end;

Lai šis piemērs darbotos, pirms tam ir obligāti jābūt saformētai matricai R (sk. iepriekš).

Aplūkotajā piemērā koda izpildi bremzē cikla trešā rinda, kurā notiek dimamiska masīva izmēru maiņa. Labāks risinājums būtu kontūrstrāvu matricas sākuma inicializācija kaut vai ar nullēm un EDS matricas inicializācija:

Et = [sin(t); zeros(1,length(t))+0.5; sin(3*t)]; It=zeros(size(Et)); for k=1:length(t), It(:,k)=R\Et(:,k); % izmantojam k-ās Et un It kolonnas end;

Page 61: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-61

MATLAB-isks scenārijs, kas starp citu arī būs visātrāk strādājošais no apskatītajiem variantiem, varētu izskatīties šādi: » R = ..... % ! pieraksti trūkstošo pats » t = 0:0.01:1; » Et = [sin(t); zeros(1,length(t))+0.5; sin(3*t)]; » It = R\Et; % 101 vienād. sistēma vienlaicīgi!

Šis piemērs nekādā gadījumā nepierāda to, ka cikls for ir nevajadzīgs. Tas tikai demonstrē MATLAB-a iespējas.

Viens tāds piemērs, kurā cikls for varētu būt noderīgs ir jau agrāk aplūkotais sprieguma dalītājs. Mūs var interesēt sprieguma dalījuma koeficienta maiņa ne tikai atkarībā no Rx, bet arī, mainoties Ri.

Rx = 0:0.01:0.5; for Ri = [0.001,0.01,0.1], kUx = Rx./(Ri+Rx); plot(Rx,kUx); hold on; end;

Zīm. 29. Sprieguma dalījuma koeficienta atkarība no Ri un Rx.

Operatora if-else "izmantošana" Klasiskā operatora pamatforma ir līdzīga, citu valodu atbilstošajiem operatoriem: if izteiksme,

operatori

elseif izteiksme,

operatori

else,

operatori

end

Operatora if un elseif bloki tiek izpildīti tikai tad, ja izteiksmes reālā daļa satur visus nenulles elementus. Vienmēr tiek izpildīts tikai viens operatora bloks. Sadaļu elseif drīkst atkārtot tik reizes, cik tīk. Minimālā opetatora konfigurācija ir: if izteiksme,

operatori

end,

taču autors neiesaka izlaist atslēgas vārdu else pat ja else bloks ir tukšs. Ilgā programmēšanas prakse rāda, ka else ignorēšana noved pie muļķīgām algoritmiskām kļūdām.

Komati šeit nav obligāti, taču noder nākotnei, ja if-else pēkšņi izdomāsi pārrakstīt vienā rindiņā!

Page 62: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-62 ©Copyright Pičs (P. Misāns)

MATLAB-ā ar operatoru if ir līdzīgi kā ar for – nereti bez tā var iztikt. Pieņemsim, ka mēs gribam no iepriekš sarēķināto kontūrstrāvu matricas It izlasīt tikai tās kontūrstrāvas, kas atbilst laika momentiem 0.5s un 0.7s. Loģiski, ka prasās izveidot ciklu, kurā tiks caurskatīta visa kontūrstrāvu matrica:

t = 0:0.01:1; for tk = [t; 1:length(t)], if tk(1) == 0.5, It05 = It(:,tk(2)); elseif tk(1) == 0.7, It07 = It(:,tk(2)); else end; end;

» disp([It05,It07]) 0.1148 0.1429 0.1047 0.1067 0.0845 0.0776

Lūk šāds, pirmajā acumirklī it kā gudrs risinājums. MATLAB-a valoda šajā situācijā ļauj izmantot daudz lakoniskāku risinājumu:

» It05 = It(:,t==0.5) It05 = 0.1148

Šeit for cikla izteiksmei tiek izmantota 2 rindu matrica. Mainīgā tk pirmajā elementā ir kārtēja t vērtība, bet otrajā indekss.

» It07 = It(:,t==0.7) It07 = 0.1429

0.1047 0.1067 0.0845

0.0776

Lūk tā – nekādu ciklu un nekādu if-else operatoru. No šī piemēra nevajadzētu izdarīt globālu secinājumu, ka bez if operatora mierīgi var iztikt. Tas ne tuvu nav tā. Tālāk mēs vēl saskarsimies ar minētā operatora pielietojumu piemēriem.

Cikla while izmantošana Šī cikla pamatforma ir līdzīga, citu valodu atbilstošajiem operatoriem: while izteiksme,

operatori

end

Operatora while operatoru bloks tiek izpildīts tikai tad, ja izteiksmes reālā daļa satur visus nenulles elementus. Šis cikls var neizpildīties arī nevienu reizi. Atšķirībā no for un if operatoriem šim operatoram MATLAB-ā nav tiešu aizstājēju.

Komats šeit nav obligāti, taču noder nākotnei, ja while konstrukciju pēkš-ņi izdomāsi pārrakstīt vienā rindiņā!

kUx = 0; Ri = 0; Rx = 0; Atradīsim tādu Rx, pie kura iepriekš aplūkotajam sprieguma dalītājam, dalījuma koeficients ir 0.8. Šo uzdevumu var atrisināt analītiski, bet mēs to izdarīsim ar cikla while palīdzību. Vajadzīgo precizitāti noteiks solis, ar kādu mainam Rx (piemērā 0.0001)

while kUx <= 0.8, kUx = Rx/(Ri+Rx); Rx = Rx + 0.0001; end; » Rx Rx = 0.4002

Page 63: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-63

Rezultātu grafiska attēlošana ar funkciju plot.

Visbiežāk lietojamā funkcija dažādu līkņu attēlošanai MATLAB-ā ir plot. Tā ļauj zīmēt vienlaicīgi daudzas līknes dažādās krāsās un ar dažādu līniju veidiem. Lai uzzīmētu līkni ir jābūt vismaz vienam datu vektoram. Par tās pielietojuma detaļām lasiet help-ā. Šeit neiztirzāsim detaļas. Lasiet un eksperimentējiet.

Liksim funkcijai plot attēlot sprieguma atkarību no laika uz rezistora R7: » R1 = .... » R = .... » Et = .... » It = R\Ėt; » U7t=It(3,:)*R7;

Papildini ar trūkstošo informāciju

» plot(t,U7t) » xlabel('Laiks (s)'); » title('Spriegums U_R_7(t)') » grid on;

Izpēti arī citas grafiskās palīgfunkcijas Zīm. 30. Sprieguma atkarība no laika uz

rezistora R7.

Tā, piemēram, ja ir nepieciešamība uzzīmēt vairākas līknes, to var izdarīt dažādos veidos. Ja līkņu nav pārāk daudz (pārskatāmības dēļ), atbilstošos datus uzdod kā vektoru pārus:

» plot(t,U7t,t,It(1,:)*R1)

Zīm. 31. Spriegumu atkarība no laika uz rezistoriem R1 un R7.

Ja pirmais arguments ir vektors, bet otrais matrica, tad no matricas ārā tiek "vilktas" kolonnas un "pārotas" ar pirmā argumenta vektoru. Šeit attēlosim spriegumus uz rezistoriem Tādējādi to pašu rezultātu, ko ieguvām iepriekš, mēs varam panākt arī šādi:

» Ut146 = [It(1,:)'*R1,It(2,:)'*R4,It(3,:)'*R6]; » plot(t,Ut146)

Zīm. 32. Spriegumu atkarība no laika uz rezistoriem R1, R4 un R6.

Page 64: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-64 ©Copyright Pičs (P. Misāns)

Grafikas attēlošanas īpatnības.

Lai pareizi interpretētu dažādus grafiskos rezultātus, ir labi jāsaprot, kā grafiskās funkcijas attēlo tām uzticēto informāciju.

Aplūkosim reālu piemēru, kurā tika veidots ar spriegumu stūrējams pastiprinātājs, kam pastiprinājuma koeficients mainījās pēc paraboliska likuma. Šoreiz neiedziļināsimies, kādā veidā tika iegūti 2-ās kārtas polinoma (parabolas) koeficienti, kuri šeit ir sakārtoti, sākot ar visaugstāko pakāpi, pakāpju dilstošā kārtībā:

Stūrējamā pastiprinātāja vadības ieejā, spriegums mainās robežās no –6V līdz +6V:

C = [-0.119423 0.129489 7.576147];

Jebkuras galīgas pakāpes polinoma vērtību varam sarēķināt bez lielām problēmām:

Ja mēs tagad mēģināsim attēlot grafiski pastiprinājuma koeficientu atkarībā no ieejas sprieguma.

plot(Vm,Km)

tad ieraudzīsim šādu skatu:

Pievērs uzmanību tam, ka grafiks tiek veidots, uzdotos punktus savienojot ar taisnēm. Starp punktiem pastiprinājuma izmaiņas patiesībā mainās pēc paraboliska likuma. Šāds attēlojums dod pilnīgi greizu priekšstatu par pastiprinājuma uzvedību. To obligāti ir jāpatur prātā.

Vm = -6:2:6;

Km= C(1)*Vm.^2 + C(2)*Vm + C(3);

Zīm. 33. Līnijveida (plot) grafikas piemērs

Daudz realistiskāka aina atklāsies, ja zīmēšanai izmantosim funkciju stem, kas grafiku attēlo "laternu" veidā:

stem(Vm,Km)

tad ieraudzīsim šādu skatu:

Patiesībā arī šis attēlošanas veids ir korekts tikai daļēji, jo īstā funkcija nesatur vertikālās līnijas. Attēlojamā informācija satur galīga skaita punktus, ko reprezentē apļveida marķieri.

Tā mēdz attēlot signālus un ciparu filtru koeficientus ciparu signālu apstrādē.

Zīm. 34. Stumbrveida (stem) grafikas piemērs

Page 65: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-65

Ir jāpatur prātā, ka grafiskās zīmēšanas funkcijas pašas par sevi nevar uzminēt to, kā ir jāattēlo līkne. Lietotājam ir ļoti daudz iespēju, kā uzlabot attēlojamās informācijas uzskatāmību konkrētajā kontekstā.

Atgriežoties pie iepriekšējā piemēra, vispatiesākais veids, kā grafiski atspoguļot ar tabulu uzdotus rezultātus (mūsu piemērā tie ir Vm un Km), ir izmantot zīmēšanai izvēlēto marķieri:

plot(Vm,Km,'*')

Marķieru veidus var apskatīt palū-dzot palīdzību par funkciju plot:

help plot

Kuru no tiem izmantot, tā ir katra brīva izvēle. Zīm. 35. Marķieru ('*') grafikas piemērs.

Ja ir droši zināms, ka mūsu piemērā sakarība starp spriegumu un pastiprinājumu ir paraboliska, tad, protams, līkni var uzdot daudz precīzāk vienkārši samazinot sprie-guma vektora soli un sarēķinot atbilstošās pastiprinājuma vērtības:

» V = -6:0.001:6; » K = polyval(C,V); » plot(Vm,Km,'o',V,K)

Funkcija polyval (polynomial value) veica to pašu, ko mēs, kad rēķinājām polinoma vērtību Km, izmantojot polinoma izteiksmi.

Zīm. 36. Līnijveida un marķieru ('o') grafikas

kombinācijas piemērs.

Ne vienmēr ir tā, ka mēs varam sarēķināt līkni tādu, kāda tā patiesībā izskatās, jo mēs nezinām funkciju, ar kādu tā tiek aprakstīta. Tādā gadījumā ir jāveic mērījumu datu i n t e r p o l ā c i j a vai a p r o k s i m ā c i j a . Par to sīkāk varat izlasīt konspekta otrajā daļā)

Kopsavilkums

Daudzos gadījumos, ja datu daudzums ir neliels, uzzīmētās līknes var kļūdaini attēlot patiesās sakarības. Ja tas ir iespējams, var mēģināt samazināt argumenta soli un vēlreiz pārrēķināt zīmējamo funkciju. Savukārt, ja datu daudzumu nevar izmainīt, tad vislabāk tos attēlot ar marķieru grafiku.

Page 66: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-66 ©Copyright Pičs (P. Misāns)

Kā uzzīmēt parametrisku līkni?

Visbiežāk elektroinženieru pielieto-jumos neatkarīgais parametrs ir laiks. Pieņemsim, ka mums ir jāattēlo līkne, kuras koordinātes mainās atbilstoši pēc kosinusoidāla un sinusoidāla likuma:

» t = 0:0.01:1; » x = cos(2*pi*t); » y = sin(2*pi*t); » plot(x,y) » axis('square')

Zīm. 37. Parametriskas līknes piemērs ar vienādām asu proporcijām (axis('square')).

Mainot sinusoīdas un kosinusoīdas frekvenci, var iegūt t.s. Lissažū figūras. Paeksperimentē.

Līkņu iesaldēšana. To mēdz lietot gadījumos, kad programmas darbības gaitā līknes uzrodas pa vienai un nav droši zināms vai tās parādīsies vai nē. Bez tam līkņu iesaldēšanu var piemērot funkcijām stem un stairs, jo tās "nav spējīgas" attēlot vairāk par vienu līkni vienlaicīgi. Tas, protams, ir loģiski. – Paeksperimentē un sapratīsi!

Aplūkosim piemēru, kurā attēlosim sinusoīdu un kosinusoīdu ar funkcijas stairs palīdzību:

» t = 0:0.02:1; f0 = 3; » y1 = sin(2*pi*f0*t); » stairs(t,y1) » hold on; » y2 = cos(2*pi*f0*t); » stairs(t,y2) » hold off;

Pēc sinusoīdas uzzīmēšanas tā tiek iesaldēta ar hold on palīdzību. Katra nākamā līkne, kas tiek zīmēta, tiek pievienota jau esošajām.

Zīm. 38. Kāpņveida grafikas (stairs) un līkņu

iesaldēšanas piemērs.

Beidzot darbu ar līkņu pievienošanu, nevajag aizmirst atcelt iesaldēšanu ar hold off. Veicot līkņu pievienošanu, var kombinēt visas plot radniecīgās funkcijas (plot, stem, stairs utt.)

]1,0[),2sin(),2cos(

∈⋅⋅=⋅⋅=

tkurtytx π

axis('square')

Ja nepieciešams, lai vizuālā attēlojuma mē-rogs būtu pareizs, tad ir jāizmanto

π

Aptuveni šādas "kāpņainas" oscilogrammas var ieraudzīt skaņu kartes izejā. Tiesa, tur kāpnīšu skaits ir ap pusmiljonu vienas sekundes laikā.

Page 67: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-67

Kā uzzīmēt līkni logaritmiskā mērogā? Elektroinženieriem bieži ir darīšanas ar frekvenču līknēm. Kā piemēru aplūkosim virknes svārstību kontūra (L-C-R) pārvades funkciju. Tā ir kompleksa funkcija:

Praksē visbiežāk ir interese par pārvades funkcijas moduli. Uzrakstīsim nelielu scenāriju, kas zīmē pārvades funkcijas moduli atkarībā no frekvences logaritmiskajā mērogā. Izvēlēsimies rezonanses frekvenci f0 = 0.1 kHz un labumu Q = 3:

20

02)(

0

)(

ωωω

ω

ωω

ω

+⎟⎟⎠

⎞⎜⎜⎝

⎛+

⎟⎟⎠

⎞⎜⎜⎝

=

jQ

j

jQ

jH

Lai frekvences attēlotu logaritmiskā mērogā, izmantosim funkciju semilogx:

f0 = 0.1e3; w0 = 2*pi*f0; Q = 3; B = w0/Q; f = 1:5000; w = 2*pi*f; num = (j*w)*B; den = ((j*w).^2+num+w0^2); Hjw = num./den;

» semilogx(f,abs(Hjw)) » grid on; Zīm. 39. Logaritmiska mēroga (x-ass) grafikas

piemērs (semilogx). Līdzīgi mēs varam izvēlēties logaritmisko mērogu tikai pa Y-asi ar funkciju semilogy. Lai logarit-misko mērogu uzstādītu vienlaicīgi pa abām asīm, izmanto funkciju loglog:

» loglog(f,abs(Hjw),'k') » grid on;

Zīm. 40. Logaritmiska mēroga (abas asis) grafikas piemērs (loglog).

Page 68: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-68 ©Copyright Pičs (P. Misāns)

Praksē lielākā problēma, strādājot ar logaritmisko mērogu, ir asu marķējums. MATLAB-a piedāvā-tais automātiskais marķējums ne vienmēr lietotāju apmierina. Uni-versāls risinājums ir rokturu grafikas izmantošana (sk. tālāk), taču reizēm ir iespējamai arī vienkāršāki risinājumi:

» HdB=20*log10(abs(Hjw)); » semilogx(f,HdB,'k') » grid on; » ylabel('K (dB)')

Zīm. 41. Pašrocīgi izveidota logaritmiska

mēroga grafikas piemērs.

3-dimensiju grafika.

Parasti 3-D grafika uz cilvēkiem atstāj iespaidu, jo tā ir informatīvāka par 2-D grafiku. Atgriezīsimies pie mūsu iepriekšējā piemēra. Inženieri bieži vien var interesēt, kā mainās rezonanses kontūra pārvades koeficienta moduļa līkne, atkarībā no rezonanses frekvences izmaiņām. Protams, iecerētās līknes var zīmēt arī divās dimensijās, taču tad grafika būs relatīvi pārblīvēta un tādēļ nepārskatāma.

Zīmējot 3-D virsmu, var izmantot funkciju mesh vai surf. Lai zīmēšana noritētu sekmīgi, ir atbilstoši jāsagatavo dati. Galveno lomu šai procesā spēlē funkcija meshgrid. Šī funkcija izveido divas pēc izmēra vienādas taisnstūra matricas. Vienai no matricām dublējas rindas, bet otrai kolonnas, kurās atbilstoši izvietojas X un Y koordināšu vektori. Lai labāk saprastu, kā tas notiek, vajag šo minēto funkciju izmēģināt komandu logā ar nelielu datu apjomu. Par sākotnējo X vektoru mums kalpos frekvence, bet par Y vektoru – rezonanses frekvence.

» f = 1:3 f = 1 2 3 » f0 = 100:104 f0 = 100 101 102 103 104 » [F,F0] = meshgrid(f,f0);

Aplūkosim iegūto rezultātu, ko ir saģenerējusi funkcija meshgrid:

» F

F = 1 2 3 1 2 3

» F0

F0 = 100 100 100 101 101 101

1 2 3 102 102 102 103 103 103 104 104 104

1 2 3 1 2 3

Page 69: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-69

Mūsu piemērā datu sagatavošana izskatās šādi:

f = 1:5000; f0 = 100:100:3000; [F,F0] = meshgrid(f,f0);

bet virsmas rēķināšana šādi:

Q = 2; W0 = 2*pi*F0; B = W0./Q; W = 2*pi*F; NUM = (j*W).*B; DEN=((j*W).^2+NUM+W0.^2); Zīm. 42. 3-D grafikas piemērs. HjW = NUM./DEN;

!!! Veidojot izteiksmes, ir jāatceras, ka tām ir jābūt vektorizētām.

Pats vienkāršākais veids, kā uzzīmēt virsmu, ir izsaukt funkciju mesh ar vienu argumentu (tā ir veidots konkrētais zīmējums):

» mesh(abs(HjW))

Taču, lai uz asīm būtu pareizas vētības, tad ir jāizmanto arī argumentu matricas:

» mesh(F,F0,abs(HjW))

Ja virsmas konfigurācija ir nepārskatāma, tad informatīvas var izrādīties vienāda līmeņa kontūras (izoklīnas), ko iegūst, izsaucot:

» contour(abs(HjW))

Izoklīnu skaitu, selekcijas līmeni un krāsu karti lietotājs var definēt. Tāpat var veikt izoklīnu marķēšanu. Īsi sakot, lasi help un darbojies.

Zīm. 43. Izoklīnu grafikas piemērs.

Page 70: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-70 ©Copyright Pičs (P. Misāns)

Līkņu izvads vairākos logos Funkcija plot un tai radniecīgās funkcijas (stairs, stem, bar, pie utt.) līknes var izvadīt vienlaicīgi vairākos logos vai apakšlogos. Funkcija subplot ļauj definēt vajadzīgo skaitu apakšlogu un novirzīt grafisko izvadu izvēlētajā apakšlogā. Apakšlogi tiek formēti vienā grafiskajā logā. Pirmais parametrs norāda apakšlogu skaitu pa vertikāli, otrais parametrs apakšlogu skaitu pa horizontāli, bet trešais parametrs norāda izvēlētā apakšloga numuru (numerācija no kreisās uz labo un no augšas uz leju).

Līkņu izvads vairākos apakšlogos viena grafiskā loga ietvaros Katram apakšlogam var izmantot visas iespējamās papildfunkcijas pilnīgi autonomi. Apakšlogs ne ar ko neatšķiras no parastā loga.

Ur7t=It(3,:)*R7; % spriegums uz rezistora R7 Ur1t=It(1,:)*R1; % spriegums uz rezistora R1 Ur4t=It(2,:)*R4; % spriegums uz rezistora R4 subplot(2,2,1), plot(t,Ur1t), title('U_R_1(t)'), grid on subplot(2,2,2), plot(t,Ur4t), title('U_R_4(t)'), subplot(2,2,3), plot(t,Ur7t), title('U_R_7(t)'), subplot(2,2,4), plot(t,It'), title('Visas konturstravas') legend('1.kont','2.kont.','3.kont')

Zīm. 44. Līkņu izvads apakšlogos ar subplot.

subplot(2,2,1) subplot(2,2,2)

subplot(2,2,3) subplot(2,2,4)

Page 71: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-71

Līkņu izvads vairākos grafiskajos logos Nereti grafiskā informācija ir jāizvada vairākos operētājvides logos. Jauna loga radīšanai tiek izmantota funkcija figure. Funkcija formē jaunradītā loga identifikatoru (handle -"rokturi"), kuru var izmantot novirzot grafisko informāciju izvēlētajā logā. Ja rodas tāda vajadzība, katrā jaunizveidotajā grafiskajā logā, kā iepriekš norādīts, var veidot apakšlogus ar funkcijas subplot palīdzību.

Aplūkosim piemēru. Vispirms saformēsim trīs atsevišķus grafiskos logus.

» h_U1 = figure; h_U4 = figure; h_It = figure;

Pirms grafiku izvada izvēlētajā logā, tas ir jāaktivē, izmantojot loga identifikatoru kā figure parametru.

Tā, piemēram, lai grafiks nokļūtu logā ar identifikatoru h_U1, mums ir jāuzraksta:

» figure(h_U1); » plot(t,Ur1t); » title('Spriegums U_R_1(t)') » grid on

Līdzīgi notiek informācijas novirzīšana arī pārējos logos:

» figure(h_U4); » plot(t,Ur4t); » title('Spriegums U_R_4(t)')

Arī līknēm var pieškirt individuālus identifikātorus. Nākošajā piemērā abu līkņu identifikatori glabājas masīvā h_pl

» figure(h_It); » t,It(2,:),'-.');

h_pl=plot(t,It(1,:), ...

» title(['Konturstravas', ... 'I_1(t),I_2(t)']); » legend(h_pl,'I_1(t)','I_2(t)');

Kā redzams, izmantojot funkciju legend, var identificēt katru no līknēm.

Zīm. 45. Grafiku izvads trīs dažādos pietauvotos grafiskajos logos.

Lasītājam vajag pievērst uzmanību faktam, ka visi trīs grafiskie logi ir pietauvoti zem viena kopēja superloga Figures. Par logu pietauvošanu jau runājām nodaļā par MATLAB darba virsmas organizāciju. Logs Figures veidojas, pietauvojot vismaz vienu grafisko logu. Kad tas ir izveidots, var pietauvot arī pārējos divus grafiskos logus. Pirms tam ar pogu Figures → Tile (redzama nospiesta Zīm. 45) ir vēlams izveidot vajadzīgu superloga konfigurāciju. Lai pārkārtotu logus, izmantojiet pārējās pogas.

☺ Viltībiņas: Tas, ka logi sākotnēji atrodas viens virs otra uzklāti, ļauj konstatēt līkņu (ne)identitāti, vienkārši pārslēdzot logus no MS Windows Toolbar.

Page 72: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-72 ©Copyright Pičs (P. Misāns)

Grafisko funkciju īss kopsavilkums Vietas un laika trūkuma dēļ šeit netiek izklāstītas grafisko funkciju detaļas. Tās atradīsi help-ā. Tici man, ka to lietojums nav sarežģīts. Plug & Pray (Iespraud un lūdzies) ! Šeit ir uzskaitītas tikai dažas pirmās nepieciešamības "preces".

Tabula 8. Dažas galvenās grafiskās funkcijas

G A L V E N Ā S G R A F I S K Ā S F U N K C I J A S

plot lineārs X-Ygrafiks plotyy lineārs X-Ygrafiks ar divām dažāda mēroga Y-asīm ezplot funkciju zīmētājs loglog logaritmiskais X-Y grafiks semilogx puslogaritmiskais X-Y grafiks (x ass logaritmiskajā mērogā) semilogy puslogaritmiskais X-Y grafiks (y ass logaritmiskajā mērogā) polar X-Y grafiks polārajās koordinātēs compass vektoru grafiskā attēlošana mesh 3-D tīklveida virsma contour 3-D virsmas kontūrgrafika stairs kāpņveida līknes attēlošana bar stabiņveida (histogrammveidīga) grafika stem stumbrveida ("laternas"-bet ne žurnāli) grafika

Grafikas "bižutērija":

Tabula 9. Grafiskās papildfunkcijas, grafiskā loga vadība

G R A F I S K Ā S P A P I L D F U N K C I J A S

GRAFISKĀ L O G A V A D Ī B A

title grafika virsraksts axis manuālā mēroga maiņa xlabel x ass apzīmējums xlim x -ass robežu iestādīšana ylabel y ass apzīmējums ylim y -ass robežu iestādīšana

text teksta izvads uzdotajā vietā hold iesaldē līkni grafiskajā logā grid tīkls (on/off – ieslēgt/izslēgt) shg apskatīt aktīvo grafisko logu

legend clf grafiku leģenda (komentāri) attīra aktīvo grafisko logu gtext subplot peles pozicionēts teksta izvads izveidot uz ekrāna apakšlogus ginput peles un klaviatūras ievads

figure jauna grafiskā loga atvēršana

Page 73: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-73

Ievads "rokturu" grafikā (Handle Graphics). Uzreiz jāatzīmē, ka šai lietai nav nekāda sakara ar durvju vai portfeļu rokturu zīmēšanu. To mēdz saukt arī par deskriptoru grafiku. Šo nodaļu ir vērts lasīt tikai tiem, kam patīk programmēt un tiem, kas vēlas nākotnē maksimāli izmantot grafiskās iespējas.

MATLAB-ā visa grafika ir būvēta kā objektorientēta grafika (Handle Graphics). Katram grafiskajam objektam ir savs rokturis (identifikators) un virkne īpašību (Properties). Ar roktura palīdzību objektu var "satvert" un mainīt atsevišķu īpašību uzstādījumus. Visi objekti ir hierarhiski sakārtoti:

Tālāk tikai nedaudz par šo!

Grafiskajâ logâ mēs varam veidot dažādas podziņas, lauciņus utt.

Komandu logs ir visu pārējo objektu pirmtēvs

Grafiskajos logos figure notiek visas grafiskās informācijas izvads

Katrā grafiskajā logā var būt daudzas asis (3-D un 2-D)

Zīm. 46. Grafisko objektu hierarhiskās struktūras organizācija (aizgūts no MATLAB Guide).

Detalizēts stāsts par 7.x versijas grafisko objektu organizāciju ir pagarš. Mēs šeit aplūkosim tikai vienu hierarhijas zaru Core Objects. Ar to pietiks – un ļoti ilgam laikam. Faktiski šī hierarhija valdīja iepriekšējās MATLAB versijās.

Zīm. 47. Core Objects grafisko objektu hierarhiskās struktūras organizācija.

Jāpiebilst, ka šeit neiznāca vieta rectangle objektam, ko var izmantot taisnstūra, noapaļota taisnstūra un elipses veidošanai ar izvēlēto aizpildījuma krāsu.

root

figure

axes

line light image patch surface text

uicontrol uimenu Izvēlnes

Līknes Attēli Krāsu "pleķi" 3D virsmas Teksti Gaisma

Page 74: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-74 ©Copyright Pičs (P. Misāns)

Zīm. 48. Dažādu grafisko objektu piemēri (aizgūts no MATLAB Guide).

Objektu radīšana notiek ar funkcijām, kuru nosaukumi ir redzami attēlotajā diagrammā Zīm. 47. Iepriekš mēs jau tā rīkojāmies, veidojot jaunus grafiskos logus. Nevar radīt vienīgi jaunu root. Objektu radīšanas funkcija saformē rokturi, vai vektora-kolonnas formā noformētu rokturu sarakstu, ja vienlaicīgi tiek radīti vairāki viena tipa objekti. Ja ir zināms objekta rokturis, tad var iegūt pilnu informāciju par visu objekta īpašību uzstādījumiem ar funkciju get. Ja objekts tiek likvidēts, pazūd arī tā rokturis.

Šeit radam tukšu grafisko logu un pēc tam ar funkciju get uz ekrāna izvadam visas loga îpašību (vairākus desmitus) nosaukumus un to uzstādījumus. Rūķītis visu ir izdzēsis un atstājis vienu pašu Property, kura rāda, ka logam nav neviena paša "bērniņa", t.i. ne asu, ne podziņu, nedz arī izvēlņu.

» h_f = figure; » get(h_f) . . . Children = [] . . .

Funkcija set ïauj veikt īpašību uzstādīšanu. Gadījumā, ja mēs neuzrādam nevienu īpašību mēs saņemam īpašību sarakstu ar potenciāli iespējamajiem uzstādījumiem. Vienai daļai īpašību tie ir stingri noteikti. Šeit varam redzēt, ka loga izmēru maiņa var būt ieslēgta (on - noklusētais režīms) vai izslēgta (off).

» set(h_f) . . . Resize: [{on}|off] . . .

Lielāko daļu informācijas par grafiskajiem objektiem pēc to radīšanas var iegūt iepriekš demonstrētā stilā ar funkcijām get un set. Ja drosminiekam turklāt ir arī angļu valodas zināšanas, tad ar to bieži vien pietiek, lai atrisinātu daudzas problēmas, kas saistītas ar grafisko vidi. Ja pēc īpašības nosaukuma nevar nojaust, ko tā nozīmē, tad ir jāpalasa Users Guide.

Page 75: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-75

Funkcijas get un set ir ļoti noderīgas tiem, kas programmē un tiem, kas mīl strādāt ātri. Pārējiem lietotājiem vairumā gadījumu pilnīgi pietiks ar Property Inspector. Tā ir programma, ar kuras palīdzību var gan apskatīties grafiskā objekta īpašības, gan tās pārstādīt, ja ir vajadzība. Pēc tam, kad objekts ir radīts un ir pieejams tā rokturis, atliek uzrakstīt (ja logs jau ir radīts):

» inspect(h_f)

un mums paveras skats uz visām figure loga īpašībām. Tālāk var eksperimentēt ar ko vien sirds tīko – mainīt krāsas konfigurāciju, novietojumu utt.

Tā, piemēram pamainīsim loga nosaukumu uz "Eksperiments". Ar set to var izdarīt, nomainot divas īpašības:

» set(h_f,'Name','Eksperiments', ... 'NumberTitle','off')

Par to, ka viss ir noticis var pārliecināties, vai nu palūkojoties uz pašu figure logu, inspector logu vai arī, izmantojot funkciju get:

» get(h_f,'Name') ans = Eksperiments

Zīm. 49. Property Inspector logs.

Zīm. 50. Grafiskais logs ar nomainītu nosaukumu.

Nebaidies, bet eksperimentē - Handle Graphics savā būtībā ir ģeniāli vienkārša. Ja gribi nopietni darboties ar grafiskā interfeisa veidošanu, izsauc guide (Graphical User Interface Design Environment).

Nākošais scenārijs veic apmēram kaut ko līdzīgu tam, ko var izdarīt ar funkciju comet (apskaties Help-u un pamēģini), t.i. sinusoīda tiek zīmētā tāpat, kā osciloskopā soli pa solim, nevis tā kā to dara funkcija plot - parādot jau uzzīmētu līkni.

plot šoreiz noformē rokturus uz diviem objektiem line.

% "Dzîvâ" sinusoîda t = 0:0.01:1; y = sin(2*pi*2*t); h_sin(1) - satur rokturi uz punktu

(t(1),y(1)) h_sin = plot(t(1),y(1),t,0*t); h_sin(2) - satur rokturi uz

"taisnu" līkni t,0*t xlim([min(t),max(t)]); lim([1.5*min(y),1.5*max(y)]); y

h_o = line(t(1),y(1),'Marker','o'); s et([h_sin;h_o],'EraseMode','xor');

for k=2:length(t), set(h_sin(1),'XData',t(1:k), ... 'YData',y(1:k)); set(h_o,'XData',t(k),... 'YData',y(k)); drawnow; pause(0.1);

Zīm. 51. "Dzīvā" sinusoīda. end;

Page 76: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-76 ©Copyright Pičs (P. Misāns)

Zīmēšanu cikliski katrā cikla iterācijā aktivē funkcija drawnow, kas neļauj aizmirst veiktos uzstādījumus. Ar komandām set katrā cikla iterācijā tiek nomainīti divu objektu line dati, kas atbild par līknes formu (par to atbild īpašības XData un YData) un apļveida marķiera pozīciju. Attēlā ir redzams stop-kadrs no bildes, kas rodas, darbinot tikko uzrakstīto scenāriju. Izmēģini un modificē, piemēram, tā, lai līkni zīmē "atpakaļgaitā"

Figure loga rediģēšanas līdzekļi

Grafisko objektu īpašību redaktors Property Editor

Grafisko objektu īpašību redaktors ļauj mainīt jau uzzīmētu grafisko objektu īpašības. To startēt var dažādos veidos. Viens paņēmiens ir izmantot figure loga izvēlni View → Property Editor. Šis starta paņēmines noder arī tad, ja grafiki tiek veidoti no "nulles".

Mēs redzam, ka redaktora logs ir "piekabināts" grafiskā loga apakšdaļā. Redaktora logā ir pieejama daļa no iezīmētā objekta īpašībām. Īpašību nosaukumus var redzēt, ja uz to uzstādīšanas vietas uzbīda peles kursoru (ToolTips). Piemērā mēs line objektam (sinusoīdas gabalam) esam nomainījuši līnijas biezumu LineWidth no 0.5 uz 2.0.

Zīm. 52. Darbs ar Property Editor.

Gadījumā, ja mums ir darīšana ar lineseries objektu (tas ir parādījies tikai versijā 7.x), tad mēs principā varam nomainīt izvēlētās līknes datus ar jebkuriem datiem no darba atmiņas un tādējādi kardināli pārveidot esošo līkņu izskatu, neizejot no redaktora un nelietojot plot vai kādu citu zīmēšanas funkciju.

Grafiskais redaktors Plot Edit

Figure logā no izvēlnes View mēs varam aktivizēt arī Plot Edit rīkjoslu, kas ir būtiska grafiskā redaktora sastāvdaļa. Faktiski šeit nav tāda īpaša grafiskā redaktora loga. Rīkjosla tikai papildina esošo Insert izvēlni ar jauniem objektiem, kurus lietotājs var izmantot, lai līdz nepazīšanai izdaiļotu savu aprēķinu šedevru.

Plot Edit rīkjosla

Zīm. 53. Darbs ar Plot Edit.

Page 77: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-77

Pilnvērtīgi Plot Edit darbojas komlektā ar jau iepriekš aplūkoto Property Editor. Konkrētaja piemērā esošajam grafikam tiek pievienoti divi objekti – Ellipse un Text Arrow. Lai aplūkotu pārējās iespējas, - vienkārši sēdi un darbojies!

Datu kursors

MATLAB-a 7.x versijā ir parādījies jauns objekts – Data Cursor, kuru pie vajadzības var aktivizēt arī no programmas vai komandu loga ar datacursormode. Datu kursors ir pieejams arī no Figure izvēlnes Tools → Data Cursor. vai nospiežot atbilstošu pogu (sk. Zīm. 54) Datu kursoru var pārvietot ar peles kursoru vai bultiņu taustiņiem. Kursors pārvietojas pa līknes datu punktiem un rāda pozīcijas koordinātes. Ar peles labo taustiņu var aktivizēt izvēlni (sk. Zīm. 54), kas ļauj veikt dažādas manipulācijas. Autoraprāt, svarīgākās ir - jauna datu kursora radīšana Create New Datatip un koordināšu eksports uz darba atmiņu. Datu kursors ir ļoti ērts instruments dažādu virtuālu mērījumu veikšanai.

Datu kursors Data Cursor poga

Zīm. 54. Datu kursora izmantošana.

Matricu konstruēšana Matricu konstruēšanu (montāžu) veic ļoti vienkārši. Jebkura matricas elementa vietā mēs varam ievietot vektorus vai matricas vai izteiksmes. Vienīgi jāatceras, ka rezultātam ir jābūt taisnstūrveida objektam. Tas pats attiecas arī uz matricu demontāžu. Matricu demontāžai lieto tukšo matricu [].

Elementāru matricu (de)montāžas piemēri Izveidosim trīsstūrveida signālvektoru, izmantojot izteiksmes, kas ir ģenerētas ar kolonveida operāciju ":":

» A = [1:5,4:-1:1] A = 1 2 3 4 5 4 3 2 1

Ja mēs no tiem pašiem vektoriem gribēsim izveidot divu rindu matricu, tad cietīsim neveiksmi, jo rezultāta matrica nav taisnstūrveida:

» B = [1:5;4:-1:1] ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns.

Pagarināsim otro rindu par vienu elementu:

Page 78: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-78 ©Copyright Pičs (P. Misāns)

» B = [1:5;5:-1:1] B = 1 2 3 4 5 5 4 3 2 1

Pieņemsim, ka mums ir ievadīta matrica:

» C = [1:3;4:6] C = 1 2 3 4 5 6

Matricas mēs varam veidot arī no matricu izteiksmēm:

» D = [C,2*C;C/2,C] D = 1.0000 2.0000 3.0000 2.0000 4.0000 6.0000 4.0000 5.0000 6.0000 8.0000 10.0000 12.0000 0.5000 1.0000 1.5000 1.0000 2.0000 3.0000 2.0000 2.5000 3.0000 4.0000 5.0000 6.0000

Mēģinājums samontēt nesaskanīga izmēra matricas

» [C;A] ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns.

noved pie kļūdas.

Tālāk mēģināsim no matricas D "izmest" vidu:

D = 1.0000 2.0000 3.0000 2.0000 4.0000 6.0000 4.0000 5.0000 6.0000 8.0000 10.0000 12.0000 0.5000 1.0000 1.5000 1.0000 2.0000 3.0000 2.0000 2.5000 3.0000 4.0000 5.0000 6.0000

» D([2,3],[3,4])=[] ??? Indexed empty matrix assignment is not allowed.

Rezultātā mums neveidojas taisnstūrveida objekts. Savukārt no matricas izvākt "krustu":

D = 1.0000 2.0000 3.0000 2.0000 4.0000 6.0000 4.0000 5.0000 6.0000 8.0000 10.0000 12.0000 0.5000 1.0000 1.5000 1.0000 2.0000 3.0000 2.0000 2.5000 3.0000 4.0000 5.0000 6.0000

nav problēmu, bet tas ir jādara divos piegājienos:

» D(2:3,:) = [] D = 1.0000 2.0000 3.0000 2.0000 4.0000 6.0000 2.0000 2.5000 3.0000 4.0000 5.0000 6.0000

Page 79: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-79

» D(:,3:4) = [] D = 1.0000 2.0000 4.0000 6.0000 2.0000 2.5000 5.0000 6.0000

Funkcijas repmat izmantošana Nereti rodas vajadzība veidot matricas, kuru kolonnas vai rindas atkārtojas. Lai šādu konstruēšanu veiktu, nebūt nav jāizmanto cikli, pietiek ar funkciju repmat. Atsauksim atmiņā problēmu ar trīsdimensiju grafiku. Lai izrēķinātu virsmu, mums bija jāizveido divas matricas, kurās atkārtojas rindas un kolonnas. Pieņemsim, ka mums ir divi rindu vektori x un y:

» x = 0:0.1:0.3; » y = 1:5;

Izveidosim X, kuram ir tikpat rindu, cik y elementu:

» X = repmat(x,length(y),1) X = 0 0.1000 0.2000 0.3000 0 0.1000 0.2000 0.3000 0 0.1000 0.2000 0.3000 0 0.1000 0.2000 0.3000 0 0.1000 0.2000 0.3000

un Y, kuram kolonnu ir tikpat, cik x elementu:

» Y = repmat(y',1,length(x)) Y = 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5

Kā bāzes elementu, izmantojot matricu, repmat ļauj veidot supermatricu ar jebkuru rindu un kolonnu skaitu. Izmantosim agrāk iegūto C, lai formētu 3 superrindas un 2 superkolonnas:

» repmat(C,3,2) ans = 1 2 3 1 2 3 4 5 6 4 5 6 1 2 3 1 2 3 4 5 6 4 5 6 1 2 3 1 2 3 4 5 6 4 5 6

Funkcijas reshape izmantošana un vēl viens ":" pielietojums Ar funkciju reshape veic matricas rekonfigurāciju. Lai saprastu, kā tā darbojas, aplūkosim matricas izvietojumu atmiņā. Faktiski, atmiņā matricas glabājas pa kolonnām vienā garā "desā". To var konstatēt ar operāciju ":", kuru jau izmantojām diviem citiem pielietojumiem. Kā piemēru aplūkosim jau iepriekš ievadīto C:

Page 80: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-80 ©Copyright Pičs (P. Misāns)

» C C = 1 2 3 4 5 6

» C(:) ans = 1 4 2 5 3 6

Protams, operāciju ":" var izmantot ne tikai matricas apskatei, bet arī pārveidošanai vienā garā kolonnā vai rindā, ja papildus vēl izmantojam transponēšanu.

Tagad, kad ir iegūta viena "gara desa":

» C » C(:) ans = C = 1

4 1 2 3 2 4 5 6 5 3 6

varam ķerties pie reshape demonstrācijas:

» reshape(C(:),3,2) » reshape(C,3,2) ans = ans = 1 5 1 5 4 3 4 3 2 6 2 6

Kā redzam, kolonna operācija šeit nav nepieciešama. Mēs to izmantojām tikai tādēļ, lai uzskatāmi demonstrētu reshape darbību.

Funkcija nedarbosies, ja iecerētās matricas elementu skaits būs atšķirīgs no reshape otrā un trešā argumenta reizinājuma:

» reshape(C,3,3) ??? Error using ==> reshape To RESHAPE the number of elements must not change.

Šoreiz matricu māksīgi pārveidosim (montāža), "piekabinot" nulles, lai tomēr gūtu gandarījumu:

» reshape([C(:);0;0;0],3,3) ans = 1 5 0 4 3 0 2 6 0

Uzmanīgs lasītājs būs droši vien sapratis, ka kolonna operācija ir ekvivalenta

» reshape(C,prod(size(C)),1)

Funkcija prod šoreiz reizina matricas rindu skaitu ar kolonnu skaitu.

Page 81: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-81

Teksta matricu montāža ar strvcat Ja lasītājs vēlas izveidot lietošanā ērtu programmu, tad viņam agri vai vēlu būs jāsastopas ar teksta apstrādi. Šeit tuvāk nekavēsimies pie funkciju apskata, kas domātas ir teksta apstrādei. Tās visas var atrast palūdzot palīdzību help strfun.

Vienu garu teksta rindu var izveidot arī ar parastiem matricu montāžas līdzekļiem, sakabinot vienu teksta rindu otrai galā:

» s = ['Kas ir skaitlis ',num2str(pi),'?'] s = Kas ir skaitlis 3.1416?

Tādā veidā var montēt pēc patikas daudz teksta rindu vienā garā rindā.

Nedaudz komplicētāka situācija ir, ja ir vajadzība katru no dažāda garuma teksta rindām salikt savā matricas rindā. Normāli to darot, parādā kļūda:

» sm = ['Kur ir skaitlis '; num2str(pi);'?'] ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns.

Izeja ir rodama, ja šīs rindas saglabā šūnu matricā:

» sm = {'Kur ir skaitlis '; num2str(pi);'?'} sm = 'Kur ir skaitlis ' '3.1416' '?'

taču tas ne vienmēr var būt izmantojams. Lai problēmu atrisinātu parastām matricām katras rindas galā var pievienot pareizu skaitu atstarpju (whitespace). To dara funkcija strvcat:

» sm = strvcat('Kur ir skaitlis ', num2str(pi),'?') sm = Kur ir skaitlis 3.1416 ?

Lai izdalītu vajadzīgo teksta rindu no teksta matricas, izmetot "astes" tukšumu, ir jāizmanto funkcija deblank:

» deblank(sm(2,:)) ans = 3.1416

Korekta iepriekš apskatītās rindas s atjaunošana ir veicama šādi:

» [sm(1,:), deblank(sm(2,:)),deblank(sm(3,:))] ans = Kur ir skaitlis 3.1416?

Page 82: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-82 ©Copyright Pičs (P. Misāns)

Matricu montāžas piemērs elektriskai ķēdei. Apūkosim mūsu fona piemēru – trīskontūru rezistīvu shēmu. Iedarbosimies uz minēto shēmu ar trīs dažādiem spriegumiem.

⎩⎨⎧

∈∈

=

⎪⎩

⎪⎨⎧

∈∈∈

=

∈⋅⋅⋅=

]3,2(),(]2,0[,0)(

,]3,2(,0]2,1(,8.0],1,0[,0

)(

],3,0[,)32sin()(

3

2

1

k

kk

k

k

k

k

kkk

ttrandttE

ttt

tE

tVttE π

(3)

Pievērsiet uzmanību tam, ka spriegumi "ieslēdzas/ieslēdzas" dažādos laika momentos. Ar rand šeit tiek saprasts gadījuma process ar vienmērīgu varbūtību blīvuma sadalījuma funkciju. Indekss k akcentē to, ka signālu iedarbību mēs varam imitēt tikai diskrētos laika momentos.

Aplūkojot uzrakstītās izteiksmes redzam, ka laika intervālu [0, 3] mēs varam sadalīt trijos segmentos. Saformēsim šos laika segmentus, izmantojot izvēlētu laika soli dt un notestēsim kopējo "laika gaitu" intervāla [0, 3] ar funkciju plot:

» dt = 0.1; » t1 = 0:dt:1; » t2 = 1:dt:2; » t3 = 2:dt:3; » plot([t1,t2,t3])

Zīm. 55. "Laika gaitas tests 1".

Redzam, ka īsti labi nav, jo laiks divas reizes apstājas (pakāpieni). Tas ir tādēļ, ka pārklājas apakšintervālu sākumi un beigas. Dinamisku shēmu simulācijās varam iegūt muļķības. Šoreiz tas nav kritiski, taču kārtībai ir jābūt.

» dt = 0.1; » t1 = 0:dt:1; » t2 = 1+dt:dt:2; » t3 = 2+dt:dt:3; » plot([t1,t2,t3])

Zīm. 56. "Laika gaitas tests 2".

Tālāk atliek tikai saformēt EDS matricu. To var izdarīt uzreiz, bet labāk tomēr to darīt pakāpeniski, katru no spriegumu atkarībām, montējot atsevišķi:

» E1 = sin(2*pi*2*[t1,t2,t3]); » E2 = [zeros(size(t1)),0.8+0*t2,0*t3]; » E3 = [zeros(size([t1,t2])),rand(size(t3))];

Pārliecināsimies, ka spriegumu atkarības ir tāda, kā iecerēts:

Page 83: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-83

Pārliecināsimies, ka spriegumu atkarības ir tāda, kā iecerēta:

» plot([t1,t2,t3], ... [E1',E2',E3'])

Redzam, ka signāli ir sanākuši tādi stūraini. Tas ir tādēļ, ka solis ir izvēlēts rupjš. Parasti, kad top pirmais scenārija variants, necenties izvēlēties mazu soli, jo kādreiz, ja kaut kas nestrādā, noder arī skaitļu vektoru apskate, kas maza soļa gadījumā var izrādīties ilga.

Zīm. 57. Visi trīs iedarbes spriegumi laika

solim dt = 0.1.

Tālāk pacenties iegūt to ainu, ko Tu redzi Zīm. 58. Atceries, ka nomainot soli, Tev ir jāatkārto visi aprēķini, jo mainīgo t1, t2 utt. saturs mainīsies.

Bez tam ir jāatceras, ka funkcija rand (apskaties help) ģenerē skaitļus (spriegumus) intervālā [0, 1]. Tādēļ, lai iegūtu zīmējumā redzamo ainu, mums ir jākoriģē E3 formēšanas rinda:

Zīm. 58. Visi trīs iedarbes spriegumi laika solim dt = 0.001. » E3 = [ieraksti pat(i)s, ...

rand(size(t3))-0.5];

Lai tālāk veiktu trīskontūru shēmas simulāciju, mums vēlams saformēt EDS matricu Et, vienu laika vektoru t un veikt simulāciju (ja ir saglabājušies iepriekšējie rezultāti). To var izdarīt pavisam vienkārši;

» t = [t1,t2,t3]; » Et = [E1; E2; E3]; % Simulation & plot » It = R\Et; » plot(t,It(2,:))

Zīm. 59. Strāva zarā R4.

Iegūtajā oscilogrammā ir ļoti labi redzama ieejas signālu radīto strāvu superpozīcija zarā R4.

Elektrisko specialitāšu studentam nevajadzētu tikai akli atkārtot šeit dotos piemērus, bet noteikti vajadzētu pameditēt un paeksperimentēt ar šo shēum un aplūkotajiem signāliem, lai padziļinātu savas zināšanas lineāro elektrisko ķēžu pamatos.

Page 84: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-84 ©Copyright Pičs (P. Misāns)

Scenāriji un funkcijas. Ar scenāriju mēs saprotam MATLAB-a failu, kurā ir uzdotas MATLAB-a sintaksei atbilstošas teksta rindas. Scenārija failu ar tajā esošajiem MATLAB-a operatoriem, komandām utt. mēs varam startēt no komandu loga, izmantojot scenārija faila nosaukumu līdz piedēklim ".m". Atcerēsimies, ka scenārija darbības sekas – saformētās matricas, datu struktūras utt. paliek darba atmiņā (Workspace) un ir pieejamas arī pēc scenārija "nobeigšanās". Scenārija piemēru var aplūkot iepriekšējās lappusēs. (sin_plot.m, sineaf.m utt.).

Scenārija galvenā priekšrocība ir tā, ka to var viegli veidot, izmantojot komandu logu. To var viegli skaņot, jo jebkuru mainīgo var apskatīt komandu logā.

Scenārija galvenais trūkums ir tāds, ka to nevar izmantot kā universālu programmas moduli un iekļaut bibliotekās plašai lietošanai. Piemēram, ja mēs iepriekšējās lappuses scenārijā gribam nomainīt laika soli, tad mums faktiski ir jāmaina scenārija kods. Turpretī, kad Jūs rēķinat sinusu, Jums nav jāmaina šīs funkcijas kods. Pietiek ar to, ka lietojot šo funkciju, Jūs mainat tikai argumenta vērtību.

Kādēļ ir vajadzīga funkcija? Ir vairāki iemesli, kādēļ tiek veidotas funkcijas:

1. Programmas modulis, kas ir noformēts funkcijas veidā netraucē citu funkciju moduļiem, jo visi mainīgie funkcijas iekšienē ir lokāli un datora atmiņa glabājas citās vietās nekā pārējo funkciju tāda paša nosaukuma mainīgie.

2. Ļoti ērta lietošanā, ja funkciju aprēķinos izmanto vairākārt. Tas samazina koda apjomu tajos programmu moduļos, kuros funkcija tiek izmantota. Programmas kļūst pārskatamākas un daudz ērtāk modificējamas.

3. Funkciju, ja ir tāda vajadzība, var ievietot izteiksmēs. Klasisks piemērs ir trigonometriskās funkcijas.

4. Funkciju var izsaukt rekursīvi. Tas nozīmē, ka funkcija var izsaukt pati sevi. Tas ļauj samazināt programmas koda apjomu.

Kā sākt veidot funkciju?

Šie padomi ir domāti iesācējiem gan programmēšanā vispār gan arī iesācējiem MATLAB-ā, taču, iespējams, var noderēt arī citiem.

Kā tad sākt veidot funkciju? Universālas receptes nav. Vispirms, protams, vajadzētu tikt skaidrībā ar to, kas funkcijai ir jādara. Tas nozīmē, ka ir jābūt skaidram darbības algoritmam.

Funkciju būtu vēlams veidot soli pa solim, sākot ar galveno darbību. MATLAB-a vide ir īpaši pateicīga, jo mēs varam sākt kaut vai ar vienu rindiņu.

MATLAB-ā Būtu vēlams sākt ar scenārija veidošanu. Tikai pēc tam, kad tas sāk darboties, var ķerties pie scenārija pārbūvēšanas funkcijas moduļa veidā (tas ir vienkārši).

Visātrākais ceļš, kā izveidot scenāriju, ir - rindu pēc rindas izmēģināt komandu logā. Tiklīdz kāda scenārija rindiņa ir darbaspējīga, to vēlams piepulcēt pārējām

Page 85: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-85

scenārija faila rindām. Vai pievienošanu veikt pa vienai rindai vai pa vairākām, ir atkarīgs no darba stila. Tā vai citādi, nevajadzētu krāt daudz rindu.

Scenārija veidošanai var izmantot dienasgrāmatu (diary), kas fiksē visas tās darbības, kuras norisinās komandu logā. Tikai ir jāatceras, ka, ja dienasgrāmatas fails būs pārāk liels, to būs grūti rediģēt.

Tiklīdz scenārijs sāk darboties, tam atliek pievienot funkcijas definīcijas galvu un lieta ir darīta.

Funkcijas Daudzos pielietojumos ļoti ērta ir MATLAB funkciju izmantošana.

Ja M-faila pirmā rinda satur vārdu function, tad fails tiek uzskatīts par funkciju.

function

Tāpat kā citās programmēšanas valodās funkcijai ir parametri jeb argumenti. Argumenti var būt ne tikai skalāri, bet arī matricas. Atšķirībā no citām valodām (piem. C), kur funkcija formē vienu vērtību vai adresi, MATLAB funkcija spēj saformēt un atgriezt to izsaucošajā modulī daudzus objektus.

Parametri

Vienai un tai pašai funkcijai ieejas un izejas parametru skaits, atkarībā no pielietojuma konteksta, drīkst mainīties. Ieejas argumentu skaitu kontrolē speciāls mainīgais nargin, bet izejas argumentu skaitu nargout.

nargin nargout

Aprakstot funkciju, var lietot speciālu mainīgo varargin ieejas parametru vietā. Līdzīgi izejas parametru vietā var izmantot varargout. Tas ļauj strādāt ar brīvi mainīga skaita un satura funkcijas parametriem. Ieteicams izmantot tikai tad, kad ir jau gūta zināma programmēšanas pieredze.

varargin varargout

Jāatceras, ka mainīgie, kas tiek izmantoti funkcijas iekšienē, ir lokāli un nav "redzami" ārpus funkcijas. Tie nesaglabā savas vērtības izejot no funkcijas (atšķirībā no C static mainīgajiem)

Lokālie mainīgie

Ja ir vajadzība, lai mainīgais pēc atkārtotas funkcijas izsaukšanas saglabātu vērtību līdzīgi kā C static mainīgais, tad to funkcijas modulī ir jāpasludina kā persistent.

statiskie mainīgie

globālie mainīgie

Nereti kāds mainīgais ir vienlaicīgi jāizmanto daudzos funkcijas moduļos, Tādā gadījumā ērta var izrādīties mainīgā pasludināšana par global. Tas būs pieejams visos tajos programmu moduļos, kuros tas par global ir pasludināts (līdzīgi kā C external). Pieredzējuši programmisti brīdina, ka lielos projektos globālie mainīgie ir potenciāli kļūdu avoti.

return Parasti atgriešanās no funkcijas notiek tajā vietā, kurā funkcijas

moduļa teksts beidzas. Ja šī kārtība ir jāmaina, tad papildus jāizmanto operators return.

Funkcijas aprakstam ir noteikti jābūt atsevišķā failā (sākot ar MATLAB 5 funkcijas failā drīkst atrasties arī citas (lokālās) funkcijas). Bez tam, ja funkcija atrodas atsevišķā failā, tās nosaukumam vajadzētu sakrist ar faila nosaukumu līdz piedēklim .m (sk. nākošo piemēru). Tas ļaus izvairīties no problēmām.

*.m

Page 86: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-86 ©Copyright Pičs (P. Misāns)

Ko nedrīkst?

Funkciju nedrīkst definēt komandu logā.

Funkcijas modulis nedrīkst atrasties vienā failā ar scenāriju. Tas nozīmē, ka faila rindās pirms atslēgas vārdiņa function, drīkst būt tikai un vienīgi komentāru rindas (tās sākas ar %).

Elementāras funkcijas piemērs. Dažādu iemeslu dēļ signālus formējošus moduļus ir ērti noformēt funkciju izskatā. Iepriekšējās nodaļās trīskontūru shēmai mēs formējām iedarbes spriegumus kā scenāriju fragmentus. Pamēģināsim tos noformēt funkcijā. Ko tas dod? – Mēs, piemēram varētu mainīt intervālu robežas un laika soli, nemainot funkcijas kodu.

Spriegurmam E3 pašdemonstrējoša funkcija, kas ir obligāti jāsaglabā failā gen_e3t.m varētu izskatīties šādi:

function [E3t,t] = gen_e3(dt,tm); % formee troks'n'u impulsu if nargin < 2, tm = [1,2,3]; end; % noklusētās robežas if nargin < 1, dt = 0.1; end; % noklusētāis solis t1 = 0:dt:tm(1); t2 = tm(1)+dt:dt:tm(2); t 3 = tm(2)+dt:dt:tm(3);

E3t = [zeros(size(t1)), ... 2*rand(size(t2))-1, ... zeros(size(t3))]; % signāla amplitūda būs 1 t = [t1,t2,t3]; % Ja izejā nav argumentu funkcija sevi izrāda if nargout == 0, plot(t,E3t); end;

Ja funkcijas izsaukumu no komandu loga vai scenārija uzrakstīsim bez parametriem, tad tiks izvēlētas noklusētās intervāla robežas ((1, 2]) un noklusētais solis (0.1):

» gen_e3t;

Funkcija formēja grafiku tādēļ, ka mēs neprasījām izejas parametrus. Zīm. 60. Trokšņu impulss, ģenerēts ar soli 0.1

intervālā (1, 2].

Ja mēs uzrādītu izejas parametrus, tad grafiks zīmēts netiktu, bet mēs varētu iegūt saformētā signāla vērtību vektoru un laika vektoru.

☺ Viltībiņas: Nevajadzētu brīnīties, ka gadījuma signāls, katru reizi izskatīsies citādāks. Ja tas traucē papēti help rand un veic atbilstošos pasākumus.

Page 87: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-87

Funkciju var izsaukt arī ar citu soli:

» dt = 0.001; » gen_e3t(dt); » text(0.1,0.5, ... ['\Delta=',num2str(dt)])

Šeit pie reizes tiek demonstrēta arī uzraksta uzlikšana izvēlētajā vietā ar funkciju text., kā arī teksta interpretatora Tex darbība – Lielais grieķu burts Δ.

Zīm. 61. Trokšņu impulss, ģenerēts ar soli

0.001 intervālā (1, 2].

Šoreiz funkcija vairs automātiski nezīmē iecerēto trokšņu impulsu. Par to lasītājam ir jārūpējas pašam:

» dt = 0.001; » [e,t] = gen_e3t(dt, ... [.5,2.5,3]); » plot(t,0.7*e,... 'LineWidth',2)

Pievērs uzmanību tam, ka līnijas biezumu var norādīt!

Zīm. 62. Trokšņu impulss, zīmēts ar amplitūdu

0.7 intervālā (0.5, 2.5]. Funkcijas priekšrocība ir tāda ka, ja mēs izmantojam tikai vienu izejas argumentu, tad to var iebūvēt izteiksmēs. Tā, piemēram, mēs varētu uzreiz saformēt vajadzīgo sprieguma amplitūdu:

» t = 0:dt:3; » e3t = 0.7*gen_e3t(dt,[.5,2.5,max(t)]);

Salīdzināšanas un loģiskās operācijas

Zināmas lietas

Visbiežāk izmanto operatoros if-else un while, lai definētu atbilstošos izpildes nosacījumus. Šis salīdzināšanas un loģisko operāciju pielietojums principiāli ne ar ko neatšķiras no pielietojumiem citās programmēšanas valodās.

Loģiskā matrica

Veicot salīdzināšanas operācijas, veidojas loģiskās matricas, kas satur tikai "1"(TRUE) un "0"(FALSE). Loģiskās matricas pēc tam var apstrādāt ar loģiskajām operācijām. Ja loģisko matricu izmanto matricu indeksu vietā, tad no matricas tiek izdalīti tikai tie elementi, kuriem atbilst "1" loģiskajā matricā. Sākot ar MATLAB 5.x, ir speciāls datu tips logical.

Datu apstrāde

Ļoti efektīvi salīdzināšanas un loģiskās operācijas var izmantot datu apstrādē un filtrācijā. Šī iespēja ir raksturīga tikai MATLAB un ļauj uzrakstīt lakonisku un skaidri saprotamu programmas kodu bez nosacījumu pārbaudes un cikla operatoru palīdzības.

Page 88: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-88 ©Copyright Pičs (P. Misāns)

Vienādu izmēru matricu salīdzi-nāšanai lieto sekojošas operācijas:

Kā redzam tās ir līdzīgas citās valodās izmantotajām salīdzināšanas operācijām. Izņēmums ir neekvivalents "~=".

< mazāks <= mazāks vai vienāds > lielāks >= lielāks vai vienāds == ekvivalents ~= neekvivalents

& UN | VAI

~ NE Vienādu izmēru matricām var iz-mantot sekojošas loģiskās operācijas:

Mēģinājums uzrakstīt signāla formētāju ar operatora if palīdzību. Aplūkojot funkciju gen_e3t no konceptuālā viedokļa, mēs varam saskatīt vienu lielu trūkumu. Atšķirībā, piemēram, no sin funkcijas, kura var sarēķināt vērtību jebkurai argumenta vērtībai, mūsu funkcijai ir ierobežojumi, kas ir saistīti ar soļa vērtību. Daudz loģiskāk būtu šo funkciju veidot tā, lai arguments būtu nevis solis, bet gan laiks (viena vai daudzas patvaļīgas vērtības). Pamēģināsim izveidot signāla formētāju saskaņā ar iecerēto koncepciju.

Uzrakstīsim funkciju, kurai ir jāatrodas failā gen_e3t_if.m:

function E3t = gen_e3t_if(t,tm); % formee troks'n'u impulsu if nargin < 2, tm = [1,2,3]; end; if nargin < 1, t = 0:0.1:3; end; x1 = []; x2 = []; x3 = []; if ((t>=0)&(t<=tm(1))), x1 = zeros(size(t)); end; if ((t>tm(1))&(t<=tm(2))), x2 = 2*rand(size(t))-1; end; if ((t>tm(2))&(t<=tm(3))), x3 =zeros(size(t)); end; E3t = [x1,x2,x3]; if nargout == 0, plot(t,E3t); axis([0,tm(3),-1.2,1.2]); end;

Ekvivalences noskaidrošanai izmanto

D I V A S vienādības zīmes

Tukšās matricas ir tādēļ, lai vektors būtu definēts, ja arī signāls netiek saformēts.

Lai nevajadzētu lauzīt galvu par loģisko un attiecību izteiksmju prioritātēm, lie-tojiet iekavas.

Neveiksmīgs operatoru

if pielietojums

Arī tukšās pudeles kādreiz lieti noder ...

To, kas mums ir sanācis, mēs varam mēģināt noskaidrot, izsaucot uzrakstīto funkciju ar dažādiem argumentiem.

Page 89: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-89

» gen_e3t_if(0) Vispirms varam izmēģināt intervāla gala vērtības: ans =

0

» gen_e3t_if(1.5) Tālāk varam izvēlēties kādu vērtību intervāla iekšienē: ans =

-0.6513

» gen_e3t_if(1.1:0.1:1.3) Tā kā MATLAB-ā mēs varam strādāt arī ar matricām un vektoriem, tad nākošais tests varētu būt ar vairākām argumenta vērtībām:

ans = -0.9933 0.1955 -0.3056

» gen_e3t_if(.9:0.1:1.1) Pirmās problēmas parādās, kad mēs mēģinam izmantot laika vērtības, kas ietilpst reizē abos uzdotajos apakšintervālos ([0, 1] un (1, 2]):

ans =

[]

Kādēļ tā? Ļoti vienkārši – uzdotās laika vērtības neatbilda nevienam no operatoros if uzdotajiem nosacījumiem. Ko darīt? Mums ir jāpanāk tāda situācija, lai, formējot pirmo signāla gabalu, tiktu izmantotas tikai tās laika vērtības, kas ietilpst pirmajā apakšintervālā, bet formējot otro gabalu, tikai otrā apakšintervāla vērtības. Citiem vārdiem – jāveic t.s. d a t u f i l t r ā c i j a , kas MATLAB-a programmām piešķir īpašu eleganci un lakonismu (kā kurpes vai frizūra sievietei ...).

Datu filtrācija. Loģiskā matrica. Pieņemsim, ka mums ir dots laika vektors ar vērtībām:

Ja mēs uzrakstīsim kādu loģisko nosacījumu, piemēram:

mēs iegūsim loģisko matricu (datu tips ir logical), kura satur loģiskos "1" tajās vektora pozīcijās, kas atbilst loģiskajam nosacījumam, bet "0" tajās pozīcijās, kas neatbilst nosacījumam. Šo loģisko matricu mēs varam izmantot kā filtru, lai no datu vektora izfiltrētu vajadzīgos skaitļus:

Veicot testu uz datu tipa pārbaudi lietotajiem nuļļu un vieninieku vektoriem, iegūstam:

» t = 0:0.1:0.5 t = 0 0.1000 0.2000 0.3000 0.4000 0.5000

» (t>=0.2)&(t<0.4) ans = 0 0 1 1 0 0

» t(logical([0 0 1 1 0 0])) ans = 0.2000 0.3000 Ja netiek izmantota funkcija logical, kas

konvertē double vektoru par logical, tad filtrācija neizdosies.

» class([0 0 1 1 0 0]) ans = double >> class(logical([0 0 1 1 0 0])) ans = logical

Page 90: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-90 ©Copyright Pičs (P. Misāns)

Praksē loģiskās matricas šādā tiešā veidā gandrīz netiek izmantotas, ja nu vienīgi demonstrācijai, jo kurš gan ies rakstīt desmitiem, simtiem vai tūkstošiem nuļļu un vieninieku. Vektora indeksu vietā mēs varam uzreiz ierakstīt loģisko izteiksmi:

» t((t>=0.2)&(t<0.4)) ans = 0.2000 0.3000

Ja esat iesācēj(a)s, tad nevajag rakstīt garas izteiksmes, jo tad būs grūti labot kļūdas. Arī filtrējot datus, tikko aplūkotajos fragmentiņos, būtu labāk izmantot divas atsevišķas izteiksmes:

» tf = (t>=0.2)&(t<0.4); » t(tf) ans = 0.2000 0.3000

Signāla formētājs ar datu filtrāciju. Iepriekš rakstīto funkciju gen_e3t_if.m pārveidosim un ievietosim failā gen_e3t_df.m.

function E3t = gen_e3t_df(t,tm); % formee troks'n'u impulsu % ar datu filtra'ciju if nargin < 2, tm = [1,2,3]; end; if nargin < 1, t = linspace(0,3,31);end; t1f = (t>=0)&(t<=tm(1));, x1 = zeros(size(t(t1f))); t2f = ((t>tm(1))&(t<=tm(2))); x2 = 2*rand(size(t(t2f)))-1; t3f = ((t>tm(2))&(t<=tm(3)));, x3 =zeros(size(t(t3f))); E3t = [x1,x2,x3]; if nargout == 0, plot(t,E3t); axis([0,tm(3),-1.2,1.2]); end;

Vispirms notestēsim mūsu izveidoto funkciju laika intervālam [0, 1.5]:

Varat pārliecināties, ka rezultāts sanāk tāds kā vajag.

Nākošajam testam izvēlēsimies plašāku intervālu, nekā funkcijas datu filtri ļauj:

Šoreiz cietām pilnu fiasko, jo gen_e3t_df ir vajadzīgi vēl nelieli uzlabojumi. Funkcijā ir jāiebūvē datu filtrācija gadījumam, kad argumenta vērtība iziet ārpus diapazona [0, 3].un mēs aizmirsām par apakšintervālu robežu vektoru.

Ja ir pieredze un iemaņas, tad programmas kodu var veidot arvien kompaktāku. Sākumā ar to nevajadzētu aizrauties. Nevajag upurēt saprotamību lakonismam!

Funkcija ir arī sevi pašdemonstrējoša:

» gen_e3t_df;

Funkcija linspace šoreiz formē 31 punktu intervālā [0, 3].

» t = linspace(0,1.5,16); » y = gen_e3t_df(t); » plot(t,y)

Kolona ":" operācijas vietā var izmanto-ta funkciju linspace. Šoreiz tiek noģenerēts 16 vērtību vektors intervālā [0, 1.5].

» t = linspace(0,pi,30); » y = gen_e3t_df(t); » plot(t,y) ??? Error using ==> plot Vectors must be the same lengths.

Funkciju linspace ir noderīga tajos gadījumos, kad ir precīzi jātrāpa uz intervāla gala punkta (šoreiz tas ir π). Ar kolona operāciju tas gandrīz nav iespējams.

Page 91: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-91

Minētos uzlabojumus Tev jāveic patstāvīgi. Tu taču to vari! Šeit tikai tiks parādīts koda fragments, ar kuru jāpapildina funkcijas gen_e3t_df kods:

Protams, ja funkcijas iepriekšējā versija tiktu izsaukta ar apakšintervālu robežu vektoru, tad minēto problēmu nebūtu:

Simboliskās matemātikas izmantošana Mūsdienu inženiera praksē liela nozīmē ir dažādu formulu iegūšanā. Formulas vai nu mēdz meklēt atbilstošajās mācību vai rokasgrāmatās, vai arī veic vajadzīgo formulu izvedumus. Gadījumā, ja pie rokas nav matemātikas rokasgrāmatas, vai arī formulas izvedums ir pietiekami darbietilpīgs, var mēģināt izmantot MATLAB simboliskās matemātikas iespējas. Jāatgādina, ka MATLAB šīs iespējas sniedz tikai tādā gadījumā, ja instalēta ir simboliskās matemātkas līdzekļu kopa (Symbolic Toolbox), vai arī gadījumā, ja tiek izmantota MATLAB studentu versija (MATLAB Student Version). Uzreiz jāpiebilst, ka simboliskās matemātikas iespējas pilnīgāk ir iespējams tikai tajos gadījumos, kad lietotājam ir atbilstošas iemaņas.

Simboliskā matemātika ir matemātikas nozare, kas nodarbojas ar analītisko aprēķinu (diferencēšanas, integrēšanas, vienādojumu risināšanas, utt.), formalizēšanu un atbilstošas programmatūras izstrādi. Visspēcīgākā programmu pakete šajā nozarē ir programma MAPLE. Šīs programmas kodolu izmanto arī paketes MATHCAD un MATLAB.

Lai sekmīgi darbotos ar formulām MATLAB-ā, mums šīs formulas ir atbilstoši jānodefinē, t.i. jāizstāsta MATLAB-am, ka objekts, ar kuru darbosimies ir simboliskajai matemātikai piederīgs. Tā, protams, no lietotāja viedokļa ir zināma neērtība, taču jāātceras, ka MATLAB pamatā ir skaitlisko aprēķinu pakete, kurā pamatobjekts ir kompleksu skaitļu matrica, bet liela daļa funkciju var tikt izmantota gan simboliskajiem, gan skaitliskajiem aprēķiniem. Paketei vēl nav telepātisku spēju noskaidrot, ko jūs īsti gribat darīt.

Izmantojot simbolisko matemātiku ir vēlams vispirms nodefinēt visus mainīgos un konstantes. Simbolisko mainīgo definēšanai izmanto funkciju syms, kas ir funkcijas sym saīsināts variants, un to lieto, ja ir jādefinē vairāki mainīgie reizē.

Atvasinājuma meklēšana. Funkcijas atvasināšanai izmanto funkciju diff. Vienas izteiksmes (mainīgā) pārvēršanai par simbolisko mainīgo (formulu) izmanto funkciju sym. Piemēram, ja mēs gribam atvasināt ax3+b, tad korekts risinājums izskatās šādi:

tff = (t>tm(3)); E3t = [x1,x2,x3,0*t(tff)];

Signāla "astē" tiek piekabināta nuļļu virtene, ja laika intervāls pārsniedz signāla definīcijas intervālu.

» t = linspace(0,pi,30); » y = gen_e3t_df(t,[1,2,pi]); » plot(t,y)

» syms a x b

» diff(sym('a*x^3+b'))

Ir iespējams arī vienkāršots funkcijas diff izsaukums:

» diff('a*x^3+b') kurš tāpat dod korektu risinājumu, taču tas nav droši vispārīgā gadījumā

ans =

3*a*x^2

Page 92: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-92 ©Copyright Pičs (P. Misāns)

Ja funkcijas diff arguments ir skaitļu vektors, tad rezultāts ir diferences starp blakus esošajiem vektora elementiem:

» diff([2 3 5 4 0]) ans = 1 2 -1 -4

Ja formulu vajag parādīt nedaudz saprotamāk, tad var izmantot funkciju pretty:

Algebriskas darbības ar formulām. Formulas, protams, var saglabāt mainīgajos. Piemēram, nākošajā piemērā, mēs saglabāsim skaitītāju (numerator) un saucēju (denominator):

Atkāpe: Pārliecināties par to vai objekts ir formula, var ar funkciju class:

Šoreiz mainīgais ir symbolic (formula) tipa. Šāds tests var izrādīties noderīgs, ja rodas kādas problēmas.

Ar sym tipa mainīgajiem (formulām) var veikt visas algebriskās darbības, piemēram:

Simboliskās matemātikas pakete rezultātu cenšas parādīt maksimāli kompakti, tādēļ mēs neieguvām tādu izteiksmi, kā, iespējams, gaidījām (izvērstā veidā).

Taču to var labot:

» pretty(diff(sym('a*x^3+b'))) 2 3 a x

» syms x;% šoreiz šis nav obligāts, jo augstāk x ir aprakstīts » num = sym('2*x^3+x+1'); » den = sym('6*x^3+x^2-x+7'), % neliekot ";", % rezultāts tiek %rādīts den = 6*x^3+x^2-x+7

» class(num) ans = sym

» nd = num*den

nd =

(2*x^3+x+1)*(6*x^3+x^2-x+7)

» nd_e = expand(num*den), % funkcija expand atrod izvērstu formulu

nd_e = 12*x^6+2*x^5+4*x^4+21*x^3+6*x+7

Savukārt, ja gribam kādu garu polinomu sadalīt reizinātājos, tad var izmantot funkciju factor:

» factor(nd_e) ans = (2*x^3+x+1)*(6*x+7)*(x^2-x+1)

Page 93: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-93

Robežu meklēšana. Robežas meklē ar funkciju limit. Lakonisku informāciju par jebkuru funkciju var dabūt ar help:

» help limit --- help for sym/limit.m --- LIMIT Limit of an expression. LIMIT(F,x,a) takes the limit of the symbolic expression . . . LIMIT(F,a) uses findsym(F) as the independent variable. LIMIT(F) uses a = 0 as the limit point. LIMIT(F,x,a,'right') or LIMIT(F,x,a,'left') specify . . . . of a one-sided limit. . . . .

Atradīsim robežu mūsu daļai, kad x tiecas uz bezgalību:

To pašu mēs varējām izdarīt arī pakāpeniski, atvasinot vairākas reizes (3-reizes, tā kā polinomu pakāpes ir 3) skaitītāju un saucēju katru atsevišķi, un, pēc tam izdalot konstantes (Lopitāla kārtula, jo dalījuma robeža sākotnēji ir: bezgalība/bezgalība):

Lai iegūtu gala rezultātu, izmantosim Lopitāla kārtulu:

Redzam, ka rezultāts sakrīt ar agrāk ar funkciju limit iegūto rezultātu:

Simboliskā integrēšana. Ļoti bieži ir vajadzība analītiski nointegrēt kādu funkciju, ko veic ar funkciju int. Tā, piemēram, integrējot funkciju x2, iegūstam:

Ja ir vajadzība, varam atrast arī noteiktā integrāļa vērtību uzdotajā funkcijas argumenta intervālā [0,2]:

Simboliskās matemātikas pakete tiek galā arī ar bezgalīgām robežām:

» limit(num/den,x,Inf), % ar Inf apzīmē bezgalību ans = 1/3

» diff(num,3), % funkcijas otrais arguments norāda uz %atvasinājuma kārtu

ans = 12

» diff(den,3) ans = 36

» diff(num,3)/diff(den,3)ans = 1/3

» int(sym('x^2')) ans = 1/3*x^3

» int(sym('x^2'),'x',0,2) ans = 8/3

» int('exp(-x^2)','x',-Inf,Inf) ans = pi^(1/2)

Lai būtu garantija, ka integrēšana notiks tieši pēc izvēlētā mainīgā, mums tas ir jāuzrāda (šoreiz x).

Bez lielām problēmām var rēķināt arī vairākkārtīgos integrāļus, izmantojot int(int(...) ...).

Page 94: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-94 ©Copyright Pičs (P. Misāns)

Izvirzījums Teilora rindā. Inženiera praksē bieži tiek izmantoti funkciju izvirzījumi Teilora (Maklorēna) rindā.

Pēc noklusēšanas funkcija formē Maklorēna rindu ar sešiem locekļiem (kā 5-tās pakāpes polinomu. Locekļu skaitu vari uzdot pēc vajadzības, uzrādot to kā otro argumentu:

Savukārt, ja ir vajadzība iegūt funkcijas izvirzījumu uzdotajā nenulles punkta apkaimē, tad iegūstam Teilora rindu:

Rindu summēšana. Saimniecībā noderīga ir rindu summēšana ar funkciju symsum: (piemērā k2 robežās no 0 līdz n)

Šoreiz tika veiktas divas darbības:

Vispirms ar funkciju simplify iegūtā rindas formulas izteiksme tika vienkāršota,

bet pēc tam ar factor vienkāršotā izteiksme tika sadalīta reizinātājos.

Ja gribi starprezultātus, tad visas darbības atkārto pa vienai.

Vienādojumu risināšana. Gan studiju procesā gan inženiera praksē ļoti plaši tiek izmantota vienādojumu un vienādojumu sistēmu risināšana. Ja vienādojumu risinātājs ir jāiebūvē kādā ierīcē, tad tiek izmantotas skaitliskās metodes. Taču ļoti bieži vienādojumi vai vienādojumu sistēmas ir jārisina ierīču projektēšanas gaitā. Ja principā ir iespējams iegūt analītisku atrisinājumu, tad daudzos gadījumos vienādojumus var mēģināt risināt ar Symbolic Toolbox funkciju solve:

» taylor(sym('exp(x)')) ans = 1+x+1/2*x^2+1/6*x^3+1/24*x^4+1/120*x^5

» taylor(sym('exp(x)'),2) ans = 1+x

» syms k n » factor(simplify(symsum(sym('k^2'),0,n))) ans = 1/6*n*(n+1)*(2*n+1)

» taylor(sym('exp(x)'),2,5) ans = exp(5)+exp(5)*(x-5)

» syms a x; » solve(sym('a*x^2-cos(x)=0')) Warning: Explicit solution could not be found. > In C:\DEMOML\toolbox\symbolic\solve.m at line 136 In C:\DEMOML\toolbox\symbolic\@sym\solve.m at line 49 ans = [ empty sym ]

Kā redzams, tas var neizdoties, jo šeit ir darīšana ar zināmu nenoteiktību koeficienta a izvēlē. Ja, piemēram, a = 0, tad cos funkcijai ir bezgalīgi daudz punktu, kuros tā

Page 95: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-95

šķērso nulles asi (saknes). Ja mēs varam konkretizēt a vērtību, tad ir cerības tikt pie risinājuma.

Simboliskās matemātikas pakete ļauj rēķināt ar jebkuru uzdoto precizitāti (pēc noklusē-šanas 32 decimālās zīmes).

Neskatoties uz to, ka iegūtais rezultāts ir skaitļu rinda, tas šoreiz arī ir simboliskais objekts:

Ja neko nedara tālāk, tad, protams ir vienalga, kāds tips ir šim rezultātam. Taču, iegūtā vienādojuma sakne ir jāizmanto turpmākajos skaitliskajos aprēķinos, tad var sanākt ziepes (tas ir atkarīgs no paketes versijas un konteksta). Tādēļ, ja skaitliskajos aprēķinos gadās nepatikšanas, tad simboliskā tipa konstante ir jāpārvērš par double tipa skaitli (tam gan ir tikai 15 decimālās zīmes):

Kā jau pieminēts agrāk, MATLAB pēc noklusējuma attēlo tikai 4 zīmes aiz komata (format short), lai skaitļi būtu inženieriski pārskatāmāki, taču "lācīša vēderā" tam ir double precizitāte (15-16 decimālās zīmes) un visos skaitliskajos aprēķinos tiek izmantota double precizitāte. Ja grib redzēt visas iespējamās zīmes, tad ir jāiestāda long formāts:

Šis formāta uzstādījums neattiecas uz simboliskās matemātikas objektiem.

» x0 = solve(sym('3*x^2-cos(x)=0'))

x0 =

.53542824416465691412597868530840

» class(x0) ans = sym

» double(x0)

ans =

0.5354

» format long; » double(x0) ans = 0.53542824416466

» x0 x0 = .53542824416465691412597868530840

Lineāru vienādojuma sistēmas risinājuma iegūšana analītiskā formā

Risinājums ar operāciju "\" Iepriekš mēs veicām trīskontūru shēmas simulāciju skaitliski. Tagad pamēģināsim risinājumu iegūt skaitliskā formā:

» syms R1 R2 R3 R4 R5 R6 R7 E1 E2 E3 real » R=[R1+R2+R3, -R2, 0; -R2, R2+R4+R5, -R5; 0, -R5, R5+R6+R7]; » E=[E1, E2, E3]'; » I=R\E;

Aplūkotajā scenārijā funkcija syms pasludina uzskaitītos mainīgos par simboliskajiem objektiem.

☺ Viltībiņas: Atslēgas vārds real nosaka to, ka simbolisko mainīgo saturs var būt tikai reāli skaitļi. Šis ierobežojums (arī citi, piemēram - positive) principiāli ietekmē rezultātu un var būtiski vienkāršot atrisinājumu.

Page 96: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-96 ©Copyright Pičs (P. Misāns)

Tagad aplūkosim iegūto rezultātu ar Array Editor:

Zīm. 63. Vienādojumu sistēmas atrisinājums simboliskā formā Array Editor logā.

Esam ieguvušī iespaidīga garuma izteiksmes. Funkcija whos dod detalizētāku priekšstatu par iegūtā objekta apmēriem: » whos I Name Size Bytes Class I 3x1 2098 sym object Grand total is 930 elements using 2098 bytes

Tātad mums ir darīšana ar trijām nepārskatāmām izteiksmēm, kuras satur 930 locekļu. Šis piemērs uzskatāmi demonstrē "analītisko" pieeju problēmu risinājumos – "dabūšu analītisku izteiksmi un tad nu būs°...". Jāpiebilst, ka autoram ir gadījušās izteiksmes arī ar desmitiem tūkstošu locekļu. Taču vienēr tas tā nav. Ir gadījumi, kad problēmu ērtāk risināt analītiski.

Neskatoties uz to, ka izteiksmes var sanākt pagaras, skaitliskie rezultāti var būt kompakti. Lai iegutu skaitliskos rezultātus, formulu mainīgajiem vispirms ir jāpiešķir skaitliskas vērtības: » R1=1; R2=2; R3=3; R4=4; R5=5; R6=6; R7=7; » E1=2; E2=-3; E3=-6;

Pēc tam simboliskās izteiksmes ir jāizpilda kā MATLAB programmas rindas. To veic ar funkciju eval:

Funkcija eval veic visu triju iegūto izteiksmju interpretāciju ar tādu precizitāti, kāda ir izvēlētajiem mainīgajiem.

» Inum=eval(I) Inum = 0.1843 -0.4472 -0.4576

Risinājums ar funkciju solve

Šis piemērs demonstrē iepriekšējā piemēra alternatīvu. Šoreiz lineāras vienādojumu sistēmas risināšanai tiek izmantota funkcija solve: » syms R1 R2 R3 R4 R5 R6 R7 E1 E2 E3 I1 I2 I3 real » Eqs=[(R1+R2+R3)*I1 - R2*I2 + 0*I3 - E1; -R2*I1+(R2+R4+R5)*I2 - R5*I3 - E2; 0*I1 - R5*I2+(R5+R6+R7)*I3 - E3]; » [i1,i2,i3]=solve(Eqs(1,:),Eqs(2,:),Eqs(3,:),'I1','I2','I3');

Vispirms funkcijas argumentu sarakstā tiek uzskaitīti vienādojumi, kuri jārisina, bet pēc tam nezināmie, attiecībā pret kuriem šiei vienādojumi ir jāatrisina. Vienādojumus var uzrādīt tiešā veidā iekļaujot tos apostrofos. Var uzrādīt vienādības zīmi un vienādojuma labo pusi. Šoreiz vienādojumu labās puses ir pārnestas uz kreiso pusi, bet vienādības zīmes un labās puses, kas kļuvušas vienādas ar nulli uzrādītas netiek.

Page 97: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-97

Ja tālāk vēlamies darboties ar atrisinājuma izteiksmēm, tās ir jāpiešķir katru savam mainīgajam. Turpretī, ja risinājums tiks piešķirts vienam mainīgajam tas saturēs struktūru ar trim simboliskajām rindām un nepieredzējušam lietotājam būs grūti kaut ko iesākt tālāk: » i=solve(Eqs(1,:),Eqs(2,:),Eqs(3,:),'I1','I2','I3') i = I1: [1x1 sym] I2: [1x1 sym] I3: [1x1 sym]

Lai iegūtu skaitliskos rezultātus, rīkosimies līdzīgi kā iepriekš un izmantosim funkciju eval. Šoreiz tā apstrādās tieši uzrādītu triju izteiksmju kolonveida vektoru:

Par funkciju solve vēlams atcerēties sekojošas lietas:

» R1=1; R2=2; R3=3; R4=4; » R5=5; R6=6; R7=7; » E1=2; E2=-3; E3=-6; » eval([i1;i2;i3]) ans = 0.1843 -0.4472

Uzraksti i.I1 un - strāvas izteiksme pirmajam kontūram Tava !

Pārējās izteiksmes atradīsi pats

-0.4576

funkcijas pamatpielietojums ir nelineāru vienādojumu vai vienādojumu sistēmu analītiska risināšana;

ja funkcija netiek galā ar analītisko risinājumu, tā formē skaitlisko risinājumu;

funkciju nav lietderīgi izmantot lineāru vienādojumu sistēmu skaitliskajai risināšanai, bet šim nolūkam labāk izmanto operāciju "\"

☺ Viltībiņas: Arī simboliskās matemātikas gadījumā ir jācenšas maksimāli izmantot starpizteiksmes. Tā var samazināt iespējamo kļūdu skaitu. Tādēļ piemērs, kurā mēs definējām vienādojumus varētu izskatīties arī šādi:

» syms R1 R2 R3 R4 R5 R6 R7 E1 E2 E3 I1 I2 I3 real » R=[R1+R2+R3, -R2, 0; -R2, R2+R4+R5, -R5; 0, -R5, R5+R6+R7]; » Eqs = R*[I1;I2;I3]-[E1;E2;E3] Eqs = (R1+R2+R3)*I1-R2*I2-E1 -R2*I1+(R2+R4+R5)*I2-R5*I3-E2 -R5*I2+(R5+R6+R7)*I3-E3

LaTex interpretatora izmantošana izteiksmju attēlošanai Jau vismaz pārdesmit gadus pasaulē izdevniecībās tiek izmantota formulu un teksta apstrādes sistēma LaTex. Tas faktiski ir formulu attēlošanas standarts. MS Equation Editor šo formātu, diemžēl, apstrādāt nemāk.

Savukārt MATLAB-ā pastāv iespēja pārveidot simboliskās izteiksmes uz LaTex formātu. Tā, piemēram, agrāk izmantoto Maklorāna rindu var pārveidot šādi:

» izt = taylor(sym('exp(x)')); » izt_ltx = latex(izt); » text('Interpreter','latex',...'String',['$$',izt_ltx,'$$'],...'Position',[.1 .5],...

Iegūto izteiksmi, kura ir pildīta ar 'FontSize',12)

Page 98: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-98 ©Copyright Pičs (P. Misāns)

visādiem ķeburiem var izvadīt grafiskajā logā kā text objektu:

Lai iegūtu tīru bildi ar formulu ir nedaudz jāpadarbojas ar grafiskā loga redaktoru, novācot asu marķierus un manuāli mainot asu un loga izmērus.

Zīm. 64. Latex interpretatora formētās

formulas attēls.

Protams, ja formula ir vajadzīga publikācijai (atskaitei), tad daudz labāk ir eksportēt iegūto rezultātu uz LaTex sistēmu.

Simbolisko funkciju zīmēšana ar ezplot Dažreiz ir nepieciešams simboliski iegūto izteiksmi attēlot grafiski uzdotajā mainīgo intervālā. To var izdarīt arī ar parasto plot, bet tam ir nepieciešama iegūtās funkcijas interpretācija ar eval.

Lai izvairītos no liekām darbībām, ir izveidota speciāla funkcija ezplot, kas tiek ar visu galā. Ja ir vajadzība zīmēt tieši simbolisko funkciju grafikus, tad funkcijai noteikti jābūt izteiksmei.

Zīm. 65. Funkcijas ezplot formēts

grafiks.

» syms x y » ezplot((x^4-y^4-.001))

Funkcijai var uzdot x un y intervālus (apskaties, kā!). Pēc noklusējuma tie ir [-2π, 2π].

Redzam, ka funkcija noformē gan virsrakstu, gan asu marķējumus.

Page 99: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-99

Simbolisko funkciju kopsavilkums

Tabula 10. Īss simbolisko funkciju kopsavilkums Pamatoperācijas

sym Teksta rindu pārvērš par analītisko izteiksmi syms Pārvērš uzskaitītos mainīgos par simboliskajiem (sym versija)

Datu tipa pārveidojumi double Pārvērš analītsko izteiksmi, ja iespējams, par skaitlisko char pārvērš analītisko izteiksmi par teksta rindu

Pirmās nepieciešamības "preces" diff analītiskā diferencēšana int analītiskā integrēšana limit funkcijas robežas meklēšana taylor funkcijas izvirzījums Teilora rindā symsum analītiska rindu summēšana

Vienādojumu risināšana solve algebrisku vienādojumu analītiska risināšana dsolve diferenciālvienādojumu analītiska risināšana

Precizitātes uzstādīšanas funkcijas vpa mainīgas precizitātes aritmētika digits uzstāda zīmju skaitu mainīgas precizitātes aritmētikai

Manipulācijas ar izteiksmēm simplify vienkāršo analītisko izteiksmi expand noformē izvērstu izteiksmi factor Atrod pirmreizinātājus. collect veic izteiksmes grupēšanu numden formē analītiskās izteiksmes skaitītāju un saucēju horner polinomu sadala reizinātājos pēc Hornera shēmas subexpr izsaka analītisko izteiksmi ar apakšizteiksmju palīdzību subs aizvieto vienu apakšizteiksmi ar citu

Integrālās transformācijas fourier Furjē transformācija laplace Laplasa transformācija ztrans z-transformācija ifourier inversā Furjē transformācija ilaplace inversā Laplasa transformācija iztrans inversā z-transformācija

Vēl dažas derīgas lietas pretty izteiksmes attēlošana izskaistinātā veidā ccode izteiksmes pārveidošana C kodā latex simboliskās izteiksmes pārveidošana LaTex formātā maple MAPLE kodola izsaukšana (nedarbojas studentu versijā) mhelp palīdzība par MAPLE funkcijām

Page 100: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-100 ©Copyright Pičs (P. Misāns)

Page 101: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-101

Lineāru vienādojumu risināšanas elementi

Page 102: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-102 ©Copyright Pičs (P. Misāns)

Page 103: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-103

Lineāru vienādojumu sistēmu skaitliskās risināšanas elementi

Kā rodas lineāru vienādojumu sistēmas? No Svētā Gara? - Varbūt tās atnes stārķis .…

Tās rodas visdažādākajos uzdevumos, sākot ar ekonomiku un beidzot ar gultu. Pēdējā mēs pārāk ilgi nepakavēsimies, kā jau tas pieklājas nākamajiem inženieriem. Mūsu uzdevumi pārsvarā būs saistīti ar elektroniskiem objektiem.

Pieņemsim, ka ir dota sekojoša trīskontūru elektriskā shēma:

R1

R3

R2 R5

R4 R6

R7

E1

E3

E2

I1k I2k I3k

Zīm. 66. Trīskontūru rezistīva elektriskā shēma (Zīm. 26 kopija).

Eksistē vairāki paņēmieni, kā var aprakstīt šādu shēmu. Šos paņēmienus sīkāk mēdz iztirzāt elektrisko ķēžu teorijā. Šeit vienkāršības labad pakavēsimies pie t.s. kontūrstrāvu metodes (taisnības labad jāpiebilst, ka tā nav universāla metode).

Metodes pamatā ir Oma un Kirhofa likumi, kuriem vajadzētu būt zināmiem jau no skolas sola. Tiek uzskatīts, ka kontūros brīvi pieņemtā virzienā plūst t.s. kontūrstrāvas, kas rada spriegumu kritumus uz elementiem. Zināms, ka spriegumu kritumu summa, apejot kontūru, ir vienāda ar summāro kontūra EDS (Kirhofa likums).

Pieņemot, ka visos kontūros kontūrstrāvas plūst pulksteņrādītāja virzienā, uzrakstīsim mūsu shēmu aprakstošu vienādojumu sistēmu.

⎪⎩

⎪⎨

−=+++−+−=−++++−

=+−+++

3321

2321

1321

*)765(*)5(*0*)5(*)542(*)2(

*0*)2(*)321(

EIRRRIRIEIRIRRRIR

EIIRIRRR (4)

Nodefinēsim rezistoru pretestības un EDS vērtības:

R1=1; R2=2; R3=1; R4=4; R5=5; R6=2; R7=2.5;E1=2;E2=3;E3=6;

Pēc pretestību nominālu un EDS vērtīu ievietošanas mēs iegūstam:

⎪⎩

⎪⎨

−=+−−=−+−

=+−

6*5.9*5*03*5*11*22*0*2*4

321

321

321

IIIIIIIII

(5)

To pašu, bez šaubām, mēs varam pārrakstīt arī matricu formā:

⎥⎥

⎢⎢

−−=

⎥⎥

⎢⎢

⎡∗

⎥⎥⎥

⎢⎢⎢

−−−

63

2

5.9505112

024

3

2

1

III

(6)

Page 104: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-104 ©Copyright Pičs (P. Misāns)

Lineāru vienādojumu sistēmas. Ar vienādojumu sistēmām var aprakstīt lielāko daļu no dabā un cilvēku sadzīvē eksistējošajām sistēmām. Pārsvarā tās ir nelineāru un nelineāru diferenciāl-vienādojumu sistēmas. Ar lineāru vienādojumu sistēmām var aprakstīt tikai nelielu daļu no eksistējošajām sistēmām, taču vairumā gadījumu nelineāru vienādojumu un diferenciālvienādojumu sistēmu skaitliskā risināšana tiek noreducēta uz lineāru vienādojumu sistēmu risināšanu. Minētā iemesla dēļ lineāru vienādojumu sistēmu risināšanas paņēmienu izpratnei ir pirmšķirīga nozīme.

Turpmāk mēs nedaudz pakavēsimies arī pie skaitliskajām problēmām, kas saistītas ar lineāru vienādojumu sistēmām.

Izlasot nākošās dažas lappuses lasītājam vajadzētu izjust, kas tās tādas:

♦ savietojamu (consistent) neatkarīgu (independent) vienādojumu sistēmas.

♦ lineāri atkarīgu vienādojumu sistēmas (dependent equations),

♦ pretrunīgu (inconsistent) vienādojumu sistēmas

♦ vāji nosacītu (ill conditioned) vienādojumu sistēmas.

Vajadzētu pievērst uzmanību šādiem momentiem:

būtu jauki, ja lasītājs aptuveni izprastu arī skaitliskās problēmas, kas saistītas ar lineāru vienādojumu risināšanu.

Gausa izslēgšanas metode (Gaussian elimination) nebūt nav tik g a u s a un nepavisam nepretendē uz Jūsu izslēgšanu no RTU.

arī Gausa metodi mēdz pavadīt skaitliskās problēmas,

palasi, kāpēc dažreiz mēdz lietot Gausa-Zeideļa (Gauss-Seidel) iteratīvo risināšanas metodi

ja izdodas tikt līdz beigām, tad vajadzētu saprast, ka operāciju skaits ir tas, kas izslēgšanas metodei ir ļāvis bieži vien triumfēt.

Būtu labi, ja lasītājs iedziļinātos ģeometriskajās interpretācijās, kas ir saistītas ar lineāro vienādojumu sistēmām un ir attēlotas nākošajās bildēs. Šo dažu bildīšu atcerēšanās ļauj bez dziļām funkcionālās analīzes zināšanām tikt galā ar daudzām problēmām.

Sākumā aplūkosim pavisam vienkāršu divu vienādojumu sistēmu :

(7) ⎩⎨⎧

+=−=

⎩⎨⎧

=+−=−

1113,1

13xyxy

yxyx

Vienkāršākais paņēmiens, kā atrisināt šo vienādojumu sistēmu, ir izteikt no otrā vienādojuma

. Pēc tam, šo vienādojumu ievietojot pirmajā vienādojumā, iegūstam x = 1; y = 2 . y = +1 x

Šādu vienādojumu sistēmu, kurai ir tikai viens atrisinājums, sauc par savietojamu (consistent) neatkarīgu (independent) vienādojumu sistēmu.

Zīm. 67. Savietojama

neatkarīga vienādojumu sistēma

Page 105: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-105

its veids, kā atrast risinājumu, ir mainīgo

Cizslēgšanas paņēmiens. Mēs varam pareizināt pirmo vienādojumu ar 1/3 un pieskaitīt to otrajam vienādojumam. Tādā gadījumā iegūstam :

⎩⎨⎧

+⋅=−⋅=

⎪⎩

⎪⎨⎧ =− 13 xyyx

=+⋅ 2013,

34

320 xyyx (8)

y mēs varam izteikt no pēdējā vienādojuma, bet x varam atrast no pirmā vienādojuma, izmantojot iegūto y. Šādu paņēmienu, kā zināms sauc par Gausa izslēgšanas (Gauss elimination) metodi. Pievērs uzmanību tam, ka vienādojumam ar izslēgtu mainīgo atbilstošā taisne ir paralēla x-asij.

Zīm. 68. Vienādojumu sistēma

odificēsim šādā

(9)

tad iegūstam pretrunīgu (inconsistent)

ar izslēgtu mainīgo.

Pretrunīgu vienādojumu sistēmas

Ja pirmo un otru vienādojumu mēs m

veidā:

⎩⎨⎧

−⋅=+⋅=

⎩⎨⎧

−=−=−

1313,13

226xyxy

yxyx

vienādojumu sistēmu, kas vienlaicīgi pieprasa izteiksmei 3x - y būt vienādai gan ar +1, gan ar -1. Ģeometriski mēs esam ieguvuši divas paralēlas taisnes, kas nekur nekrustojas, bet sistēmas galvenais determinants:

» det([3,-1;3,-1]) ans =

0Zīm. 69. Pretrunīga

v

eicot mainīgo izslēgšanu iepriekšējos

−=⋅− yxy

y13,20 (10)

Redzam, ka ģeometriski viena no taisnēm atrodas

ienādojumu sistēma.

Vvienādojumos, iegūstam :

⎧ =− yx 226⎩⎨⎧

∞=−⋅=

⎩⎨

bezgalībā. Arī vienādojumu sistēmas galvenais determinants tāpat kā iepriekš ir vienāds ar nulli:

» det([3,-1;0,-0]) ns = a

Zīm. 70. Pretrunīga

vi r enādojumu sistēma aizslēgtu mainīgo

0

Page 106: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-106 ©Copyright Pičs (P. Misāns)

Skaitliskās problēmas

Ri tļotāju palīdzību, mums ir darīšana ar aprēķinu pre aplūkotajā piemērā pirmais koeficients pirmajā

−=−⋅=⋅−

1322

yxyx

(11)

Lai izslēgtu x, mums pirmais vienādojums ir jāpareizina ar

sinot vienādojumu sistēmu ar skaicizitāti. Pieņemsim, ka iepriekš

vienādojumā tiek uzdots ar kļūdu Δ:

⎨⎧ ⋅Δ+ )6(⎩

−+3

6 Δ un jāpieskaita

Δ−−=⋅Δ− 12y (12)

Redzam, ka

otrajam vienādojumam. Šo manipulāciju rezultātā iegūstam :

⎨⎧ =⋅−⋅Δ+ 22)6( yx

y = +12 1Δ

. Tātad pavisam niecīgas Δ izmaiņas rada ļoti lielas y

piemērs uizmaiņas. Šis zskatāmi demonstrē, ka pretrunīgu vienādojumu sistēmu gadījumos, pat visniecīgākā noapaļošanas kļūda var novest pie absurdiem risinājumiem. Tas ir fakts, kas ir jāpatur prātā gan algoritmu un programmu izstrādātājiem gan to lietotājiem.

Nav grūti pārliecināties (gan analītiski, gan skaitliski), ka vienādojumu sistē

» det([6+1e-6, -2;3,-1]) mas (11)

atkarīgu

−⋅⎩ 1x (13)

s no zīmējuma, šoreiz abas ta nes un tātad vienādojumu sistēmai ir bezgalīgi daudz

=⋅ anyyy

galvenais determinants ir vienāds -Δ:

Lineāri atkarīgu vienādojumu sistēma

ans = -1.0000e-006

Nākošajā piemērā aplūkosim lineāri(dependent) vienādojumu sistēmu :

⎨⎧

=−⋅=

⎨⎧

=−⋅=⋅−⋅

313,13

226y

xyyxyx

Kā redzam is sakrīt

atrisinājumu. Par to varam pārliecināties arī pēc mainīgā x izslēgšanas:

⎨⎧ =⋅−⋅ xy

⎩⎨⎧

=−⋅=

⎩ y

00 (14) x 13,226

Zīm. 71. Lineāri atkarīgu

vienādojumu sistēma. cīmredzams, ka arī galvenasi sistēmas determinants u ir ienādi ar nulli:

3,-1]) an

» det([2,-2;1,-1])an

» det([6, 2;3, 1]) an

Av

n abi palīgdeterminanti

» det([6,-2;s =

0 s =

0 s =

0

Page 107: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-107

Skaitliskās problē

u gu vienādojumu sis ijas, līdzīgi kā iepriekš, pirmā vienādojuma koeficientam piešķirot

−⋅== 13,1 xy (15)

Šī novirze var būt pēc patikas maza. No zīmē u skaidri redzams, ka šī novirze izsauc tikai taisnes rotāciju un noved pie pilnīgi konkrēta atrisinājuma

mas

N pat aplūkotajā lineāru atkarītēmā izdarīsim nelielas korekc

nenulles novirzi 2Δ.

⎧ −⋅Δ+=⎩⎨⎧

−⋅=⋅−⋅Δ⋅+ 1)3(

322)26( xy

yxyx

⎩⎨

j ma ir

(0,-1), neatkarīgi no izvēlētās novirzes. Vienīgā prasība, lai šī novirze būtu atšķirīga no nulles.

Zīm. 72. Lineāru atkarīgu vienādojumu sistēma pie

nelielām koeficienta izmaiņām.

ielietojot mainīgā izslēgšanas metodi, nonākam jau ie tīri algebriska risinājuma:

−= 1y

, ka lineāri atkarīgu vienādo

Pp

⎨⎧ −⋅=

⎩⎨⎧

Δ⋅=⋅Δ⋅−=⋅−⋅Δ⋅+ 13,22

22)26( xyy

yx (16)

Tātad redzam jumusistē ļūdas

mas gadījumā, pat niecīgas noapaļošanas k var izraisīt absurdu rezultātu iegūšanu.

jumu, kas ir

Tātad sākotnēji mums bija atkarīgu vienādojumu sistēma ar bezgalīgi daudz atrisinājumiem, bet beigās esam ieguvuši vienu vienīgu atrisināviens no bezgalīgi daudzajiem. Zīm. 73. Lineāru atkarīgu

vienādojumu sistēma pēc mainīgā izslēgšanas.

tēma

Vēlreiz atgriezīsimies pie pretrunīgas vienādojumu

Ja Δ ir mazs, tad vienādojumu taisnes ir ga paralēlas (sk. zīm.). Niecīgas koeficienta izm

Vāji nosacītu vienādojumu sis

sistēmas (11) ar koeficienta kļūdu:

⎩⎨⎧

+⋅=−⋅Δ+=

⎩⎨⎧

−=−⋅=⋅−⋅Δ⋅+

131)3(,13

22)26(xy

xyyx

yx (17)

ndrīzaiņas

izraisa "šķēru efektu" – sakņu absolūtās vērtības būtiski mainās. Jo mazāka ir koeficienta kļūda, jo lielākas ir atrisinājuma izmaiņas.

Šādu vienādojumu sistēmu, kuras atrisinājums ir stipri atkarīgs no koeficientu izmaiņām, sauc par vāji nosacītu (ill conditioned) vienādoj

Zīm. 74. Vāji nosacītu vienādojumu sistema. umu sistēmu.

Page 108: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-108 ©Copyright Pičs (P. Misāns)

Lasītājs var pats veikt atbilstošus skaitliskus eksperimtikko teiktajam:

entus mu

2*d,-2;3,-1]; » A = [6+2*d,-2;3,-1];

Kopsavilkums par vienādojumu sistēmu grupāIep piemēri mums demonstrē, ādojumu sistēmas,

m iedalīt četrās lielās grupās:

gs

♦ u. Niecīgas koeficientu

♦ s izmaiņas.

Ko drīk istēmu? ākajām darbībām ir noderīgi paturēt prātā operācijas ar vienādojumiem, kas

m citam sistēmas vienādojumam

onstanti

, lai iegūtu apstiprināju

» d = 0.0001; » A = [6+

» d = 0.0002;

» b = [2;-1]; » b = [2;-1]; » xy = A\b » xy = A\b

xy = *

xy = * 1.0e+004

.0000 1.0e+004

.0000 2 6.0001

1 3.0001

m riekš aplūkotie ka lineāru vien

atkarībā no atrisinājuma eksistences, mēs nosacīti vara

♦ Savietojamu un lineāri neatkarīgu vienādojumu sistēmas (consistent independent equations), t.i. tādas sistēmas, kurām eksistē viens vienīatrisinājums. Šādu vienādojumu sistēmu atrisinājums ir noturīgs pret nelielām koeficientu izmaiņām. Divu vienādojumu gadījumā, atrisinājumu ģeometriski var interpretēt kā divu taiššu krustpunkta koordinātes.

Lineāri atkarīgu vienādojumu sistēmas (dependent equations), t.i. tādas sistēmas, kurām eksistē bezgalīgi daudz atrisinājumizmaiņas (noapaļošanas kļūdas rezultātā) var dot vienu konkrētu, bet nepareizu atrisinājumu. Divu vienādojumu gadījumā, atrisinājumus ģeometriski var interpretēt kā divu sakrītošu taisņu visu punktu koordinātes. Nedaudz mainot vienas taisnes slīpumu, taisnēm parādās viens pilnīgi konkrēts kruspunkts.

Pretrunīgu vienādojumu sistēmas (inconsistent equations), t.i. tādas, kurām nav atrisinājuma. Nelielas koeficientu izmaiņas var novest pie ļoti atšķirīgiematrisinājumiem. Divu vienādojumu gadījumā ģeometriskā interpretācija ir divas savstarpēji paralēlas taisnes. Taisnes slīpuma nelielas izmaiņas noved pie taišnu krustošanās un būtiskām krustpunkta koordināšu izmaiņām.

Vāji nosacītas vienādojumu sistēmas (ill conditioned), t.i, sistēmas, kuru atrisinājumu būtiski iespaido vienādojuma koeficientu niecīgaŠādas sistēmas parasti ir ļoti tuvas pretrunīgām vienādojumu sistēmām. Divu vienādojumu gadījumā åeometriskā interpretācija ir divas savstarpēji gandrīz paralēlas taisnes. Taisnes slīpuma nelielas izmaiņas noved būtiskām krustpunkta koordināšu izmaiņām.

st darīt ar lineāru vienādojumu sTurpmnemaina vienādojumu sistēmas atrisinājumu :

jebkuru divu vienādojumu mainīšana vietām

vairāku vienādojumu pieskaitīšana kāda

jebkura vienādojuma reizināšana ar nenulles k

Page 109: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-109

Gaā ir visbiežāk praksē lietotā metode. Tas ir tapēc, ka metode ir ļoti vienkārša un ērti

programmējama. Pielietojot šo metodi, praktiski neparādās tāda problēma, kā dalīšana ot vienādojumu sistēmu tā,

(pivot row

usa izslēgšanas (Gaussian elimination) metode. T

ar nulli. Galvenā Gausa izslēgšanas metodes ideja ir pārveidlai koeficientu matricā zem galvenās diagonāles būtu tikai nulles.

Pirmā fāze Pirmajā fāzē pirmo rindu (vienādojumu) sauc par galveno rindu ), bet šīs rindas pirmo koeficientu par galveno elementu (pivot element). Šajā fāzē visi

kas atrodas zem pirmā vienādojuma, tiek aizvietoti ar katra vienādojuma vienādojumi,summu ar galveno vienādojumu, pareizinātu ar tādu koeficientu, lai koeficienti pie mainīgā x1 pārvērstos par nulli. Tātad mēs k-to vienādojumu aizvietojam ar

[ ] [ ].1.11

1 vienaisaavienaisk k −×⎟⎟

⎞⎜⎜⎝

⎛−− , bet vienādojuma koeficienti pie xi tiek aizvietoti ar

11

11 a

aa kiki − (18)

aaki ⇐

Līdzīgas manipulācijas notiek arī ar vienādojumu labajām pusēm :

111 akk

1abbb k−⇐ (19)

Izdarot visas ar šo fāzi saistītās manipulācijas ar katru no vienādojumiem, iegūstam sekojošu vienādojumu sistēmu :

′=′++′+ nnnnn

nn

bxaxa LMMOMM

22

222

0 (20)

Pēc pirmās fāzes beigām koeficientu matricas pirmajā kolonnā zem galv diagonāles visiem elementiem ir jābūt vienādiem ar nulli.

umu un galvenais elements šoreiz ir a 22. Šajā fāzē visi vienādojumi, kas atrodas zem otrā vienādojuma, tiek

r katra vienādojuma summu ar galveno (otro) vienādojumu, pareizinātu ar

′′=′′++′′++

′′=′′++′′++

nnnnn

nn

bxaxa

bxaxa

LMMOMMM

L

33

33333

00

00 (21)

⎪⎪⎩

⎪⎪⎨

⎧′=′++′+

=+++ nn

bxaxabxaxaxa

LL

22

11212111

0

enās

Otrā fāze Tagad par galveno (pivot row) izvēlamies otro vienādoj

/

aizvietoti atādu koeficientu, lai koeficienti visos vienādojumos pie mainīgā x2 pārvērstos par nulli. Pēc ši soļa izpildes mēs iegūstam sekojošus vienādojumus:

⎪⎪⎧

′=′++′+′+=++++

nn

nnbxaxaxabxaxaxaxa

LL

22323222

113132121110

⎪⎪

Page 110: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-110 ©Copyright Pičs (P. Misāns)

Tādā pašā veidā atkārtojot n fāzes, sākotnējā vienādojumu sistēma transformējas par sekojošu vienādojumu sistēmu:

cc

n n

n n

n n

11 1 12 2 13 3 1 1

22 2 23 3 2 2

33 3 3 3

00 0

+ + + + =+ + + + =+ + + + =

⎪⎪

LL

LM M M O M M

α α αα α (22)

enādojumu sistēmu var risināt izmantojot apgriezto

a x a x a x a x bx x x

x x

x cnn n n0 0 0+ + + + =⎩⎪

L α

Ir acīm redzams, ka iegūto vi(reverso) aizvietošanu (back substitution). Veicot minēto operāciju, nezināmo meklēšana sākas no pēdējā vienādojuma. Nezināmo xn atrod pavisam vienkārši, izdalot divus koeficientus. Pēc tam atrod nezināmo xn-1 ievietojot jau atrastpriekšpēdējā vienādojumā. Tādā pašā veidā procesu turpina līdz nonāk pie pvienādojuma un tiek atrasts visi nezināmie, x1 ieskaitot.

Izslēgšana tiek veikta vairākos etapos. Vispirms vienādojums tiek pareizināts ar alvenās diagonāles

5 un saskaitot to ar otro vienādojumu, iegūstam

⎡⎤⎡⎤ 20

o xn irmā

,

Gausa izslēgšanas metodes skaitliskas realizācijas piemērs Aplūkosim piemēru ar rezistīvu trīskontūru shēmu, kas tika dots nodaļas sākumā un kuru apraksta vienādojumi (4)-(6).

Gausa izslēgšanas (Gauss elimination) metodes pamatā ir vienādojumu sistēmas vienkāršošana līdz trīsstūra vienādojumu sistēmai.

konstanti, bet pēc tam saskaitīts ar citu vienādojumu tā, lai zem gveidotos nulles.

Pareizinot 1.-o vienādojumu ar 0.šādu vienādojumu sistēmu:

⎧ =+− 2*0*2*4 321 III ⎡ − 24

⎪⎩

⎪⎨

−=+−−=−+

6*5.9*5*02*5*10*0

321

321

IIIIII

⎥⎥

⎦⎢⎢

⎣−−=

⎥⎥

⎦⎢⎢

⎣∗⎥⎥⎥

⎦⎢⎢⎢

⎣ −−

62

5.9505100

3

2

1

III ⎤

(23)

No matricu algebras viedokļa mēs varam uzskatīt, ka sākotnējā matricu vienādojuma abas puses formāli esam pareizinājuši ar kādu kvadrātveida matricu:

⎥⎥

⎢⎢

−−

−=

⎥⎥

⎢⎢

−−−

−∗⎥⎥

⎢⎢

5.9505100024

5.9505112024

100015.0001

⎥⎥

⎢⎢

−−=

⎥⎥

⎢⎢

−−∗

⎥⎥

⎢⎢

622

632

100015.0001

(24)

Ir īpaši jāuzsver, ka praksē nenotiek šāda matricu reizināšana, jo tā būtu skaitļošanas resursu izšķērdēšana.

Pareizinot 2.-o vienādojumu ar 0.5 un saskaitot to ar trešo vienādojumu, iegūstam sekojošu vienādojumu sistēmu:

−=−+=+−

2*5*10*02*0*2*4 321

IIIIII

⎢⎡−=⎥

⎤⎢⎡

∗⎥⎤

⎢⎡

−−

22

5100024

1

II

(25)

No matricu algebras viedokļa mēs varam uzskatīt, ka matricu vienādojuma abas puses esam pareizinājuši ar kādu kvadrātveida matricu:

⎪⎩ −=++ 7*7*0*0 321

321

III⎥⎦

⎢⎣−

⎥⎦

⎢⎣⎥

⎥⎦⎢

⎢⎣ 7700 3

2

I

⎪⎨

⎧⎥

Page 111: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-111

=⎥⎤

⎢⎡

−−

∗⎥⎤

⎢⎡ 024

5100024

010001

⎥⎥

⎢⎢

⎡−

⎥⎦

⎢⎣ −⎥

⎦⎢⎣ 700

51005.95015.00

, ⎥⎥

⎢⎢

−−=

⎥⎥

⎢⎢

−−∗

⎥⎥

⎢⎢

72

62

15.00010

22 (26)

Tātad gala rezultātā mēs esam

⎢⎣−

⎥⎦

⎢⎣⎥⎦

⎡ −

7

001

ieguvuši trīsstūrveida koeficientu matricu. Atbilstošais matricu vienādojums ir sekojošs:

⎥⎤

⎢⎡−=⎥

⎤⎢⎡

∗⎥⎥

⎢⎢⎢ − 2

2

70

024

3I05100 2

1

⎥II

(27)

N lēav grūti pamanīt, ka lai iegūtu atrisinājumu, mums nezināmie ir jāsāk mek t sākot ar pēdējo vienādojumu.

ādu procedūru sauc par reverso (apgriezto) aizvietošanu (back substitution):

7*I3=-7

Š

No pēdējā vienādojuma:

0*I1+0*+7*I3 = -7 I3 = -7/7 = -1

o otrā vienā N dojuma:

10*I2+(-5)*I3 = - 10*I2+(-5)*(-1)= -2 2 I2 = -7/10 = -0.7

4*

No pirmā vienādojuma:

I1 +(-2)*I2+0*I3 = 2 4*I1 +(-2) *(-1) = 2 I1

šanas paņēmiens ir vispārināms jebkurai galīga izmēra lineārai

Gau ācija MAT maģiskajā zīmē "\". Ja ir jāmeklē vienādojumu sistēmas:

= 0.6/4 = 0.15*(-0.7)+0

Šis vienādojumu risināvienādojumu sistēmai.

sa metodes realiz LAB-ā Gausa metode ir apslēpta

bxA =* (28)

ris a viinājums, tad ir jāuzrakst ena pavisam īsa rindiņa:

;\ bAx = (29)

Pirms tam, protams, ir jābūt piepildītai matricai A, bet vektoram b ir jābūt stabiņa iegūts kolonveida vektora formā. Mūsu

(kolonnas) veidā. Rezultāts x arī tiek aplūkotajai trīskontūru shēmai kontūrstrāvas var iegūt šādi;

Zīm. 75. Trīskontūru shēmas simulācijas scenārijs līdzspriegumam.

R1=1; R2=2; R3=1; R4=4; R5=5; R6=2; R7=2.5;

0, -R5, R5+R6+R7]; E=[2, -3, -6]';

er3k_gel.m

R=[R1+R2+R3, -R2, 0; -R2, R2+R4+R5, -R5; I =

0.1500 -0.7000

Rezultāts

-1.0000 I=R\E

Page 112: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-112 ©Copyright Pičs (P. Misāns)

Šajā piemērā mēs risinām šādas struktūras matricu vienādojumu sistēmu:

⎣⎦⎣⎦

(30)

Ar "x" šeit

īgu procesu votu

vietā ir ieslēgti laikā mainīgi sinusoidāli EDS. Pieņemsim, ka pirmā EDS avota signāla frekvence ir 1 Hz, otrā avota līdspriegums ir 0.5V, bet trešā avota signāla frekvence ir 3 Hz:

} }EIR

⎥⎥

⎢⎢⎡

=⎥⎥⎤

⎢⎢⎡

×⎥⎥⎤

⎢⎢

xxx

xxx

xxxxxxxxx

48476

ir apzīmēti matricu elementi.

Īpaši efektīvs MATLAB ir gadījumos, ja jāveic kādu laikā mainmodelēšana. Pieņemsim, ka iepriekš apskatītajā shēmā divu patstāvīgo EDS a

)32sin(1.0)(,5.00)(),12sin()( 321 ttEttEttE ⋅⋅⋅⋅=+⋅=⋅⋅⋅= ππ , (31)

iju uz minēto EDS iedarbību, mums pirmkārt

Zīm. 76. Trīskontūru shēmas simulācijas scenārijs maiņspriegumiem ar ciklu for.

etalizētāku priekšstatu par scenārija darbību var gūt nodaļā par for ciklu un tukšo atricu. Šeit vienādojumu sistēma cikla for ietvaros tiek risināta tik reizes, cik laika omentu (vērtību) satur laika vektors t. Vektors E atspoguļo kontūru EDS

mentānās vērtības katram laika momentam, bet It - meklējamo kontūrstrāvu omentānās vērtības. Vairāku vienādojumu sistēmu vienlaicīga risināšana

Pra ti

Lai noskaidrotu elektriskās shēmas reakcir jādefinē laika intervāls, kurā mēs gribam veikt modelēšanu, bet otrkārt jāizvēlas laika solis, jo skaitlisko modelēšanu var veikt tikai galīgam punktu skaitam (lai varbūt arī lielam). Šoreiz laika soļa lielumu nosaka vēlēšanās redzēt "gludas" līknes. Atbilstošā MATLAB-a programmiņa varētu izskatīties šādi:

R1=1; R2=2; R3=1; R4=4; R5=5; R6=2; R7=2.5;

Dmmmom

ksē pastāv vesela rinda uzdevumu, kuros vienādojumu sistēmas koeficiennemainās, bet mainās tikai labās puses. Lineāras elektriskas ķēdes (tās ir tādas, kuras satur tikai R, L, C un laikā mainīgu spriegumu vai strāvu avotus) pilnībā atbilst

R=[R1+R2+R3, -R2, 0; -R2, R2+R4+R5, -R5; 0, -R5, R5+R6+R7]; t=0:0.01:1; It=[]; for tc=t, E=[sin(2*pi*1*tc); 0.5; 0.1*sin(2*pi*3*tc)]; I = R\E; It=[It,I]; end; U7=It(3,:)*R7; plot(t,U7)

etr3k_gel1.m

Rezultâts

Page 113: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-113

minētajam nosacījumam. MATLAB šajā gadījumā risinājumu atļauj pierakstīt arī bez cikla for:

Zīm. 77. Trīskontūru shēmas simulācijas scenārijs maiņspriegumiem bez cikla for.

ēs mekllējām sprieguma kritumu uz rezistora R1.

iņas rindiņā "It = R\E" var uzzināt ākošajā bildītē. Operācija "\" itkā skenē kolonveidīgi matricu Et, atrisina ienādojumu sistēmu, bet rezultātu, kas ir kolonveida vektors, ievieto matricā It. kenēšana un vienādojuma risināšana notiek tik reizes, cik kolonnu ir matricā Et.

⎤oo

Darbinot abas nulle uzrakstītās programmiņas (Zīm. 76, Zīm. 77), varat pārli āties, ka pēdējā strādā j , ka cikla for realizācija ir samērā lēna. Tas v ējams, ir jāizvairās no šī cikla izmn ka nekad nevajag usaprotamību lakonismam, ja pēdējais samazina saprotamību. Labāk veidot garāku un lēnāk strādājošu programmiņu, nekā īsu, bet pašam lietotājam maz saprotamu kodu.

Gausa-Džordana (Gauss-Jordan) metode

Šoreiz m

Par to, kas notiek MATLAB-a programmnvS

4444 34444 21LLLL

4444 34444 21LLLL

)101()(

\

)101()( tlengthtlength

⎥⎥

⎦⎢⎢

⎣⎥⎥

⎦⎢⎢

⎣=

⎥⎥

⎦⎢⎢

⎣ oooooooo

oooooo

xxxxxxxx (32)

ecin

4444 84444 76484764444 84444 76 EtRItLLLL ⎡⎤⎡⎤⎡ oooooxxxx

ūtami ātrāk nekā pirmā. Tas ir tādēļēlreiz norāda tikai uz to, ka kur vien ir iesp

tošanas. Tas nav viegls uzdevums. Taču jāatceras, purēt

Lai gan klasiskā Gausa izslēgšanas metode ir vispopulārākā un visbiežāk izmantotā vienādojumu risināšanas metode, mēdz lietot arī citu, minētajai metodei līdzīgu izslēgšanas metodi. Tās galvenā ideja ir tāda, ka izslēgšana tiek veikta ne tikai ar rindām, kas atrodas zem galvenās rindas (pivot row), bet arī ar visām rindām, kas atrodas virs galvenās. Minēto operāciju rezultātā tiek iegūts sekojošs matricu vienādojums :

⎥⎥⎥⎥⎥

⎦⎢⎢⎢⎢⎢

=

⎥⎥⎥⎥⎥

⎦⎢⎢⎢⎢⎢

⎣⎥⎥⎥⎥⎥

⎦⎢⎢⎢⎢⎢

⎣ nn c

c

⎤⎡⎤⎡⎤⎡ xL 10001cc

x

xx

1

MML

MOMMMLL

3

2

3

2

1000

01000010

(33)

R1=1; R2=2; R3=1; R4=4; R5=5; R6=2; R7=2.5; R=[R1+R2+R3, -R2, 0; -R2, R2+R4+R5, -R5; 0, -R5, R5+R6+R7]; t=0:0.01:1; Et=[sin(2*pi*1*t); zeros(size(t))+0.5; 0.1*sin(2*pi*3*t)]; It = R\Et; U1=It(2,:)*R4; plot(t,U1)

etr3k_gel2.m

Rezultāts

Page 114: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-114 ©Copyright Pičs (P. Misāns)

Faktiski vienādojumu sistēmas atrisinājumu vektors ir izvietojies vienādojumu sistēmas labās puses vektorā. Atšķirībā no klasiskās Gausa izslēgšanas metodes, šeit nav nepieciešama reversās aizvietošanas izmantošana, taču kopējais operāciju skaits ir lielāks nekā klasiskajā metodē. Lasītājs var mēģināt patstāvīgi noteikt nepieciešamo operāciju skaitu.

Gausa izslēgšanas metodes iespējamās skaitliskās problēmas Mainīgo izslēgšanas laikā galvenais elements (pivot element) dažreiz var kļūt vienāds ar nulli. Par cik izslēgšanas procedūras (reduction) turpināšanai šo elementu ir nepieciešams izmantot kā dalītāju, tad process nonāk strupceļā.

Pastāv trīs iespējas gadījumos, kad galvenais elements kļūst vienāds ar nulli.

1. Vienādojumu sistēmai eksistē viens vienīgs atrisinājums.

Tā kā no atrisinājuma viedokļa ir pilnīgi vienalga, kādā kārtība ir uzrakstīti indu, kurā

var būt noapaļošanas

vienādojumi, tad mēs varam to vienādojumu koeficientu matricas rgalvenais elements kļūst vienāds ar nulli, apmainīt vietām ar kādu citu, zemāk esošu rindu. Pēc apmaiņas izslēgšanas procedūra, protams, ir jāatkārto.

Jāpatur prātā, ka, risinot lielas vienādojumu sistēmas, aktuālakļūda. Tādā gadījumā ir grūti runāt par korektu nulli. Tās vietā var būt skaitlis. Nopietnam

ļoti mazs un rindu izslēgšanas algoritmam vajadzētu ņemt vērā šo faktu,

maiņ ments pēc lieluma ir u būtu vēlams izdarīt arī tajos gadījumos, kad galvenais eletuvs noapaļošanas kļūdai.

2. Vienādojumu sistēma satur lineāri atkarīgus vienādojumus.

Šajā gadījumā, kā jau agrāk tika minēts, sistēmai ir bezgalīgi daudz atrisinājumu. To ilustrē šāds piemērs:

⎪⎩

⎪⎨⎧

=++=−−=++

15214223

zyxzyxzyx

(34)

Vienkārša 2-ā un 3-ā vienādojumu saskaitīšana dod pirmo vienādojumu. Arī izslēg bezgalīgi daudz

sistēma ir pretrunīga.

šanas pielietošana (lasītājs var veikt patstāvīgi) rāda, ka iratrisinājumu.

3. Vienādojumu

Nedaudz modificēsim iepriekšējo piemēru (1.-ā vienādojuma labā puse):

=−−=++

14213

zyxzyx

(35)

Pēc izslēgšanas pielietošanas lasītājs var pārliecināties, ka tik tiešām vienā

vam, ka var parādīties problēmas, kas saistītas ar vienādojumu atkarību un pretrunīgumu. Algoritms ir jāveido tā, lai tas varētu prognozēt šis situācijas, lai nopapaļošanas kļūda neapslēptu minētās parādības.

⎪⎩ =++ 152 zyx

Saskaitot 2-o un 3-o vienādojumus, iegūstam vienādojumu, kas ir pretrunā ar pirmo vienādojumu.

⎪⎨⎧

dojumu sistēma ir pretrunīga.

Veidojot Gausa izslēgšanas metodes algoritmus, lietotājam ir jābūt gata

Page 115: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-115

Iteratīvās vienādojumu risināšanas metodes Lai gan Gausa izslēgšanas metode ir eleganta un vienkārša, tā var radīt problēmas lielu vienādojumu sistēmu gadījumā. Tas ir saistīts ne tik daudz ar nepieciešamās datora atmiņas pietiekamību, bet gan galvenokārt ar minētās metodes nenoturību pret

u.t.t.. Tādā gadījumā mēs iegūstam n iteratīvus vienādojumus:

noapaļošanas kļūdas uzkrāšanos. Šāds trūkums nepiemīt t.s. iteratīvajām metodēm. Viena no populārākajām šīs metožu kategorijas pārstāvēm ir Gausa-Zeideļa metode.

Gausa-Zeideļa (Gauss-Seidel) iteratīvā metode Gadījumā, kad ir uzdots nxn matricu lineārs matricu vienādojums Ax b= , mēs varam no katras vienādojuma rindas formāli izteikt atbilsošos mainīgos. No pirmās rindas x1 , no otrās x2

⎪⎪⎪

⎪⎪⎪

⎨−=

−=

1

)(1

)(

222

222

111

111

iii

iii

xaba

x

xaba

x

M

(36)

⎧ 1

⎩ ≠niinin

nnn a

−= ∑ )( xabx

e vienā

ajā solī visas nezināmo xi vērtības tiek pārrēķinātas, izmantojot iepriekšējo komplektu. Pārrēķins trešajā un visos nākošajos soļos tiek veikts tieši tādā pašā veidā, kā iepriekš, tikai katru reizi izmantojot arvien precīzāku iepriekšējā solī atrasto atrisinājumu komplektu. Process tiek pārtraukts tajā brīdi, kad atrisinājuma izmaiņas nepārsniedz pieļaujamo kļūdu, ko uzdod algoritma lietotājs. Potenciālās problēmas.

Galvenā problēma ir algoritma konverģence. Tā vispārējā gadījumā ir atkarīga no sākuma atrisinājumu vektora izvēles. Ir pierādīts, ka metodei ir stabila konverģence

Gadījumā, ja neviens no diagonāles elementiem nav vienāds ar nulli, ši dojumi var tikt atrisināti.

Lai uzsāktu risināšanas procesu, pašā sākumā mums ir jāizvēlas patvaļīgi visas xi vērtības. Nākoš

tajos gadījumos, kad ir t.s. diagonāles dominance, ko matemātiski var formulēt kā sekojošu nevienādību :

∑≠

par matricu ar dia ārša.

rsijai bija speciāla funkcija flops, ar kuras palīdzību varēja

>ik

ikii aa katrai i vērtībai (37)

Bieži vien konverģence var pastāvēt gadījumos, kad diagonāles elements vienkārši ir vislielākais rindā. Taču šādos gadījumos konverģence nav garantēta.

Vispārējā gadījumā koeficientu matricu ir iespējams transformēt gonālo dominanci, taču ši procedūra nav vienk

Operāciju skaits Datoru aritmētiskās operācijas saskaitīšanu/atšemšanu un reizināšanu/dalīšanu sauc par peldošā punkta operācijām (floating point operations) jeb angliski flops . MATLAB-ā līdz 5.x ve

Page 116: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-116 ©Copyright Pičs (P. Misāns)

noskaidrot dažādiem aprēķiniem patērēto aritmētisko operāciju skaitu. Sākot ar 6.x versiju šī funkcija vairs nav pieejama.

aitu, tad iegūsim

+ (38)

anu skaits ir tieši tāds pats. Lai iegūtu kopējo operāciju skaitu vēl

Operāciju skaits Gausa izslēgšanas metodē Ja mēs saskaitīsim katrā redukcijas fāzē nepieciešamo reizinājumu sksekojošu formulu:

2)3()2()1( 2222 ++−+−+− Lnnn 1

Arī kopējais atņemšir jāpieskaita operāciju skaits atpakaļaizvietošanas laikā. Reizināšanu skaitu mēs varam iegūt, izmantojot aritmētiskās progresijas izteiksmi un tas ir vienāds ar

2/)1( −⋅ nn (39)

Summēšanu skaits ir līdzīgs. Paturot prātā, ka

61

2 =∑ )12()1( +⋅+⋅

=

nnnn

(40) kk

mēs iegūstam izteiksmi, kas nosaka kopējo flopu skaitu:

32

3)1()1(2 3nnnn ⋅≈

+⋅−⋅⋅ (41)

Izmantojot simboliskās matemātikas iespējas, var pārliecināties, ka tikko uzrakstītā izteiksme ir korekta:

» syms k n

^2)+2*(n*(n-1)/2))) ans = 2/3*n*(n-1)*(n+1)

ka redukcijas gaitā var notikt ēļ aprēķinātais flopu skaits ir

minimāli nepieciešamais. Taču pie lielām n vērtībām šo papildus operāciju skaits,arī nav progrnozējams, tomēr nav tik nozīmīgs, lai par to īpaši diskutētu.

Oper rminantu metodei Lasīt dināsim, ka d ekursīvu izteik

» k2sum = symsum(k^2,1,n); » factor(simplify(2*(k2sum-n

Jāņem vērā, ka aprēķinot flopu skaitu netika ņemts vērā, rindu pārkārtošana, kas arī prasa papildus operācijas. Tād

lai

Salīdzinājumam lasītājs var patstāvīgi veikt to matemātisko operāciju skaita aprēķinu, kas ir nepieciešamas, ja vienādojumu sistēma tiek rēķināta ar determinantu metodi.

āciju skaits deteājs var pavingrināties operāciju saskaitīšanā determinantu metodei. Atgāeterminanta aprēķinu matricai ar izmēriem n × n var pierakstīt ar rsmi:

jicji

jjia +

=

−⋅⋅= ∑ )1(1

AA (42)

kur cjiA ir (n-1) × (n-1) matrica, kura ir iegūta no matricas A, nodzēšot i-to rindu un

n

j-to kolonnu.

Tā, piemēram, ja mēs mēģināsim saskaitīt reizināšanas operāciju skaitu, tad iegūsim:

Page 117: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-117

4444444444 34444444444 211

)2()1()1( −⋅−⋅+−⋅+ nnnnnn 2...)1(+ + ⋅ − ⋅ ⋅L

−n(43)

Kā redzam, tad reizināšanu skaits ir vismaz >n!.

nn

Tā, piemēram, ja n=10, tad viena determinanta aprēķinam nepieciešamo reizinājumu skaits vismaz vairākus tūkstošus reižu pārsniedz Gausa metodei nepiecie operāciju kopskaitu:

» orial(n)/(2/3*n*(n-1)*(n+1))

Lasītājs var patrennēties un atrast precīzāku operāciju skaitu, kas ir nepiecie determinantu metodei.

ienādojumu sistēmām ar 2 līdz 4

šamo

n = 10; » factans = 5.4982e+003

šams

Praktiska jēga no determinantu metodes ir vvienādojumiem. Pie lielāka skaita (>4) vienādojumu determinantu metodes izmantošana ir vienkārši bezjēdzīga.

Vienādojumu risināšana ar determinantu metodi Ja nu etodi, tad tas, protams, ir iespē

Šī m la) ir pazīstama jau no skolas sola. Nākošais scenārijs mum veikt jau agrāk aplūkotās trīskontūru shēmas modelēšanu

antu metode.

asītājs var pārliecināties par to, ka rezultāts ir tāds pats, kā iepriekš atrastais.

lasītājs tomēr ļoti vēlas izmantot determinantu mjams.

etode (Krāmera kārtus demonstrē, kā varam

dotajiem līdzspriegumiem, izmantojot determinantus:

R1=1; R2=2; R3=1; R4=4; R5=5; R6=2; R7=2.5; R=[R1+R2+R3, -R2, 0; -R2, R2+R4+

er3k_det.m

R5, -R5; 0, -R5, R5+R6+R7];

detI2=det([R(:,1),E,R(:,3)]);

E=[2, -3, -6]'; detR=det(R); detI1=det([E,R(:,[2,3])]);

detI3=det([R(:,[1,2]),E]); I=[detI1; detI2; detI3]/detR

Zīm. 78. Trīskontūru shēmas simulācijas scenārijs līdzspriegumiem. Determin

L

Page 118: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-118 ©Copyright Pičs (P. Misāns)

ViOperācija "\" ļauj tikt galā arī ar komplekso skaitļu vienādojumu sistēmām, kā arī ar

etiekami mām.

Piemērs.

enādojumu sistēmas ar kompleksiem koeficientiem

pārdefinētām (vienādojumu skaits lielāks par nezināmo skaitu) un nepidefinētām (vienādojumu skaits mazāks par nezināmo skaitu) vienādojumu sistē

Divu kontūru (šūnu) shēma, kas satur R, L un C. Komplekso amplitūdu metode. Aprēķinam izmantosim šūnu (kontūrstrāvu) metodi.

Pieņemsim, ka ir dota šāda divšūnu shēma, kas satur vienu EDS avotu. Laika apgabalā shēma ir šāda:

Zīm. 79. Divkontūru lineāra shēma ar reaktīviem elementiem laika apgabalam.

Shēmai ir uzdoti sekojoši parametri:

Us(t) = 1*cos(ω0t+π/3) V, ω0=106 rad/s, R1 = R2 = 20 Ω, L1 = L2 = 20 μH = 20x10-6 H.

US(t) Uex(t)

R1 L1 L2

C R2

Savukārt frekvenču apgabala shēmā mēs attēlosim spriegumu kompleksās amplitūdas, šūnu strāvu kompleksās amplitūdas un atbilstošās kompleksās pretestības.

Zīm. 80. Divkontūru lineāra shēma ar reaktīviem elementiem frekvenču apgabalam.

Ja uzzīmētās ķēdes aprēķinam izvēlēsimies šūnu strāvu metodi, tad vienādojumu sistēma būs:

R1 jωL1

R2

jωL2

1/jωC exmU& 2mI&1mI&3/1 πj

sm e⋅= U&

⎪⎪⎩

⎪⎪⎨

=+++−

−=−+++

0*)1(*)1(

*)1(*)1(

2221

2111

mm

msmm

IRLjCj

ICj

UICj

ICj

LjR

&&

&&&

ωωω

ωωω

(44)

To pašu pārrakstot matricu formā, iegūstam:

⎥⎦⎤

⎢⎣⎡−=⎥

⎤⎢⎣

⎡∗

⎥⎥⎥⎥

⎢⎢⎢⎢

++−

−++

011

11

2

1

22

11ms

m

m UII

RLjCjCj

CjCjLjR

&&

&

ωωω

ωωω

(45)

Page 119: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-119

No programmēšanas viedokļa ērtāk to visu pārrakstīt šādi:

⎥⎦⎤

⎢⎣⎡−=⎥

⎤⎢⎣

⎡∗⎥⎦⎤

⎢⎣⎡

+−−+

02

1

322

221 ms

m

m UII

ZZZZZZ

& ,

kur

&&

2232111 Cjω

Sprieguma komplekso amplitūdu uz rezistora R

;1; LjRZZLjRZ ωω +==+= (46)

2 atrodam kā:

22 RIU ⋅= && (47)mmex

ATLAB ļauj risināt vienādojumus ar kompleksiem koeficientiem tikpat vienkārši kā āliem koeficientiem, izmantojot operāciju "\". Tādējādi lielāko scenāriju daļu

izņem datu sagatavošana un interpretēšana. Nākošais scenārijs vispirms atrod abu ontūrstrāvu kompleksās amplitūdas, risinot matricu vienādojumu (46), bet pēc tam prieguma komplekso amplitūdu (4) uz rezistora R2.

Ums = 1*exp(j*pi/3); w=1e6; R1 = 20; R2 = R1;

» L1» Z1 = R1+j*w*L1; Z2 = 1/(j*w*C);

Mar reaks

»»

= 20e-6; L2 = L1; C = 0.1e-6;

» Z3 = R2+j*w*L2; » Z = [Z1+Z2, -Z2; -Z2, Z2+Z3]; » U = [-Ums,0]'; » Im = Z\U; »

Komplekso skaitli var

Umex = Im(2)*R2; compass([Ums,Umex]); »

Zīm. 81. Vektoru dia-

gramma.

Viltībiņas: Godīgi sakot, vektoru diagramma, kas ir redzama Zīm. 81, ir izdaiļota" sākotnējā diagramma (iegūta ar compass) ar Plot Edit līdzekļiem. aktiski te ir notikusi galvenokārt objektu dzēšana. Attēlu, protams ir iespējams vēl ilnveidot. Patrennējies pats(i)!

A z

deg(angle(Umex)) ans = -15.0000 » rad2deg(angle(Ums)) ans = 60.0000

» abs(Umex) ans = 0.3536 » abs(Ums) ans = 1

» rad2deg(angle(Im)) ans = 101.5651 -15.0000

» abs(Im) ans = 0.0395 0.0177

ievadīt arī izmantojot funkciju exp .

☺"Fp

tcerēsimies, ka ar funkcijām angle un abs var noteikt vektora (šoreikompleksās amplitūdas) fāzi unu amplitūdu:

» rad2

Abas fuukcijas ir piemērojamas arī matricām.

Page 120: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-120 ©Copyright Pičs (P. Misāns)

Ja ir vajadzība, var atjaunot arī ieejas un izejas spriegumu laika diagrammas. Tikai jāatceras, ka reāli ķēdē noris pārejas procesi, kurus ar komplekso amplitūdu metodi atjaunot nav iespējams. Tādēļ attēlotās oscilogrammas ir iespējamas tikai stacionārā gadījumā, t.i. tad, kad ķēdē visi pārejas procesi ir beigušies, visi iedarbes avosinusoidāli un ar vienu noteiktu frekvenci. Oscilogrammā redzamā aina atbilstu īstenībai tikai tad, ja pārejas procesi pie t = 0 jau būtu beigušies.

» t=linspace(0,6*pi/w,101); » Ust = abs(Ums)*cos(w*t+angle(Ums));

ti ir

» Uext = abs(Umex)*cos(w*t+angle(Umex)); » plot(t,Ust,t,Uext); » xlim([min(t),max(t)]);

Zīm. 82. Ieejas un izejas spriegumi stacionāram

režīmam.

Page 121: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-121

Pirmie soļi nelineāro vienādojumu risinā

šanas metodēs

Page 122: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-122 ©Copyright Pičs (P. Misāns)

Page 123: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-123

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-123

Nelineāru vienādojumu risināšanas elementi. Ja elektroniska shēma satur t.s. nelineāros elementus, piem. diodes, tranzistorus, mikroshēmas u.t.t., tad tās var aprakstīt tikai ar nelineāru vienādojumu sistēmu palīdzību. Lai šādas ķēýu darbību varētu sekmīgi imitēt ar datoru palīdzību, modelēšanas programmu veidotājiem kā arī ekspluatētājiem ir jāpārzin nelineāru vienādojumu sistēmu risināšanas paņēmieni. Līdzīgi kā lineāru vienādojumu sistēmu gadījumā, ar nelineāru vienādojumu sistēmām var aprakstīt visdažādākos objektus sākot ar mehāniku un beidzot ar ekonomiku. Elektronikas inženierim ir svarīgi apgūt nelineāru vienādojumu risināšanas paņēmienus, jo tie var būt noderīgi dažādu uz mikronkontrolieriem un signālu procesoriem balstītu sistēmu izveidē.

Piemērs: Diodes taisngriezis

Zīm. 83. Diodes taisngriezis.

Ķēdes fizikālo uzvedību apraksta ar Kirhofa un Oma likumiem.

Kirhofa likums spriegumiem:

Oma likums rezistoram:Oma likums diodei:

Kirhofa likums strāvām:Ķēdes vienādojums:

UVisvienkāršākais piemērs ir ideāla sprieguma avota virknes slēgums ar diodi un lineāru rezistīvu elementu. To mēdz saukt arī par vienpusperioda taisngriezi (rectifier). Šādas ķēdes vispārinājums ir divu nelineāru elementu (NE) un ideāla EDS virknes slēgums. Praksē diodi mēdz saukt arī par ventili. Tuvināti var uzskatīt, ka tā vada strāvu tikai vienā virzienā, ko atspoguļo diodes grafiskais attēls.

D

Ei iD R

UR

0/)()(/

)(/

=−−−=

==

+=

RUUEiUEiRU

UiiRUi

UUE

RRD

RDR

DD

R

NR

(48)

Tādējādi mēs esam ieguvuši nelineāru vienādojumu, kur nezināmais UR ir “paslēpts” nelineārajā funkcijā iN. Iegūto vienādojumu var pārrakstīt vēl vispārīgākā formā:

0)( =RUf (49)

Pārsvarā gadījumu praksē inýenierus interesē shēmās notiekošo procesu laiciskās sakarības. Tādā gadījumā iedarbes sprieguma momentānā vērtība ir atkarīga no laika ķēdes vienādojums ir jāpapildina ar parametru t:

0/)())()(( =−− RtUtUtEi RRD (50)

Vienkāršojot (50), iegūstam:

0))(( =tUf R (51)

Page 124: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-124 ©Copyright Pičs (P. Misāns)

Pievērsīsim uzmanību tam, ka to, vai vienādojumizskats. Var piezīmēt, ka elektronikā strāvas, k

s ir nelineārs nosaka funkcijas iD as plūst caur nelineāru elementu

(piemērā diodi), atkarību no sprieguma sauc par volt-ampēru (VA) raksturlīkni.

Reālu diožu raksturlīknes apraksta ar t.s. Ebersa-Molla modeli

]1)[exp()( 0 −⋅⋅= DDD UiUi α (52)

Lai vienkāršotu tālāko vielas iztirzājumu, mēs izmantosim vienkāršotu raksturlīknes variantu – pseidodiodes raksturlīkni

1)exp()( −= DDD UUi (53)

Praksē diodes ar konkrēti šādiem parametriem i0 un α nemēdz būt.

Zīm. 84. Pseidodiodes VA raksturlīkne.

rma ir pietiekami vispārīga un ir derīga uru citu divpolu nelineāru elementu (piem.

es izteiksmi vienādojumā (50 katram laika u:

Vienādojumu (49)-(51) pieraksta fovienkontūra ķēdes aprakstam ar jebkstabilitronu, varistoru u.t.t.)

Ievietojot pseidodiodes VA-raksturlīknmomentam t mēs iegūstam vienādojum

)(exp(

),

−−UE R 0/)1 − =RUR (54)

Ja vienādojuma (54) gadījumā lasītājs vēl var mēģināt atrast anal ājumu, tad pie ītisku risinnelinearitātēm ar sarežģītākām funkcijām, pārsvarā gadījumu var parādīties nopietnas problēmas. Minētā iemesla dēļ praksē plašu izplatību ir ieguvušas skaitliskās metodes.

Vienādojumu (51) un (54) kreisās puses mēdz saukt par vienādojuma funkcijām. Uzzīmēsim šo vienādojuma fuvērtībām.

» UR = 28:0.01:31» fUR = (exp(3» plot(UR,fUR)

Mēs redzam, ka funkcija pi R

mēģināt saprast, kā var skaitliski atrisināt šādu

nkciju konkrētām E un R

; 0-UR)-1)-UR/10;

e U ≈28.65 ir vienāda Zīm. 85. Vienādojuma (54) funkcija.

ar nulli. To mēdz saukt arī par funkcijas nulli (function zero). Faktiski tas ir vienādojuma atrinsinājums. Mūsu uzdevums turpmāk ir

nelineāru vienādojumu.

Page 125: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-125

Ņūtona metode (Newton's method). Praksē praktiski visplašāko izplatību ir guvusi Ņūtona metode. Tās priekšrocības - ātra konverģence un vienkāršība. Aplūkosim vienādojumu (51) tikai uzrakstītu mainīgajam x:

0)( =xf (55)

o x asi. Viens veids, kā atrast vienādojuma saknes vērtību ir sekojošs. Mēs

k+1 āt un

ā brīdī, kad Δxk

Ja vien pastāv kāds x (vienādojumam ir atrisinājums), kuram izpildās (55), tad loģiski, ka funkcijas grafiks šķērs

(55) brīvi

izvēlamies punktu xk (guess). Šajā punktā konstruējam pieskari (tangent line) un iegūstam punktu x . Procesu var turpinir acīmredzams, ka mēs tuvojamies punktam, kurā vienādojuma funkcija šķērso nulles asi. Tuvināšanos pārtraucam tajkļūst pietiekami mazs.

Zīm. 86. Ņūtona metodes ģeometriskā

ilustrācija.

Realizējot Ņūtona metodi skaitliski, protams, neviens pieskares nekonstruē un l

:

īknesnezīmē. Zīmējumā attēlotais ir tikai ģeometriska interpretācija. Taču to visu var aprakstīt arī algebriski, ņemot vērā, ka ģeometriski mums ir darīšana ar trijstūri.

No aplūkotā zīmejuma seko elementāra sakarība, kas ir Ņūtona metodes pamatā

kkk xxx Δ−=+1

No trījstūra ģeometrijas seko, ka:

(56)

kxxk dxxΔk xdfxf

=

==)()(

(57)

nājums ir vienāds ar pieskares leņķa tangensu. No tikko iegūtā korekcijas lielumu (correction):

tgα

Atcerēsimies, ka atvasivienādojuma atrodam labojuma koeficienta jeb

1)()( ⎥⎦⎢⎣⎡⋅=Δ kk dx

xdfxfx

Iegūtās sakarības (56) un

=

kxx

(58) mums ļauj pēc dažiem soļiem tuvoties ar zināmu kļūdu ienādojuma saknei:

(58)

īstajai v

)()(

1k

kkk xf

xfxx′

−=+ (59)

ikko aplūkotajai ģeometriskajai interpretācijai pamatā ir iespējamība izvirzīt funkciju eilora rindā (Taylor series) izvēlētā punkta xk (iepriekš apzīmēts ar xk ) apkārtnē:

TT

K+−+−+= 22

2

)(!2

1)()()( kx

kx

k xxdx

fdxxdxdfxfxf

kk

(60)

Page 126: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-126 ©Copyright Pičs (P. Misāns)

Ņemot vērā tikai pirmo Teilora rindas locekli, iegūstam:

)()()( kx

k xxdxdfxfxf −+≈ (61)

k

Tālāk atcerēsimies, ka mūs interesē tāda x rtība, pie kuras izpildās sakarība (55)

emot vērā tikko teikto, no (61) iegūstam:

vē .

Ņ

)()(

k

kk xf

xfxx′

−≈

Atbilstoši izkoriģējot apzīmējumus, redzam, ka ieg

(62)

ūtā izteiksme ir līdzīga (59). Atšķirība ir tikai tā, ka (62) tieši norāda uz saknes (root) tuvinājuma aptuvenību. Turpretī izteiksme (59) precīzi atrod kārtējo tuvinājumu, bet ne pašu sakni.

Mazāk pieredzējušiem lasītājiem vajadzētu atce- mēdz būt citādā izskatā. Korekciju n

gan pieskaita:

kkk xxx

rēties, ka literatūrā nereti izteiksmes evis atņem no kārtējā tuvinājuma, bet (56) (62)

Δ+=+1 (63)

tbilstoši tam pati korekcija tiek rēķināta ar mīnA us zīmi: 1)()(−

=⎥⎦⎤

⎢⎣⎡⋅−=Δ

kxxkk dx

xdfxfx (64)

Lasītājs noteikti ir sapratis, ka pēc būtības nekas nav mainījies. Tie paši vēži tikai atkal jauna monogrāfija, bet nabaga studentam ar to visu jātiek galā.

Atzīmēsim, ka praksē atvasinājuma meklēšanai visbiežāk lieto skaitliskus tuvinājiens no risinājumiem ir tāds, ka izvēlētajā punktā

funkcijas argumentam tiek dots neliels pieaugums dx un atvasinājumu atrod pēc izteiksmes:

umus un nevis analītiskas izteiksmes. V

dxxfdxxfxf )()()( + −

≈′ (65)

.

Par cik korekcijas aprēķinā ar formulu (64) ietilpst funkcijas vērtības aprēķins, tad pšī aprēķina var veikt arī aprēķinu kļūdas pārbaudi. Viena no loģiskām kpārbaudēm ir vienādojuma funkcijas moduļa salīdzināšana ar uzdoto kļūdu:

Mēdz lietot arī citādus atvasinājuma tuvinājumus, taču šeit pie tā nepakavēsimies

ēc ļūdas

ε<)(xf (66) k

Tā, piemēram, iepriekš aplūkotā diodes shēmas gadījumā šis nosacījums pieprasa, lai strāvu summa mezglā nepārsniegtu kādu uzdoto kļūdu. Faktiski tas ir Kirhofa lik(strāvām) izpildes korektuma tests.

uma

Alternatīva varētu izskatīties šādi:

ε<Δ kx (67)

vai arī kā (66) un (67) kombinācija.

Page 127: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-127

Ņūtona metodes algoritma soļi Šis algoritms rezumē augstāk aprakstīto. Kā tests tiek izmantots izteiksme (66).

1. Izvēlamies risinājuma pirmo tuvinājumu xk.

2. Salīdzinam vienādojuma funkcijas moduļa vērtību ar uzdoto kļūdu.

a. Ja testējamā vērtība ir mazāka par uzdoto kļūdu, tad ejam uz 6.soli.

b. Ja testējamā vērtība ir lielāka par uzdoto kļūdu, tad ejam uz 3.soli.

3. Pēc formulas (58) atrodam korekciju Δxk. 4. Pēc formulas (56) atrodam nākamo tuvinājumu xk+1.

5. Iepriekšējo tuvinājumu xk aizstājam ar xk+1 un atgriežamies uz soli 2.

6. Izvadam vai saglabājam tuvināto saknes vērtību xk.

Lasītājs var pavingrināties izveidot algoritmu gadījumiem, kad testēšanai tiek izmantota izteiksme (67) vai arī kombinētā pieeja.

Aplūkosim transcendentu vienādojumu (54). kura funkciju var izteikt kā: Ņūtona metodes realizācijas piemērs ar kalkulatoru

RUUEUf RRR /)1)(exp()( −−−= (68)

Savukārt funkcijas atvasinājumu var izteikt kā:

ulatora vietā izmantosim MATLAB. Ja mēs vēlamies darboties ar izteiksmēm komandu logā, tad ērti izmantot ir t.s. inline funkcijas, t.i. tādas funkcijas, kuras var izteikt ar vienu izteiksmi. Nodefinēsim vispirms izteiksm teksta rindu:

Inline function: fUR(Ur,E,R) = (exp(E-Ur)-1)-Ur/R

r tikko

Redzam, ka rezultāts ir sanācis tīri ciešams un kļūda ir apmēram 8 mA. Vai tas ir daudz? Laikam jau nē - ķēdē plūst gandrīz

ans = -0.0076

» 28.65/10 ans = 2.8650

RUEUf RR /1)exp()(/ −−−= (69)

Katrā iterācijas solī spriegumu rēķināsim kā:

)(/)(, / kR

kR

kR

kR

kR

kR UfUfUkurUUU =ΔΔ−= (70)

Šoreiz kalk

i kā

» fUR_s = '(exp(E-Ur)-1)-Ur/R';

Mūsu funkcijai ir paredzēti trīs mainīgie: » fUR = inline(fUR_s,'Ur','E','R') fUR =

Palūkosimies Zīm. 85 un pārbaudīsim tur redzēto tuvināto saknes vērtību a

» fUR(28.65,30,10)

izveidoto inline tipa funkciju:

3A:

Page 128: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-128 ©Copyright Pičs (P. Misāns)

Mums vēl ir jāizveido arī vienādojuma funkcijas atvasinājuma funkcija:

dfUR = Inline function:

Lasītājs var s aprēķinam. Mēs to šoreiz nedarīsim, bet korekcijas aprēķinos izmantosim abu iegūto izteiksmju att

Lai sa un R bet sprieg28V.

» E = 30; R = 10; » Ur = 28;

Pirmaj ēs vienkārši apskatīsim. Ja tas ir liels, tad rēķināsim korekciju nākošajam iterācijas solim:

ans = dU =

Pēc tam, kad korekcija ir atrasta, meklējam nākošo tuvinājumu un strāvas disbalansu:

28.4792

» fUR(Ur,E,R) ans = 0.7278

lizē nākošais iterācijas solis un ir jāatrod rtības labojums.

Ņūtona metodes pamatdarbības kārši. Nākošā tabula ir kopsavilkums pirmajām 5

un R=10. Redzam, ka izmantoto rāciju skaits ir pietiekams, lai sasniegtu strāvas disbalansu 3.5nA, kas konkrētajā

ērs dio

3 5

» dfUR = inline(char(diff(fURs,'Ur')),'Ur','E','R')

dfUR(Ur,E,R) = -exp(E-Ur)-1/R

pavingrināties un izveidot vienu inline tipa funkciju korekcija

iecību.

līdzinātu rezultātus ar Zīm. 85 rezultātiem, E vērtības izvēlēsimies tādas pašas,uma sākuma vērtību pieņemsim vienādu ar

ā solī ir jāpārbauda strāvas disbalanss mezglā. Šoreiz m

» fUR(Ur,E,R) » dU = fUR(Ur,E,R)/dfUR(Ur,E,R)

3.5891 -0.4792

» Ur = Ur - dU Ur =

Tā kā strāvas disbalanss ir paliels, tad ir jāreakorekcija un jāveic iepriekšējās sprieguma vē

» dU = fUR(Ur,E,R)/dfUR(Ur,E,R) dU = -0.1557

» Ur = Ur - dU Ur = 28.6349

Atkal meklējam strāvas disbalansu, lai lemtu par tālāko darbību:

» fUR(Ur,E,R)

ans = 0.0527

procesu var turpināt patstāvīgi. Kā redzams, Lasītājs noprogrammēt var ļoti vieniterācijām, rēķinot vienādojuma (54) sakni pie E=30itegadījumā ir vairāk nekā pietiekams. Tabula 11. Ņūtona metodes iterāciju skaitlisks piem

Iterācija 1 2

des taisngriezim

4 UR 28 28.479 28.635 28.648 28.648

f(UR) 3.5891 0.7278 0.05267 1.381e-008 0.00033519

ΔU -0.4792 -0.1556 -0.01311R - -3.4831e-009 8.4534e-005

Page 129: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-129

Ņūtona metodes realizācijas piemērs funkcijā Lai izveidotu labu funkciju, kas realizē Ņūtona metodi, ir jāpatērē zināms laiks. Mēs

lizāciju, kuru ir jāsaglabā failā .

šeit iztiksim ar pavisam vienkāršu funkcijas reanewton.m (vai arī kādā citā, ja izdomāsi citu nosaukumu)

function x = newton(fx,dfx,x0,epsilon,varargin); % Newton's method

if nargin < 4, epsilon = 0.0001; end;if nargin < 3, x0 = 0; end; x = x0; delta = fx(x,varargin{:})/dfx(x,varargin{:}); while (abs(fx(x,varargin{:}))>epsilon), delta = fx(x,varargin{:})/dfx(x,varargin{:}); x = x-delta; end;

ir rakstīta tāFunkcija , lai tā varēt in. inīgais, kas pēc matrica, ļauj izmantot tik ieejas vajag (arī nevienu). Funkcijas izsaukumā ir jānorāda izmantoto

funkciju (vienādojuma un vienādojuma atvasinājuma funkciju) rokturi

u strādāt ar mainīga skaita argumentu varargŠis sistēmas maparametru, cik

būtības ir šūnu

(function_handle):

» E = 30; R = 10; » newton(@fuans =

nx,@fund,20,0.001,E,R

ju), kas MATLAB-ā ir r jai nodefinētu

)

28.6481

Funkcijas rokturis (līdzība ar C valodas norādi uz funkciparādījies pēdējās versijās, ļauj ātrāk izpildīt p ogrammas. Lai funkcirokturi, pirms funkcijas nosaukuma ir jāievieto zī

otos, mums ir jābūt uzrakstītām

gin),

gin{1};

me @.

Lai newton darb arī funkcijām:

function fx=funx(Ur,varargin); function dfx=funif isempty(varar global E R; else, E = varar R = varargin{2}; % Saraksts var augt ... end; fx = (exp(E-Ur)-1)-Ur/R;

R = varargin{2};

d(Ur,varargin);if isempty(varargin), global E R; else, E = varargin{1};

% Saraksts var augt ... end; dfx = -exp(E-Ur)-1/R;

Šīm funkcijām ir jāglabājas atsevišķos failos un . Parametru ir vairāk parametru

n ērā. Parametrus funkcijās var nogādāt arī ar operatoru global et tad varargin sarakst iz unkc ābūt tukš inēts pašajos piemēros nav paredz

funx.m fund.msarakstu funkcijās pēc vajadzības var papildināt, ja vienādojumos ekā piem , b

am, saucot f ijas, ir j am. Komb ņēmiens ēts.

Page 130: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-130 ©Copyright Pičs (P. Misāns)

Autors var ieteikt lasītājam padarboties ar funkciju newton, risinot skaitliski dažāda veida vienādojumus. Varat uzlabot šo funkciju gan no algoritmiskā viendokļa, gan arī no programmistiskā viedokļa.

Nākošais scenārijs demonstrē, kā var nosimulēt D-R shēmas darbību par ieejas signālu izmantojot 50Hz kosinusoīdu:

epsi = 1e-3; R = 10; Urt = []; t = linspace(0,50e-3); Et = 30*cos(2*pi*50*t);

t, for E = E UrE=newton(@funx,@fund,0,epsi,... E,R); Urt = [Urt,UrE]; end;

t,Et,t,Urt) plot(

Zīm. 87. Spriegums D-R shēmas

i0 ir robežās no 1e-9 līdz 1e-4, bet α no 5 līdz 15.

ATLAB-a funkcijām. ība priekš tiem, kuriem to patīk

urpretī to nepatīk darīt.

dojuma sakni un pie rokas ir ero). Taisnības labad agrīnās versijās. Tā,

nkcijai tikai ar vienu od vai nu funkcijas ms, vai arī rok

vairāki parametri (nevis mainīgie!

ieejā un izejā.

Iegūtajā oscilogrammā redzam taisngriešanas efektu. Tas neizpaužas tik spilgti kā realitātē, jo mums ir nevis īsta, bet pseidodiode ar nereāliem parametriem i0=1 un α=1.

Patrennējies un modificē tikko aplūkotos programmu moduļus reāliem i0 un α lielumiem. Reālām diodēm

Nelineāra vienādojuma sakņu meklēšana ar Mūvēšana ir cēla nodarbVelosipēdu izgudrošana un b

darīt. Daudziem t

Funkcija fzero

Ja kādreiz gadās meklēt kādu pazudušu nelineāra vienāMATLAB, tad var atcerēties par funkciju fzero (function zjāsaka, ka funkcijas lietojums ir kļuvis komplicētaks, nekā piemēram, ja mēs vēlams uzdot paši savu kļūdu, tad mums ir papildus jāekspluatē funkcija optimset.

Ja ir jārēķina sakne fu parametru, tad ir jāuzdnosukums un pirmais tuvināju turis:

» fzero('cos',0.3) ns =

» fzero(@cos,0) ans = a

1.5708 -1.5708

Labāk, protams, izmantot rokturi. Lai izvairītos no nenoteikības sakņu meklēšanā (ja saknes ir vairākas), sākuma vērtības vietā var lietot arī meklēšanas intervālu:

» fzero(@cos,[1,2]) ans = 1.5708

Ja vienādojuma funkcijai ir ), tad sākot ar MATLAB 7.x var izmantot t.s anonīmās funkcijas (anonymous function):

Page 131: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-131

» fzero(@(Ur)funx(Ur,30,10),10) ans = 28.6481

Tas no lietotāja viedokļa ir tāds īpatnējs pieraksts. Izpēti patstāvīgi!

Tālāk aplūkosim detalizētāk funkcijas fzero iespējamos izsaukumus un parametrus.

mi:Iespējamie izsauku ero(fun,x0)

tions) .) fzero(...)

ro(...)

rametri.

as nosaukums.

x = fzx = fzero(fun,x0,op[x,fval] = fzero(..

exitflag] =[x,fval,[x,fval,exitflag,output] = fze

Tabula 12. Funkcijas fzero pa

fun Funkcij

x0 vērtība vai intervāls, kurā tieuzdotajā intervālā, tiek formēta kļūda. Sākuma k meklēta sakne, ja saknes nav

options Vadības struktūra, kurā tiek definēti dažādi fzero uzvedības noteikumi. Parasti tos iestāda ar funkciju optimset.

x Aprēķinātā vienādojuma sakne ("funkcijas nulle"). fval Funkcijas vērtība pie atrastās saknes.

exitflag Funkcijas (ne)sekmīgas darbības indikators, ja 1 – sakne ir veiksmīgi atrasta, ja < 0, tad atkarībā no vērtības indicē problēmas (sk. help).

output Informatīva struktūra, kura satur dažādu informāciju, piemēram: output.iterations – iterāciju skaits.

Ja vēlies uzzināt, ko var uzstādīt ar parametru options, tad pietiek uzrakstīt:

MaxIter: []

e-016 FunValCheck: 'off' . . . u.t.t.

Tur i ms ar dažādiem parametriem o tiem ir domāta sma jiem. Pirmās npieciešamība būt TolFun –

Tolerance for Function), vai ei (T ētos

em (66

s varat iz ītos parametrus,

Pēc tam var mēģināt eksperimentēt:

» options = optimset('fzero') options = Display: 'notify' MaxFunEvals: [] TolFun: [] TolX: 2.2204

r milzīgs daudzulcinātiem lietotā

. Lielākā daļa ns preces varētu iz

pieļaujamā vienādojuma funkcijas atšķirība no nulles (TolX – pieļaujamā kļūda vienādojuma saknparametrus, mēs varam eksperimentēt ar testi

Jāatceras, ka, izmantojot optimset jū

olerance for X). Mainot min) un (67).

mainīt jau uzstādtādēļ pirms eksperimentu sākuma vēlams vecos parametrus saglabāt:

» old_opts = optimset('fzero');

Page 132: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-132 ©Copyright Pičs (P. Misāns)

» mani_param = optimset('Display','iter','TolFun',1e-4);

ta ne tikai funkcijas kļūda, bet arī iterāciju procesa attēlošana. Par to , vēlreiz izsaucot fzero:

round 28 contai ign change: f(a) b f(b) Procedure

1 28 3.58906 28 3.58906 initial interval 3 27.208 12.5922 28.792 -0.532276 search Search for a zero in the interval [27.208, 28.792]: Func-count x f(x) Procedure 3 28.792 -0.532276 initial 4 28.7277 -0.303798 interpolation

ation 86569 interpolation

28.6481 -1.07674e-006 interpolation 013 interpolation 0

in

ītājs nu var s secinājumus par proces

en i āj

@(U

itmi: bisekcijas (intervāla dalīšana uz ika trūkuma dēļ šeit neiztirzāsim.

,E,R);

;

āda, ka mums nav nepieciešama

i aprakstīt. MATLAB-ā

, kas ir atbilstoši x) un šai metodei nav nekāda sakara ar

Šeit tiek piedāvāvar pārliecināties

» fzero(@(Ur)funx(Ur,30,10),28,mani_parametri)

ning a sSearch for an interval a Func-count a

5 28.6443 0.01 6 28.6482 -0.0005

49674 interpol

7 8

9 28.6481 1.8785e-

1

28.6481 4.88498e-015 interpolation 28.6481 4.88498e-015 interpolation

Zero foundans = 28.6481

the interval [27.208, 28.792]

Las pētīt, kas lācītiem vēderā un izdarīt fundamentālunotikošo u.

tiem būtu vēlams atjaunot fzero sākotnējās iespējas, jo citādu gaida garas un uzmācīgas simbolu rindas:

Pēc eksperimeksperimentēt

» fzero(ans =

r)funx(Ur,30,10),28,old_opts)

28.6481

Funkcijā fzero ir iebūvēti vairāki algorēl citi, kurus vietas un lapusēm), sekanšu un v

Starp citu, iepriekš aplūkotajā scenārijā, nomainot rindu

UrE=newton(@funx,@fund,0,epsi

ar

UrE = fzero(@(Ur)funx(Ur,E,R),0)

tiek iegūts tāds pats rezultāts. Priekšrocība ir tvienādojuma atvasinājuma funkcija fund.

Polinoma sakņu meklēšana ar roots

Vispār labs algoritms n-tās kārtas polinoma sakņu meklēšanai ir pietiekami komplicēts, lai šādā konspektā to varētu daudzmaz saprotampolinoma saknes var atrast ar funkciju roots. Piebildīšu tikai, ka sakņu meklēšanas algoritma pamatā ir t.s. īpašvērtību (eigenvalues) meklēšana matricaisaskaņota ar doto polinomu (companion matriŅūtona metodi.

Page 133: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-133

Principā jebkuru funkciju var tuvināti aizvietot ar dažādiem polinomiem (sk. nodaļu

Ņūtona metode ar reālu sākuma vērtību

odelēšanā ? Ko ājums, ko

(71)

āko pakāpi un pe. Neaizmirsti

par aproksimāciju un interpolāciju). Tādā gadījumā sakņu meklēšanai it kā varētu izmantot roots, bet jārēķinās ar virkni interesantu problēmu. Ir zināms, ka vispārējā gadījumā polinoma saknes ir kompleksas. atrod tikai reālu sakni (lai gan ar Ņūtona metodi var meklēt arī kompleksas saknes).

iesākt ar kompleksām saknēm, piemēram tai pašā D-R shēmas mKokompleksās saknes nozīmē fizikāli? Tas ir pamatīgu diskusiju vērts jautautori parasti cenšas nepieminēt.

roots(C) meklē saknes polinomam.

)1()()2()1( 11 ++⋅++⋅+⋅ − NCxNCxCxC NN K

Polinoma koeficienti tiek uzdoti vektora formā, sākot ar visaugstkoeficientiem pēc skaita ir jābūt par vienu vairāk nekā polinoma pakāuzrakstīt arī tos koeficientus, kuri ir vienādi ar nulli!

Nākošajā scenārijā atradīsim saknes vienādojumam:

01021 123 =+⋅+⋅+⋅ xxx (72)

1 2 0 2])

93 7 + 0.9030i 7 - 0.9030i

dojuma (72) abas puses mēs varam pareizināt ar jebkuru reālu

jāzin ka normalizēto polinomu pēc

ā scenārijā koeficients pie

» C = [2 4 0 4];

ā sava veida testu atrasto sakņu ticamības ksperimentēt, līdz kādai polinoma pakāpei

un arī vienādojumam:

02042 =+⋅+⋅+⋅ xxx (73)

» roots([

123

ans = -2.3593

» roots([2 4 0 4]) ans = -2.35

0.1797 + 0.9030i 0.1797 - 0.9030i

0.179 0.179

Tik tiešām, vienākonstanti, bet no tā vienādojuma saknes nemainīsies. Tādēļ, ja gadījumā kādreiz ir vajadzība atjaunot pašu polinomu, izmantojot tā saknes, tad noteikti būtukoeficients pie polinoma augstākās pakāpes. Jāpiebilst, tā saknēm var atjaunot ar MATLAB funkciju poly. Dotajaugstākās polinoma pakāpes ir zināms:

» C(1)*poly(roots(C)) ans = 2.0000 4.0000 0.0000 4.0000

Starp citu, funkciju poly varētu izmantot knovērtējumam. Lasītājs var patstāvīgi paeroots vēl "nešķauda".

Page 134: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-134 ©Copyright Pičs (P. Misāns)

Ņūtona metodes skaitliskās problēmas Neskatoties uz ātro konverģenci, metodei ir vairāki "zemūdens akmeņi"

1. Atvasinājums vienāds ar nulli, korekcija ir bezgalība.

,Lasītājs, droši vien, jau ir pamanījis, ka izmantojot Ņūtona metodi praktiski ir nepieciešams funkcijas atvasinājums. Gadījumos, kad tas ir vienāds ar nulli (horizontāla pieskare), izteiksmes (58) un (64) ir nelietojamas. Tāda situācija var rast ties risinājumam, izdodas nokļūt uz "plaukta" vai arī, ja funkcija kādā inte daudz sakņu). Dažos gadījumos var līdzēt bisekcijas metode.

ies, ja tuvinorvālā saplūst ar abscisu asi (bezgalīgi

2. Atvasinājums vienāds ar bezgalību, korekcija ir vienāda ar nulli.

Tādā gadījumā algoritms nekonverģē. Jānoskaidro vai lēciens nešķērso abscisu asi. Ja škērso, tad "mūžīgā miera" punkts der par atrisinājumu.

s trijās priedēs."3. Neveiksmīgs pirmais tuvinājums. "Maldīšanā

Pieņemsim, ka mums ir vienādojums:

(74)

Ja lasītājā sēž eksperimentētāja gars, tad var izveidot šim vienādojumam atbilsfunkcijas, kas atvieglo darbošanos.

*x^2+13.5*orize(pol_diff(pol_

Izma ēs varam m us, izma karību (5

Vienādojumam (74), kā redzams, ir vairā

vēloties pirmo tuvinājumu ēs “aizbēgam” no tuvākās saknes (2.0). roblēmas risinājumu aplūkosim kontekstā r nākamo piemēru.

035.1395.1 23 =+++ xxx ,

tošas inline

» pol_s = '1.5*x^3+9 x+3'; » npol = inline(vect» dpol = inline(char(

s)); s)));

ntojot izveidotās funkcijas mntojot Ņūtona metodes pamatsa

eklēt dažādus sakņu tuvinājum9):

» x0 = -2.85; » x0 = x0-npol(x0)/dpol(x0) x0 = -0.5246

Tādā garā mēs varam procesu turpināt un manuāli meklēt nākošo tuvinājumu.

kas saknes:

» roots([1.5,9,13.5,3])ans = -3.7321 -2.0000 -0.2679

Iz

2.85- = x0 , mPa

Zīm. 88. "Bēgšana" no tuvākās vienādojuma saknes.

Page 135: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-135

4. Nekonverģējošs cikls ("Perpetum mobile").

“mūžīgi cilpot” ap risinājumu tā arī ekonverģē.

Tā,

ol(x0)/dpol(x0) x0

pašā

Var piemeklēt tādu tuvinājumu, ka mēs varamnekad nenonākot pie tā. Tas ir tipisks gadījums, kad risinājuma process n

piemēram, izmantojot iepriekš izveidotāš polinomiālās funkcijas:

» x0 = -2.77; » x0 = x0-npol(x0)/dpol(x0) x0 = -1.2524 » x0 = x0-np

= -2.6316

mēs redzam, ka nonākam aptuveni tajā

Zīm. 89. I

sākuma punktā. eciklošanās saknes apkārtnē

".

ākuma vērtības atrašanā, lai iekļūtu mūžīgajā ai iekļūtu attēlotajās nepatikšanās, taču tā pastāv

un ir iespējama.

ījumā ir speciāla reizinātāja ievešana korek kā pieskares aizstāšanu ar hordu

"Perpetum mobile

Lasītājs var pavingrināties precīzākas sciklā. Protams varbūtība nav tik liela, l

Ņūtona-Broidena metode. Jautājums ir, kā lai rod izeju? Tā šajā gad

cijas priekšā, ko reizēm grafiski var interpretēt arī .

, 10,1 ≤<Δ⋅−= xxx + kkkkk λλ (75)

no iterācijas uz iterāciju mainās, jo reizin ģenci.

Var veidot arī tādu algoritmu, kuram reizinātājsātāja ieviešan palēnina konver

Page 136: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-136 ©Copyright Pičs (P. Misāns)

Page 137: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-137

Pirmie soļi funkciju aproksimācijā un interpolācijā

Page 138: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-138 ©Copyright Pičs (P. Misāns)

Page 139: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-139

Aproksimācija un interpolācija. Viena no aproksimācijas un interpolācijas plaši lietotām jomām ir mērījumu datu apstrāde. Mērījumu apstrāde joprojām ir ļoti aktuāla un moderna. Bieži mērījumi notiek arī virtuālajā vidē, apstrādājot simulāciju rezultātus. Ka piemēru vispirms apskatīsim diodes VA raksturlīknes mērīšanu. Pašreiz inženieri ar to nenodarbojas, taču diodes vietā varētu būt jebkura cita fizikāla ierīce.

Piemērs ar diodes VA raksturlīkni. Šoreiz notika mērīšanas procesa imitācija. Reālā dzīvē datus par melno kasti (šajā piemērā tā ir diode) aprakstošu līkni, mēs varam iegūt veicot strāvas mērījumus pie kaut kādas noteiktas sprieguma vērtības (arī pati līkne iepriekš, protams, nav zināma). Parasti tiek nomērīti vairāki punkti un datu daudzums var būt robežās no dažiem punktiem līdz dažiem desmitiem punktu. Arī fizikālie lielumi var būt visdažādākie, taču pārsvarā mēriekārtas pēc fizikālo lielumu pārveidošanas beigās operē ar spriegumiem un strāvām.

Zīm. 90. Diodes VA raksturlīkne un

mērījumu punkti. Ja reālajā dzīvē mēs censtos nomērīt diodes VA, tad mums būtu vajadzīgs regulējams sprieguma avots, voltmetrs un miliampērmetrs (protams, eksistē arī atbilstošas ierīces). Nolasītie dati tad tiktu sarakstīti tabulā. Lai šos datus varētu apstrādāt MATLAB-ā (iegūt VA līkni), tos vajadzētu saformēt vektoru veidā:

» Udk = [2.00, 1.85, 1.48, 1.00, 0.00]; » idk = [21.2, 10, 1.7, 0.3, 0.0]*1e-3;

Šeit mēs iepriekš iegūtos datus nedaudz sabojājām, pieņemot, ka voltmetra precizitāte nepārsniedz 10 mV, bet ampērmetra precizitāte - 0.1 mA.

Iegūtos mērījumu datus mēs tālāk varam izmantot, lai iegūtu melnās kastes modeli. Konkrēti runājot par diodi, daudzos gadījumos ir pietiekami, ja mums ir tās VA raksturlīknes matemātiskais modelis. Ir iespējami bezgalīgi daudzi šīs līknes modeļi. To var aprakstīt gan ar eksponenti, gan ar polinomu, gan ar kādu citu funkciju. Trešajā laboratorijas darbā mēs aprakstījām līkni ar eksponenti un meklējām koeficientu α, risinot nelineāru vienādojumu, jo bija uzdota diodes sākuma strāva i0. Mums pietika ar vienu pašu mērījumu, lai šo koeficientu atrastu. Tagad mums ir vairāki mērījumu punkti. Kā rīkoties? Viens loģisks paņēmiens būtu tāds, ka mēs varētu atrast koeficientu α katram mērījumam un par pareizo izvēlēties vidējo vērtību. Vispirms ar simboliskās matemātikas palīdzību atradīsim izteiksmi koeficientam α:

» a_eq_sym = sym('idk(m)-i0*(exp(a*(Udk(m)))-1)'); » a_sym = solve(a_eq_sym,'a') a_sym = log((idk(m)+i0)/i0)/Udk(m)

Page 140: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-140 ©Copyright Pičs (P. Misāns)

Redzam, ka iegūtajā izteiksmē tiek izmantoti samērīto datu vektoru masīva elementi. Arī koeficientus α mēs varam ierakstīt masīvā, pirms tam ar indeksu m izvēloties, kuru

» i0 = 1e-6; m=1; » eval(['a(m)=',char(a_sym)]); a = 4.9809

» for m = 1:mērījumu izmantosim: length(Udk)-1, al(['a(m)=',char(a_sym),';']); end;

= .9809 4.9786 5.0263 5.7071

» mean(a(1:end-1)) ans = 4.9953

āk nekā

es VA līknes aproksimāciju ar eksponenciālu tiek definēta tikai ar diviem parametriem, na, jo ir jārisina nelineārs vienādojums.

analītisks atrisinājum v spējams. Bez tam mums bija uzdota sākuma a i0 av zināma, tad mums ir jārisina jau divu nelineāru vi , izmantojot

n Toolbox-a).

Protams, mēs varam uzrakstīt ciklu, ev

kas caurskata visu datu masīvu un iegūst arī pārējās vajadzīgā koeficienta vērtības.

a a 4

Redzam, ka kļūda nepārsniedz 15%.

Vidējo vērtību var sarēķināt ar funkcijas sum vai mean palīdzību. Ar mean, protams, ir īsāk:

Koeficientu vidējošana samazina kļūdu līdz aptuveni 0.25%, bet tas jau ir vairlabi.

Patiesībā mēs augstāk esam veikuši diodlīkni. Ērtība ir tāda, ka aizvietojošā funkcijabet neērtības sagādā koeficienta a meklēšaŠoreiz, par laimi, tam ir s, kas vairumā reālo gadījumu na

strāva i0. Ļoti bieži tā ir nezināma. Jenādojumu sistēma

iendivu punktu koordinātes. Simboliskās matemātikas solve ar šo uzdevumu tiek galā tikai, ja mērījumu rezultāti izteiksmēs tiek ierakstīti tieši. Šeit iegūto rezultātu labāk nedemonstrēsim (izdari to pats), bet tikai uzrakstīsim atbilstošu funkcijas izsaukumu:

» [a,i0]=solve(sym('(21.2e-3)-i0*(exp(a*(2.00))-1)'), ... sym('10e-3-i0*(exp(a*(1.85))-1)'),'i0','a');

Diemžēl, risinājumam ir ļoti daudz atbilžu, tai skaitā arī īstā.

Šo uzdevumu var atrisināt arī skaitliski, izmantojot Ņūtona metodi vienādojumu sistēmām (funkcija fsolve no Nonlinear and Optimizatio

Cilvēki no laika gala ir centušies dažādus paņēmienus padarīt universālus. Tikko izmantotā metode, kurā mēs kāda objekta modeļa parametrus centāmies atrast, risinot nelineāru vienādojumu sistēmu, ir ļoti specifiska un derīga tikai šajā vienā gadījumā (varbūt vēl kādos gadījumos).

Page 141: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-141

Lagranža interpolācija Viens no tādiem relatīvi universālieinterpolācijas metode, kura ir aprakstfunkcijas aizvietošana ar N-1 kārtaspolinoma koeficientus, ir jāatrisina N l

⎧ +−1Nxc

m un klasiskiem paņēmieniem ir Lagranžzās grāmatās. Metodes pamatā ir modeļ

a ī a

oti N mērījumi. Lai atrastu i

....)(1

...

2

2

ta daud polinomu, ja dneāru vienādojumu sistēma:

=⋅=⋅+ )(1 1N xcxcγγ

⎪⎪⎩

⎪⎪⎨

+++

+++

−−

........

...

211

2++

=⋅+− )(11 KNKN xcxc γ

+−

21

11N

cxc2

2

KN

N xxc

(76)

ināmie ir nevis xk, bet gan polinoma koeficienti ētu pierakstiem irm ā xk atbilst

Udk k) – k vērtības.

21

21

1211

NK

NN

N

xcxc

xcxc N

Pievērs uzmanību tam, ka šoreiz nezcm! Indeksi ir piemeklēti tā, lai tie saskan– pie augstākās polinoma pakāpes ir psprieguma vektora vērtības , bet γ(x

ar MATLAB-a pieņemtajiemients Mūsu gadījumais koefic

strāvas vektora id

Lai iegūtu nezināmos svara koeficientus ci mums pie nosacījuma K = N ir jāatrisina vienādojumu sistēma. Mūsu gadījumā, pie nosacījuma, ka funkcija )(xγ ir zināma, interpolācija reducējas uz punktu x1, x2, ...xN izvēli, atbilstošo funkcijas vērtību aprēķinu un lineāras vienādojumu sistēmas (76) atrisināšanu. Lasītaja uzmanība ir vēlreiz jāvērš uz to, ka nezināmie šoreiz ir koeficienti c un nevis x . Izteiksmi (76) mēs varam pārrakstīt arì matricu veidā:

⎥⎥⎥⎥

⎢⎢⎢⎢

=

⎥⎥⎥⎥

⎢⎢⎢⎢

⎥⎥⎥⎥

⎢⎢⎢⎢

)(...

)()(

...1111

............2

1

2

1

2

222

121

1

12

11

KNKKNK

N

N

x

xx

c

cc

Aprakstīto metodi literatūrā sauc par Lagranža interpolācijas (Lagrange interpolation)

tur koordināšu augstākās nu funkciju, kas mūsu

1.0000 1.0000 1.0000 0 0 0 0 1.0000

Vienādojumu sistēmas labās puses vektors ir transponēts samērīto strāvu vektors: » idk' ans = 0.0212 0.0100 0.0017 0.0003 0

xx

xxxx

x

xx

γ

γγ

K

K

K

(77)

metodi, bet vienādojuma (77) koeficientu matricu par Vandermonda matricu. grieztā kārtībā, t.i. Literatūrā Vandermonda matricas kolonnas mēdz pierakstīt arī ap

pirma kolonna sastav no vieniniekiem, bet pēdējā kolonna sapakāpes. Vandermonda matricu MATLAB-ā atrod ar viepiemēram ir:

» vander(Udk) ans = 16.0000 8.0000 4.0000 2.0000 1.0000 11.7135 6.3316 3.4225 1.8500 1.0000 4.7979 3.2418 2.1904 1.4800 1.0000 1.0000 1.0000

Page 142: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-142 ©Copyright Pičs (P. Misāns)

Nav vienkāršāka uzdevuma MATLAB-ā par lineāru vienādojumu sistēmu risināšanu:

ums ir jāsarēķina strāva katrai izvēlētajai sprieguma vērtībai:

» id_p4 = C(1)*Ud.^4+C(2)*Ud.^3+C(3)*Ud.^2+C(4)*Ud+C(5);

To var izdarīt arī daudz vienkāršāk, izmantojot funkciju polyval:

parādība ir raksturīga augstāku kārtu interpolējošiem polinomiem.

» C = (vander(Udk)\idk')' C = 0.0330 -0.1315 0.1737 -0.0749 0

Lai uzzīmētu atrastā polinoma līkni jebkurai sprieguma vērtībai, m

» id_p4 = polyval(C,Ud);

Tagad palūkosimies, ko esam sabrūvējuši:

» hold on; » plot(Ud,id_p4,'r--');

Pirmkārt, redzam, ka polinomiālās funkcijas vērtības sakrīt ar mērījumu vērtībām, bet intervālos starp mērījumu punktiem vērojama liela kļūda. Šāda

Zīm. 91. Diodes VA raksturlīkne interpolēta ar 4.kārtas polinomu.

Šāds efekts ir novērojams, ja mums ir darīšana ar gludām monotonām funkcijām. Uzlabojumu var panākt, ja palielina mērījumu punktu skaitu. Taču ar to var nepietikt,

» C3=polyfit(Udk(2:end), ... idk(2:end),3); » id_

» plo

Šorei

Lagr es trūkums ir tas, ka mērīj skaits ir viennozīmīgi saistī a pakāpi, kas nav īpašī

jo ļoti svarīgs ir mērījumu punktu novietojums.

Dažreiz lietderīga var izrādīties polinoma pakāpes pazemināšana. Starp citu, Lagranža interpolāciju var veikt, izmantojot funkciju polyfit:

p3 = polyval(C3,Ud);

t(Ud,id_p3,'r:')

Rēķinot polinoma koeficientus, tika ig-norētas viena mērīju-mu punkta koordinā-tes.

z 3-ās pakāpes polinoms izrādījās precīzāks par 4-ās pakāpes polinomu.

anža metodnktuumu pu

ts ar polinomērti.

Zīm. 92. Diodes VA raksturlīkne interpolēta ar 3.kārtas polinomu.

Aplū ūtos zīmējumus, ir redzams, ka interpolējošo līkņu viļņošanās ieme starpe starp mērījumu punktiek pie spriegumiem, kas < 1V. Mēģināsim labot šo situāciju, vienmērīgāk izkliedējot mērījumu punktus:

kojot tikko iegsls ir lielā at

Page 143: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-143

» Udk = [0.01 0.2 0.6 1.2 1.6 1.85 1.98]; » idk = [ 0, 0, 0,0.4, 3,10.4 19.9]*1e-3;

Veicopirmkintuit

»

tā līkne tāpat "viļnojas", ta mazāka.

t tikko izdarītos mērījumus, mēs

ārt palielinājām punktu skaitu un īvi mēģinājām koriģēt punktu

izvietojumu. Polinoma koeficientu aprēķinu veicam tāpat kā iepriekš ar funkcijas polyfit palīdzību, bet polinoma vērtību interpolāciju ar funkciju polyval:

» C6 = polyfit(Udk,idk,6)id_p6 = polyval(C6,Ud);

» plot(Ud,id_p6,'r--')

Lai gan iegūču kļūda ir daudz

Zīm. 93. Diodes VA raksturlīkne interpolēta ar 6.kārtas polinomu.

linoma koeficientus:

0755 0.0279 -0.0033 0.0000

roksimācija ar minimālo kvadrātu metodi.

x

Ja vēlamies, varam apskatīt arī atrastos po

» C6 C6 =

0.0097 -0.0474 0.0886 -0.

ApGan interpolācijas gan aproksimācijas gadījumā viena funkcija γ(x) tiek aizvietota ar kādu citu funkciju β(x). Tā rezultātā funkcijas eksistences intervālā katrai x vērtībai parādās novirzē (kļūda punktā):

)()( xx )(βγ −=Δ

Kā jau redzējām pirms brīža, ne vienmuzlabojumu. Var būt tā, ka mērījumu dpolinoms vai kāda cita funkcija. Atcr

(78)

ēr polinom nāšana dod aru ir daud asa modeļa

ēsimies, ka dio sponenciālā metriem, lai viss būtu labi. Interpolējot kādu ietu caur interpolācijas punktiem. Veicot

var "gulēt" starp punktiem. Galvenais, lai kļūda efinēt, ka visu noviržu kvadrātu summu.

==

+⋅−K

iii

K

ii

K

i xx1

2

1

22 )()(2 ββγγ (79)

das δ minimizācija, atkarībā no funkcijas β izāciju polinoma un ortogonālu polino u

a pakāpes paaugstiz vairāk, nekā to prdei tīri labi derēja ek

funkcija, kurai pietika ar diviem paratāfunkciju obligāta prasība ir, lai

ap neroksimāciju, tas nav obligāti. Līkbūtu minimāla. Kļūdu mēs varam d

∑∑∑===

=−=Δ=ii

iii

i xx111

)]([)( βγδKK

2 ∑∑

Minimālo kvadrātu metodes pamatā ir kļūparametriem. Par kvadrātiskās kļūdas minimgadījumā var izlasīt iepriekšējā konspekjāatrisina vienādojumu sistēma:

mta AI-9÷AI-15 lpp. Polinoma gadījumā ir

xxC γΣ=Σ (80)

kur

Page 144: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-144 ©Copyright Pičs (P. Misāns)

⎥⎥⎥⎥

⎦⎢⎢⎢⎢⎢⎢

∑∑∑

∑∑∑

=

=

===

==

K

i

Ni

K

i

Ni

K

i

Ni

K

i

Ni

K

ii

K

ii

ii

x

xxx

xxx

1

)1(2

11

1

11

2

1

11

...............

...

Minimālo kvadrātu metodes anatomiju ar Mkonspektā. Šeit to n

⎥⎥⎥⎤

⎢⎡ ∑∑ −

KNi

K

i xxK 1... ⎢⎡ ∑

K

=

, ,

=

=

=

K

i

Nii

K

iii

i

x

x

x

1

1

1

1

...γ

γγ (81)

ATLAB-a palīdzību var izpētīt iepriekšējā edarīsim. Atgādināsim tikai, ka minimālo kvadrātu metode ir

ā darbojas tajos gadījumos, ja izvēlētā polinoma miem. No iepriekšējā scenārija ir saglabājušies

7. Funkcija polyfit realizēs minimālo kvadrātu ūs mazāka vismaz par 2 nekā mērījumu skaits (mūsu

oeficientu prēķinu veicam tāpat kā iepriekš

interpolējošajam polinomam ar

ma vērtību interpolāciju ar u polyval. Būtiska ir pareiza

⎥⎥⎥⎥

⎢⎢⎢⎢

=

Nc

cc

C ...2

1

⎥⎥⎥⎥⎥⎥⎥

⎢⎢⎢⎢⎢⎢

iebūvēta funkcijā polyfit un tpakāpe neatbilst datu vektoru lielu

mu mērījumu dati ar vektoru garumetodi, ja polinoma pakāpe bpiemērā ne lielāka par 5).

Aproksimējošā polinoma ka

funkcijas polyfit palīdzību, bet polinofunkcijpakāpes izvēle - <(n – 2), kur n punktu skaits:

» C_5 = polyfit(Udk,idk,5); » id_msm5 = polyval(C_5,Ud); » plot(Ud,id_msm5,'k--')

Lai gan polinoma pakāpe ir zemāka minimālo kvadrātu metodei, līkņu oscilācijas nav īpaši lielākas salidzinot

Zīm. 94. Diodes VA raksturlīkne

ar interpolējošo funkciju. aproksimēta ar 5.kārtas polinomu. No zīmējuma var skaidri redzēt, ka aproksimējošā līkne izlokās starp punktiem. Tas savukārt nozīmē to, ka tā labāk izlīdzina iespējamās mērījumu kļūdas. Jo mērījumu izkliede parasti ir gan pozitīva, gan arī negatīva.

Page 145: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-145

Interpolācija ar splainiem Par splainiem (spline) sauc gabalveida funkcijas, kuras sašuvuma punktos ir nepārtrauktas, t.i. to pirmie atvasināju ir vien i. Inženierpraks visli popularitāti ir guvuši kubiskie splaini. Tie ir trešās pa i, kuru koeficienti tiek meklēti tā, lai sašuvuma punktos to pirmie un otrie atvasinājumi būtu vienādi.

MATLAB-ā atbilstošā funkcija ir spline, kuras pirmais arguments

s jau agrāk

mi ād ēkāpes polinom

elāko

satur vektoru, kurā ir izvietotas mezglu punktu x-koordinātes, otrais arguments ir atbilstošo y-koordināšu vektors, bet trešais arguments satur visus tos punktus, kuros gribam atrast splaina vērtības. Atbilstošais scenārijs, kas sarēķinās splainu vērtībaizvēlētajos sprieguma punktos varētu izskatīties šādi:

» id_spl=spline(Udk,idk,Ud); » plot(Ud,id_spl,'k-')

Kvalitāte ir acīmredzama. Mēs varam izvēlēties arī mazāku mezglu skaitu un iegūt ne sliktākus rezultātus.

Zīm. 95. Diodes VA raksturlīkne interpolēta ar kubisko splainu.

a koeficientus, ja ir tāda vajadzība. Ja rdinātes, tā saformē struktūru:

000 1.2000 1.6000 1.8500 1.9800

» cs.coefs ans = -0.0000 0.0000 -0.0000 0 -0.0000 0.0000 0.0000 0 0.0019 -0.0000 -0.0000 0 0.0198 0.0033 0.0020 0.0004 0.1386 0.0271 0.0142 0.0030 0.1386 0.1310 0.0537 0.0104

Var iegūt arī katra atsevišķa polinoma koeficientus, piemēram, pēdējam posmam: » cs.coefs(6,:) ans = 0.1386 0.1310 0.0537 0.0104

Funkcija spline var saformēt arī polinomfunkcijai spline iedod tikai mezglu koo» cs = spline(Udk,idk) cs = form: 'pp' breaks: [0.0100 0.2000 0.6 coefs: [6x4 double] pieces: 6 order: 4

]

dim: 1

Ja ir vajadzība iegūt splaina koeficientus, tos var ieraudzīt pieprasot atbilstošā lauciņa saturu:

Page 146: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-146 ©Copyright Pičs (P. Misāns)

Tikai ir jāatcras, ka polinoma pieraksts, lai derētu šie koeficienti, ir jāveic t.s. pp-formā.

)4()()3()()2()()1( 23 CxxCxxCxxCy kkkk +−⋅+−⋅+−⋅= (82)

kur xk atbilstošā splaina gabala sākuma mezgla vērrība (breaks).

Par to, ka polinoms īsti neatbilst īstajam, varam pārliecināties uzzīmējot šim ts. Šeit mēs tālāk veiksim darbības, kas ļauj nomu vērtības.

e(cs.breaks(6), cs.breaks(7));

polinomam atbilstošo funkciju. Izdari to paiegūt pareizas atsevišķu splaina gabalu poli

Faktiski, lai iegūtu īsto polinomu, ir jāveic argumenta nobīde par atbilstošā mezgla (breaks) vērību. Tā, piemēram, ja ir vajadzība sarēķināt polinoma vērtības pēdējam posmam, tad:vispirms ir jāuzdod spriegumi atbilstošajā intervālā: » Ud67=linspac ... » id67=polyval(cs.coefs(6,:),...

s(6)); Ud67-cs.break» plot(Ud67,id67,'k-')

Līdzīgi var uzzīmēt arī zīmējumā redzamo 4.posmu. Izdari to patstāvīgi.

aina dažādi posmi.Zīm. 96. Spl

smi(82)!

Izpēti, kā var iegūt atbilstošā polinoma koeficientus, apstrādājot izteik

Page 147: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-147

iferenciālvienādojumu as metodēs

Pirmie soļi parasto drisināšan

Page 148: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-148 ©Copyright Pičs (P. Misāns)

Page 149: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-149

©Copyright Pičs (P. Misāns) ML-149

C uC

iD

D uD

E

CuC

iC

R uR

E

Parastie diferenciālvienādojumi

Diferenciālvienādojumu skaitliskās risināšanas nepieciešamība Lielu daļu no dažādām dabas parādībām un cilvēku radītām lietām var aprakstīt ar parastajiem diferenciālvienādojumiem. Elektroinženieriem labi pazīstama joma ir shēmtehnika.Ir zināms, ka visas tās elektriskās ķēdes, kas satur kapacitātes un induktivitātes tiek aprakstītas ar diferenciālvienādojumiem. Praktiski ikviena reāla elektriska ķēde satur vērā ņemamas kapacitātes. Tādēļ vairumā elektrisko ķēžu modelēšanas un aprēķinu gadījumu mums ir darīšana ar diferenciālvienādojumu skaitlisku risināšanu.

Vienkārši elektrisku ķēžu piemēri Ļoti bieži inženierus interesē komutācijas procesi, kas norit RC ķēdēs.

RtutE

dttduC cc )()()( −= (83)

)(1)( tEtE ∗= (84)

Zīm. 97. RC shēma ar vienības sprieguma lēcienu.

Praktiski katra elektroniska ierīce, kas barošanai izmanto maiņstrāvas tīklu satur taisngriezi. Aplūkosim vienkāršotu shēmu.

))()(()( tutEidt

tduC cDc −= (85)

)502cos(2202)( ttE ⋅⋅⋅⋅⋅= π (86)

Zīm. 98. Vienpusperioda taisngriezis ar sinusoidālu iedarbību.

Jāpiebilst, ka reālā ķēdē būtu jāuzrāda parazītiskā kapacitāte, kas slēgta paralēli diodei, kā arī slodzes pretestība, kas slēgta paralēli kapacitātei. Taču arī šāds vienkāršots slēgums modelēšanas gaitā ļauj novērot visus būtiskākos, ķēdē norisošos procesus.

Uzmanīgi aplūkojot vienādojumus (83) un (85) redzam, ka tie ir nedaudz līdzīgi. Principiāla atšķirība starp tiem ir tāda, ka (85) ir nelineārs diferenciālvienādojums, bet (83) - lineārs diferenciālvienādojums. Vairums praksē izmantojamo elektronisko shēmu tiek aprakstītas ar nelineārajiem diferenciālvienādojumiem.

Page 150: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-150 ©Copyright Pičs (P. Misāns)

1.kārtas parasto diferenciālvienādojumu skaitliskā risināšana. Ērtības labad pārveidosim vienādojumu (83):

CRttufkurttuf

dtc

ccc ]),([],),([ tutEtdu )()()( −

== (87)

Tādējādi, vispārīgajā gadījumā mums ir darīšana ar vienādojumu:

]),([)( ttxfdt

tdx= (88)

Dotajam vienādojumam viennozīmīgu atrisinājumu var atrast, ja izmantojam sākuma nosacījumus:

0 (, xtt 00 ) xt == (89)

(91), iegūsim tegrālvienādojumu:

(90)

Košī uzdevums Vienādojuma (88) skaitlisko risināšanu matemātikā sauc par Košī uzdevumu. Risinot šo uzdevumu ir jāatrod integrālā funkcija x(t) ar uzdotiem sā a nosacījumx(t0) = x0, kur t0<=t<=tk. Risinot vienādojumu (88), mēs x(t) vērtības atrodam diskrētos laika momentos t1, t2, ..., tn.. Risināšanai secīgi izmantojot (90), integrēšanu, pie :

a vienādojuma (88) abas puses nointegrēsim, ņemot vērā J

in

dtttxfxtxdtttxfdxt

t

t

t

t

t∫∫∫ +=⇒=000

]),([)(]),([ 0

kum iem

minētajiem nosacījumiem iegūstam

dtttxfxxn

ntnnn ⋅+= ∫

t +

ur xn=x(tn).

Tiešās un netiešās metodes.

Ir zināms, ka integrēšanu var veikt dažā

intervālā no tn līdz tn+1 az, tad no (91) iegūstam:

(92)

kur hn

+

1

]),([1 , (91)

k

dos veidos. Ja pieņem, ka ]),([ ttxf

izmainās m

),(1 nnnnn txfhxx + +≅

= tn+1-tn.

Metodi, kurā diferenciālvienādojuma risināšanai tiek izmantota formula (92) sauc par Tiešo Eilera metodi (Forward

Zīm. 99. Elementārā laukuma novērtējumEuler). tiešās Eilera metodes gadījumā. Lasītājs, droši vien, ir sapratis, (atceroties, ka integrēšana tās ģeometriskajā interpretācijā šajā gadījumā ir paņēmiens, kā atrast laukumu), ka formulas

s

(92) labās

f[x(t),t]

tn tn+1

Page 151: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-151

puses otrais loceklis aptuveni nosaka līknes f ierobežoto laukumu un, ka tas šeit tiek

Bez šaubām, vērīgs lasītājs ir jau atradis vēl vismaz pāris paņēmienu, kā

Par taisnstūra augstumu, piemēram, var izvēlēties funkcijas vērtību punktā tn+1.

Formulā (93) iemiesoto metodi sauc par

rēķināts pēc taisnstūra formulas.

aptuveni noteikt vajadzīgo laukumu.

),( 111 +++ +≅ nnnnn txfhxx (93)

Netiešo Eilera metodi. (Backward Euler)

Zīm. 100. Elementārā laukuma novērtējums netiešās Eilera metodes gadījumā.

Lasītājs var patstāvīgi papildināt grafiku arī ar uzlaboto Eilera metodi: nx x h f x tn n n n+ + +≅ +1 1 2 1 2( , )/ /

ērtība tiek meklēta intervāla viduspunktā. Vēl labākus t izmantojot praksē ļoti daudz izmantojamo Eilera-Košī metodi jeb

(94)

Šajā metodē funkcijas vrezultātus var gūvienkārši tautā sauktu par trapeču metodi :

)],(),([2 111 +++ ++≅ nnnnn

nn txftxfhxx (95)

Kā jau lasītājs ir sapratis šo metožu sarakstu varētu vēl un vēl turpināt, jo var izgudrot pietiekami daudz paņēmienu, kā precīzāk noteikt funkcijas f ierobežojošu laukumu.

Aplūkojot formulas (92)-(95), redzam, ka tās ir līdzīgas, taču tās atšķir principiāla lieta. To visvieglāk var redzēt salīdzinot formulas (92) un (93). V gadījumā katru nākamo xn+1 vērtību mēs atrodam, izmantojot tikai iepriekš atrastās xn

s metodes

vienaienā

vērtības (tiešā ), bet otrā gadījumā, lai atrastu katru nākamo vērtību, mums ārs vienādojums (netiešās metodesvispārīgā gadījumā ir jārisina neline ). Kā redzēsim

to, ka netiešās metodesnedaudz vēlāk, neskatoties uz ir principiāli sarežģītākas ārisina nelineārs vienādojums), tām ir viena būtiska iezīme - tās ir stabilas(j .

mēm var nonākt arī nedaudz atšķirīgā ntošana ir atkarīga no lasītāja iepriekšējās

eniera matemātikas jājamzirdziņiem ir Teilora rinda. Arī šoreiz to var lietot, lai de atvasinājumu:

Alternatīvs skaidrojums Pie augstāk minētajām Eilera metožu izteiksveidā. Vienas vai otras pieejas izmapieredzes. Kā zināms, viens no inž

finētu

hdttxhtxdx )()( −+

≅ (96)

rindas pirmajiem diviem locekļiem, veicot Uzrakstītā izteiksme ir iegūta no Teiloraizvirzījum punkta tn apkārtnē:

hdx dt

txhtx nn +≅+ )()( (97)

tn tn+1

f[x(t),t]

Page 152: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-152 ©Copyright Pičs (P. Misāns)

Tā kā parasti diferenciālvienādojumu pieraksta normālformā dx f x t t= [ ( ), ], tad mēs dt

onākam pie izteiksmēm: nn ttx

n]),([1 nn fhxx ⋅+≅+

vai arī, ņemot vērā pieraksta normālformu un atceroties, ka

(98)

dxdt

xt t

nn=

= ′ , iegūstam:

nnn xh ′xx ⋅+≅+1 (99)

Iegūtās izteiksmes (98) un ir ekvivalentas un atbilst tiešajai Eilera metodei. eidā izteiksmes arī netiešajai Eilera metodei.

grafisko interpretāciju.

jot grafiku redzam, ka te ktiski tiek ilustrēts meklējamās

funkcijas x(t) izvirzījums Teilora rin-

pēc tam, kad ir atrasta kārtējā nezi-nāmās funkcijas vērtība, mēs nākošo

(99)Lasītājs var patrenēties un iegūt līdzīgā v

Tagad aplūkosim tuvāk iegūto izteiksmju

Aplūkofa

dā punkta tn apkārtnē. Tā ir būtiska atšķirība no iepriekšējiem zīmēju-miem, kuros tika attēlota diferenciāl-vienādojuma labās puses funkcija f[x(t),t] un tās vienkāršākie integrē-šanas paņēmieni. Šeit mēs redzam, kā

meklējam, izmantojot funkcijas atva-sinājumu (vienāds ar pieskares leņķa

htangensu) un soli n. No zīmējuma mēs redzam, ka soļa lielums nosaka atrastās funkcijas vērtības precizitāti.

Zīm. 101. Meklējamās funkcijas vērtības

novērtējums ar tiešo Eilera metodi.

Bez tam ir skaidri redzams, ka jau rēķinot funkcijas vērtību iedomātam punktam tn+2 kļūda palielināsies. Tas nebūt nav tik viennozīmīgs apgalvojums, jo ja funkcija ir oscilējoša ar mainīgu atvasinājuma zīmi, tad var parādīties kļūdas kompensācijas efekti. Taču kopumā var apgalvot, ka kļūda uzkrājas.

Kļūdas novērtējums Var parādīt, ka katrā iterācijas solī abām Eilera metodēm kļūda ir proporcionāla soļa kvadrātam h2, taču mēs šo jautājumu šeit dziļāk neiztirzāsim.

Nākošā ilustratīvā piemēra ideja ir aizgūta no Borse-s. Pieņemsim, ka mums ir diferenciālvienādojums x=x' ar sākuma nosacījumiem x(0)=1. Acīmredzami, ka tādā gadījumā precīzais atrisinājums pie argumenta 1 ir x(1)=exp(1). Pieprasot e vērtību MATLAB-ā ar 7-u zīmju precizitāti aiz komata iegūstam:

exp(1) = 2.7182818

lā [0, 1] un izvēloties soļa vērtības no 0.1 līdz 0.0001 (tabulā gan ir uzdots intervālu skaits N) iegūstam sekojošus rezultātus.

Uzrakstot pavisam vienkāršu programmu ar for ciklu, kas rēķina minēto diferenciālvienādojumu intervā

Page 153: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-153

Tabula 13. Eilera metožu precizitātes salīdzinājums vien

N x

ādojumam x'=x.

lera xN netiešā Eilera % kļūda t.E. % kļūda n.E. N tiešā Ei

10 2.6338 2.8056 3.107 3.213

100 2.7097 2.7269 0.3155 1659 3 0.3

1000 2.7174 2.7191 0.031601 0.031611

10000 2.7182 2.7184 0.0031606 0.0031607

No tabulas redzam, ka nedaudz sliktākus rezultātus dod netiešā Eilera metode. Tāpat ir2 ā pa visu

0.3xh2. Ja aplūkojam tad redzam, ka kļūda ir

redzams, ka kļūda katrā iterācijas solī aptuveni ir 0.3xh , bet kopumrēķināšanas intervālu tā uzkrājas un intervāla beigās sasniedz Nxvisu integrēšanas intervālu kopumā, 0.3x(1-0)xh, t.i proporcionāla soļa pirmajai pakāpei. Tun kļūda samazinās tikai proporcionāli izvveidā tās praktiski nelieto.

Nākošais attēls dod nelielu priekšstametodi risinām vienādojumu:

ā kā abas Eilera metodes ir samērā neprecīzas ēlētajam integrēšanas solim, tad praksē tīrā

tu, kas var notikt ar kļūdu, ja ar tiešo Eilera

2412x⋅+

=′

Šim vienādojumam nav sarežģīti atrast arī analītisku risinājumu:

» dsolve('Dx=2/(1+4*t^2)') ans = atan(2*t)+C1

t (100)

enču shēma ir:

Tā ir labi zināmā arktangensa funkcija. Tā kā funkcija nav monotona tad kļūda mainās. Te ir speciāli izvēlēts liels solis, lai uzskatāmi demonstrētu notiekošo. Pie soļa 0.5 atbilstošā difer

nnn xxx ′⋅+=+ 5.01 (101)Zīm. 102. Funkcijas atan(2t) restaurācija,

izmantojot tiešo Eilera metodi.

Attēls demonstrē to, ka ja meklējamajai integrālajai funkcijai x(t) otrais atvasinājums nemaina zīmi, tad kļūda uzkrāsies. Savukārt, ja funkcijai ir oscilējošs raksturs, ir iespējama daļēja kļūdas kompensācija.

Diferenču formulu piemēri vienkāršām shēmām Formulas (92)-(95) mēdz saukt par diferenču formulām. Vērīgs lasītājs jau, droši vien, ir pamanījis, ka meklējot diferenču formulas, mēs faktiski nodarbojāmies ar nezināmas funkcijas f integrēšanu. Taču tas, kā redzams, netraucē veikt spriedumus un iegūt rezultātus. Diferenču formulas ir aptuvenas.

Page 154: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-154 ©Copyright Pičs (P. Misāns)

RC

Atradīsim attiecī fo ju isi tiešās Eilera m des ga c tos ie

shēma

eto

gās diferenču dījumā (u lie

rmulas vienādoim vienkārši u),

ma (83) atrgūstam:

nāšanai. Tā

CRnuhuu n

ntE n −

n +=+1 (102)

Netiešās meto jumā mekl sprieg vie ēs:

)(

Eilera des gadī ējamais ums ir abās nādojuma pus

CRutn 1)( +Ehu n

nn1+−un 1+ += , (103)

taču pēc nelieliem pārveidojumiem tas nonāk tikai vienā vienādojuma pusē:

)())(( 1

1 CRhCR

CRtEhuu

n

nnnn +

+= ++ (104)

Kā redzams, neskatoties uz to, ka iegūtā diferenču formula pārstāv netiešo metodi, aprēķinot kārtējo sprieguma vērtību nav speciāli jārisina vienādojums. Tas ir tāpēc, ka risināmais diferenciālvienādojums ir lineārs un šāds vienkāršojums ir uzskatāms vairāk par izņēmumu, nekā par vispārīgu gadījumu.

Lai noskaidrotu dažas tiešo un netiešo metožu uzvedības īpatnības, izteiksmes (102) un (104) pielietosim gadījumam, kad E = R = C = 1 . Sadzīves elektronik

arametri (1V, 1Ω, 1F) ir pārspīlēti, taču ja atceramies, ka automobiļos pašreiz anto dažu faradu superkapacatitātes (SuperCap), tad nemaz tik nereāli tie nav.

ncipiālu diferenču formulu vienkāršošanu, kas latora. Tiešajai Eilera metodei atbilstošā diferenču

fo

ā šādi pizmŠāda parametru izvēle ir saistīta ar priļauj tās rēķināt pat bez kalku

rmula ir:

)1(1 nnnn uhuu −⋅+=+ (105)

teiksme: b etodei atbilstošā iz

)(1

et netiešajai Eilera m

+=+ nnn huu

No elektrisko ķēzu teorijas ir labi zināmsto iedarbojas sprieguma lēciens ar amplit

)1/( +nh (106)

, ka spriegums uz kapacitātes RC ķēdē, ja uz ūdu E, mainās pēc eksponenciāla likuma:

)RCe (1071()(t

c Etu−

− )

⋅=

Page 155: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-155

La ntot kārtējo izdevību

» dsolve('Dx=(E-x)/(R*C)',... 'x(0)=0') ans =

gan tiešā gan netiešā Eilera metode dod aptuveni vienu un to pašu kļūdu.

saistīts ar konkrētās diferenču formulas īpatnībām. Papēti pats(i)!

sītājs var izmapārbaudīt izteiksmes (107) pareizību:

E-exp(-1/R/C*t)*E

No zīmējuma Zīm. 103 redzam, ka

Interesanti, ka kļūdu, pieaugot iterāciju skaitam samazinās. Tas ir

Zīm. 103. RC des uzlādes simulācija ar tiešo un netiešo Eilera metodēm.

for n=1:N, UcfE = [UcfE, Un];

end

UcbE = [];

plot(t,UcbE,'o--', ... t,UcfE,'*-.', ... t_id,1-exp(-t_id));

end('Backwardd Euler', ... 'Forward Euler', ...

'Ideal',0);

ķē

Nākošais MATLAB-a dialoga scenārijs ļauj simulēt RC ķēdes uzvedību gan ar tiešo, gan ar netiešo Eilera metodēm.

h = input(' Solis h = '); tf = input('Beigu laiks = ');

% Backward Euler

N = tf/h+1; t = linspace(0,tf,N); t_id = linspace(0,tf); % Forward Euler UcfE = []; Un = 0;

Un = 0; for n=1:N, UcbE = [UcbE, Un]; Unp1 = (Un + h)/(h + 1); Un = Unp1; end

Unp1 = Un + h*(1 - Un); Un = Unp1;

leg

Pārveido šo scenāriju tā, lai tas būtu derīgs arī citiem E, R un C parametriem (formulas (102) un (104)).

Page 156: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-156 ©Copyright Pičs (P. Misāns)

RC shēmas ierosināšanās

Uzrakstītais scenārijs mums ļauj

īknes "krātos", pēc a ir jāievieto

et

mainīt integrēšanas soli un tādējādižādus eksperimentus.veikt da

, ka lai l

Atceriesfunkcias plot izsaukumfunkcija:

» hold('on')

No iegūtajiem grafikiem redzam, ka risinājuma precizitāte ir būtiski atkarīga no integrēšanas soļa h izvēles. Pie soļa h = 2, tiešās Eilera metodes kļūda sasniedz 100%, b

04. RC ķēdes uzlādes simulā

netiešajai Eilera metodei tikai aptuveni 25%.

Zīm. 1 cijas

Iztevskp zam, ka spriegums a ).

» syms k h n; » an-1/2*(n+1)*(-n+h*n-2*h)

E redzam, ka di ja ķēde "ierosinās"

rezultāti atkarībā no soļa lieluma.

iksmes (105) labajai pusei mēs simple(symsum(k+h*(1-k),0,n)) aram atrast summas izteiksmi un no-

rot, kāda būs sprieguma vērtība aid s = ēc n soļiem. Redug pēc kvadrātiska likuma (no n

veicot simulāciju ar tiešo Eilera metolektroniķu valodā runājot, mēs u pie soļa h = 2 R-C . P solis, pie kura sākas

n no E, R un C lielum asītājs var pārliecināties, ka vēl p ar pat panākt situāciju, ka ". Šādu p inājumam neprognozējami p shēmas n pasīvās RC ķ as un

rotamm. L

s, konkrētais epatikšanas ir a

li, vtkarīgs ie

alielinot so d rezultāti "aiziet pa pieskariarādību, kad ris ieaug kļūda, sauc par diferenčuestabilitāti. Teorijā un praksē ēdes ir stabilas un no ķēžu teorij

p dījums irakses viedokļa nodemonstrētais ga r absurds !!! Aplūkotajā piemērā reizē eti tiešo meek demonstrēta arī zemo kārtu ne tožu būtiska priekšrocība - stabilitāt .

L āk uzrakstīto sce i asītājs, izmantojot augst nāriju, var pārliecināties, ka pat pie ļotlieliem soļiem netiešā Eilera metode nezaudē stabilitāti. Eilera metodi tīrā veidā praksē praktiski gandrīz nelieto, bet to izmanto, piemēram prognožu-korekciju metodē. Bez tam, tā savas vienkāršības dēļ, var noderēt arī gadījumos, kad pēkšņi skaitliski ir jārisina kāds diferenciālvienādojums ar kalkulatora palīdzību. Taisngrieža shēma

Tiešās Eilera metodes gadījumā no izteiksmes (85) un (92) mēs atrodam, ka:

CutEihuu nnD

nnn))((

1−

+=+ (108)

Savukārt netiešās Eilera metodes gadījumā:

CutEihuu nnD

nnn))(( 11

1++

+−

+= (109)

Starp izteiksmēm (108) un (109) pastāv būtiska atšķirība. Lai atrastu nezināmo spriegumu un+1 ar netiešo Eilera metodi (izteiksme (109)), mums ir jārisina nelineārs vienādojums, jo nezināmais ir "iebūvēts" nelineārā vienādojumā.

Page 157: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-157

At . Ievietojot pseidodiodes VA raksturlīknes found. vienādojumā (85), iegūstam:

griezīsimies pie vienādojuma (85)izteiksmi Error! Reference source not

CtutE

dttduc )(exp()( c 1))( −−=

Tiešajai Eilera metodei atbilstošā difere

(110)

nču formula, šajā gadījumā mums ir sekojoša:

nnnn /}1])({exp[un 1 CutEhu + − −= (111)+

Nākošais scenārija fragments ļauj veikt taisngrieža simulāciju. Trūkstošo para-metru ievada fragmentu un rezultātu izvadu lasītājs var aizgūt no iepriekšējā scenārija vai pierakstīt pats(i):

% DC - Forward Euler UcfE = []; Un = 0; Et=311*sin(2*pi*50*t); for E = Et, UcfE = [UcfE, Un]; Un = Un+h*(exp(E-Un)-1)/C; end

Zīm. 105. Vienpusperioda taisngrieža simulācija ar tiešo Eilera metodi.

Redzam, ka ar tīkla spriegumu mūsu "šedevrs" tiek galā tīri sekmīgi. Protams, ir jāpiemeklē pietiekami mazs solis, lai lietas notiktu pareizi. Lasītājam būtu derīgi paeksperimentēt ar sinusoīdas frekvenci, filtra kapacitāti un diodes parametriem.

Taisngrieža simulācija ar netiešo Eilera metodi

Ievietojot izteiksmē (109), izteiksmi Error! Reference source not found., iegūstam nelineāru vienādojumu attiecībā pret meklējamo spriegumu un+1:

CutEhuu /}1])({exp[nn 1 nnn 11 −−+= ++ +

vienādojumu konkrētajā ga

(112)

» solve('un1=un+h*(exp(A*sin(w0*t)-un1)-1)/C','un1') ans = -(-un*C-C*lambertw(h/C*exp((A*sin(w0*t)*C-un*C+h)/C))+h)/C

et nevis likumsakarību.

Var darboties arī tīri skaitliski, piemēram, izmantojot fzero. Lai izmantotu šo funkciju, kā jau redzējām agrāk, ir jāveic zināmi priekšdarbi.

Vispirms mums ir nepieciešama ieejas signāla funkcija. Ātrs risinājums ir

;

Šo dījumā var atrisināt arī analītiski:

taču tas ir uzskatāms drīzāk par izņēmumu, b

inlineizmantošana:

» ein = inline('sqrt(2)*220*sin(2*pi*50*t)')

Page 158: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-158 ©Copyright Pičs (P. Misāns)

Vienkāršības labad šo funkciju definējām tikai ar vienu argumentu. Lasītājs var funkciju papildināt arī ar citiem argumentiem (piemēram, ar amplitūdu un frekvenci)

Ja darbošanās notiek ar scenāriju vai no komandu loga, ir jānodefinē vienādojuma funkcija. Relatīvi ātrs risinājums ir no komandu loga vai scenārijā definēta anfunkcija, pārnesot vienādojuma (112) visus locekļus vienā pusē:

dcbeuler = @(un1,un,h,t,C)(un1-un-h*(exp(ein(t)-u 1)-1)/C)

h; . .

C),Un);

kā iepriekšējā piemērā, šis ir kai koda fragments.

onīmā

» dcbeuler=@(un1,un,h,t,C)(un1-un-h*(exp(ein(t)-un1)-1)/C)

n

Kad priekšdarbi ir veikti, var sākties cikliska sprieguma vērtības meklē-šana: % DC - Backward Euler UcbE = []; Un = 0; tc = 0; Et = ein(t); for E = Et,

cbE, Un]; UcbE = [Uc + tc = t

Un = fzero(@(Uc,un, ..lis,t,Cap).. so

dcbeuler(Uc,Un,h,tc,end Zīm. 106. Vienpusperioda taisngrieža

simulācija ar netiešo Eilera metodi un līdzinājums ar tiešo Eilera metodiTāpat

tisa .

e. Tā maksa par kvalitāti. Lasītājs var veikt patstāvīgus pētījumus, salīdzinot kritiskos soļu

li

astie pirmās kārtas diferenciālvienādojumi. Populārākā no tām ir ode23 ūkosim šīs funkcijas sintaksi. Pārējām funkcijām (solvers) sintakse ir identiska, tikai atšķiras to nosau

šrocības, kuras šeit

Redzams, ka izmantojot netiešo Eilera metodi, varam atļauties gandrīz 20 reizes lielāku soli nekā tiešās Eilera metodes gadījuma, iegūstot puslīdz pieņemamus rezultātus. Protams, ka zaudējam laikā, jo ir jāmeklē nelineāra vienādojuma saknir

elumus un abu metožu ātrdarbību.

Diferenciālvienādojumu risināšana ar MATLAB-a līdzekļiem MATLAB-ā ir vairākas funkcijas, ar kuru tiek risināti par

. Aplkumi.

Protams, katrai no funkcijām ir savas pielietojumu priekneaplūkosim.

Iespējamie izsaukumi:

[t,Y] = ode23(odefun,tspan,y0) [t,Y] = ode23(odefun,tspan,y0,options) [t,Y,TE,YE,IE] = ode23(odefun,tspan,y0,options) sol = ode23(odefun,[t0 tf],y0...)

Tabula 14. Funkcijas ode23 parametri.

odefun Diferenciālvienādojuma labās puses funkcijas nosaukums.

Page 159: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-159

tspan integrālo funkciju tik laika momentos starp t0 un tf, cik atzīst par vajadzīgu ("iekšējie" punkti). Ja vektors satur vairāk par diviem elementiem augošā kārtībā, tad integrālā funkcija

Laika vektors. Vienkāršākajā variantā divu elementu vektors [t0, tf] – integrēšanas intervāls. ode23 solveris izrēķina

tiek izrēķināta visos uzdotajos punktos. Precizitāte praktiski nav atkarīga no uzdoto punktu kaita un izvietojuma, tikai tiem ir jābūt vērtību augošā kārtībā. s

y0 Sākuma nosacījumu vektors

options Vadības struktūra, kurā tiek definēti dažādi ode23 uzvedības noteikumi. Parasti tos iestāda ar funkciju odeset.

Laika vērtību vt ektors. Tas ir atkarīgs no tspan - divu elementu mā ode23 diktēts, bet ja vairāk elementu, tad atkārto tspan. gadīju

Y Integrālās funkcijas vērtību vektors.

TE Notikumu laentus (zero-cro

ika vektors. Piemēram, var noteikt nulles šķērsošanas ssing). mom

YE Atrisinājumu vektors notikumu brīžos. IE Notikumu indeksu vektors.

Struktūra, kas ietver sevī visu s. plektsol s iepriekš uzskaitītos izejas parametru

ā ar deval (sk help). To parasti izmanto kom

Kā piemēru atkal aplūkosim vienpusperioda diodes taisngriezi. Vispirms ir jāapraksta

*pi*50*t)'); » dc_f = @(t,uc,C)((exp(ein(t)-uc)-1)/C);

ode23nymous funkcijai:

» f_» [t

Ja lagalaponk

diferenciālvienādojuma labās puses funkcija. Visātrāk to var izdarīt ar anonymous function, bet ieejas EDS signāla aprakstam, tāpat kā iepriekš, izmantosim inline:

» ein = inline('311*sin(2

Apzināti izvēlēsimies lielu soli h=5ms: »t_vec=linspace(0,50e-3,11);

taču tas aprēķinu punktos precizitāti nepasliktina, lai arī to starpās uzzīmētais neatbilst patiesībai. izsaukumā izmantosim rokturi ano

h =@(t,uc,C)dc_f(t,uc,.2e-3); ,Uct] = ode23(f_h,t_vec,0);

ika vektora vietā izmantosim intervāla unktu vektoru, tad Uct vektors rētajam piemēram saturēs 244 vērtības,

Zīm. 107knevienmērīgi sadalītos t punktos. Pārliecinies pats(i)!

. Vienpusperioda taisngrieža simulācija ar MATLAB-a funkciju

ode23.

a u line tipa īvs, taču ne vienmēr izmantojams. Funkcijas ir labāk aprakstīt

Vienādojumfunkcijām ir gana operat

n ieejas EDS funkciju apraksts ar anonymous un in

Page 160: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-160 ©Copyright Pičs (P. Misāns)

atsevišķos failootrkārt, vienādodiferenciālvienā

ārsvar

Mūsu piemērā f

function u = ((exp

; x = 311*sin(2*pi*50*t);

s. Kādēļ? Pirmkārt, šīs funkcijas varēs izmantot arī citi scenāriji, bet, juma funkcijā, ja tā ir izvietota failā, ir iespējams aprakstīt vairāku dojumu sistēmu, kas inline gadījumā nav iespējams. Praksē, kā ā ir sastopamas shēmas ar vairākiem reaktīvajiem elementiem.

unkciju faili varētu būt dc_fun.m un e_in.m:

p = dc_fun(t,uc,C) function x = e_in(t)

zināms, p

up

(e_in(t)-uc)-1)/C);

Pēc tam, kaduzrakstīt:

m

_h =@(t,t,Uct] =

egūtu sprieg iz laika punktu izvietojum ē 23 un tas, p fiku un pārliecinies par to!

ges-Kuttara rīcībā, d alizēti ir analizēti ode23 un 5 algoritm ā Runges-Kutta metodes tiek iegūtas ju izvirzo rindas l rī Eilera metodi

un trapeču metodi var uzskatīt par zemāku kārtu ) formulām.

inētās funkcijas ir uzrakstītas, no komandu loga vai scenārijā pietiek

» f» [

uc,C)dc_fun(t,uc,.2e-3); ode23(f_h,[0,50e-3],0);

u diktlai iode

uma un atbilstošo laika vektoru. Šorerotams, ir nevienmērīgs. Uzzīmē gra

Run formulas Auto iemžēl, nebija tās literatūras, kurā detode4 i. Var tikai piebilst, ka principfunkciTeilora

t Teilora rindā un pēc tam veicot integrēšanu. Paturot dažādu skaituocekļu, iegūst dažādu kārtu Runges-Kutta formulas. A

Runges-Kutta (RK

3.kārtas RK formula :

⎪⎩+ 2113 nn⎪ ⋅+−⋅= )2,(

21

kkxtfhknnnn

⎪⎨ ++⋅=⋅= ,)2/,2/(),,(

61kxhtfhktxfhk (113)

⎪⎧ ++⋅++=+ ,)()4(1 4

3211 hQkkkxx nn

4.kārtas RK formula:

⎪⎪⎩

⎪⎨

++⋅=⋅=⋅=

,)2/,2/(),,(

6

423

21

4

kkxhtfhkhktxfhk

nn

nn

⎪⎧ ⋅+⋅++=+ 22(1

3211 kkkxx nn

++⋅=++

++

),(,)2/,2/(

),()

3

1

5

kxhtfhkxhtf

hQk

nn

nn (114)

ekļi, kas rāda kļūdas kārtu. Ir zināmas ot, arī MATLAB-ā lietotās ir kāda no

rinci a

ak - induktivitāti L un/vai kapacitāti C. elektrisko ķēžu aprakstošo diferenciālvienādojumu kārta var

Uzrakstītajās formulās ir uzrādīti arī kļūdu locedzdažādas RK formulu modifikācijas. Acīmr

šīm modifikācijām.

Augstāku kārtu diferenciālvienādojumuElektrisko ķēžu aprakstā augstāku kārtu diferesatur vairāk nekā vienu re tīvais elementu Praksē modelējamo

sināšana. ālvienādojumi parādās tiklīdz shēm

sasniegt vairākus desmitus pat simtus. Speciālu metožu pielietošana, kas orientēta uz augstāku kārtu vienādojumu risināšanu šādos gadījumos ir neiespējama, tādēļ praksē

Page 161: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-161

visizplatītākais paņēmiens ir vienādojumu reducēšana uz pirmās kārtas parasto diferenciālvienādojumu sistēmu.

Piemērs – vienpusperioda taisngriezis ar filtru Reizēm taisngriežu shēmu filtros mēdz izmantot arī induktivitāte

vienkāršot u veikt virtus (droseles). Bez tam

ītājs šo piemēru var pēc vajadzības n ālus eksperimentus ar p

(115)

un diviem strāvu Kirhofa likumu vienādojumiem:

(116)

Bez tam katru no komponentēm apraksta komponešu vienādojums:

lasarastu RLC shēmu.

Zīm. 108. Vienpusperioda taisngrieža shēma ar LC filtru.

Shēmu apraksta ar diviem spriegumu Kirhofa likumu vienādojumiem:

⎩⎨⎧

=++=+

0RLC

CD

UUUEUU

⎩⎨⎧

=+=

RL

LCD

iiiii

RiUdtdiLU

dtdUCiUi RR

LL

CCDD ⋅===−= ,,,1)exp( (117)

Visi spriegumi un strāvas ir laika atkarīgi, bet formulās vienkāršības labad mēs tos neuzrādam. No vienadojumiem (115)-(117) mēs varam iegūt vai nu pirmās kārtas parasto diferenciālavienādojumu sistēmu:

⎪⎪⎪⎪

⋅=

⋅−=

RiUL

RiUdtdi

LR

LCL ,(118)

vai arī otrās kārtas nelineāru diferenciālvienādojumu:

⎪⎪⎪ =

CdtLCDC ,

⎪⎧

−− iUEidU )(

E

D

C

LR

D L UU

UC E UR iiD

C iL=iR

Page 162: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-162 ©Copyright Pičs (P. Misāns)

⎪⎪⎪

⎩ ⋅= RiU LR

Kā redzams, ja

⎪⎪=+− iRdidiid

L

iD

,0)1)2

4444 84444 7

(119)

ir vajadzība atrast spriegumu uz rezistora, bez diferenciālvienādojumiem ir vajadzīgs arī parasts vienādojums. Stāvokļa mainīgā metode

Starp citu, ķēžu aprēķinos spriegumu uz kapacitātes UC un strāvu caur induktivitāti iL dēvē par stāvokļa mainīgajiem., bet metodi, kas ir iemiesota izteiksmē (118) – par stāvokļa mainīgo metodi. Nopietnākas zināšanas par šo metodi lasītājs var gūt elektrisko ķēžu pamatkursā.

Izteiksmes (118) tiešā veidā ir piemērotas aprēķiniem ar ode23. Lai veiktu aprēķinus, mums ir jāizveido abus diferenciālvienādojumus aprakstošu funkciju, ko saglabāsim failā dclr_fun.m:

function up = dclr_fun(t,ui,C,L,R); up = zeros(2,1); % Uc - ui(1); iL - ui(2) up(1)up(2)

⎪⎧

6

⎨ ⋅++−⋅+⋅ idt

LEdt

CRdt

CL LLLL (exp(2

= ((exp((e_in(t)-ui(1)))-1)-ui(2))/C; = (ui(1)-ui(2)*R)/L

Ieejas EDS formējošā funkcija e_in() ir aizgūta no iepriekšējā piemēra. Apskatot funkciju dclr_fun(), redzam, ka tajā tiek aprakstītas abu diferenciālvienādolabās puses un katra izteiksme tiek piešķirta savam vektora up elementam. Lai v

īto

R = 20; C = 2e-3; L1 = 1e-3; f_h = @(t,uc,c,l,r)dclr_fun(t,uc,C,L1,R);

jumu eiktu

shēmas simulāciju vēl ir jāuzraksta scenārija rindas, kas atrisina uzrakstvienādojumu sistēmu (118):

[t,UIt] = ode23(f_h,[0,60e-3],[0,0]);

L2 = 80e-3; f_h =@(t,uc,c,l,r)dclr_fun(t,uc,C,L2,R);

plot(t,abs(e_in(t)),t,UIt(:,2)*R,'k');

[t,UIt] = ode23(f_h,[0,60e-3],[0,0]);

hold on; plot(t,UIt(:,2)*R,'r');

Page 163: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-163

Pievērsiet uzmanību tam, ka, lai atrisinātu divu diferenciālvienādo-jumu sistēmu, ir jāuzraksta sākuma nosacījumi katram no tiem (iekrāsotie vektori). Arī risinājums šoreiz ir divu vektor-kolonnu matrica. Pirmajā

struz

glo tālāk

kolonnā UIt(:,1) glabājas sprie-gums UC(t), bet otrajā UIt(:,2) - āva caur induktivitāti iL. Spriegums rezistora tiek iegūts no iL.

No shēmtehniskā viedokļa, raugoties uz oscilogrammām, redzam, ka, palielinot induktivitāti, var vairāk "nogludināt zāģi", kas atvie

Zīm. 109. Vienpusperioda taisngriezis ar LC filtru. Simulācija ar ode23 pie dažādām

tīrāka līdzsprieguma iegūšanu. induktivitātēm.

u difereciālvienādojumu sistēmu

Dažreiz diferenciālvienādojumi. Shēmte ītājs var apskatīt patstāv līdz pirmās kārtas parastajiem diferen an der Pola vienādo

2211 )1( xxx (121)

Vispārī iālvienādojuma var ieg

Augstāku kārtu diferenciālvienādojumu pārvēršana par 1 kārtas parast

diferenciālvienādojumi ir jau doti kā augstāku kārtupriekš – vienādojums (119). To lashnisks piemērs ir dots ie

īgi un mēģināt noreducēt ciālvienādojumiem. Mēs aplūkosim klasisku fizikas piemēru – Vjumu, kas ir dots arī MATLAB Guide:

0)1( 2 =+′−+′′ xxxx (120)

Izmantojot attiecīgu substitūciju, kas aizvieto pirmās kārtas atvasinājumu ar mainīgo x1, iegūstam divu parastu pirmās kārtas diferenciālvienādojumu sistēmu:

⎧ 2x⎩⎨ =′ xx

−−⋅=′

12

gā g encadījumā, izmantojot substitūcijas, no n-tās kārtas difer ūt n pirmās kārtas parasto diferenciālvienādojumu sistēmu:

⎪⎪⎪

⎪⎪

= ),,...,,( 2122 txxxfdx

dt

n

⎪ = ),,...,,( 2111 txxxf n

⎧ dx

= ),,...,,(...

21 txxxfdt

dx

dt

nnn

(122)

Tālākais rēķināšanas process var notikt jau ar skaitliskajām metodēm, kas ir domātas pirmās kārtas parasto diferenciālvienādojumu risināšanai.

Page 164: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-164 ©Copyright Pičs (P. Misāns)

Page 165: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-165

Pirmie soļi skaitliskās integrēšanas metodēs

Page 166: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-166 ©Copyright Pičs (P. Misāns)

Page 167: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-167

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-167

Skaitliskās integrēšanas metodes

Skaitliskās integrēšanas nepieciešamība Skaitlisko integrēšanu pielietojumu matemātikā un tai skaitā arī elektronikā izmanto ļoti plaši. Galvenie pielietojumu virzieni:

1) Diferenciālvienādojumu skaitliskā risināšana (skaties atbilstošo nodaļu).

2) Noteikto integrāļu aprēķins (Furjē integrālis, dažādas formulas akustikā, antenu tehnikā utt.).

3) Integrēšanas procesa imitācija (simulācija).

4) Ierīces-integratori (vidējās vērtības noteicēji, detektori utt.)

Tā, piemēram, ideāla integratora vienkāršota shēma ir redzama nākamajā zīmējumā. Šādus integratorus plaši lieto elektronikā. Šāda analogā integratora darbību gandrīz ideāli apraksta sakarība (123).

Zīm. 110. Uz operāciju pastiprinātāja bazēta ideāla integratora shēma.

∫⋅−=

τ

0

)(1)( dttUCR

tU ieiz (123)

Ja ir vajadzība veikt attēlotās ierīces simulāciju, ir jāpārzin skaitliskās integrēšanas algoritmi. Klasisks piemērs integratora pielietojumam ir vidējās (arī efektīvās) vērtības noteicējs. To izmanto visdažādākajās elektroniskajās ierīcēs. Ja minēto noteicēju veido kā ciparisku ierīci (uz mikroprocesora vai programmējamo loģisko ierīču bāzes), ļoti aktuāla ir skaitliskās integrēšanas pamatu zināšana.

Noteiktais integrālis kā laukums Matemātikā labi pazīstama ir Nūtona-Leibnica formula:

(124)

Ļoti bieži praktiskajos uzdevumos funkcijas F(x) atrašana ir stipri apgrūtināta vai pat pilnīgi neiespējama. Integrējošajām ierīcēm pārsvarā gadījumu ir jāapstrādā iepriekš nezināmas formas signāli (funkcijas), kas izteiksmes (124) izmantošanu padara pilnīgi neiespējamu.

C

R

Uie(t) Uiz(t)

∫ −=b

a

aFbFdxxf )()()(

Page 168: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-168 ©Copyright Pičs (P. Misāns)

Noteiktais integrālis, kā tas ir zināms no matemātikas kursa, ir laukums, ko norobežo funkcija un abscisu ass uzdotajā intervālā. Noteiktā integrāļa interpretācija ar laukumu kalpo par pamatu praktiski visu skaitliskās integrēšanas metožu iegūšanai. Tādējādi, viena integrēšanas metode atšķiras no otras tikai ar laukuma aprēķina paņēmieniem.

Pašas vienkāršākās integrēšanas metodes mēs jau apskatījām, runājot par parasto diferenciālvienādojumu skaitlisko risināšanu (skaties Zīm. 99 Zīm. 100

)-(94)). Integrējamo funkciju var sadalīt vienāda platuma „sloksnītēs” un tu, , kā arī formulas

(92 vināti atrasloksnī ris. Tādējādi, sloksnītes laukumu var noteikt, pareizinot tās aug intervāla sākumā, vai nu tā beigās, vai skās integrēšanas paņēmieni, kurus dēv visai reti zemās

Abscisu ass tiek sadalīta vienādos apakšintervālos ar platumu h un katrā no šiem apakšintervāliem tiek atrasts trapeces laukums, kas aptuveni izsaka funkcijas intervāla robežu un abscisu ass ietverto laukumu.

st katras sloksnītes laukumu. Visvienkāršākais tuvinājums ir pieņemt, ka katra te ir taisnstū

stumu ar platumu. Augstumu var noteikt vai nu arī intervāla vidū. No tā izriet trīs dažādi skaitliē par taisnstūra metodēm. Šos paņēmienus praksē izmanto

precizitātes dēļ.

Trapeču metode

x0 x1 x2 x3 x4

y0

y1

y2 y4

y3

.,1...,,2,1,0

,2

1

1

ii

iii

xxhbetnikur

hyyS

−=−=

+≅

+

+

(125)

Zīm. 111. Trapeču metodes grafiskā ilustrācija.

Pilnu laukumu atrod kā elementāro (atsevišķo trapeču) laukumu summu:

⎥⎤

⎢⎣

⎡ ++

⋅=≅ ∑∫ ∑−−

=

10

1

1 2)(

n

in

b

a

n

ii yyyhSdxxf (126)

⎦=1i

īga, jo tai ir nepieciešamas n saskaitīšanas un 2 ērīga soļa trapeču

Vienāda soļa trapeču metode ir ātrdarbreizināšanas operācijas. Nereti efektīvāka var izrādīties nevienmmetode. Tās gadījumā:

∑∫ ∑−

=+

=

⋅+=≅1

11

1

1

)(21)(

n

iiii

b

a

n

ii hyySdxxf

(127)

Šī metode, starp citu, ir realizēta MATLABā kā funkcija trapz. Minētā funkcija, protams, ļauj strādāt arī ar vienmērīgu soli. Nointegrēsim mums labi zināmu funkciju sin(x), intervālā x∈[0, π]. Vispirms atradīsim risinājumu ar simboliskās matemātikas palīdzību:

Page 169: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-169

» int(sym('sin(x)'),'x',0,pi) ans = 2

Aprēķinu veiksim, vispirms sadalot uzdoto intervālu 3 vienādos apakšintervālos. » n = 4; » x = linspace(0,pi,n); » y = sin(x); » trapz(y)*pi/(n-1) ans = 1.8138

!!! Ja funkciju trapz izmanto tikai ar vienu argumentu (ordinātu vērtības), tad lietotājam pašam ir jāuzdod apakšintervāla platums (šoreiz tas ir π/(n-1))

Nereti precīzāka var izrādīties nevienmērīga soļa izmantošana. Tāpat kā iepriekš lietosim tikai 3 interv

ālus, taču tie būs dažāda garuma:

1.8169

atbilstošie intervālu platumi tiek noteikti automātiski

Redzam, ka precizitāte ir nedaudz uzlabojusies. Tas ir tādēļ, ka vienmērīga soļa gadījumā punktu izvietojums nav optimāls. Lasītājs var veikt eksperimentus ar citām funkcijām. Nevienmērīgais solis var būt efektīvs tajos gadījumos, kad funkcijai ir gan lineāri apgabali gan arī apgabali ar strauju atvasinājuma maiņu. Lineārajos apgabalos intervālu var izvēlēties maksimāli lielu. Tas, savukārt, var būtiski samrēķināšanas apjomu. Taču vienmēr ir jāatceras, ka formula (127) prasa vairāk reizināšanas operāciju nekā (126). Līdz ar to pārsteidzīgus secinājumus par operāciju skaitu un rezultāta precizitāti, vērtējot un salīdzinot minētās metodes, nevajadzētu izdarīt.

Simpsona metode. interpolāciju

veic nevis ar taisni, bet gan ar parabolu. No nodaļas par interpolāciju atcerēsimies, ka, lai veiktu polinomiālo interpolāciju, kvadrātiskās parabolas gadījumā ir nepieciešami tikai 3 punkti. Funkcijas aizvietošana ar kvadrātisko parabolu ir parastās Simmetodes galvenā ideja.

» x = [0,5.9*pi/16,10.1*pi/16,pi]; » y = sin(x); » trapz(x,y) ans =

!!! Ja funkciju trapz izmanto ar diviem argumentiem, tad

azināt

Elementāro sloksnīšu laukumus var aprēķināt vēl precīzāk, ja funkcijas

psona

Integrēšanas intervālu [a, b] sadala n = 2m vienādos intervālos ar soli h . Katrā no apakš-dubultintervāliem [x0, x2], [x2, x4 ], ..., [x2m-2, x2m ] funkcija f(x) tiek aizvietota ar parabolu:

F x ax bx c22( ) = + + (128)

Atradīsim laukumu intervālā [x0, x2], par centru izvēloties punktu x1:

)62(3

)3(3

2)( 222 cahhcahhdxcbxaxSh

+⋅=+⋅⋅

=++≅ ∫ (129)h−

Page 170: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-170 ©Copyright Pičs (P. Misāns)

Atcerieties, ka šo integrēšanas rezultātu as funkciju :

var iegūt arī, izmantojot simboliskās int

yms x h

sadala izteiks-

s a un

⎧ +−=−= cbhahhFy 220 )(

c2

matemātik» s» factor(int(sym('a*x^2+b*x+c'),x,-h,h))

Funkcija factor

ans = mi reizinātā-jos.

c, uzrakstīsim sekojošus trīs vienādojumus:

2/3*h*(a*h^2+3*c)

āmos koeficientuLai atrastu nezin

⎪⎩

⎨++==

==cbhahhFy

cFy2

22

21

)()0( (130)

Saskaitot pirmo un trešo vienādojumus, atrodam, ka:

y y ah0 222+ = + (131)

No izteiksmēm (129)-(131) izriet, ka

120202 4462 yyycyycah ++=++=+ (132)

un

)4(3

~)( 21022 yyyhSdxxfSh

hhh ++⋅=≅= ∫

av pārāk ērta, jo ir nepieciešamas liekas saskaitīšanas darbības katrā no dubultintervāliem. No liekajām saskaitīšanām var izvairīties, pareizinot ordinātu y2, y4,

(133)

Ja mums ir jāmeklē integrāļa vērtība plašākā intervālā nekā [-h, h], iegūtā formula (133) n

..., y2m-2 vērtības ar 2:

)]...(2)...(4)[(3

)( 2242123120

2

0

−− +++++++++≅∫ mmm

x

x

yyyyyyyyhdxxfm

(134)

Simpsona metodes „anatomijas” praktiska ilustrācija

Vispirms atradīsim sinusoīdas segmenta laukumu, izmantojot (133):

1.0023

Atcerēsimies, ka ideālais rezultāts ir 1 (- puse no sinusoīdas pozitīvā pusviļņa lau(==2)).

Tālāk ar MATLAB-a scenārija fragmentiem ilustrēsim Simpsona metodes „anatomiju”. Pārliecināsimies, ka rezultāti, kas ir iegūti ar formulām (129) un (133) neatšķiras.

» ((pi/4)/3)*(sin(0)+4*sin(pi/4)+sin(pi/2)) ans =

kuma

Page 171: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-171

Atradīsim interpolācijas koeficientus a un c, kas tiek izmantoti formulā (129). Vispirms izskaitļosim interpolācijas mezglu koordinātes.

in(pi/

oteiksim interpolanta (2-ās kārtas polinoma) koeficientus (ti os):

-0.3357 0.6366 0.7071

Izmantojot formulu (129), atradīsim integrāļa tuvināto v ību:

» h = pi/4; » (h/3)*(2*C2(1)*h^2+6*C2(3))

1.0023

Redzam, ka rezultāti ir identiski, kā tam arī būtu jā ūt. Skaitliskais eksperimentsvedumu pareizību. Kā redzam integrēšanas kļūda a precizitāte ir pieņemama (piemēram,

ierīcēs-integratororos).

!!! Salīdzinājumam - patstāvīgi veic funkcijas sin(x+π/4) integrāļa aprēķinu intervālā π/4, π/4] ar funkciju trapz (arī divām sloksnītēm). Novērtē kļūdu.

Nākamie attēli ilustrē to, kādā veidā sinusoīdas posms intervālā x∈[-π/4, π/4] tiek aizvietots ar parabolu. Redzam, ka parabola ar relatīvi nelielu kļūdu tiek „pielaintegrējamajai funkcijai. Līdzīgi parabolas pielaikošanu var veikt arī intervālam

» xk = [-pi/4,0,pi/4]; sin(xk+pi/4); % [sin(0),sin(pi/4),s» yk =

Pēc tam n

2)]

e, starp citu, irredzami nākamajos zīmējum

» C2 = polyfit(xk,yk,2) C2 =

ērt

ans =

b lieku reizi tikai apstiprina iepriekš veikto iznepārsniedz 0.25%. Nereti šād

x∈[-

ikota”

x∈[π/4, 3π/4] (Izdari to!). Kvadrātiskā polinoma koeficienti, protams, atšķirsies.

-0.5 0 0.5 1 1.5 20

0.2

0.4

0.6

0.8

1

1.2

x

y

Simpsona metodes ilustracija

sin(x+π/4)

-0.3357*x2+0.6366*x+0.7071

π/4-π/4

Zīm. 112. Simpsona metodes grafiskā ilustrācija.

0 0.2 0.4 0.6 0.80.6

0.65

0.7

0.75

Simpsona metodes ilustracija1.05

1

0.8

0.85

0.9

0.95

sin(x+π/4)

x

y

-0.3357*x2+0.6366*x+0.7071

etodes grafiskā lielinājumā).

ā piemērā ir segmenta īstā laukuma un tā tuvinātā novērtējuma

π/4

Zīm. 113. Simpsona milustrācija (pa

Integrēšanas kļūda šajstarpība:

0023.010023.1~22 =−=− hh SS (135)

Page 172: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

ML-172 ©Copyright Pičs (P. Misāns)

Parasti kļūdas novērtējumam ērtāk ir izmantot moduli. Kļūdas lielums ir atkarīgs no integrējamās funkcijas izskata, interpolējošās funkcijas izvēles un integrēšanas soļa h

terpolācijai lietotojot lielāku skaitu interpolējošo rotams, ka to var darīt. Iepriekšējo gadsimtu rmulas. Skaitlisko recepšu grāmatās šīs formulas

nkcija ir jāintegrē relatīvi nelielā intervālā. Klasisks piemērs - nupat esa formulas var sekmīgi lietot arī tajos s pašas kārtas polinoms, kā atbilstošās

ā izmantotais polinoms.

Ņūtona-Kotesa formulas ir precīzas, ja integrē atbilstošas kārtas

lieluma.

Ņūtona-Kotesa (Newton-Cotes) formulas Darbojoties ar Simpsona metodi, rodas loģisks jautājums par to, vai nevar izmantot arī augstākas kārtas polinomus, inmezglu (apakšintervālu skaitu). P

tiķi ir atraduši atbilstošās fomatemāvar atrast dažādās formās.

Elementārās (Closed Newton-Cotes formulas) formulas Tiek lietotas, ja fuiegūtā Simpsona formula (133). Ņūtona-Kot

s, ja integrējamā funkcija ir tādagadījumoformulas iegūšan

!!! Jāatceras, kapolinomu.

Vispārīgā veidā elementārās Ņūtona-Kotesa formulas varam pierakstīt sekojoši: hn

nn KnhfBhfBhfBfBhAdxxf +++++⋅⋅=∫ )](...)2()()0([)( 2100

(136) ⋅

Nākošajā tabulā ir apkopotas visplašāk praksē lietotās formulas :

Metode n A BB0 B1B BB2 B3B BB4 B5B Kn(1) Kn(2)

Trapeču 1 1/2 1 1 Q(h3f//) -(1/12)h3f4(x)

Simpsona 2 1/3 1 4 1 Q(h f ) -(1/90)h f (x) 5 (4) 5 4

3/8 Simpsona 3 3/8 1 3 3 1 Q(h5f(4)) -(3/80)h5f4(x)

Bodes 4 2/45 7 32 12 32 7 Q(h7f(6)) -(8/945)h7f6(x)

5 5/288 19 75 50 50 75 19 Q(h7f(6)) -(275/12096)h7f6(x)

Koeficients Kn raksturo kļūdu. Dažādos avotos ir uzrādītas dažādas izteiksmes. Šeit netiek garantēta kļūdu izteiksmju pareizība. Kļūdu izteiksmes ir aizgūtas no diviem dažādiem avotiem. Tā, piemēram, Simpsona metodei kļūda ir proporcionāla soļa piektajai pakāpei un funkcijas ceturtā atvasinājuma vērtībai.

Paplašinātās (Extended Newton-Cotes formulas) formulas Paplašinātās formulas lieto tad, ja integrēšana jāveic pietiekami plašā argumenta vē ām fo ir for ula st patstāvīgi.

rtību intervālā. Viena no paplašinātajmula (134). Pārējās paplašinātās form

rmulām, kas atbilst trapeču metodei s, ja ir vēlēšanās, lasītājs var atra

Page 173: Ievads inženiermatemātikas datorrealiz cij · Pirmie soļi ar MATLAB ©Copyright Pičs (P. Misāns) ML-9 Ievads Šo konspektu paredzēts izmantot kā palīglīdzekli priekšmetā

Pirmie soļi ar MATLAB

©Copyright Pičs (P. Misāns) ML-173

Literatūra 1. J.H.Mathews, K.D.Fink, Numerical Methods Using MATLAB. - Pearson Prentice

all. – New York, 2003. for Version 7. –

as datorrealizācijā. Lekciju konspekts –

Hall. – 4-th ed. – New Jersey, 2004. 2. R.C.Gonsales, R.E.Woods, S.L. Eddins. Digital Image Processing using

MATLAB. – Pearson Prentice Hall. – New Jersey, 2004. 3. J.B.Dabney, T.L.Harman. Mastering SIMULINK. – Pearson Prentice Hall. – New

Jersey, 2004. 4. P.Marchand, O.T. Holland. Graphics and GUIs with MATLAB. –

Chapman&Hall/CRC H5. MATLAB/SIMULINK/Toolboxes/Blocksets User Guides

MathWorks, 2004 6. С.В. Поршнев. Учебник MATLAB 7. Основы работы и программирования. -

Москва: Изд-во - Бином, 2006. 7. P.Misāns. Pirmie soļi darbā ar MATLAB. Lekciju konspekts– PIMARS, 2003. 8. P.Misāns. Ievads inženiermatemātik

PIMARS, 2003.