MATLAB Ing. Jitka Nováková, KTM Katedra textilních materiálů tel. 485353280
Organizace předmětu Zápočet • Osobní prezentace zadané semestrální práce, jejíž řešení bylo předem (nejpozději 48 hod před obhajobou) zasláno pedagogovi. Dále je třeba počítat s prověřením znalostí základní orientace v programovém balíku Matlab. Student může použít vlastní poznámky, případně přinesený jiný tištěný studijní materiál. Používání elektronických zdrojů (internetu) není povoleno. • Tréning doma na freeware Octave http://octave.sourceforge.net/
Copyright © 1998-2011 John W. Eaton
Doporučená literatura MATLAB • Zaplatílek, K.- Doňar, B. : MATLAB pro začátečníky, BEN, Praha 2005 • Dušek, F.- Honc, V.: Matlab a simulink, Univerzita Pardubice, 2005. • Bartko, R.- Miller, M.: Matlab I - algoritmizácia a riešenie úloh. Digital Grafic, Trenčín. • Matlab Documentation, online: http://www.mathworks.com/help/techdoc/ Octave, online: • http://www.abclinuxu.cz/clanky/programovani/octave-1-je-tokalkulacka • http://www.octave.cz/
Úvod do systému • MATLAB je vysoce výkonný jazyk určený pro technické výpočty. Může sloužit jako pomůcka pro vyučování a studium především nadstavbových předmětů matematiky a různých technických předmětů • MATLAB = Matrix Laboratory • Je to interaktivní jazyk jehož základní element je pole, které ovšem musí nejdříve uživatel definovat.
a11 a12 a a 22 21 Amxn : : a m1 a m2
. . a1n . . a 2n .. : . . a mn
m …počet řádků n …počet sloupků
MATLAB v sobě zahrnuje: • • • • • • •
Matematické výpočty Vývoj algoritmů Měření údajů Modelování a simulace Analýzu údajů a vizualizaci Vědecké a inženýrské grafy Vývoj aplikací a programování Zdroj: http://www.mathworks.com/products/matlab/
Spuštění a vypnutí MATLABu Spuštění • Dvojklik na ikonu , která se nachází na pracovní ploše . • Z nabídky operačního systému (zpravidla): StartProgramyMATLAB 6.5 MATLAB 6.5 Vypnutí • Klik na ikonu v záhlaví pracovní plochy MATLABu • Z nabídky FileExit MATLAB • Stlačením kláves Ctrl+Q
Použití nápovědy v MATLABu • Spuštění kliknutím na nabídku Help v záhlaví pracovní plochy MATLABu dojde k otevření samostatného okna s prohlížečem html nápovědy Matlabu • Podobně se chová i příkaz >> helpwin • Použití příkazu help řetězec, např. >> help sin • Vypíše v pracovním okně nápovědu k danému tématu: SIN Sine. SIN(X) is the sine of the elements of X. • Pro výpis nápovědy v oblasti elementárních funkcí se používá help elfun, pro elementární operátory help ops, pro obecnou nabídku nápovědy help .
Pracovní prostředí Příkazové okno • V tomto okně zadáváme příkazy Historie příkazů • Posloupnost příkazů, které jsme zadali v příkazovém okně Aktuální adresář • Zobrazují se soubory aktuálního adresáře Pracovní prostor • Přehled pracovního prostoru a možnost práce s položkami
Příkazové okno Použití, jako u kalkulačky: Spočtěte 12.5+8
Vyčíslete
2
Spočtěte
4 sin 2 tg * 180 3 8
Příkazové okno Použití, jako u kalkulačky: >> 12.5+8 ans = 20.5000 >> pi ans = 3.1416 >> (sin(pi/3)+pow2(4))^2-tan(pi/8)*180 ans = 209.9044
Příkazové okno Zadejme matici 3x3 čísel: >> A=[1 2 3;4 5 6;7 8 9]
Příkazové okno Zadejme matici 3x3 čísel: >> A=[1 2 3;4 5 6;7 8 9] • Po stisku Enter MATLAB vypíše: A= 1 2 3 4 5 6 7 8 9 Použijte clc funkci:
Příkazové okno Zadejme matici 3x3 čísel: >> A=[1 2 3;4 5 6;7 8 9] • Po stisku Enter MATLAB vypíše: A= 1 2 3 4 5 6 7 8 9 Použijte clc funkci: • Po stisku Enter MATLAB smaže obsah pracovního okna (Clear Command Window), proměnné zůstanou v pracovním prostoru
Proměnná • Název až 31 znaků. Je povolena anglická abeceda, číslice a podtržítko. Číslo nesmí být na prvním místě. • Každá proměnná z pohledu MATLABu je maticí, z hlediska rozměrů rozlišujeme – Matici (mxn, kde m1, n 1) – Vektor (mx1, nebo nx1) – Skalár (1x1, tedy jen číslo) >> nazev_promenne = výraz • Některé proměnné jsou v MATLABu předdefinované – eps malé reálné číslo 10-16 – i,j komplexní jednotka – pi Ludolfovo číslo
Příklad 1 Zkuste: >>a=5 %zadani skalaru >>a2=5.268e-2 %zadani skalaru ve vedeckem formatu >>b=1:0.3:20 %zadani vektoru >>c=[1 2 3 4] % zadani vektoru >>V=[1 2 3;4 5 6;7 8 9] %zadani matice >>C=[c;b] %zadani matice pres vektory >>c(2) %zjisteni hodnoty druheho prvku vektoru c >>b(4)=C(2,3) %priradi hodnotu z druheho radku a tretiho sloupce matice C do ctvrteho prvku vektoru b >>save %ulozi vsechny promenne do souboru matlab.mat v aktualnim adresari
Příklad 1 - řešení >>C=[c;b] %zadani matice pres vektory ...chybové hlášení ??? Error using ==> vertcat All rows in the bracketed expression must have the same number of columns. ...možné řešení >>C=[c;b(1:4)] %zadani matice pres radkove vektory, ktere mají stejny pocet sloupcu
Příklad 2 >> C1=C(1:2,2:4) >> C2=C(:,2:3) >> C3=C(2,:)
Smazání proměnné clear název_proměnné1 název_proměnné1 • smaže vybrané proměnné clear • smaže všechny proměnné z pracovního prostoru !! Smazané proměnné nelze obnovit, pokud předem nebyly uloženy na disku !!
Práce s proměnnými save jméno_souboru název_proměnné1 název_proměnné2 • do zadaného souboru vloží uvedené proměnné save • všechny proměnné uloží do souboru matlab.mat load jméno_souboru • do pracovního prostoru MATLABu nahraje proměnné dříve uložené do souboru jméno_souboru
Příkaz •Přiřazovací příkaz nazev_promenne = výraz •Podmíněný příkaz, větvené (if) •Přepínač(switch) •Cyklus nebo symčka (for, while) Dále MATLAB obsahuje funkce pro práci s: •Adresáři (cd, dir, ..) •Proměnnými (save, load, clear, ..) •… Pokud je třeba napsat příkaz na více řádků, použijeme tři tečky. Potlačení výpisu výsledku provedeme použitím středníku. Více příkazů na jednom řádku oddělíme čárkou nebo středníkem (potlačí výpis proměnných), nebo zavoláme tzv M-soubor.
Komentáře, poznámky X = [125/100 0.9-9]; % vytvoreni vektoru x s hodnotami 1.25 a -8.1, bez vypisu • Slouží k vysvětlení významu jednotlivých příkazů, skriptů nebo funkcí. Je nutno je používat ať už kvůli své zapomnětlivosti, či pro dalšího uživatele. Komentáře u uživatelských funkcí slouží jako nápověda, kterou lze zavolat příkazem help název. • Komentáře MATLAB ignoruje a nepokouší se je provést
Aritmetické operátory • Chování operátorů v MATLABu souvisí s tím, že obecně je každá proměnná považovaná za matici • Obecně jsou operátory rozdělené na – Unární (+a, -a, a', a.') – Binární (a+b, a-b, a*b, a.*b, a^b, a. ^b, a/b, a./b, a\b, a.\b) – Dvojtečka (i:k:j) – Relační operátory (a
Příklad 3 • Připravte si testovací proměnné – Vymažte předchozí příkazem clear – >> A = [1 3; 2 0; 4 -1] – >> B = [1 2 2 2; 2 1 0 3; 1 1 2 6] – >> C = [1 3 4 0; 1 2 0 4] – >> u = [3 2 -1] – >> D = [2 0; 4 0; 6 2] – >> E = [2 0 0; 0 4 0; 0 0 6] – >> F = [1 1 1; 2 2 2; 1 2 3] – >> G = [2+i -1+i; 3+i -2-i]
Příklad 3 • Zkuste a nalezněte chyby: >> – >> +u >> – >> -u >> – >> G' >> – >> G.' >> – >> A+D >> – >> u-F >> >> – >> u-2,1 >> – >> A*E >> – >> D*A >> – >> c*5 >> – >> A.*E
D.*A F^2 D^3 2^3 G.^4 A.^D A.^E u/E u/F A/3 A./3 2/5
>> >> >> >> >> >> >> >> >> >> >> >>
2./5 A./D D./A u./F b=u' E\b 3\A 3.\A D.\A A.\D F.\u E.\A
Příklad 3 - řešení • Chybné – >> +u – >> -u – >> G' – >> G.' – >> A+D – >> u-F – >> u-2,1 – >> A*E – >> D*A – >> c*5 – >> A.*E
>> >> >> >> >> >> >> >> >> >> >> >>
D.*A F^2 D^3 2^3 G.^4 A.^D A.^E u/E u/F A/3 A./3 2/5
>> >> >> >> >> >> >> >> >> >> >> >>
2./5 A./D D./A u./F b=u' E\b 3\A 3.\A D.\A A.\D F.\u E.\A
Řetězce • • •
Jedná se o pole znaků anglické abecedy Nedoporučuje se používat diakritiku Text se vkládá mezi apostrofy 'nazdarek kasparek' >> s = 'nazdarek kasparek‚;
•
Vkládá-li se text do matic, je nutné, aby všechny řetězce měly stejný počet znaků (=chybějící se doplňují mezerami) Výpis se provede – zavoláním proměnné >> s – Použitím funkce disp(s), error (s)
•
•
Práce s řetězci…použití knihovních funkcí strcpm, upper, lower, str2num, num2str Více pomocí help strfun
Podmíněný příkaz • Podmínění provedení příkazů prostřednictvím podmínky if if podmínka příkazy end • podmínka je libovolný výraz s logickou hodnotou 0 nebo 1 (relační, binární operátory) • příkazy jsou provedeny v případě splnění podmínky, protože jich může být více, ukončujeme je klíčovým slovem end. •
Jednotlivé příkazy if se mohou vnořovat
Příklad 4 •
Vypište gratulaci, když student dostane jedničku – Definujte proměnnou znamka – Napište podmínku při jejíž splnění se má vypsat řetězec 'Gratuluji! Lepsi to byt nemohlo!'
Příklad 4 - řešení •
Vypište gratulaci, když student dostane jedničku – Definujte proměnnou znamka – Napište podmínku při jejíž splnění se má vypsat řetězec 'Gratuluji! Lepsi to byt nemohlo!'
>> znamka=3; >> if znamka==1 zprava='Gratuluji! Lepsi to byt nemohlo!' end •
Protože proměnná znamka neobsahovala číslo 1, text se nevytvořil, opravte první řádek na >> znamka=1; a napište znovu podmínku, text se vypíše
Příklad 4 – alternativa 1 •
Pokud chceme sdělit něco i ostatním studentům, použijeme příkazu else, elseif
>> znamka=3; >> if znamka==1 zprava='Gratuluji! Lepsi to byt nemohlo!' elseif znamka<4 zprava='Gratuluji! Ale mohlo to byt lepsi!' else zprava='Lituji! Uvidime se priste!' end …vypíše se text Gratuluji! Ale mohlo to byt lepsi!
Příklad 4 – alternativa 2 •
Pokud chceme sdělit něco i ostatním studentům, použijeme příkazu else, elseif
>> znamka=4; >> if znamka==1 zprava='Gratuluji! Lepsi to byt nemohlo!' elseif znamka<4 zprava='Gratuluji! Ale mohlo to byt lepsi!' else zprava='Lituji! Uvidime se priste!' end …vypíše se text Lituji! Uvidime se priste!
Funkce if, elseif, else •
Pokud testujeme i jiné možnosti pomocí else, elseif je nutné dodržet několik pravidel
>> if podminka1 prikazy1 elseif podminka2 prikazy2 else prikazy3 end ….větev if musí být právě jedna, větev elseif nemusí být vůbec, případně jich může být víc, větev else musí být právě jedna.
M-soubory • •
M-soubory slouží k ukládání posloupností příkazů (skriptů) nebo k ukládání uživatelských funkcí. Jsou to obyčejné textové soubory, proto je možné je psát v jakémkoli textovém editoru, pro vyšší komfort uživatelů MATLABu je jeden přímo součástí systému: M-editor/Debugger, který se otevírá v samostatném okně. FileOpen…otevřením stávajícího M-souboru File New M-file…vytvoření nového M-souboru
Vytvoření skriptu • •
•
•
Nastavení pracovního adresáře Vytvoření, nebo otevření stávajícího skriptu: FileOpen…otevřením stávajícího M-souboru File New M-file…vytvoření nového M-souboru Zápis skriptu zapíšeme všechny potřebné příkazy podobně jako v příkazovém okně, jen s tím rozdílem, že se příkazy neprovádějí. Uložení skriptu FileSave Jméno skriptu musí splňovat stejná pravidla jako název proměnné
Spuštění skriptu • • •
Nastavení pracovního adresáře V příkazovém okně stačí zadat jméno m-souboru bez přípony Přímo v editoru pomocí Debug Run (klávesa F5)
Zobrazení M-souboru • Obsah skriptu uvidíme v M-editoru/Debuggeru • Nebo v příkazovém okně příkazem type název, kde název je jméno skriptu (bez přípony). •
Pozn.: skripty pracují s poroměnnými pracovního prostředí a můžou vytvářet nové, či stávající měnit, ty pak v prostředí zůstávájí i po jejich skončení
Uživatelská funkce • •
• •
•
Pokud je třeba měnit parametry používané skriptem je mnohem výhodnější vytvořit uživatelskou funkci. Funkce jsou M-soubory, které mají jasně definovanou strukturu. Funkce akceptují vstupní parametry, které mohou mít při opakovaném spuštění vždy novou hodnotu. Nelze použít žádné jiné proměnné, než které funkci předáváme, nebo ty, které si sama vytvoří Všechny proměnné (i ty, které obsahují vypočtené výsledky) po skončení funkce zaniknou, jediný způsob, který uchová proměnné je jejich deklarování jako výstupní proměnné Pokud funkce nemá žádné vstupní parametry, můžeme její příkazy napsat jako skript
Vytvoření funkce • •
•
•
Nastavení pracovního adresáře Vytvoření, nebo otevření stávající funkce: FileOpen…otevřením stávajícího M-souboru File New M-file…vytvoření nového M-souboru Zápis funkce První řádek obsahuje název funkce, po něm mohou následovat řádky s nápovědou k funkci a zbytek tvoří příkazy potřebné k výpočtu výstupů za použití jejích vstupů Uložení skriptu FileSave Jméno skriptu musí splňovat stejná pravidla jako název proměnné a musí souhlasit se jménem funkce, jinak by nešla spustit
Definice funkce •
První řádek má tvar: function [výstupy] = jménofunkce (vstupy) klíčové výstupy název vstupní paraslovo funkce funkce metry funkce • výstupy: –je-li jich více, oddělují se čárkou –je-li jen jeden, nejsou závorky nutné –funkce nemusí mít žádný výstup • jméno_funkce: –mělo by vystihovat činnost funkce –musí splňovat pravidla pro názvy proměnných (jinak nepůjde funkce spustit) • vstupy: –je-li jich víc, oddělují se čárkou –funkce nemusí mít žádný
Nápověda funkce •
• •
Není povinnou součástí funkce, ale významně usnadňuje používání dané funkce. Začíná druhým řádkem, pokud je tento řádek komentářem, končí jakýmkoliv řádkem, který už není komentářem. Nápovědu lze zobrazir zavoláním příkazu help jméno_funkce První řádek nápovědy by měl obsahovat jméno funkce, protože je vypisován příkazem lookfor slovo (funkce slouží pro výpis všech funkcí obsahující dané slovo), nebo při výpisu nápovědy pro nějaký adresář help C:\temp\matlab
Příkazy funkce • • •
•
pro výpis chyby a ukončení funkce lze použít příkaz error, jejímž parametrem je text chybového hlášení mimo nápovědy je vhodné používat při tvorbě funkce komentáře vlastního skriptu, aby již nikdy nebylo zapomenuto, co který řádek vykonal pro řešení složitých problémů je vhodné vytvořit funkce řešící triviální výpočty a ty pak volat nějakou nadřazenou funkcí řešící složitý problém příklad funkce:
function [prep] = prepona (odvesna1,odvesna2) % PREPONA – vypocet prepony pravouhleho trojuhelniku prep = (odvesna1^2 + odvesna2^2) ^0.5; %pouziti Pythagorovy věty
Spuštění funkce •
• • •
Uloženou funkci můžeme spustit z pracovního okna příkazem: [vystupy] = jmeno_funkce(vstupy) výstupy se uloží do proměnné vystupy, nebo jmeno_funkce(vstupy), výsledky se neuloží Počet a pořadí vstupních argumentů se musí shodovat s definicí funkce Nejsme povinni odebírat výstupní proměnné, ale pokud tak učiníme, měl by být dodržen jejich počet Pokud je po spuštění hlášena chyba zkontrolujte: – Je správně zadáno jméno funkce? – Souhlasí počet vstupních parametrů? – Je funkce správně uložena? – Jsme ve správném adresáři? – Někdy pomůže smazání všech proměnných v pracovním prostoru
Další práce s funkcí • • •
Zobrazení nápovědy k funkci help jmeno_funkce Zobrazení kódu funkce type jmeno_funkce Zjišťování počtu skutečných vstupních a výstupních argumentů, např. v případě, kdy máme proměnný počet vstupních dat – Pro vstupní parametry lze využít funkce nargin, která nemá žádné vstupy a vrací skutečný počet parametrů s nimiž byla funkce spuštěna. – Pro výstupní použijeme funkci nargout s podobnými vlastnostmi jako nargin
Ladění funkce •
•
Pokud jsou ve funkci chyby a nemůžeme-li jejich příčinu nalézt pouhým přečtením, použijeme Debugger (odvšivovač), který mám nabízí možnost krokování (=ladění) – V M-editoru nastavíme breakpoint (F12) na nějakém řádku s příkazem – Spustíme funkci s jejími parametry (z příkazového okna) a v příkazovém okně se objeví K a v M-editoru svítí zelená šipka před řádkem, který bude následně zpracován – Pomocí F10 a F11 v M-editoru krokujeme (spouštíme jednotlivé příkazy) – výsledek kontrolujeme pomocí myši – Výsledkem je nalezení chyby a její odstranění Kdykoli je s funkcí nějaký problém je nutné KROKOVAT !!
Speciální znaky • • •
Závorky (hranaté, kulaté, složené) Symboly (mezera, čárka, středník, tečka, rovnítko, apostrof, procento, dvojtečka) Další znaky vyskytující se jako součásti operátorů, nebo názvů proměnných (hvězdička, zavináč, atp.)
Výpis všech znaků možno získat v nápovědě voláním help ops
Knihovní funkce •
Vedle uživatelem vytvořených funkcí obsahuje MATLAB mnoho funkcí jichž můžeme efektivně využívat při řešení vlastních problémů. • Práce s nimi je obdobná jako u funkcí uživattelských • lookfor hledane_slovo … výpis H1 řádku nápovědy všech nalezených funkcí • help nazev_funkce … výpis nápovědy funkce • type jmeno_funkce … výpis kódu funkce •
Rozdělění funkcí – – – – – – – –
Skalární Vektorové Maticové Funkce pro vytváření matic Funkce pro zjišťování rozměrů proměnných Funkce pro výpis řetězců Funkce pro 2-D a 3-D grafiku ….další funkce
Řešení soustav lineárních rovnic •
Soustavu Ax=b řešíme pomocí operátoru \ nebo pomocí inverzní matice (funkce inv). V každém případě je vždy potřeba ověřit řešitelnost soustavy, například pomocí výpočtu determinantu (funkce det): soustava.m function x=soustava(A,b) % SOUSTAVA - reseni soustavy linearnich rovnic % A ... matice soustavy % b ... vektor pravych stran % x ... reseni soustavy if det(A)==0 error('Soustava nema řeseni!') end x = A\b; % vypocet reseni; % DRUHA MOZNOST:x=inv(A)*b;
Řešení soustav lineárních rovnic •
Spuštění funkce M = [3 2 –1; 1 0 1; 2 1 -1]; v = [5; 4; 2]; reseni = soustava (M,v) % spusteni funkce reseni = 1.5000 1.5000 2.5000 M*reseni % overeni spravnosti reseni ans = 5 4 2
Cykly Cyklus slouží pro zápis příkazů, které mají být prováděny opakovaně. Počet opakování těchto příkazů závisí na nějaké podmínce nebo může být předem známý. Proto existují dva základní typy cyklů: •cyklus řízený podmínkou (zvaný též indukční cyklus; v MATLABu realizovaný pomocí while) •cyklus s předem známým počtem opakování (zvaný též iterační cyklus nebo cyklus s výčtem hodnot; v MATLABu realizovaný pomocí for) Příkazy uvnitř cyklu se nazývají tělo cyklu.
Cyklus while • Cyklus while začíná klíčovým slovem while a končí klíčovým slovem end: while podmínka příkazy end • podmínka (řídicí podmínka cyklu) je libovolný výraz s logickou hodnotou 0 nebo 1 (většinou se v podmínkách používají relační nebo binární logické operátory) • příkazy v těle cyklu jsou jakékoli příkazy, které se mají provádět opakovaně v případě splnění podmínky
Cyklus while • Cyklus while začíná klíčovým slovem while a končí klíčovým slovem end: while podmínka příkazy end • podmínka (řídicí podmínka cyklu) je libovolný výraz s logickou hodnotou 0 nebo 1 (většinou se v podmínkách používají relační nebo binární logické operátory) • příkazy v těle cyklu jsou jakékoli příkazy, které se mají provádět opakovaně v případě splnění podmínky Pozn: vytvoří-li se nekonečný cyklus je možno jeho provádění přerušit ctrl+C
Příklad: cyklus while • Vytvořte funkci pro výpočet faktoriálu zadaného čísla (na principu: n!=n(n-1)(n-2)...1):
Příklad: cyklus while •
Vytvořte funkci pro výpočet faktoriálu zadaného čísla (na principu: n!=n(n-1)(n-2)...1): fakt1.m
function f=fakt1(n) % FAKT1 - vypocet faktorialu celeho cisla % f=fakt1(n) % n ... cislo % f ... faktorial (f=n!) if n<0 % kontrola vstupu error('faktorial neexistuje') % KONEC, nic se nepocita end f = 1; % priprava vysledku while n>1 % dokud je co pridat do vysledku f = f*n; % pridava do vysledku n = n-1; % postupne snizuje 'n'‚ end % nakonec je 'n' =1 a 'f' obsahuje faktorial 'n'
Cyklus for Cyklus for začíná klíčovým slovem for a končí klíčovým slovem end: for proměnná=výraz příkazy end •proměnná (řídicí proměnná cyklu) je libovolný název proměnné •výraz je jakýkoli výraz, jehož délka (velikost) udává počet opakování. Většinou se jedná o vektor, který bývá generován pomocí operátoru dvojtečka •příkazy v těle cyklu jsou jakékoli příkazy, které se mají provádět opakovaně v případě splnění podmínky
Příklad: cyklus for Vytvořte funkci pro výpočet faktoriálu zadaného čísla (na principu: n!=1*2*...*(n-1)*n):
Příklad: cyklus for Vytvořte funkci pro výpočet faktoriálu zadaného čísla (na principu: n!=1*2*...*(n-1)*n): fakt2.m function f=fakt2(n) % FAKT2 - vypocet faktorialu celeho cisla % f=fakt2(n) % n ... cislo % f ... faktorial (f=n!) if n<0 % kontrola vstupu error('faktorial neexistuje') % KONEC,nic se nepocita end f = 1; % priprava vysledku for i=1:n % n-krat, anebo: i=2:n (usetrime nasobeni 1x) f = f*i; % pridava do vysledku end % nakonec 'i' = 'n' a 'f' obsahuje jeho faktorial 'n'
2D grafika •
•
MATLAB umožňuje uživatelsky velmi příjemnou a snadnou vizualizaci dat. Má velmi široké možnosti úpravy a práce s 2-D grafy. Pro tyto činnosti je v MATLABU vytvořen grafický režim takzvaných grafických oken. Obecný postup práce s grafikou – Příprava dat – Výběr grafického okna, případně podokna – Vykreslení grafu – Popis grafu – Nastavení os, mřížky a případně další úpravy – Uložení grafu do souboru (obrázek)
Výběr grafického okna •
• •
Grafické funkce automaticky otevřou nové grafické okno, pokud doposud neexistovalo (Figure No. 1). V případě, že už nějaké otevřeno bylo, je pro vykreslování použito to, které je aktivní (poslední otevřené, nebo na které bylo naposledy kliknuto). Chceme-li otevřít (použít) nějaké konkrétní okno, použijeme funkci figure s parametrem n: figure (n) Chceme li otevřít nové okno, použijeme funkci figure bez parametru
Zavření grafického okna •
K uzavření grafického okna použijeme funkci close
close zavře aktivní grafické okno close (n) zavře grafické okno s názvem Figure No. n close all zavře všechna grafická okna
Kreslení bodového grafu •
K vykreslení grafu zadaného pomocí hodnot ve vektoru (vektorech) slouží funkce plot
plot (y) vykreslí hodnoty vektoru y v závislosti na pořadí plot (x,y) vykreslí hodnoty vektoru y v závislosti na hodnotách vektoru x plot (x,y,str) vykreslí hodnoty vektoru y v závislosti na hodnotách vektoru x a pomocí řetězce str ovlivní výsledný vzhled grafu: barvu, značky, čáry, typ značky, typ čáry Proměnná str obsahuje až tři hodnoty vlastností, v pořadí barva, typ značky a typ čáry.
Funkce plot plot (x,y,str)
b g r
Barva modrá zelená červená
c m y k
sv.modrá fialová žlutá černá
. o x
Značka tečka kolečko křížek
+ křížek * hvězda s čtverec d diamant v trojúhelník dolů ^ trojúhelník nahoru > trojúhelník vpravo < trojúhelník vlevo p pentagram h hexagram
Typ čáry plná : tečkovaná -. čerchovan á -- čárkovaná
Příklad funkce plot >> x=-1:0.01:1; plot(x,2*x.^3-.5*x.^2-x+1,'k')
Popisky grafu •
Graf je možno popsat pomocí funkcí xlabel, ylabel, title, text a legend. title(popisek) - přidání názvu grafu xlabel(popisek) - přidání popisu osy x ylabel(popisek) - přidání popisu osy y Chceme-li přidat ke grafu legendu (popsat více grafů v jednom okně), použijeme funkci legend(text1,text2,...), jejímiž parametry jsou texty popisující všechny vykreslené grafy (v pořadí daném vykreslováním těchto grafů), např.: legend('graf1','graf2','graf3','graf4')
Popisky grafu
popisek je libovolný řetězec, který může obsahovat speciální znaky
Znak
Zápis
Znak
Zápis
Znak
Zápis
\alpha
\beta
\gamma
\delta
\epsilon
\omega
\lambda
\xi
\pi
\rho
\sigma
\tau
\sigma
\Delta
\Sigma
\nabla
\partial
\infty
\surd
\int
\neq
\in
\subset
\subseteq
\leq
\geq
\uparrow
\wedge
\vee
\downarrow
\leftrightarro w \neg
\leftarrow
\rightarrow
\forall
\exists
¬
Více grafů v okně Pro vykreslení více grafů do téhož (pod)okna, můžeme použít dva způsoby: •
>> >> >> >> >> >> >>
funkci plot, které předáme jako parametry všechny vykreslované grafy (u každého může být také uvedena barva, značka a typ čáry):
x=-pi:pi/25:pi; % nezavisle promenna y1=sin(x); y2=cos(x); y3=sin(x).^2;% 3 funkce plot(x,y1,'r',x,y2,'b',x,y3,'k') % tri barvy grafů v jednom plot(x,y1,'r',x,y2,x,y3,'k') % totez:modra barva se nemusi zadavat xlabel('x') % popis osy x title('Grafy 3 funkci') % nazev grafu legend('sin(x)', 'cos(x)', 'sin^2(x)') % pridani legendy ke grafu
Více grafů v okně • příkaz hold on, který "zapne" možnost přikreslovat do grafického okna jiné grafy, aniž by "zmizel" graf již nakreslený. Standardní stav (kdy se graf překresluje) pak docílíme příkazem hold off: >> >> >> >> >> >> >> >> >> >>
x=-pi:pi/25:pi; % nezavisle promenna y1=sin(x); y2=cos(x); y3=sin(x).^2;% 3 funkce plot(x,y1,'r') % prvni graf (cerveny) hold on % prikreslime neco dalsiho plot(x,y2) % prvni graf (modry - netreba udavat barvu) plot(x,y3,'k') % treti graf (cerny) xlabel('x') % popis osy x title('Grafy 3 funkci') % nazev grafu legend('sin(x)', 'cos(x)', 'sin^2(x)') % pridani legendy grafu hold off % uz nic prikreslovat nebudeme
Více grafů v okně •
Výsledek je v obou případech stejný:
Volba zobrazení os •
Ke změně rozsahu osy x použijeme příkaz xlim(v), kde v je vektor obsahující min. a maxi. hodnotu na ose x. >> xlim([-5 2.3]) % 1. zpusob >> osa_x=[-5 2.3]; xlim(osa_x) % 2. zpusob • Ke změně rozsahu osy y použijeme příkaz ylim(v), kde v je vektor obsahující min. a max. hodnotu na ose y. >> ylim([0.5 12.5])% 1. zpusob >> osa_y=[0.5 12.5]; ylim(osa_y) % 2. zpusob • Pro změnu rozsahu obou os (x i y) lze použít příkaz axis(v), kde v je vektor obsahující min. hodnotu na ose x, max. hodnotu na ose x, min. hodnotu na ose y a max. hodnotu na ose y. >> axis([-5 2.3 0.5 12.5]) % 1. zpusob >> rozsah=[-5 2.3 0.5 12.5]; axis(rozsah) % 2. zpusob
Zobrazení mřížky •
Pro zobrazení mřížky můžeme využít příkazů grid on a grid of: grid on - zobrazí mřížku grid off - vypne zobrazení mřížky (implicitně nastaveno)
Části grafického okna •
Pro rozdělení grafického okna na více částí pro navzájem nezávislé grafy, použijeme funkci subplot, která vymezí konkrétní část grafického okna a aktivuje ji pro vykreslování: subplot(m,n,c) - funkce si "představí" grafické okno jako matici mxn, očísluje si jednotlivé buňky (zleva doprava, odshora dolů) a aktivuje právě jednu - c-té podokno. Pokud je v jeho místě již jiné podokno, bude staré podokno odstraněno. Funkce subplot vytváří pouze JEDNO podokno, takže ji většinou musíme volat vícekrát:
>> >> >> >>
x=0:pi/20:2*pi; subplot(3,1,1); plot(x,sin(x),'k'), title('sin x') subplot(3,1,2); plot(x,sin(x.^2),'k'), title('sin x^2') subplot(3,1,3); plot(x,sin(x).^2,'k'), title('sin^2x')
Části grafického okna •
Vytvoří se:
Části grafického okna •
>> >> >> >> >>
Lze kombinovat podokna různé délky či šířky, pouze se nesmějí vzájemně překrývat:
x=-1:0.01:1; subplot(2,2,1); subplot(2,4,3); subplot(2,4,4); subplot(2,1,2);
plot(x,2*x.^2+1,'k'), title('2x^2+1') plot(x,x.^3,'k'), title('x^3') plot(x,x.^5,'k'), title('x^5') plot(x,x.^2-0.25,'k'), title('x^2-0.25')
Části grafického okna Získáme:
>> >> >> >>
subplot(2,2,1) subplot(2,4,3) subplot(2,4,4) subplot(2,1,2)
Nástroje grafického okna Grafické okno lze upravovat pomocí panelu nástrojů (není-li: aktivuje se v Figure Toolbar v menu View): Znak
Funkce
Znak
Funkce
otevře nové grafické okno
umožňuje přidat do grafu text
otevře uložený graf (*.fig)
umožňuje přidat do grafu šipky
uloží graf do souboru(*.fig)
umožňuje přidat do grafu čáry
odešle graf na tiskárnu
lupa - zvětšení v místě kliknutí
umožňuje měnit vlastnosti objektů v grafickém okně
lupa - zmenšení v místě kliknutí rotace (u 3D grafů)
Uložení grafu do souboru • uložení grafu jako obrázek, který je možno vkládat do dokumentů (texty v MS Wordu, www stránky,...): – menu File Export... – vyplnění údajů v dialogovém okně "Export": • výběr cílového adresáře • výběr typu souboru (např. pro vložení do MS Wordu lze použít formát BMP (bezeztrátový), JPG nebo PNG, pro LaTeX formát EPS...) • zadání jména souboru – aktivace tlačítka Save (tím se vytvoří obrázkový soubor; někdy uložení trvá déle, a proto počkejte se zavíráním grafických oken, dokud nezmizí přesýpací hodiny na kurzoru myši)
Uložení grafu do souboru • uložení grafu jako soubor *.fig, který umí zobrazit MATLAB: – menu File Save as... (nebo Save) • výběr cílového adresáře • kontrola typu souboru (*.fig) • zadání jména souboru – aktivace tlačítka Save Poznámka: soubor typu FIG lze otevřít v MATLABu (např. přes menu File Open) - otevře se uložené grafické okno.
3D grafika MATLAB umožňuje vizualizovat také funkce dvou proměnných. Používáme podobný postup: •příprava dat (nezávisle proměnné, závisle proměnná) •výběr grafického okna, případně podokna •vykreslení 3D grafu •úpravy grafu •uložení grafu do souboru
3D grafika - příprava dat •
Je třeba mít dvě matice (např. X,Y), jejichž prvky X(i,j),Y(i,j) budou obsahovat souřadnice bodů v rovině. Ke snadnému generování těchto matic slouží funkce meshgrid: [X,Y]=meshgrid(v1,v2) - vektor v1 určuje interval na ose x s daným krokem a vektor v2 určuje interval na ose y s daným krokem [X,Y]=meshgrid(v) - vektor v určuje interval na ose x i na ose y >> [X,Y]=meshgrid([-3:1],[-1:2:7]) X = -3 -2 -1 0 1 Y= -1 -1 -3 -2 -1 0 1 1 1 -3 -2 -1 0 1 3 3 -3 -2 -1 0 1 5 5 -3 -2 -1 0 1 7 7
-1 1 3 5 7
-1 1 3 5 7
-1 1 3 5 7
3D grafika - příprava dat •
Kromě nezávisle proměnných potřebujeme vytvořit také matici funkčních hodnot. Např. pro funkci f(x,y)=cos(x2)-sin(y3) vytvoříme matici Z: >> Z=cos(X.^2)-sin(Y.^3);
3D grafika - vykreslení grafu •
• • •
• •
Lze zvolit z několika možností: plot3(X,Y,Z), případně plot3(X,Y,Z,řetězec), vykreslí graf jako jednotlivé čáry, pomocí řetězce můžeme nastavit barvu, značky a typ čar mesh(X,Y,Z)vykreslí 3D graf, body spojuje navzájem ve směru obou os (výsledkem je "drátěný model" = "síť") surf(X,Y,Z) vykreslí 3D graf, body spojuje navzájem ve směru obou os a vzniklé plošky vyplní barvou contour(Z) vykreslí vrstevnice funkce dvou proměnných (2D graf). Příkaz contour(Z,n)vykreslí vrstevnice v n rovinách, např. contour(Z,5). Příkaz Contour(Z,v)vykreslí vrstevnice v rovinách zadaných vektorem v, např. contour(Z,[-2 0 .5 .8 1]) meshc(X,Y,Z)vykreslí 3D "síťový" graf s vrstevnicemi surfc(X,Y,Z)vykreslí 3D "ploškový" graf s vrstevnicemi
3D grafika - vykreslení grafu [X,Y] = meshgrid(-3:.125:3); Z = peaks(X,Y); %peaks je knihovni funkce MATLABu meshc(X,Y,Z); axis([-3 3 -3 3 -10 5])
3D grafika - úpravy grafu •Pro popis 3D grafu se použije funkce xlabel, ylabel a title. Osu z, lze popsat pomocí funkce zlabel(text), kde text je libovolný řetězec obsahující kýžený popis •Změna barevné palety se provede příkazem colormap(paleta), kde paleta je předdefinovaná nebo uživatelská. Předdefinovaná je např. šedá gray, žlutočervená bone, duhová hsv,...viz nápověda. Uživatelská paleta se vytvoří pomocí matice Nx3, kde N je celkový počet barev v paletě a hodnoty jsou od 0.0 do 1.0, každý řádek představuje jednu barvu definovanou pomocí RGB (red-green-blue). Nula znamená 0% podíl dané barvy, jednička 100% podíl dané barvy. Takže černá barva je 0 0 0, červená 1 0 0, atd. >> M=[0 0 0; 0 .2 0; 0 .4 0; 0 .6 0; 0 .8 0; 0 1 0]; >> colormap(M)
3D grafika - úpravy grafu • Přidání sloupce s použitou paletou se provede příkazem colorbar , po změně barevné palety musíme tuto funkci použít znovu, pro zobrazení řádku (ne sloupce), lze použít: colorbar('horiz') • K definování úhlu pohledu (otočení grafu) se používá funkce view(az,el) , která nastaví úhel pohledu na graf: az je azimut = úhel otočení kolem osy z měřený od záporné části osy y proti směru hodinových ručiček (0 až 180) nebo po směru (-180 až 0); el je elevace = výška zorného bodu, tj. úhel mezi pozorovatelem a rovinou xy (0 až 180: oko je nad objektem, -180 až 0: oko je pod objektem). Standardní nastavení pohledu na 3D graf obnovíme pomocí view(3) (odpovídá nastavení az=-37.5, el=30). Pomocí [a,e] = view se uloží aktuální hodnoty azimutu a elevace do proměnných a a e.
Aproximace dat polynomem • Aproximaci n-tého stupně, lze provést pomocí funkce polyfit, která používá metodu nejmenších čtverců: p=polyfit(x,y,n), kde x je vektor hodnot nezávisle proměnné, y je vektor hodnot závisle proměnné, n je stupeň polynomu, jímž chceme aproximovat body [xi,yi] a p je vektor koeficientů výsledného polynomu P(x), přičemž P(x)=p(1)xn+p(2)xn-1+...+p(n)x+p(n+1) • Hodnoty polynomu P(x) ve všech prvcích vektoru x (např. kvůli grafickému znázornění), vyčíslí funkce polyval: y_aprox=polyval(p,x), kde p je vektor koeficientů aproximačního polynomu, x je vektor hodnot nezávisle proměnné a y_aprox je vektor hodnot aproximačního polynomu. • Součet čtverců odchylek S=sum((y_aprox-y).^2)
Příklad aproximace Aproximujte 8 hodnot u a v polynomem 2. stupně. >> u=[1 1.5 2.1 2.5 3 3.1 3.2 3.5]; % data, nezavisla promenna >> v=[7.8 8.15 8.3 8.25 8.1 8.3 8.35 8.2]; % data, zavisla promenna >> p=polyfit(u,v,2) % koeficienty polynomu 2. stupne pro 'u' a 'v' p = -0.1684 0.8977 7.1150 >> v_aprox=polyval(p,u); % hodnoty polynomu v 'u‚ >> S=sum((v_aprox-v).^2) % soucet ctvercu odchylek S = 0.0345 >> plot(u,v,'r+') % graf puvodni data jako cervene krizky >> hold on % prikreslime další >> plot(u,v_aprox,'k.-') % graf polynomu, cerne body s carou >> axis([0.8 3.7 7.7 8.4]) % uprava os >> title('Data a jejich aproximace parabolou')% nazev grafu >> legend('data','aproximacni polynom',4) %zobrazime legendu vpravo dole
Příklad aproximace Aproximujte 8 hodnot u a v polynomem 2. stupně.
Příklad aproximace
>> plot(min(u):0.05:max(u),polyval(p,min(u):0.05:max(u)),'k',u,v_aprox,'k.')
...menší krok