216
Szimbolikus és numerikus szoftvermegoldások Dr. Aradi Petra, 2015

Szimbolikus és numerikus szoftvermegoldások - … INFORMATIKAI TÁRGYAK... · a Derive programot muLISP (Soft Warehouse) nyelven írták

Embed Size (px)

Citation preview

Szimbolikus és numerikus szoftvermegoldások

Dr. Aradi Petra, 2015

2015-11-26 AP: MIMG02, 2015 2

Ez az anyag kizárólag a Számítógépes modellezés, szimuláció

(BMEGEMIMG02) tantárgy2015/16/1 féléves hallgatói számára készült,

személyes használatra, a felkészülés támogatására.

Bármiféle továbbadás, közzététel, megosztás tilos.

2015-11-26 AP: MIMG02, 2015 3

Matematikai programok

● megoldási módszer– szimbolikus, analitikus– numerikus

● felhasználói felület– szöveges (konzolos vagyis parancssoros)– grafikus (parancssoros)– grafikus

● munkafüzet (notebook)–

2015-11-26 AP: MIMG02, 2015 4

Matematikai modellek, megoldások

2015-11-26 AP: MIMG02, 2015 5

Matematikai modellek csoportosítása

● bemenetek és kimenetek száma szerint– egy bemenetű, egy kimenetű

(single input, single output): SISO– több bemenetű, egy kimenetű

(multiple input, single output): MISO– egy bemenetű, több kimenetű

(single input, multiple output): SIMO– több bemenetű, több kimenetű

(multiple input, multiple output): MIMO

2015-11-26 AP: MIMG02, 2015 6

Matematikai modellek(analitikus megoldás)

● BEMENET-KIMENET MODELLEK● differenciálegyenlet

– Közönséges Állandó együtthatós Lineáris Inhomogén● frekvenciaátviteli függvény● átviteli függvény● zérus-pólus-erősítés alak

● BELSŐ ÁLLAPOTOK FIGYELEMBE VÉTELE● állapottér modell

– kanonikus alakú állapottér modell formálisan előállítható a K.Á.L.I. differenciálegyenletből

2015-11-26 AP: MIMG02, 2015 7

Matematikai modellek(numerikus megoldás)

● BEMENET-KIMENET MODELLEK– differenciálegyenlet

● BELSŐ ÁLLAPOTOK FIGYELEMBE VÉTELE– állapottér modell

● Mindegyik modelltípus lehet– nemlineáris– változó paraméterű

2015-11-26 AP: MIMG02, 2015 8

Matematikai modellek csoportosítása

● a modell jellege szerint– bemenet-kimenet kapcsolat– belső állapotok figyelembe vétele

RENDSZER-MODELL

bemenet (u)

bemenetekvektora (u)

állapotváltozók vektora (x)

kimenet (y)

kimenetekvektora (y)

2015-11-26 AP: MIMG02, 2015 9

Matematikai modellek csoportosítása

● a felírás tartománya szerint– időtartománybeli

● bemenet-kimenet kapcsolat:– differenciálegyenlet (SISO)

● belső állapotok figyelembe vétele:– állapottér modell (SISO-tól MIMO-ig)

– frekvenciatartománybeli● bemenet-kimenet kapcsolat:

– (komplex kör)frekvenciaátviteli függvény (SISO)– Laplace-operátoros tartománybeli

● bemenet-kimenet kapcsolat:– átviteli függvény (SISO)

● belső állapotok figyelembe vétele:– állapottér modell (SISO-tól MIMO-ig)

STATE SPACE (SS) A, B, C és D mátrix

TRANSFER FUNCTION (TF)

számláló és nevező polinom együtthatói vektorként felírva

MathScript RTtimeresp:impulse, initial, lsim, step

MathScript RTfrqresp:bode, nyquist, ...

2015-11-26 AP: MIMG02, 2015 10

Mintapélda

● Mechatronikai berendezések tervezése jegyzet● 4.1. fejezete “Torziós tengely és tárcsa dinamikai

modelljei keresztváltozó (szögsebesség) forrással”

2015-11-26 AP: MIMG02, 2015 11

Differenciálegyenlet és (frekvencia)átviteli függvény

Osztás K-val, idő szerinti deriválás, átrendezés

Laplace-transzformációzérus kezdeti feltételekkel

Átviteli függvény előállítása

Frekvenciaátviteli függvény formális előállítása

2015-11-26 AP: MIMG02, 2015 12

Kanonikus állapottér modell formális előállítása differenciálegyenletből: matematikus út

2015-11-26 AP: MIMG02, 2015 13

Állapottér modell előállítása az integro-differenciálegyenletből: mérnöki út

2015-11-26 AP: MIMG02, 2015 14

Matematikai modellek(analitikus megoldás)

BEMENET-KIMENET MODELLEK● differenciálegyenlet

– Közönséges, Állandó együtthatós, Lineáris, Inhomogén● frekvenciaátviteli függvény

– exponenciális (Euler) alak– algebrai alak

● átviteli függvény– polinomiális alak– zérus-pólus-erősítés alak

BELSŐ ÁLLAPOTOK FIGYELEMBE VÉTELE● állapottér modell

– kanonikus alakú állapottér modell formálisan előállítható a K.Á.L.I. differenciálegyenletből

2015-11-26 AP: MIMG02, 2015 15

tf (transfer function), zpk (zero-pole-gain), ss (state-space)

and n y

dt n+…+ a2

d 2 y

dt 2+ a1

d ydt

+ a0 y (t)=b0u(t )+ b1d udt

+ b2d 2u

dt 2++…+ bm

dmu

dtm

n⩾m

G( jω)=~y (t)~u (t)

=Y 0(ω)e j(ω t +φ(ω))

U 0(ω)e jω t=bm( jω)

m+…+b2( jω)

2+b1 jω+b0

an ( jω)n+…+a2( jω)2+a1 jω+a0

G(s)=Y (s)U (s)

=bm s

m+ …+ b2 s

2+ b1 s+ b0

an sn+ …+ a2 s

2+ a1 s+ a0

G(s)=Y (s)U (s)

=K⋅Z (s)P(s)

=K⋅(s−z1)(s− z2)…(s−zm)

(s−p1)(s− p2)…(s− pn)

d xd t

=A x (t)+ Bu( t)

y (t)=C x (t )+ Du( t)

s X (s )−x (0)=A X (s)+ BU (s)Y (s)=C X (s )+ DU (s)

ss

zpk

tf

2015-11-26 AP: MIMG02, 2015 16

Átjárás a matematikai modellek között

● tf: transfer function (átviteli függvény)– tf2zpk, tf2ss

● zpk: zeros-poles-gain (zérus-pólus-erősítés)– zpk2tf, zpk2ss

● ss: state space (állapottér) – ss2tf, ss2zpk, ss2ss

● continuous (folytonos idejű) és discrete (diszkrét idejű, mintavételes)– c2d, d2s, d2d

2015-11-26 AP: MIMG02, 2015 17

● sos_to_ss Second-order section to state-space ● sos_to_tf Second-order section to transfer function ● sos_to_zpk Second-order section to zero-pole-gain ● ss_to_sos State-space to second-order section ● ss_to_tf State-space to transfer function ● ss_to_zpk State-space to zero-pole-gain ● tf_to_sos Transfer function to second-order section ● tf_to_ss Transfer function to state-space ● tf_to_zpk Transfer function to zero-pole-gain ● zpk_to_sos Zero-pole-gain to second-order section ● zpk_to_ss Zero-pole-gain to state-space ● zpk_to_tf Zero-pole to transfer function

MathScript RT: átjárás a matematikai modellek között

2015-11-26 AP: MIMG02, 2015 18

Control Design MathScript RT Module Functions

2015-11-26 AP: MIMG02, 2015 19

linear systems (MathScript RT Module Subclass)

2015-11-26 AP: MIMG02, 2015 20

MathScript példa: tf_to_ss, step

2015-11-26 AP: MIMG02, 2015 21

2015-11-26 AP: MIMG02, 2015 22

2015-11-26 AP: MIMG02, 2015 23

2015-11-26 AP: MIMG02, 2015 24

2015-11-26 AP: MIMG02, 2015 25

u(t)

x=A⋅x t B⋅u t

y=C⋅x(t )+D⋅u (t)

∫dty(t)

A

B C

D

x(t)

A számítások belseje: állapottér modell

2015-11-26 AP: MIMG02, 2015 26

Példák szimbolikus matematikai program (Maxima) használatára

● Huba Antal, Aradi Petra, Czmerk András, Lakatos Béla, Chován Tibor, Varga Tamás: Mechatronikai berendezések tervezése– 8. fejezet - DC motor hajtóművel egybeépített modelljei– 15. fejezet - CD-fej fókusztávolság szabályozásának

tervezése és szimulációja– 16. fejezet - Golyósorsós pozícionáló szabályozásának

tervezése és szimulációja– 17. fejezet - Vonóelemes pozícionáló szabályozásának

tervezése és szimulációja

http://mogi.bme.hu/TAMOP/mechatronikai_berendezesek_tervezese/

2015-11-26 AP: MIMG02, 2015 27

DC motor hajtóművel egybeépített modelljei

● Visszahatás nélküli hajtómű– Általános változat (egytárolós)– Háromtárolós változat– Négytárolós változat

● DC motor és hajtómű visszahatással, pl. i<500, és golyósorsós átalakítóval

2015-11-26 AP: MIMG02, 2015 28

Impedanciák 1. villamos rész 2. motor tehetelenségéből és a veszteségből 3. hajtómű rugómerevségéből 4. hajtómű fogaskerekeihez és csapágyazásaihoz kapcsolódó 5. golyósorsós mozgásátalakító rugalmasságából 6. golyósorsós mozgásátalakító tömegből és veszteségéből

Különböző típusú részrendszerek “egységesítése”, energiaátalakítók figyelembevétele: impedanciahálózat modell.

2015-11-26 AP: MIMG02, 2015 29

2015-11-26 AP: MIMG02, 2015 30

2015-11-26 AP: MIMG02, 2015 31

CD-fej fókusztávolság szabályozás: elhanyagolás lehetőségének vizsgálata

2015-11-26 AP: MIMG02, 2015 32

2015-11-26 AP: MIMG02, 2015 33

Computer Algebra System

● szimbolikus műveletek● az 1960-as évektől, elméleti fizikusok és

mesterséges intelligencia kutatók igényei alapján● 1987-től számológépekben is van CAS (HP, TI)● források:

– http://en.wikipedia.org/wiki/Computer_algebra_system– http://en.wikipedia.org/wiki/Comparison_of_computer_al

gebra_systems

2015-11-26 AP: MIMG02, 2015 34

CAS: szimbolikus műveletek

● egyszerűsítés és kifejtés helyettesítéssel● részlettörtekre bontás, összevonás

(trigonometrikus, exponenciális, polinomiális, stb.)● parciális és teljes differenciálás● szimbolikus integrálás (néhány határozatlan és

határozott integrál)● szimbolikus globális optimalizálás● lineáris és néhány fajta nemlineáris egyenlet és

egyenletrendszer megoldása

2015-11-26 AP: MIMG02, 2015 35

CAS: szimbolikus műveletek

● néhány fajta differenciál- és differencia egyenlet megoldása

● határértékszámítás● integrál transzformációk● sorozatokkal kapcsolatos műveletek

(pl. összegzés, szorzás)● mátrixműveletek (szorzás, inverz, stb.)● statisztikai számítások● tételek bizonyítása és igazolása● optimalizált kód előállítása

2015-11-26 AP: MIMG02, 2015 36

CAS: többletfunkciók

● programozási nyelv saját algoritmusok kódolására● tetszőleges pontosságú numerikus műveletek● pontos egész aritmetika és számelméleti

funkcionalitás● matematikai kifejezések “szép” külalakkal● rajzolás akár paraméteresen is 2D-ben, 3D-ben

animációval● API a külső programokhoz kapcsoláshoz● string műveletek (keresés, stb.)● kiegészítő csomagok tudományterületekhez

2015-11-26 AP: MIMG02, 2015 37

Népszerű CAS programcsomagok

● muMATH● Reduce● Derive (alapja a muMATH)● Macsyma (jelenleg copyleft változata a Maxima

van folyamatos fejlesztés alatt)● a legnépszerűbb kereskedelmi rendszerek:

– Mathematica– Maple– MathCAD

● ingyenes alternatíva pl. a Sage (front-end több ingyenes CAS csomaghoz)

2015-11-26 AP: MIMG02, 2015 38

Derive(computer algebra system)

● a muMATH (Soft Warehouse) program utódja● a Soft Warehouse-t megvette a Texas Instruments● a Derive programot muLISP (Soft Warehouse)

nyelven írták● memóriaigénye kicsi

– DOS– Windows– TI számológépek

● Derive: 1988-2007– utolsó verzió: 6.1 (Windows)

● utóda a TI-Nspirehttp://ti-nspire.com/tools/images/screens/MR3.jpg

2015-11-26 AP: MIMG02, 2015 39

Derive

● Mathematical Methods CMPMA1021 Course Notes (Dr T.A.Etchells, 2004)

● http://www.cms.livjm.ac.uk/cmstetch/NOTES/MA1021%20Notes%20.pdf● Derive 6 Mathematics Software Reviews

● http://www.chartwellyorke.com/derive/derivereviews.html

2015-11-26 AP: MIMG02, 2015 40

Derive

● címsor● menü

● Command Toolbar● Algebra Window (View)

● Status Bar● Expression Entry Toolbar (entry line)

● Greek Symbol Toolbar, Math Symbol Toolbar

2015-11-26 AP: MIMG02, 2015 41

Derive

● munkalap (Worksheet)– kifejezések bevitele– parancsok alkalmazása– segítség: Tooltip és Stauts Bar

● beviteli mód aktiválása: Kifejezés bevitele – Kifejezés beírása (Enter)– Egyszerűsít– Beírás és egyszerűsítés (Ctrl+Enter)– Kiértékel– Beírás és kiértékelés (Shift+Enter)– Mindent töröl (Shift+Del)

2015-11-26 AP: MIMG02, 2015 42

Derive

● matematikai munkalapok● kifejezések bevitele, szimbólumgombok● diagramrajzoló ablak● 2D és 3D ábrázolás● aritmetika● algebra● analízis● vektorok, mátrixok,

halmazok● programozás

2015-11-26 AP: MIMG02, 2015 43

Laplace-transzformáció

2015-11-26 AP: MIMG02, 2015 44

FAKTOR(n, ossz) := PROG(ossz := n, LOOP(IF(n = 2, RETURN ossz), ossz := ossz·(n - 1), n := n - 1))

Programozás

2015-11-26 AP: MIMG02, 2015 45

Derive helyett...

● Maths - Alternative application for Derive 6– Hello everybody,

I have to use the proprietary math application Derive, I am searching for open source (FLOSS) alternatives for this program,Can somebody help me with this problem?Many thanks in advance.

● Re: Maths - Alternative application for Derive 6– Plotting--gnuplot– numerical work--octave– symbolic work--maxima– statistics--R

● There might be others, but those are the usual suggestions. Hope it helps.

http://ubuntuforums.org/showthread.php?t=570714

2015-11-26 AP: MIMG02, 2015 46

Derive helyett...

● Re: Maths - Alternative application for Derive 6● Pari, SAGE, and GAP are all useful for a variety of

tasks. Do you want to accomplish anything in particular?– SAGE: http://www.sagemath.org/– PARI: http://pari.math.u-bordeaux.fr/– GAP: http://www.gap-system.org/

● If you have more specific tasks you're interested in, there's likely more specific software.

http://ubuntuforums.org/showthread.php?t=570714

2015-11-26 AP: MIMG02, 2015 47

Maxima, a Computer Algebra System

● http://maxima.sourceforge.net/

2015-11-26 AP: MIMG02, 2015 48

Maxima, a Computer Algebra System

● az MIT-n (Massachusetts Institute of Technology) fejlesztett Macsyma rendszer 1982-es verzióján alapuló számítógépes algebra rendszer (computer algebra system)

● az összes POSIX (Portable Operating System Interface for uniX) platformon (pl. BSD, GNU/Linux, Mac OS X) és Microsoft Windows változatokon használható, sőt Androidon is

● szabad szoftver (free software), használatát a GNU General Public License (GNU GPL) szabályozza

2015-11-26 AP: MIMG02, 2015 49

Maxima, a Computer Algebra System

● ALGOL-szerű szintaktikájú, Lisp-szerű szemantikájú teljes programozási nyelvet tartalmaz

● Common Lisp nyelven íródott● programozási szinten elérhető és bővíthető, a

mögöttes Lisp meghívásával● rajzoláshoz a GNUplot rendszert használja● nagyszámú lebegőpontos és mátrix számítás

esetén más programozási nyelven (Fortran) hatékonyabban futtatható kód generálható

● többféle felület (parancssoros és grafikus)

2015-11-26 AP: MIMG02, 2015 50

Maxima, a Computer Algebra System

● szimbolikus és numerikus kifejezések kezelése● tetszőleges pontosságú aritmetika (a számábrázolás

pontosságának a számítógép memóriája szab határt)– nagy pontosságú numerikus eredmények a pontos törtek használata miatt– tetszőleges pontosságú egész számok, változó pontosságú lebegőpontos

számok● differenciálás és integrálás● Taylor sorok● Laplace-transzformáció● közönséges differenciálegyenletek● lineáris egyenletrendszerek● polinomok● halmazok, listák, vektorok, mátrixok, tenzorok● függvények és adatok kirajzolása 2 és 3 dimenzióban

2015-11-26 AP: MIMG02, 2015 51

Parancssoros Maxima

2015-11-26 AP: MIMG02, 2015 52

Xmaxima GUI

2015-11-26 AP: MIMG02, 2015 53

wxMaxima GUI

● http://andrejv.github.com/wxmaxima/● http://andrejv.github.com/wxmaxima/help.html● http://andrejv.github.com/wxmaxima/tutorials/10minute.zip

2015-11-26 AP: MIMG02, 2015 54

http://andrejv.github.com/wxmaxima/screenshots.html

2015-11-26 AP: MIMG02, 2015 55

http://andrejv.github.com/wxmaxima/screenshots.html

2015-11-26 AP: MIMG02, 2015 56

http://andrejv.github.com/wxmaxima/screenshots.html

2015-11-26 AP: MIMG02, 2015 57

2015-11-26 AP: MIMG02, 2015 58

wxMaxima GUI

● grafikus felhasználói felület, alapja a wxWidgets● natív Windows, X11 és Mac OS X operációs

rendszereken● 2D formázott matematikai kijelző (saját matematikai

kijelző motor)● menürendszer, amelyen keresztül a legtöbb

Maxima utasítás elérhető● a legtöbb funkció a gombpanelekről is elérhető● dialógusokkal adhatók meg az egynél több

argumentumot használó utasítások, így nem szükséges megjegyezni a pontos szintaktikát

2015-11-26 AP: MIMG02, 2015 59

wxMaxima GUI

● parancssor történet a bemeneti soroknál, utasítás kiegészítés az előző bemenet alapján

● zárójelezés● utasítások kiegészítése gépelés közben● sablonok Maxima függvényekhez és változókhoz● „élő” matematikai dokumentum létrehozása és

mentése: a szöveg keverhető matematikai kifejezésekkel és számításokkal

● beilleszthetők képek● egyszerű animációk● LaTeX export● több nyelven tud, köztük magyarul

2015-11-26 AP: MIMG02, 2015 60

(wx)Maxima alapok

● címkék (labels) – minden bemeneti (%i1) és kimeneti (%o2) sort egyedi

címke jelöl (a későbbi hivatkozás alapja)– nem ajánlott ezekkel a címkékkel összekeverhető

változóneveket (pl. %i1 vagy %o2) használni● ; (pontosvessző) és $ (dollárjel)

– a pontosvesszővel zárt sor kimenete megjelenik– a $ végűé nem

● % (százalékjel) és %th(n) (n-edik százalék)– az utolsó számítás (utolsó kimenet sor) eredményére

lehet hivatkozni a százalék (%) jellel– az n-el korábbi kimenet sor eredménye

2015-11-26 AP: MIMG02, 2015 61

wxMaxima alapok

● néhány gyakran használt parancs a menükben:– Maxima, Equations, Algebra, Calculus, Simplify, Plot, Numeric

● a '...' végződésű menüelemek dialógusablakot nyitnak, segítve a parancs pontos bevitelét

● a létrehozott parancsot a program beszúrja a vízszintes kurzor pozíciójába vagy az éppen aktív cella alá

● a parancs rögtön végrehajtódik (a kifejezés kiértékelődik)

● a Maxima > Panes menüből elérhető gomb-panelek hasonlóan működnek

2015-11-26 AP: MIMG02, 2015 62

(wx)Maxima alapok

● értékadás– : (kettőspont)

● változó deklarálása és értékadás: a:3;– := (kettőspont egyenlő)

● függvény definiálása: f(x):=x^2;● többváltozós: g(x,y):=cos(x^2+y^2);● helyettesítési érték számítása: f(2);

– =: (egyenlőségjel)● egyenlet definiálása: x=a-2*y;● változó is használható a kifejezésben, ennek értékét a

program behelyettesíti

2015-11-26 AP: MIMG02, 2015 63

(wx)Maxima alapok

● egyenlet megoldása: solve(x^2-3*x-10=0, x);– a solve első argumentuma az egyenlet (maga az

egyenlet, %on vagy %), amit vesszővel elválasztva követ az egyenletben szereplő független változó

– az egyenlet megoldásai listában ([elem1, elem2, elem3]) összefoglalva jelennek meg

– az eredmény(ek)et a további felhasználáshoz ki kell válogatni az eredmények listájából

– %[1]; (megoldott egyenlet elem1 eredményének felhasználása)

2015-11-26 AP: MIMG02, 2015 64

(wx)Maxima alapok

● egyenletrendszer megoldása– solve([x+3*y=3,2*x+5*y=5],[x,y]); – eredmény az összetartozó megoldáspárok

listájának listája

2015-11-26 AP: MIMG02, 2015 65

(wx)Maxima alapok

● függvényábrázolás– egyszerű függvényábrázolás:

plot2d(x^2-3*x-10, [x, -6, 10]); ● a plot2d első argumentuma a függvény, ezt vesszővel

elválasztva követi lista formában a változó, valamint az ábrázolás alsó és felső határa

– több függvény ábrázolás egy diagramban:plot2d([(3-x)/3,(5-2*x)/5],[x,-1,1]);

● az ábrázolandó függvények listáját követi az ábrázolás értelmezési tartománynak listája

-2 0

-1 0

0

1 0

2 0

3 0

4 0

5 0

6 0

-6 -4 -2 0 2 4 6 8 1 0

x^2-

3*x-

10

x

0 . 6

0 . 7

0 . 8

0 . 9

1

1 . 1

1 . 2

1 . 3

1 . 4

-1 -0 . 5 0 0 . 5 1

x

(3 -x )/3

(5 -2 *x )/5

2015-11-26 AP: MIMG02, 2015 66

(wx)Maxima alapok

● függvényábrázolás– egyszerű függvényábrázolás:

plot2d(x^2-3*x-10, [x, -6, 10]); ● GNUplot meghívása● az eredmény clipboardra

másolható és beilleszthető– ábrázolás a doku-

mentumon (.wxm file)belül:wxplot2d(x^2-3*x-10,[x, -6, 10]);

-2 0

-1 0

0

1 0

2 0

3 0

4 0

5 0

6 0

-6 -4 - 2 0 2 4 6 8 1 0

x^2-

3*x-

10

x

2015-11-26 AP: MIMG02, 2015 67

(wx)Maxima alapok

● egyenlet numerikus megoldása, ha nem sikerül meghatározni az analitikus megoldást– solve(x^7-4*x^6-5*x^5+4*x^3+x^2-9*x+2=0,x);

● eredménye az egyenlet kiírva– plot2d(x^7-4*x^6-5*x^5+4*x^3+x^2-9*x+2,[x,-10,10]);

● az egyenlet kirajzolása, a zérushelyek becslése– load(„newton”); (numerikus megoldó betöltése)– newton(x^7-4*x^6-5*x^5+4*x^3+x^2-9*x+2,-2);

(numerikus megoldás)● a newton utasítás első argumentuma a függvény, második a

becsült gyök

2015-11-26 AP: MIMG02, 2015 68

(wx)Maxima alapok

-1 . 4 e + 0 0 7

-1 . 2 e + 0 0 7

-1 e + 0 0 7

-8 e + 0 0 6

-6 e + 0 0 6

-4 e + 0 0 6

-2 e + 0 0 6

0

2 e + 0 0 6

4 e + 0 0 6

6 e + 0 0 6

-1 0 -5 0 5 1 0

x^7-

4*x^

6-5*

x^5+

4*x^

3+x^

2-9*

x+2

x

2015-11-26 AP: MIMG02, 2015 69

(wx)Maxima alapok

● többváltozós függvény ábrázolása– f(x,y):=cos(x^2+y^2); – plot3d(f(x,y),[x,-1,1],[y,-1,1]);

-1-0 . 5

0 0 . 5

1 -1

-0 . 5

0

0 . 5

1

-0 . 6

-0 . 4

-0 . 2

0

0 . 2

0 . 4

0 . 6

0 . 8

1

z

c o s ( y ^2 + x ^2 )

x

y

z

x

y

-0 . 6

-0 . 4

-0 . 2

0

0 . 2

0 . 4

0 . 6

0 . 8

1

z

c o s ( y ^2 + x ^2 )

-1 -0 . 5 0 0 . 5 1

-1

-0 . 5

0

0 . 5

1

z

2015-11-26 AP: MIMG02, 2015 70

(wx)Maxima alapok

● polinom gyöktényezőkre bontása (faktorizálása)– factor(x^2-4*x-32);

● polinom kifejtése– expand(%);

● trigonometrikus kifejezés egyszerűsítése– trigsimp(sin(x)^2+cos(x)^2);

● trigonometrikus kifejezés kifejtése– trigexpand(sin(2*x));

2015-11-26 AP: MIMG02, 2015 71

(wx)Maxima alapok

● racionális kifejezés egyszerűsítése– fullratsimp((x^2+4*x+4)/(x+2)+1/(2*x-3));

● racionális kifejezés kifejtése– ratexpand((x^2+4*x+4)/(x+5));

2015-11-26 AP: MIMG02, 2015 72

(wx)Maxima alapok

● számítás eredményének felhasználása másik számításban– solve(x^2-1=0, x); >>> eredmény: [x=-1, x=1])– %[2]; >>> eredmény: x=1– subst(%, y=5*x-2); >>> eredmény: y=3

2015-11-26 AP: MIMG02, 2015 73

(wx)Maxima alapok

● lineáris egyenlet(rendszer)ek megoldása– linsolve( [3*x+4*y=7, 2*x+4*y=13], [x,y]);– eq1: x^2 + 3*x*y + y^2 = 0;– eq2: 3*x + y = 1;– solve([eq1, eq2]);

2015-11-26 AP: MIMG02, 2015 74

(wx)Maxima alapok

● mátrixok– A: matrix([1,2],[3,4]);– B: matrix([2,2],[2,2]);– A.B;– h[i,j]:=1/(i+j);– C: genmatrix(h,3,3);– determinant(C);

2015-11-26 AP: MIMG02, 2015 75

(wx)Maxima alapok

● mátrixok– D: matrix([2,3],[5,6]);– echelon(D);– invert(D);– eigenvalues(D);– eigenvectors(D);

2015-11-26 AP: MIMG02, 2015 76

(wx)Maxima alapok

● függvény határértékének számítása– limit(sin(x)/x,x,0);

● jobboldali határérték számítása (baloldali határértéknél plus helyett minus szerepel)– limit(tan(x),x,%pi/2,plus);

● deriválás– diff(c*x^2-sin(d*x),x);

● magasabb derivált számítása– diff(x^4,x,3);

2015-11-26 AP: MIMG02, 2015 77

(wx)Maxima alapok

● határozatlan integrál meghatározása: első paraméter a függvény, második a független változó– integrate(sin(4*x-3),x);

● határozott integrál számítása: első paraméter a függvény, második a független változó, harmadik az integrálás alsó határa, negyedik a felső határ– integrate(4*sin(x),x,0,3*%pi/2);

2015-11-26 AP: MIMG02, 2015 78

(wx)Maxima alapok

● paraméter előjelére rákérdez– integrate(1/(x^2+a), x);

● paraméter előjelének előzetes beállítása (t.f.h.)– assume(a>0)$– integrate(1/(x^2+a), x);– forget(a>0)$

2015-11-26 AP: MIMG02, 2015 79

(wx)Maxima alapok

● numerikus integrálás, akkor használható, ha a program nem tud zárt alakú integrálfüggvényt meghatározni– romberg(sin(sin(x)),x,0,1);

2015-11-26 AP: MIMG02, 2015 80

(wx)Maxima alapok

● sor vagy sorozat összege– amennyiben a simpsum változó értéke igaz, a

numerikus eredmény jelenik meg– a sum

első paramétere a függvény, második a független változó, harmadik az összegzés alsó,negyedik a felső határa

– simpsum:true;– sum(1/(n^2),n,1,inf);

● sor vagy sorozat szorzata– product(1/(n^2),n,1,5);

2015-11-26 AP: MIMG02, 2015 81

(wx)Maxima alapok

● függvény közelítése Taylor-sorral, a taylor() utasítás első paramétere a függvény, második a független változó, harmadik paramétere a helyettesítési érték, ami körül történik a sorfejtés, a negyedik paraméter a közelítő polinom fokszáma– taylor(exp(x),x,0,5);

2015-11-26 AP: MIMG02, 2015 82

(wx)Maxima alapok

● a sorfejtés eredményének további felhasználásához a trunc() használandó

-2 0

0

2 0

4 0

6 0

8 0

1 0 0

1 2 0

1 4 0

1 6 0

-4 -2 0 2 4

x

1 + x + x ^2 /2 + x ^3 /6 + x ^4 /2 4 + x ^5 /1 2 0

% e ^x

2015-11-26 AP: MIMG02, 2015 83

(wx)Maxima alapok

● közönséges differenciálegyenlet megoldása– depends(y,t);– assume(omega > 0);– ode2( 'diff(y, t, 2) + omega^2 * y = 0, y, t );– ic2(%, t = 0, y = A0, 'diff(y,t) = 0 );– forget(omega >0)$

2015-11-26 AP: MIMG02, 2015 84

(wx)Maxima alapok

● programozás– ciklusok

● for a:-3 thru 26 step 7 do ldisplay(a);● s:0; for i:1 while i<=10 do s:s+i; done; s;

2015-11-26 AP: MIMG02, 2015 85

(wx)Maxima alapok

● programozás– Fibonacci számok

● fib[0]:0; fib[1]:1; fib[n]:=fib[n-1]+fib[n-2];

2015-11-26 AP: MIMG02, 2015 86

(wx)Maxima alapok

● Laplace-transzformáció– laplace(3*(1-%e^(-t/10)),t,s);

● inverz Laplace-transzformáció– ilt(1/s*3/(1+10*s),s,t);– ilt(1/(s^3+2*s^2+3*s+1),s,t); Hogyan oldható meg???

2015-11-26 AP: MIMG02, 2015 87

Maxima, a Computer Algebra System

● a Maxima saját programozási nyelvén írt .mac (batch) file-okkal lehet a programot kiegészíteni

– C:\Program Files\Maxima-verziószám\share\maxima\verziószám\share\contrib

● a Maxima Lisp nyelven íródott, ez a kód is hozzáférhető

– C:\Program Files\Maxima-verziószám\share\maxima\verziószám\share\src\*.lisp

● a komoly munkához javasolt a Maxima programozási nyelv használata

● a Lisp haladók számára ajánlott● vannak esetek, amikor mindkét nyelvre szükség

lehet a probléma megoldásához

2015-11-26 AP: MIMG02, 2015 88

Maxima, a Computer Algebra System

● a Maxima programozását bemutató anyag:● http://maxima.sourceforge.net/docs/tutorial/en/gaert

ner-tutorial-revision/Contents.htm

2015-11-26 AP: MIMG02, 2015 89

Maxima, a Computer Algebra System

● COntrol engineering with MAxima– Regelungstechnik mit Maxima– Autor: DI Dr. Wilhelm Haager, HTL St. Pölten, Abt. Elektrotechnik– http://www.austromath.at/daten/maxima/– http://www.austromath.at/daten/maxima/zusatz/coma.htm

2015-11-26 AP: MIMG02, 2015 90

COntrol engineering with MAxima

● a COMA csomag “programja” a coma.mac file● a coma.mac file elhelyezése:

– C:\Program Files\Maxima-verziószám\share\maxima\verziószám\share\contrib

● Mintapéldák, német és angol leírás

2015-11-26 AP: MIMG02, 2015 91

COntrol engineering with MAxima

● alapvető rendszervizsgálati módszerek– idő-, – frekvencia és – Laplace-operátoros tartományban

● szabályozó tervezés● állapottér módszerek (fejlesztés alatt)● néhány kiemelt téma:

– ...

2015-11-26 AP: MIMG02, 2015 92

COntrol engineering with MAxima

– tetszőleges fokszámú átviteli függvény inverz Laplace-transzformációja

– átmeneti függvény (ugrásválasz, step response)– Bode diagram és helygörbe (Nyquist diagram)– pólusok, zérusok, gyökhelygörbe (root locus plot)– stabilitásvizsgálat: stabilitás határa, Hurwitz kritérium,

stabil régiók a paramétersíkon, fázis- és erősítési tartalék

– optimalizálás és szabályozótervezés (ISE (integral of squared error) kritérium), optimális erősítés

– állapottér modell átalakítása átviteli függvénnyé, kanonikus alakok, irányíthatóság, megfigyelhetőség

2015-11-26 AP: MIMG02, 2015 93

COntrol engineering with MAxima

2015-11-26 AP: MIMG02, 2015 94

COntrol engineering with MAxima

● inverz Laplace-transzformáció– ilt(1/(s^3+2*s^2+3*s+1),s,t); Hogyan oldható meg???– Numerikusan!

2015-11-26 AP: MIMG02, 2015 95

COntrol engineering with MAxima

● másodrendű rendszerek (ld. Rezgéstan, Elektrotechnika alapjai, Mechatronika I-II., ...)

2015-11-26 AP: MIMG02, 2015 96

COntrol engineering with MAxima

● felnyitott és zárt szabályozási körök (ld. Irányítástechnika, Mechatronika I-II., ...)

2015-11-26 AP: MIMG02, 2015 97

Numerikus analízis szoftverek

2015-11-26 AP: MIMG02, 2015 98

Numerikus analízis szoftvermegoldások

● a XX. század végétől a legtöbb algoritmust igen sok programozási nyelven implementálták

● Netlib repository (http://www.netlib.org/)– többféle rutin gyűjtemény numerikus problémák

megoldására– többségük Fortran és C nyelvű

● kereskedelmi termékek– IMSL (International Mathematics and Statistics Library)– NAG (Numerical Algorithms Group)

● ingyen alternatíva– GSL – GNU Scientific Library

2015-11-26 AP: MIMG02, 2015 99

Netlib

● karbantartók– AT&T– Bell Laboratories– University of Tennessee– Oak Ridge National Laboratory

● sok önálló program és könyvtár● a kód legnagyobb részét Fortran nyelven írták● a kód jogi helyzete nem teljesen egyértelmű, a

programok egy része public domain● ugyanakkor semmilyen licensz vagy felhasználási

feltétel nem szerepel sok programban

2015-11-26 AP: MIMG02, 2015 100

Egyéb csomagok

● BLAS (Basic Linear Algebra Subprograms)– vektor, mátrix-vektor és mátrix-mátrix műveletek

● EISPACK– sajátértékek és sajátvektorok numerikus számítása

● LAPACK (Linear Algebra PACKage)● LINPACK

– a LAPACK elődje● MINPACK

– nemlineáris egyenletrendszerek megoldása● QUADPACK

– egyváltozós függvények numerikus integrálása

2015-11-26 AP: MIMG02, 2015 101

GSL – GNU Scientific Library● “It is free software under the GNU General Public License.”● 1000+ függvény C és C++ nyelven

2015-11-26 AP: MIMG02, 2015 102

GSL – GNU Scientific Library

● Complex Numbers, Roots of Polynomials● Special Functions, Vectors and Matrices● Permutations, Sorting● BLAS Support, Linear Algebra● Eigensystems, Fast Fourier Transforms● Quadrature, Random Numbers● Quasi-Random Sequences, Random Distributions● Statistics, Histograms● N-Tuples, Monte Carlo Integration● Simulated Annealing, Differential Equations● Interpolation, Numerical Differentiation● Chebyshev Approximation, Series Acceleration● Discrete Hankel Transforms, Root-Finding● Minimization, Least-Squares Fitting● Physical Constants, IEEE Floating-Point● Discrete Wavelet Transforms, Basis splines

2015-11-26 AP: MIMG02, 2015 103

Numerikus analízis szoftvermegoldások

● néhány népszerű numerikus számítási alkalmazás● MATLAB, S-PLUS, LabVIEW, IDL (Interactive Data Language)

● ingyenes és nyílt forrású alternatívák● FreeMat, Scilab, GNU Octave, IT++ (a C++ library), R és

bizonyos Python változatok● eltérő teljesítményűek, általában gyorsak a vektor- és

mátrixműveletek, a skalár ciklusok sebessége nagyságrendekkel eltérhet

● sok CAS szintén hasznosítja a tetszőleges pontosságú aritmetikát a pontosabb eredmények eléréséhez

● táblázatkezelő programok egyszerű numerikus analízis feladatok megoldására

2015-11-26 AP: MIMG02, 2015 104

MathWorks: MATLAB(matrix laboratory)

● numerikus számítások elvégzésére alkalmas környezet és negyedik generációs programozási nyelv

● mátrix műveletek, függvények és adatok ábrázolása, algoritmusok implementálása, felhasználói felületek kialakítása, kapcsolat más nyelven (C, C++, Java, Fortran, …) írt programokkal

● MuPAD szimbolikus motor● Simulink grafikus szimulációhoz idő- és operátoros

tartományban● Model-Based Design dinamikus és beágyazott

rendszerekhez● rengeteg kiegészítő toolbox

2015-11-26 AP: MIMG02, 2015 105

MATLAB programozás

● MATLAB nyelv, M-code vagy M● dinamikusan típusos nyelv, a változókat

típusdeklaráció nélkül is lehet használni, kivéve ha szimbolikus objektumok

● Command Window: interpretált végrehajtás● MATLAB Editor: többsoros kódhoz (script), saját

függvény (function) írásához● objektum-orientált programozás (classes,

inheritance, virtual dispatch, packages, pass-by-value semantics, and pass-by-reference semantics)

2015-11-26 AP: MIMG02, 2015 106

MATLAB programozás

● értékeadás egyenlőségjellel (=)● tömböket ciklus használata nélkül is fel lehet tölteni

(mettől:mennyivel:meddig)● a tömbök és mátrixok indexelése 1-től kezdődik (a

legtöbb programozási nyelvben 0-tól)– mátrixok megadása: az elemek felsorolásával,

szóközzel vagy veszővel elválasztva, a lista szögletes zárójelek ([]) között, a pontosvessző jelzi az új sort, kerek zárójelekkel al-mátrixok is megjeleníthetők

● a pontosvesszővel (;) befejezett parancs eredménye nem kerül kiíratásra

2015-11-26 AP: MIMG02, 2015 107

MATLABgrafika

http://hu.wikipedia.org/wiki/MATLAB

2015-11-26 AP: MIMG02, 2015 108

MATLAB – Simulink

http://upload.wikimedia.org/wikipedia/en/thumb/e/ed/MATLAB_Simulink_screenshot_showing_thermostat_demo_simulation.png/772px-MATLAB_Simulink_screenshot_showing_thermostat_demo_simulation.png

2015-11-26 AP: MIMG02, 2015 109

MATLAB – Simulink

http://www.sccs.swarthmore.edu/users/06/adem/engin/e12/finale/images/simulink.gif

2015-11-26 AP: MIMG02, 2015 110

Versenytársak, alternatívák

● kereskedelmi– Mathematica– Maple– IDL– Metlynx

● free, open source– GNU Octave– FreeMat– Scilab– Euler Math Toolbox

(+Maxima)– WinPython, a portable scientific

Python distribution for Windows(32&64bit)

● tömb alapegységű nyelvek– APL– J– Fortran 95 és 2003– S (S-PLUS és R)

● könyvtárak– Itpp (C++)– Perl Data Language– SciPy, NumPy és

Matplotlib (Python)

2015-11-26 AP: MIMG02, 2015 111

WinPython @ https://winpython.github.io/

2015-11-26 AP: MIMG02, 2015 112

GNU Octave

● http://www.gnu.org/software/octave/● magasszintű strukturált és interpretált

programozási nyelv numerikus számításokhoz (parancssoros és batch-jellegű végrehajtás)

● az Octave program script, függvényhívások sorozata

● mátrixalapú, MATLAB-hoz hasonló szintaktika● nem objektum-orientált, de sokféle adatstruktúrát

támogat● sok kiegészítő csomag és könyvtár

2015-11-26 AP: MIMG02, 2015 113

2015-11-26 AP: MIMG02, 2015 114

2015-11-26 AP: MIMG02, 2015 115

2015-11-26 AP: MIMG02, 2015 116

2015-11-26 AP: MIMG02, 2015 117

Euler Math Toolbox

● http://euler.rene-grothmann.de/● GNU general public license (GPL)● Euler Matrix Language● könnyen hordozhatóvá tehető CAS jellegű

alkalmazás (Euler notebook)– “Euler Math Toolbox is a system consisting of the

numerical kernel Euler and the computer algebra program Maxima. The numerical part, the GUI, and the communication with Maxima has been developed by R. Grothmann from the University of Eichstätt, Germany. Maxima is a mature open source program.”

2015-11-26 AP: MIMG02, 2015 118

MaximaLaTeXPythonTinyCPovray

2015-11-26 AP: MIMG02, 2015 119

2015-11-26 AP: MIMG02, 2015 120

2015-11-26 AP: MIMG02, 2015 121

2015-11-26 AP: MIMG02, 2015 122

Scilab

● http://www.scilab.org/● GPL-kompatibilis CeCILL licensz● nyílt forráskódú, cross-platform numerikus

számítási programcsomag és magasszintű, numerikus orientációjú programozási nyelv– interpretált programozási környezet, az alapvető

adattípus a mátrix– rengeteg toolbox– LaTeX engine

● a hasonló szintaktikájú MATLAB kód konvertálható

2015-11-26 AP: MIMG02, 2015 123

Scilab alkalmazási területek

● jelfeldolgozás, statisztikai elemzések, áramlástani szimulációk, numerikus optimálás, ...

● explicit és implicit dinamikai rendszerek modellezése és szimulációja– Scicos alapú Xcos

free csomag– folytonos és diszkrét

részrendszerek– hasonlít a Simulink

környezethez

2015-11-26 AP: MIMG02, 2015 124

Scilab

2015-11-26 AP: MIMG02, 2015 125

Scilab

2015-11-26 AP: MIMG02, 2015 126

Xcos: a Scilab Simulink-je

2015-11-26 AP: MIMG02, 2015 127

Scilab-LabVIEW Gateway

https://www.scilab.org/scilab/interoperability/connection_applications/labviewhttp://www.ni.com/white-paper/5597/en/

Connecting LabVIEW with Scilab…and getting Scilab’s power through LabVIEW

2015-11-26 AP: MIMG02, 2015 128

Scilab anyagok

● Scilab Tutorials– http://www.openeering.com/scilab_tutorials

● Scilab Control Engineering Basics– http://scilab.ninja/study-modules/scilab-control-

engineering-basics/● ...

2015-11-26 AP: MIMG02, 2015 129

RTSX (Robotic Tools for Scilab/Xcos)

exec('startup_rtsx.sce',-1);rprdemo;

2015-11-26 AP: MIMG02, 2015 130

Scilab anyagok

● Scilab for very Beginners– https://www.scilab.org/

● Scilab Tutorials– http://www.openeering.com/scilab_tutorials

● Scilab Control Engineering Basics– http://scilab.ninja/study-modules/scilab-control-

engineering-basics/● ...

2015-11-26 AP: MIMG02, 2015 131

Scilab konzol

● Scilab Console– parancsok kevéssé felhasználóbarát begépelése és

végrehajtása● a Scilab parancssor (command line) jele: -->● változó deklarálás (értékadás), kifejezések, script-

ek és függvényhívások írhatók be(a scriptek és függvények ASCII text file-ok)

● parancstörténet: ↑ és ↓● értékadás:

– változónév = érték– záró ; elnyomja a kiírást

2015-11-26 AP: MIMG02, 2015 132

Scilab GUI: File Browser, Console, Variable Browser, menü, gombsor

2015-11-26 AP: MIMG02, 2015 133

Scilab GUI elemei

● Launch SciNotes gomb– beépített kódszerkesztő

● Clear Console

2015-11-26 AP: MIMG02, 2015 134

Scilab GUI elemei

● Module manager - ATOMS– beépülő modulok

● Xcos● Preferences

● Demonstrations

2015-11-26 AP: MIMG02, 2015 135

Segítség

● Scilab Help Browser– help parancs vagy ? menüben Scilab Help (F1) vagy

● a help function_name parancs a function_name függvény help oldalát nyitja meg

● on-line dokumentáció– http://www.scilab.org/product/man/– Scilab Help, Scilab Wiki– Matlab® / Scilab Dictionary,– Scilab Tutorials, – Videos, Books

2015-11-26 AP: MIMG02, 2015 136

Változók

● változónév = értékvagy utasítás

● ; elnyomja a kiírást● kis- és nagybetű

különbözik● számítási művelet

eredménye azans átmeneti változóba kerül

-->a = 2 a = 2. -->A = 12; -->b = a + A b = 14.

-->(12*4)-32/8 ans = 44.

2015-11-26 AP: MIMG02, 2015 137

Workspace(a változók és függvények helye)

● parancsok– who– who_user– clear– load– save– diary– browsevar()

● Variable Browser– saját menü (File,

Filter, ?)– saját gombok (Refresh

the Variable, Modify, Delete)

– rendezés név, érték, (adat)típus és láthatóság szerint

– jobb kattintás a változóra: lehetőségek

2015-11-26 AP: MIMG02, 2015 138

Változók

● foglalt nevek– %i a képzetes egység– %pi, %e– %eps számolási

pontosság– %inf végtelen– %nan “nem szám”– %t és %f logikai értékek– %s és %z folytonos és

mintavételes átviteli függvény polinomok változói

● változó típusa– typeof(változónév)

● típusok– constant, polynomial,

function, handle, string, boolean, list, rational, state-space, sparse, boolean sparse

2015-11-26 AP: MIMG02, 2015 139

Minden mátrix (a vektor és a skalár is)

-->A=[1 2 3; 4 5 6; 7 8 9] A = 1. 2. 3. 4. 5. 6. 7. 8. 9. -->size(A) ans = 3. 3.

-->a=[10, 20, 30] a = 10. 20. 30. -->size(a) ans = 1. 3.

-->d=[124] d = 124. -->size(d) ans = 1. 1.

-->b=[100; 200; 300] b = 100. 200. 300. -->size(b) ans = 3. 1.

-->e=25 e = 25. -->size(e) ans = 1. 1.

● mátrix és vektor elemei szögletes zárójelek között

● soron belüli elválasztás szóközzel vagy vesszővel,

● sorok elválasztása pontosvesszővel

2015-11-26 AP: MIMG02, 2015 140

Inkrementális vektorok-->x=1:5 x = 1. 2. 3. 4. 5. -->t=0:0.25:2.1 t = column 1 to 5 0. 0.25 0.5 0.75 1. column 6 to 9 1.25 1.5 1.75 2.

-->kezdete=0, vege=10, pontok_szama=5,x5pont=linspace(kezdete,vege,pontok_szama) kezdete = 0. vege = 10. pontok_szama = 5. x5pont = 0. 2.5 5. 7.5 10.

● egyesével: kezdete:vége● tetszőleges lépéssel:

kezdete:lépés nagysága:vége

● lineáris felosztás: linspace● 10-es alapú logaritmikus

felosztás: logspace

2015-11-26 AP: MIMG02, 2015 141

Mátrix, vektor elemei

-->A(:,3) ans = 3. 6. 9. -->A([1 3],2) ans = 2. 8.

-->A(1,3) ans = 3. -->A(2,2:3) ans = 5. 6. -->A(1:2,2) ans = 2. 5.

-->A=[1 2 3; 4 5 6; 7 8 9] A = 1. 2. 3. 4. 5. 6. 7. 8. 9.

● mátrix(sor,oszlop)● mátrix(sorok,oszlopok)● összes elem jele :● összefüggő részsorozat pl. 2:3

2015-11-26 AP: MIMG02, 2015 142

Műveletek mátrixokkal

● alapműveletek– összeadás (+), mátrix-szorzás (*), transzponálás ('),

invertálás (inv(A)), ...– a mátrix egyes elemein is értelmezett műveletek (pl. .*)

● további műveletek: Scilab Help >> Linear Algebra

-->a=[1 2 3] a = 1. 2. 3. -->b=[4;5;6] b = 4. 5. 6.

-->ab=a*b ab = 32. -->ba=b*a ba = 4. 8. 12. 5. 10. 15. 6. 12. 18.

-->baT=ba' baT = 4. 5. 6. 8. 10. 12. 12. 15. 18. -->abElemenkent=a.*b' abElemenkent = 4. 10. 18.

2015-11-26 AP: MIMG02, 2015 143

Matlab-Scilab operátorok (kivonat)

● Scilab Help >> Matlab to Scilab Conversion Tips > Matlab-Scilab equivalents > Operators

– + (Matlab operator) — plusz– - (Matlab operator) — mínusz– ' (Matlab operator) — transzponálás– .' (Matlab operator) — transzponálás elemenként– \ (Matlab operator) — bal osztás– .\ (Matlab operator) — bal osztás elemenként– * (Matlab operator) — szorzás– .* (Matlab operator) — szorzás elemenként– ^ (Matlab operator) — hatványozás– .^ (Matlab operator) — hatványozás elemenként– / (Matlab operator) — jobb osztás– ./ (Matlab operator) — jobb osztás elemenként

2015-11-26 AP: MIMG02, 2015 144

Polinomok felírása

● felírás a független változóval és együtthatókkal közvetlen képletként– pl. átviteli függvénynél a beépített %s független

változóval

-->nevezo=2*%s^2+0.5*%s+1 nevezo = 2 1 + 0.5s + 2s

-->roots(nevezo) ans = - 0.125 + 0.6959705i - 0.125 - 0.6959705i

● a polinom gyökeit a roots(polinom) számolja

2015-11-26 AP: MIMG02, 2015 145

Polinomok felírása

● a poly(vektor,”szimbolikus változónév”,”flag”) függvénnyel– a “flag” alapértelmezett gyökök (”roots” vagy ”r”)

együtthatókkal (”coeff” vagy ”c”)

-->s=poly(0,"s") s = s -->poly([1 2 3], "s", "coeff") ans = 2 1 + 2s + 3s

-->gyokok=roots(ans) gyokok = - 0.3333333 + 0.4714045i - 0.3333333 - 0.4714045i -->poly(gyokok, "s", "roots") ans = 2 0.3333333 + 0.6666667s + s

● átviteli függvény felírásához az “s” szimbolikus változót így adjuk meg vagy a beépített %s-t használjuk (akár s=%s paranccsal s-ként)

2015-11-26 AP: MIMG02, 2015 146

Polinomok felírása

● elemi polinomokonvégzett műveletekkel -->s=poly(0,"s")

s = s -->nevezo1=poly([1 5],"s","coeff") nevezo1 = 1 + 5s -->nevezo2=poly([1 10],"s","coeff") nevezo2 = 1 + 10s -->nevezo1*nevezo2 ans = 2 1 + 15s + 50s

-->nevezo=(1+5*%s)*(1+10*%s) nevezo = 2 1 + 15s + 50s

-->coeff(nevezo) ans = 1. 15. 50.

● a coeff(polinom) az együtthatókat adja vissza

2015-11-26 AP: MIMG02, 2015 147

Racionális kifejezések

● két polinom osztásával racionális kifejezést kapunk– így adhatunk meg például átviteli függvényt

-->s=poly(0,"s") s = s -->G = 100*(1+s)/(1+0.01*s) G = 100 + 100s ---------- 1 + 0.01s

-->bode(G) !--error 96 time domain of argument #1 is not defined.

-->G = syslin('c', G) G = 100 + 100s ---------- 1 + 0.01s

-->bode(G,”rad”)

● átviteli függvény előállításához a racionális kifejezést folytonos idejű lineáris rendszerként kell definiálni

● a Bode-diagram vízszintes tengelyén rad/s legyen Hz helyett

2015-11-26 AP: MIMG02, 2015 148

Átviteli függvény-->s=poly(0,'s'); -->G1=syslin("c", 10*(1+1/(5*s))) G1 = 10 + 50s -------- 5s

-->G0=G1*G2 G0 = 2 - s -->bode([G1;G2;G0],"rad")

-->s=poly(0,'s');

-->szamlalo=1 szamlalo = 1. -->nevezo=poly([1 5],"s","coeff") nevezo = 1 + 5s -->G2=syslin("c", szamlalo, nevezo) G2 = 1 ----- 1 + 5s

● G1, G2 és G0 Bode-diagramja egy ábrán

● G0 G1 és G2 és soros eredője (szorzata)

2015-11-26 AP: MIMG02, 2015 149

Időtartománybeli szimuláció

● csim parancs folytonos idejű lineáris rendszerek időtartománybeli vizsgálatához

● [y [,x]]=csim(u,t,sl,[x0 [,tol]])– u: function, list or string (control)– t: real vector specifying times with, t(1) is the initial time (x0=x(t(1)))– sl: syslin list (SIMO linear system) in continuous time– y: a matrix such that y=[y(t(i)], i=1,..,n– x: a matrix such that x=[x(t(i)], i=1,..,n– tol: a 2 vector [atol rtol] defining absolute and relative tolerances for

ode solver (see ode)

clf()//multiple plotx=[0:0.1:2*%pi]'; // x és y koordináták oszlopvektorbanplot(x,[sin(x) sin(2*x) sin(3*x)])

2015-11-26 AP: MIMG02, 2015 150

Diagramok, rajzolás

● a diagramok sorszámozott ablakban jelennek meg

● új grafikus ablak létrehozása– xset('window', sorszám), pl. xset('window', 12)

● Scilab Help >> Graphics ● grafikus ablak (figure)

– tartalmának törlése● clf(sorszám)

– aktív grafikus ablak felosztása m*n-es mátrixnak megfelelő számú részdiagramra és a p. kiválasztása (az (i,j) pozíciójú részhez, ahol p=(i-1)*n+j

● subplot(m,n,p) vagy subplot(mnp)

2015-11-26 AP: MIMG02, 2015 151

Diagramok, rajzolás

● a grafikus ablaknak mint szülőnek több “leszármazottja” van, pl. részdiagramjai (és azok “leszármazottjai”, pl. a tengelyek), ezek rendkívül rugalmasan paraméterezhetők

● 2D-s diagram: Scilab Help >> Graphics > 2d_plot– (x,y) pontpárok ábrázolása:

● plot2d helyett hasznáható a Matlab szintaktikát jobban követő plot parancs

● 3D-s diagram: Scilab Help >> Graphics > 3d_plot● ábrák további hasznosítása

– Scilab Help >> Graphics : exporting and printing

2015-11-26 AP: MIMG02, 2015 152

Szakasz és zárt szabályozási kör

● átmeneti függvény ábrázolás● szakasz: G2=1/(1+5*s)● szabályozó: G1=10*(1+1/(5*s))● szimulációs idő: t=0:0.1:30

-->s=poly(0,'s');-->G1=syslin('c', 10*(1+1/(5*s)));-->G2=syslin("c", 1, poly([1 5], 's', 'coeff'));-->G0=G1*G2;-->t=0:0.1:30;-->plot2d([t',t'],[csim('step',t,G2)',csim('step',t,G0/(1+G0))'])

● Scilab Script (.sce) file az utasítások sorozatával

2015-11-26 AP: MIMG02, 2015 153

Példák csim eredményének ábrázolására

● plot2d-vel– t=0:0.1:30;– plot2d([t',t'],[csim('step',t,G2)',csim('step',t,G0/(1+G0))'])

● plot-tal– t=(0:0.1:30)';– [y1,x1]=csim('step',t,G2); – [y2,x2]=csim('step',t,G0/(1+G0));– plot(t,[y1',y2'])– VAGY– plot([x1,y1],[x2,y2])

size(t) ans = 301. 1.

-->size(y2) ans = 1. 301.

2015-11-26 AP: MIMG02, 2015 154

Scilab script

-->exec('P-T1_es_PI.sce')

● SciNotes

2015-11-26 AP: MIMG02, 2015 155

Scilab – Xcos

● szöveges● idő- és

frekvenciatartomány● alapvetően lineáris

rendszerek

● blokkorientált grafikus● időtartomány● bizonyos

nemlinearitások is

2015-11-26 AP: MIMG02, 2015 156

Xcos modell

● Sources: STEP_FUNCTION, CLOCK_c

● Continuous time systems: CLR● Sinks: CSCOPE● Commonly Used Blocks: BIGSOM_f,

MUX, TEXT_f

2015-11-26 AP: MIMG02, 2015 157

Saját függvények

● a függvény felépítésefunction [y1 ,... , ym] = fuggveny(x1,... , xn)utasításokendfunction● több függvény is tárolható egyetlen .sci text file-ban● a getf(’fuggveny_file.sci’) paranccsal betöltött

függvényeket használhatjuk, ezek a teljes workspace-t “látják”

● a változók betöltése, mentése és törlése a függvényekkel is ugyanazt csinálja

2015-11-26 AP: MIMG02, 2015 158

Adatok mentése és betöltése

● a workspace összes vagy kiválasztott adatát HDF5 formátumú (SOD, Scilab Open Data) bináris file-ba menthetjük– save(’adatfile.dat’)– save('a_es_b_adat.dat',a,b)– a formátum részletei: Scilab Help >> Files : Input/Output

functions > save format● és onnan visszatölthetjük

– load(’adatfile.dat’)– load('a_es_b_adat.dat','a','b')

● C és Fortran-szerű formázással mátrixokat szövegfile-ba írhatunk (write) és visszaolvashatunk (read)

2015-11-26 AP: MIMG02, 2015 159

Programozás

● jellegzetes programozási szerkezetek● for, end● while, end● if, then, else, end● select, case, else, end

● logikai operátorok● & és, | vagy, ~ nem

● logikai eredményű feltételek● == (egyenlő), ~= vagy <> (nem egyenlő), <, >, <=, >=

2015-11-26 AP: MIMG02, 2015 160

Szabályozástechnikai alkalmazások

● Rendszermodellek– bemenet-kimenet modellek– állapottér modellek

● Folytonos-folyamatos és szakaszos-szaggatott működés– folytonos idő (continuous time)– mintavételes (discrete time)

● Vizsgálati tartományok– időtartomány– frekvenciatartomány

2015-11-26 AP: MIMG02, 2015 161

Átviteli függvény (transfer function)

● racionális (typeof() értéke)– a folytonos idejű lineáris differenciálegyenletből

állíthatjuk elő (feltételek!, módszer!) – független változója s– számláló polinom (numerator, röviden num)– nevező polinom (denominator, röviden den) – definiálása a syslin('c',num,den) paranccsal

● a számláló és nevező polinom együtthatóit a poly függvény hívásakor növekvő hatvány szerint kell megadni

● Matlab-ban az együtthatók vektora s csökkenő hatványai szerint rendezett

– vagy közvetlenül syslin('c',b0*s/(a0+a1*s+a2*s^2)) jellegű paranccsal

2015-11-26 AP: MIMG02, 2015 162

Átviteli függvény (transfer function)

-->s=poly(0,"s");

-->num1=poly([1 0.05],"s","coeff") num1 = 1 + 0.05s -->den1=poly([1 10],"s","coeff") den1 = 1 + 10s -->G1=syslin('c',num1,den1) G1 = 1 + 0.05s --------- 1 + 10s -->typeof(G1) ans = rational

-->s=poly(0,"s");

-->G2=syslin('c',12/(1+40*s)) G2 = 12 ------ 1 + 40s -->typeof(G2) ans = rational

ALTERNATÍVÁK

2015-11-26 AP: MIMG02, 2015 163

Átviteli függvény (transfer function)

● számláló és nevező polinom– G1.num és G1.den

● zérusok (a számláló polinom gyökei) és pólusok (a nevező polinom gyökei)– roots(G1.num) és roots(G1.den)

● pólus-zérus térkép– plzr(G1) -->zerusok=roots(G1.num)

zerusok = - 20. -->polusok=roots(G1.den) polusok = - 0.1

-->G1.num ans = 1 + 0.05s -->G1.den ans = 1 + 10s

2015-11-26 AP: MIMG02, 2015 164

Állapottér modell (state space)

● több bemenetű, több kimenetű rendszerekre is ● A,B mátrix a főegyenletben, C és D a segédegyenletben

– definiálása a syslin('c',A,B,C,D) paranccsal

-->A=[0 1 0; 0 0 1; -1 -2 -3] A = 0. 1. 0. 0. 0. 1. - 1. - 2. - 3. -->B=[0; 0; 1] B = 0. 0. 1.

-->C=[1 0 0] C = 1. 0. 0. -->D=0 D = 0.

2015-11-26 AP: MIMG02, 2015 165

Állapottér modell (state space)

● több bemenetű, több kimenetű rendszerekre is ● A,B mátrix a főegyenletben, C és D a segédegyenletben

-->ss2=syslin('c',A,B,C,D) ss2 = ss2(1) (state-space system:)!lss A B C D X0 dt ! ss2(2) = A matrix = 0. 1. 0. 0. 0. 1. - 1. - 2. - 3. ss2(3) = B matrix = 0. 0. 1. ss2(4) = C matrix = 1. 0. 0.

ss2(5) = D matrix = 0. ss2(6) = X0 (initial state) = 0. 0. 0. ss2(7) = Time domain = c -->typeof(ss2) ans = state-space

2015-11-26 AP: MIMG02, 2015 166

Állapottér modell (state space)

● mátrixok az állapottér modellből– [A, B, C, D]=abcd(ss2)– A=ss2.A

● állapottér modell nyomtatása– ssprint(ss2)

-->ssprint(ss2) . | 0 1 0 | | 0 |x = | 0 0 1 |x + | 0 |u |-1 -2 -3 | | 1 | y = | 1 0 0 |x

2015-11-26 AP: MIMG02, 2015 167

tf ↔ ss

● Scilab Help >> CACSD (Computer Aided Control Systems Design) > Formal representations and conversions

-->A=[0 1; -0.125 -0.75];-->B=[0; 0; 0.125];-->C=[1 0 0];-->D=0;-->ss2=syslin('c',A,B,C,D);

-->G2=ss2tf(ss2) G2 = 0.125 ----------------- 2 0.125 + 0.75s + s

2015-11-26 AP: MIMG02, 2015 168

tf ↔ ss-->G1=syslin('c',1/(1+6*s+8*s^2)) G1 = 1 ----------- 2 1 + 6s + 8s

ss1(4) = C matrix = 0.7071068 0. ss1(5) = D matrix = 0. ss1(6) = X0 (initial state) = 0. 0. ss1(7) = Time domain = c

-->ss1=tf2ss(G1) ss1 = ss1(1) (state-space system:) !lss A B C D X0 dt ! ss1(2) = A matrix = 0. 0.5 - 0.25 - 0.75 ss1(3) = B matrix = 0. 0.3535534

2015-11-26 AP: MIMG02, 2015 169

Jellemző ábrák: Nyquist-diagram

● nyquist(G2,%f) (csak pozitív frekvenciákra)● nyquist(G2,strcat(['(',pol2str(G2.num),')/(',pol2str(G2.den),')']),%f) (az átviteli függvény a felirat)

2015-11-26 AP: MIMG02, 2015 170

Jellemző ábrák: Bode-diagram

● bode(G2,"rad") (a vízszintes tengelyen körfrekvencia, az alapértelmezett mennyiség Hz!)

● gainplot(G2) ● phaseplot(G2)

2015-11-26 AP: MIMG02, 2015 171

Frekvenciaátviteli függvény helyettesítési értékei

● horner(mibe,mit)helyettesítési érték számítás● phasemag a fázisszög [°] és az erősítés [dB]

->G=syslin('c',1/(1+0.2*%s)) G = 1 ------- 1 + 0.2s -->G_omega5 = horner(G, 5*%i) G_omega5 = 0.5 - 0.5i -->[phi,dB]=phasemag(G_omega5) dB = - 3.0103 phi = - 45.

2015-11-26 AP: MIMG02, 2015 172

Átmeneti függvény és súlyfüggvény

● csim: lineáris rendszer szimulációja, időtartománybeli válasz meghatározása

● [y [,x]]=csim(u,t,sl,[x0 [,tol]])– t=0:0.1:20;– [yStep]=csim('step', t, G2);– [yImpulse]=csim('impulse', t, G2);– plot(t,yStep);– plot(t,yStep,'b-'),xgrid(),xtitle('Átmeneti függvény','t','y');

– plot(t',[yStep;yImpulse]')– plot(t,yStep,'r-o',t,yImpulse,'b:x')

2015-11-26 AP: MIMG02, 2015 173

Átmeneti függvény és súlyfüggvényplot(t,yStep,'r-o',t,yImpulse,'b:x'),xgrid(),xtitle('Átmeneti függvény és súlyfüggvény','t','y')

2015-11-26 AP: MIMG02, 2015 174

Átmeneti függvény és súlyfüggvényplot2d(t,[yStep', yImpulse'],[1,2])e=gce();e.children(1).thickness=2;e.children(2).thickness=2;e.children(2).line_style=2;h1=captions(e.children,['átmeneti függvény';'súlyfüggvény'],'in_upper_left');xtitle('Átmeneti függvény és súlyfüggvény','t','y'); xgrid();

2015-11-26 AP: MIMG02, 2015 175

Szabályozási kör vizsgálata(cél az alapeszközök bemutatása)

● Scilab használati módjai● konzolos változat● GUI változat● Scilab-LabVIEW Gateway

● a LabVIEW grafikus környezetében használható Control Design and Simulation Module● a Scilab/Matlab szöveges részéhez hasonló “offline”

elemkészlete a menükben Control & Simulation >> Control Design alatt érhető el

2015-11-26 AP: MIMG02, 2015 176

Szabályozási kör vizsgálata(cél az alapeszközök bemutatása)

● szerepel a MathScript RT ● külön GUI-val a LabVIEW, Tools menü, MathScript

Window... kiválasztásával nyíló ablakban● és LabVIEW Block Diagram-on használható MathScript

Node formájában● az Xcos/Simulink grafikus rendszernek

megfeleltethető a LabVIEW Simulation elemkészlet● a Block Diagram oldalon menüben Control & Simulation

>> Simulation alatt érhető el

2015-11-26 AP: MIMG02, 2015 177

Matematikai modellek:szakasz (irányítandó folyamat)

szabályozóvisszacsatoló ágban lévő érzékelő

2015-11-26 AP: MIMG02, 2015 178

A példában szereplő rendszer

● átviteli függvények● soros kapcsolás: átviteli függvények szorzata● párhuzamos kapcsolás: átviteli függvények összege● negatív visszacsatolás: előrevezető ág eredője osztva

(1 + a felnyitott kör eredője)

2015-11-26 AP: MIMG02, 2015 179

Scilab: 11_EA_pelda.sce

2015-11-26 AP: MIMG02, 2015 180

Scilab: átviteli függvényeks=%s;G_szakasz=syslin('c',1/(1+5*s)^2)G_szabalyozo=syslin('c',100*(1+5*s)/(1+0.005*s))G_visszacsatolas=syslin('c',1,1)G_felnyitott=G_szabalyozo*G_szakasz*G_visszacsatolasW_zart=G_szabalyozo*G_szakasz/(1+G_felnyitott)

G_felnyitott = 4000 -------------- 2 40 + 200.2s + s W_zart = 4000 ---------------- 2 4040 + 200.2s + s

G_szakasz = 1 ------------- 2 1 + 10s + 25s

G_szabalyozo = 100 + 500s ---------- 1 + 0.005s

G_visszacsatolas = 1 - 1

2015-11-26 AP: MIMG02, 2015 181

xset('window',0)bode([G_szakasz; G_szabalyozo; G_felnyitott], ['szakasz','szabályozó','felnyitott kör'], "rad")

Scilab: Bode-diagram

2015-11-26 AP: MIMG02, 2015 182

xset('window',1)t_szakasz=0:0.1:40;y_szakasz=csim('step',t_szakasz,G_szakasz);subplot(211),plot2d(t_szakasz,y_szakasz)xgrid()xtitle('Szakasz átmeneti függvénye','t','y')

t_zart=0:0.01:0.3;y_zart=csim('step',t_zart,W_zart);subplot(212),plot2d(t_zart,y_zart)xgrid()xtitle('Zárt kör átmeneti függvénye','t','y')

Scilab: átmeneti függvények

2015-11-26 AP: MIMG02, 2015 183

Scilab: átmeneti függvények

2015-11-26 AP: MIMG02, 2015 184

Scilab: tartalékok

f [Hz]!!!

[fazistartalek,f_fazistartalek]=p_margin(G_felnyitott)[erositesi_tartalek,f_erositesi_tartalek]=g_margin(G_felnyitott)show_margins(G_felnyitott)

f_fazistartalek = 3.1672971 fazistartalek = 84.893367 f_erositesi_tartalek = [] erositesi_tartalek = Inf

2015-11-26 AP: MIMG02, 2015 185

Xcos

2015-11-26 AP: MIMG02, 2015 186

LabVIEW CD: 11_EA_pelda.vi

2015-11-26 AP: MIMG02, 2015 187

LabVIEW CD: 11_EA_pelda.vi

2015-11-26 AP: MIMG02, 2015 188

2015-11-26 AP: MIMG02, 2015 189

2015-11-26 AP: MIMG02, 2015 190

2015-11-26 AP: MIMG02, 2015 191

2015-11-26 AP: MIMG02, 2015 192

2015-11-26 AP: MIMG02, 2015 193

2015-11-26 AP: MIMG02, 2015 194

2015-11-26 AP: MIMG02, 2015 195

LabVIEW CD: átviteli függvény

2015-11-26 AP: MIMG02, 2015 196

Átviteli függvény előállítás “kézzel”

lehet mintavételes(diszkrét idejű)

2015-11-26 AP: MIMG02, 2015 197

Saját program LabVIEW CD elemekkel

2015-11-26 AP: MIMG02, 2015 198

Saját program LabVIEW CD elemekkel

2015-11-26 AP: MIMG02, 2015 199

Saját program LabVIEW CD elemekkel

2015-11-26 AP: MIMG02, 2015 200

Saját program LabVIEW CD elemekkel

2015-11-26 AP: MIMG02, 2015 201

LabVIEW MathScript Window

2015-11-26 AP: MIMG02, 2015 202

LabVIEW MathScript Window% számláló és nevező polinommal definiált átviteli függvény% CSÖKKENŐ s hatványok szerint kell megadni az együtthatókat, hasonlóan a Matlab-hoz!G_szakasz=tf([1],[25 10 1])

% az s független változós=tf('s') % Átviteli függvény definiálása racionális kifejezéskéntG_szabalyozo=100*(1+5*s)/(1+0.005*s)G_visszacsatolas=1

% Eredő átviteli függvények soros kapcsolással (series) és negatív visszacsatolással (feedback)G_eloremeno=series(G_szabalyozo,G_szakasz)G_felnyitott=series(G_eloremeno,G_visszacsatolas)W_zart=feedback(G_eloremeno,G_visszacsatolas)

2015-11-26 AP: MIMG02, 2015 203

% Külön ábrázolt Bode-diagramokfigure(1)bode([G_szakasz, G_szabalyozo, G_felnyitott])grid

2015-11-26 AP: MIMG02, 2015 204

% Együtt ábrázolt Bode-diagramokfigure(2)bode(G_szakasz, G_szabalyozo, G_felnyitott)grid

2015-11-26 AP: MIMG02, 2015 205

% Tartalékok ábrázolásafigure(3)margin(G_felnyitott)

% Tartalékok értéke[erositesi_tartalek, fazistartalek, omega_erositesi_tartalek, omega_fazistartalek]=margin(G_felnyitott)

erositesi_tartalek =

Inf

fazistartalek =

84.8934

omega_erositesi_tartalek =

NaN

omega_fazistartalek =

19.9007

2015-11-26 AP: MIMG02, 2015 206

% Szakasz átmeneti függvényefigure(4)step(G_szakasz)title('Szakasz átmeneti függvénye')grid

2015-11-26 AP: MIMG02, 2015 207

% Zárt kör átmeneti függvényefigure(5)step(W_zart)title('Zárt kör átmeneti függvénye')grid

2015-11-26 AP: MIMG02, 2015 208

LabVIEW MathScript Node

2015-11-26 AP: MIMG02, 2015 209

LabVIEW MathScript Node(Ctrl-C, Ctrl-V-vel bemásolt .m file)

2015-11-26 AP: MIMG02, 2015 210

LabVIEW MathScript Node számolásra

2015-11-26 AP: MIMG02, 2015 211

LabVIEW Control & Simulation Loop

2015-11-26 AP: MIMG02, 2015 212

LabVIEW Control & Simulation Loop

2015-11-26 AP: MIMG02, 2015 213

GNU Octave

G_szakasz=tf([1],[25 10 1])

s=tf('s')

G_szabalyozo=100*(1+5*s)/(1+0.005*s)

G_visszacsatolas=1

G_eloremeno=series(G_szabalyozo,G_szakasz)

G_felnyitott=series(G_eloremeno,G_visszacsatolas)

W_zart=feedback(G_eloremeno,G_visszacsatolas)

2015-11-26 AP: MIMG02, 2015 214

GNU Octavebode(G_szakasz, G_szabalyozo, G_felnyitott)

2015-11-26 AP: MIMG02, 2015 215

GNU Octaveoctave> margin(G_felnyitott)octave> [erositesi_tartalek, fazistartalek, omega_et, omega_ft] = margin(G_felnyitott)

erositesi_tartalek = Inffazistartalek = 84.893omega_et = NaNomega_ft = 19.901

2015-11-26 AP: MIMG02, 2015 216

GNU Octaveoctave> subplot(211)octave> step(G_szakasz)octave> subplot(212)octave> step(W_zart)