Függvények ábrázolása Matematikai függvényeket analitikusan nem tudunk a matlabban megadni (tudunk, de ilyet még nem tanulunk). Ahhoz, hogy egy függvényt ábrázoljuk, hasonlóan kell eljárni, mint a házi feladatban is: A függvény-t x-y pontpárokként tudjuk ábrázolni. Az x-y pontpárokat egy-egy vektorban tároljuk. (lehet egy db mátrixban is, de az ábrázolásnál meg kell mondani, hogy melyik részvektor az x és melyik az y) 1.1 Példa: Ábrázoljuk az (x-3)^2-1 függvényt a 0-10 tartományon! x = 0:0.1:10; % értemezési tartomány, 0.1-es lépésközzel y = (x-3).^2-1; % függvényérték számolása plot(x,y) % ábrázolás *próbáljátok ki, mi történik, ha x-et 1-es lépésközzel adjátok meg. A plot beépített függvény Ábrázolás megjelenítésének formázása: a plot beépített függvénynek nagyon sok paramétert meg lehet adni. Az összes felsorolva a help-nél a dokumentációjában található. Néhány példa: Vonal típusának állítása (másféle vonal vagy * jel, stb) plot(x, y, 'LineStyle', '--') plot(x, y, 'Marker', '*') Egyszerűbb esetekben a matlab kitalálja milyen paraméterét adtuk meg: plot(x, y, '--') Görbe színének megadása plot(x, y, 'Color', 'r') Itt is elég rövidebben írni: plot(x, y, 'r') Ezeket egymás után írhatjuk ha több mindent szeretnénk állítani: plot(x, y, 'LineStyle', '--', 'Color', 'r') Rövidebben (fontos, hogy itt egybe kell írni): plot(x, y, 'r--') 1.2 Példa: Több függvény egyidejű ábrázolása egy grafikonon Ekkor az x-y párokat minden függvénynél egymás után meg kell adni: x1 = 0:0.1:10; % értemezési tartomány, 0.1-es lépésközzel y1 = (x1-3).^2-1; % függvényérték számolása x2 = 1:0.5:11; y2 = (x2-2).^2-1; plot(x1, y1, x2, y2) % ábrázolás Ilyenkor a görbe színét, jelölőjét, stb. az adott x-y pár után kell megadni. Viszont ezt csak így lehet: plot(x1, y1, 'r-', x2, y2, 'g--') % ábrázolás Vagy: hold on hold off parancs 1
Ha az első függvényt ábrázoljuk, majd még szeretnénk mellé tenni egy másik függvényt ugyanarra a grafikonra, akkor az első ábrázolás után beírjuk a hold on parancsot. A végén viszont be kell írni a hold off parancsot is! close all % becsukja az összes eddig megnyitott figure-t plot(x1, y1, 'r-') hold on plot(x2, y2, 'g--') % az előző grafikon mellé teszi % ide akármennyit írhatnék még, a végén: hold off Észrevehettétek, hogy az ábrázolásnál mindig megnyit egy figure-t. A close all paranccsal az eddig megnyitott figure-t csukjuk be. Alapesetben a matlab mindig a figure(1)-re rajzol (és persze hold on nélkül kitörli ami rajta van). Ha több külön grafikont szeretnénk ábrázolni: Több grafikon ábrázolása Tehetjük ezeket a grafikonokat külön ablakba: figure(x) létrehozásával: Vagy tehetjük a grafikonokat egy ablakba a subplot paranccsal: A subplot grafikonok mátrixát csinálja Használata: subplot(oszlopok száma, sorok száma, hányadik elem) Példa: close all figure(1) % nem kell, de létrehozhatunk egy figure-t az elején subplot(2,2,1) % vagy subplot 221 plot(x1,y1) subplot(2,2,2) % vagy subplot 222 plot(x2,y2) subplot(2,2,3) % vagy subplot 223 plot(x3,y3) subplot(2,2,4) % vagy subplot 224 plot(x4,y4) További szépítgetések a grafikonon: (aki már tud programozni: a figure, axes (grafikon) és az ábrázolt görbe (line) mind objektumok. Tetszőleges paraméterük állítható a set utasítással) A parancsokat (közvetlenül) a plot utasításos parancs után kell írni. Cím adása: title('másodfokú függvények') x- tegely neve xlabel('x') y-tengely neve ylabel('y') Tengely kezdő és végpontja (kerek zárójelbe egy két elemű vektort kell írni) xlim([-1 13]) ylim([-5 82]) Jelmagyarázat (a jelmagyarázatot odébb lehet tenni egérrel ha rossz helyen van) legend('(x-3)^2-1 függvény', '(x-2)^2-1 függvény') 2
Monte Carlo módszerek Monte Carlo módszerek alapja: véletlen szám a = rand() 0-1 közötti véletlen számot generál. Lehet mátrixot is: a = rand(n,m) Monte Carlo módszerben az eseményeket lejátsszuk úgy, hogy a valóságban valamekkora valószínűségi eseményt attól függően választjuk egy esetleges elágazásnál, hogy véletlen számot generálunk. Ha elég sokszor lejátszunk egy-egy teljes folyamatot, akkor ezeket a folyamatok összességét megvizsgálva az szimuláció eredménye a valóságot kellően meg tudja közelíteni. Pl tipikusan: Körterület számítása: úgy határozzuk meg a területet, hogy véletlenszerűen rábökünk egy pontra, megnézzük, hogy beleesik e a körbe vagy nem. Ha ezt sokszor eljátsszuk, akkor a beleesett/összes generált pont száma meg fog egyezni a kör területével. Gamma-sugárzás anyag kölcsönhatása: gamma sugárzás esetén 3 féle kölcsönhatás lehetséges, adott energiájú fotonra, adott hatáskeresztmetszettel. Egy kölcsönhatás során ezek közül az egyik (és csak az egyik) megtörténik. A hatáskeresztmetszeteket valószínűségekké átalakítva (összegüket 1-re normálva), véletlenszám generálással el tudjuk dönteni egy MC szimulációban, hogy melyik kcsh következik be. 3
Feladatok 1. Közelítéssel számold ki a π értékét a kör területének Monte Carlo alapú kiszámításával. (<1e7) Tipp: Generáljunk x-y pontpárokat a (0,0), (0,1), (1,1), (1,0) pontok által meghatározott síkrészben (egységnégyzet) Ha egy pont távolsága az origótól <=, mint 1, akkor a körön vannak, ha nagyobb, akkor a körön kívül Generáljunk nagyon sok ilyen pontot A bent lévő/összes pontok számának az aránya a kör területének a negyedét fogja adni 2. Ábrázold a folyamatot: rajzold ki a körvonalat, és kék *-al a körbe eső, piros *-al a körön kívül eső pontokat. (<5e3) Tipp: görbe rajzolása a for ciklus előtt Pontok rajzolása hold on parancs után az if-else szakaszban a megfelelő színnel 3. Írjatok egy iranysorsolas nevű függvényt, ami MC módszerrel izotróp módon irányt sorsol 3Dben. x = 2 r Segítség: 1 1 y = 2 r 2 1 z = 2 r 3 1 = ඥx 2 + y 2 + z 2 < 1 nem igen x = xτ y = yτ z = zτ 4. Az előző feladatban megírt függvényt használva rajzoljatok ki egy csillagszórót! A program egy function legyen, bemeneti paramétere db-szám legyen, kimeneti paramétere pedig ne legyen. Az előző feladatban megírt függvényt úgy kell meghívni, mintha egy beépített függvény lenne. (ugyanabban a mappában kell lennie az m file-nak) Tipp: Az origot kössétek össze egy véletlen ponttal az egységgömbön belül. Utasítás: plot3([0,vegpont(1)], [0,vegpont(2)], [0,vegpont(3)], 'Color', szin); A végpont generálása: az előző feladatban generált véletlen irányvektor egy pont a gömb felszínén. A vektor hosszát egy véletlen számmal szorozva a gömbön belüli pontot kapunk. Több ilyen vonal ábrázolása (for ciklus hold on-off) (kb 5e2-re jól mutat) Szebb, ha a színt is minden esetben sorsoljátok (1*3-mas vektor 0-1 közötti elemekkel) 4
Tengelyek -1;1 közé állítása! Lehet forgatni a nézetet: 5. 4. Módosítása: próbáljátok ki, hogy a forráskód végére írtok egy end-et, majd a használt iranysorsolas függvény.m filejából a teljes kódot átmásoljátok ez az end mögé. Majd ennek a végére is tesztek egy end-et. Ekkor nem szükséges az iranysorsolas.m file, a matlab felismeri a fileban lévő másik függvényt. 5