Bevezetés a MATLAB programba 1. Mi az a MATLAB? A MATLAB egy olyan matematikai programcsomag, amely mátrix átalakításokat használ a komplex numerikus számítások elvégzésére. A Mathematica és Maple programokkal ellentétben ez nem egy számítógépes algebrai rendszer, vagyis nem képes szimbólumokkal formálisan dolgozni, de ez is megoldható ha a Symbolic Math eszköztárat külön telepítjük a Mathworksból.
2. Néhány alapvető parancs 2.1 A demos parancs A MATLAB programcsomagba be van építve egy terjedelmes help csomag melyet úgy érhetünk el, hogy a parancsablakba a
demos parancsot begépeljük és megnyomjuk a [ gombot. Kis várakozás után megjelenik a help ablak, mely tartalmazza a következő opciókat: 'Contents', 'Index', 'Search', 'Demos' és 'Favorite'. Ha ismerjük a kívánt parancs nevét, könnyen kaphatunk segítséget róla, ha beírjuk a help szót és ezután a keresett parancs nevét, például
help sin SIN Sine. SIN(X) is the sine of the elements of X. A MATLAB a parancsok neveit mindig nagybetűvel írja ki, még akkor is ha mi kisbetűvel gépeltük be. Ez azért van mert a parancs ablak rögtön felismeri a help ablakban megjelent parancsokat és ha kell rögtön végre is
hajtja azokat. A példából is látható, „elements of X”, hogy a MATLAB a műveleteket vektorokon végzi.
2.2 Értékek hozzárendelése A MATLAB egy numerikus számolási csomag,amely a számoláshoz minden változó pillanatnyi értékét előre kell ismerje. A MATLAB számára például az y = 2 x kifejezés értelmetlen, hacsak nem ismeri mit jelent jelenleg az x változó. Rögtön a MATLAB program megnyitásakor a parancs ablak jelenik meg. Ha begépeljük az y=2*x parancsot és utána a [ gombot, hibaüzenetet kapunk ??? Undefined function or variable 'x'. Ahhoz, hogy a számolást eltudja végezni ismerni-e kell az x jelenlegi értékét, először ezt be kell írjuk a parancs ablakba x=2 majd megnyomjuk a [ billentyűt. Az ablakban meg fog jelenni a válasz, hogy x-hez hozzárendelte a 2 értéket. Ezután már beírhatjuk, hogy y=2*x A MATLAB visszajelzi, hogy y-hoz hozzárendelte a 4-es értéket. Ha ezután x-nek egy új értéket adunk, például x=3 Akkor a MATLAB x-et már 3-nak fogja tekinteni. Ha begépeljük, a parancsablakba, hogy y A MATLAB továbbra is azt írja majd ki, hogy y=4. Azonban, ha az y=2*x
parancsot gépeljük be, akkor az y új értéket kap. Vagyis a MATLAB nem rendel hozzá új értéket, csak ha erre parancsot kap. Hatványok számításához a MATLAB a „^” jelet használja. Ahhoz hogy kiszámítsuk az y = x 3 kifejezést, a parancsablakba a következő parancsot kell beírjuk: y=x^3 A kapott eredmény y=27 lesz, hiszen x utolsó értéke 3 volt. Ha gyökvonást szeretnénk számolni, a gyökvonást át kell írnunk hatvánnyá a következő ismert szabály alapján: n
a=
1 an .
Példa: Írjuk be, hogy a következő két parancsot a=27 y=a^1/3 A válasz y = 9 , ami ugye helytelen. A MATLAB az y=a^1/3 parancsot úgy értelmezte, hogy y =
a1 . 3
A helyes parancshoz a hatványt zárójelbe kell tegyük: y=a^(1/3) Most már a helyes választ kapjuk, y=3. A transzcendentális π szám a MATLAB-ban pi-ként jelenik meg. Ha a parancsablakba beírjuk a pi parancsot akkor a MATLAB az eredményt négy tizedessel adja meg pi=3.1416. Ha a pi-t több tizedesnyi pontossággal szeretnénk megkapni a
format long pi parancsot kell használjuk és akkor az eredmény 14 tizedesnyi pontossággal jelenik meg: 3.14159265358979. Ha beírjuk a format short parancsot az eredmény újra rövid alakú lesz. Ha az e szám értékét szeretnénk megkapni és beírjuk a parancsablakba e akkor a MATLAB hibaüzenetet küld ??? Undefined function or variable 'e' mivel a MATLAB csak az exp függvényt használja exponenciális kifejezésekhez. Először egy értéket kell hozzárendeljünk az e-hez e=exp(1) vagyis e1 , és így megkapjuk a helyes választ ami e =2.7183
2.3 Mátrixok definiálása Egy 3× 3 -as mátrix megjelenítéséhez, például 1 2 3 A = 4 5 6 7 8 9
a parancsablakba a következőt kell beírnunk: A=[ 1 2 3 ; 4 5 6 ; 7 8 9 ]
Minden elem között szünet jel van,minden sorvéget pedig a ; jelöl vagyis a „;” hatására a MATLAB új sort kezd. Jelöléseknél figyeljünk arra, hogy a MATLAB különbséget tesz a kis és nagybetűk között. Ha kifelejtjük a parancsból például a ;-t A=[ 1 2 3 ; 4 5 6 7 8 9 ] akkor a MATLAB hibaüzenetet küld ??? Error using ==> vertcat CAT arguments dimensions are not consistent. A hibaüzenetben nem jelenik meg mindig, hogy pontosan hol van a hiba. A mi egyszerű példánkban nyilvánvaló hogy kimaradt a „;” a 6 és a 7 között, vagyis egy olyan mátrixot próbáltunk generálni amely az első sorában három elemet tartalmaz a második sorában pedig hat elemet, ez pedig nem lehetséges. Ha hibát ejtettünk nem kell újra begépeljük az egész parancsot, a „↑” gombbal kikeressük azt a régi parancsok között kijavítjuk és megnyomjuk az Enter gombot. Az Enter gomb megnyomásához a parancsban bárhol állhatunk nemcsak a parancs végén. Ha nem szükséges, hogy a parancs eredménye megjelenjen a képernyőn, akkor a parancs végére „;” kerül
A=[ 1 2 3 ; 4 5 6 ; 7 8 9 ] ;
2.4 Mátrixműveletek A mátrixok összeadásához és kivonásához a megszokott + és – jeleket használjuk, legyen a már definiált A mátrix és számítsuk ki A+A-t és A-A-t
A+A 2 4 6 8 10 12 14 16 18 A-A 000 000 000 Mint látható, a mátrix definiálásánál szögletes zárójeleket használunk, de az eredményben a MATLAB ezt nem jeleníti meg.
2.5 Polinomok megjelenítése Míg egy számítógépes algebrai rendszer egy polinomot képes explicit alakban megadni x 2 − 3x + 2 , addig a MATLAB a polinom együtthatóit egy vektorban tárolja. Az előbbi példában a vektor (1 -3 2) alakú lesz. Ha a polinom gyökeit szeretnénk megkapni a root függvényt használjuk, például
p=[1 -3 2]; roots(p) ans = 2 1 A polinom gyökeit úgy is kiszámíthatjuk, hogy a polinom együtthatóit közvetlenül a „root” függvényben adjuk meg:
roots([1 -3 2]) ans = 2 1 Egy gyakori hiba, hogy a parancsból kimaradnak a [ ] zárójelek, ebben az esetben a MATLAB hibaüzenetet küld roots(1 -3 2) ??? roots(1 -3 2) Error: ")" expected, "numeric value" found. A fordított művelet is lehetséges, ha ismerjük a polinom gyökeit, akkor a MATLAB fel tudja írni az eredeti polinomot a poly függvény segítségével
poly([-2 2]) ans = 1 0 -4 Az eredmény második tagja 0, ami azt jelenti, hogy hiányzik az x-et tartalmazó tag, vagyis a polinom amelynek 2 és -2 gyöke, az x 2 − 4 .
2.6 Ábrák rajzolása A MATLAB az ábrák megrajzolásához a koordinátákat vektorokban tárolja. Lássuk például a program hogyan ábrázolja a következő ’x’ és ’y’ vektor, amely úgy néz ki, hogy x=[1 2 3 4 5]; y=[2 4 6 8 10]; plot(x,y)
Az x-tengelyen ábrázolt tartomány megegyezik az x vektorral, és ugyanígy az y-tengelyen ábrázolt tartomány megegyezik az y vektorral. A MATLAB a grafikus képeket kékkel ábrázolja, hacsak nem adunk meg más színkódot. Ha nem akarjuk megjeleníteni az egész görbét, csak a koordináták által meghatározott pontokat, akkor a következő parancsot kell használjuk plot(x,y,'x')
A MATLAB minden (1, 2), (2, 4), (3, 6), (4, 8), (5, 10) párost egy kék ’x’-el jelölt az ábrán. Ugyanezt az ábrát kapjuk, ha az y=2x függvényt ábrázoljuk, ha 1≤x≤5 . Az ehhez szükséges parancsok
x=[1 2 3 4 5]; y=2*x; plot(x,y,'x') Ezzel a példával bemutattuk, hogyan lehet egyváltozós függvényeket ábrázolni a MATLAB programmal. Először egy vektort definiálunk a bemenő adatoknak, majd kiszámoljuk a hozzájuk tartozó kimeneti adatsort egy általunk definiált vagy egy a MATLAB-ba beépített függvény
segítségével. Aztán hozzárendeljük őket egy változóhoz, például ’y’ vagy ’output’. Végül a ’plot’ parancs segítségével megrajzoljuk a grafikont. Például: plot y=sin(x), -2π≤x≤2π. x=[-2*pi -pi 0 pi 2*pi]; y=sin(x); plot(x,y)
Ez nem az, amit akartunk! Öt pont láthatóan nem elég egy szinusz görbe kirajzolásához. Ráadásul tudjuk, hogy mindegyik definiált pontban a szinusz
zérus értéket kell hogy felvegyen, de a MATLAB végespontossággal dolgozik és ráillő görbével próbál közelíteni, ennek eredményeképpen ±1016 körüli értékeket ad a grafikonon. Hogy sikeresen megrajzoltassuk a szinusz görbét sokkal több pontra van szükségünk. Íme két lehetőség egy használható x vektor képzésére. x=-2*pi:0.1:2*pi; vektor egy -2*pi értékkel kezdődő aztán 0.1-es lépésenként újabb pontokat kijelölő majd 2π értékkel bezárólagos pontsort ad, folyamatosan, 0.1-es lépésekkel növekvő pontokból. Ennek a vektornak így 126 eleme lesz. Hajtsuk végre a rajzoló procedúrát ezen vektor használatával: y=sin(x); plot(x,y);
Vegyük észre, hogy a MATLAB kibővíti a rajz ablak koordinátatengelyeit a legközelebbi páros egész számig, jelen esetben -8 és 8 a végpont. Hogy ezt elkerüljük, írjuk be: axis tight így a kirajzolt ábra a következő alakú lesz:
A grafikon most teljesen kerettől-keretig lett kirajzolva. Ha nem a lépésközt akarjuk például 0.1-es fix lépésenként változtatni, hanem mondjuk egy intervallumot akarunk adott egyenlő részre felosztani, akkor használhatjuk a 'linspace' parancsot az x-vektor adott elemű egyenlő részre osztására, a következő képpen: x=linspace(-2*pi,2*pi,500); Ezzel az eljárással egy 500 elemű vektort definiáltunk x-re, mely a -2π értékkel kezdődően folymatosan növekvő értékeket tartalmaz egészen a 2π értékig, e pontok között 498 csomóponttal, melyek által határolt szakaszok hossza egyenlő egymással. Aztán írjuk be y=sin(x); plot(x,y) erdeményül pedig egy az előzővel hasonló szinusz görbét kapunk, mely immár 500 pontpárból épül az előző 126 pontpár helyett.