Programování v Matlabu



Podobné dokumenty
Systém je citlivý na velikost písmen CASE SENSITIVE rozeznává malá velká písmena, např. PROM=1; PROm=1; PRom=1; Prom=1; prom=1; - 5 různých proměnných

KTE / PPEL Počítačová podpora v elektrotechnice

KTE / PPEL Počítačová podpora v elektrotechnice

Doňar B., Zaplatílek K.: MATLAB - tvorba uživatelských aplikací, BEN - technická literatura, Praha, (ISBN:

pi Ludolfovo číslo π = 3,14159 e Eulerovo číslo e = 2,71828 (lze spočítat jako exp(1)), např. je v Octave, v MATLABu tato konstanta e není

- transpozice (odlišuje se od překlopení pro komplexní čísla) - překlopení matice pole podle hlavní diagonály, např.: A.' ans =

Seminář z MATLABU. Jiří Krejsa. A2/710 krejsa@fme.vutbr.cz

Stručný návod k programu Octave

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Základy algoritmizace a programování

DUM 06 téma: Tvorba makra pomocí VBA

Základy algoritmizace a programování

KTE / PPEL Počítačová podpora v elektrotechnice

Operace s vektory a maticemi + Funkce

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Numerická integrace a derivace

Programovací jazyk Pascal

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Lineární algebra s Matlabem. Přednáška 1

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Základy programování: Algoritmizace v systému MATLAB

PPEL_3_cviceni_MATLAB.txt. % zadat 6 hodnot mezi cisly 2 a 8 % linspace (pocatek, konec, pocet bodu)

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

MAXScript výukový kurz

Skriptování co se do minula nevešlo, práce s řetězci a řešení rovnic

Sada 1 - Základy programování

Níže uvedená tabulka obsahuje technické údaje a omezení aplikace Excel (viz také článek Technické údaje a omezení aplikace Excel (2007).

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

MATLAB základy. Roman Stanec PEF MZLU

Programování v jazyce JavaScript

Je n O(n 2 )? Je n 2 O(n)? Je 3n 5 +2n Θ(n 5 )? Je n 1000 O(2 n )? Je 2 n O(n 2000 )? Cvičení s kartami aneb jak rychle roste exponenciála.

II. Úlohy na vložené cykly a podprogramy

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

8 Třídy, objekty, metody, předávání argumentů metod

cyklus s daným počtem opakování cyklus s podmínkou na začátku (cyklus bez udání počtu opakování)

Algoritmizace a programování

Sada 1 - PHP. 03. Proměnné, konstanty

Řešení diferenciálních rovnic v MATLABu

Úvod do programování. Lekce 5

Programy na PODMÍNĚNÝ příkaz IF a CASE

MATrixLABoratory letný semester 2004/2005

% vyhledání prvku s max. velikostí v jednotlivých sloupcích matice X

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

Práce se soubory. Základy programování 2 Tomáš Kühr

Definice funkcí a procedur. Mnoho operací provozujeme opakovaně, proto je hloupé programovat je při každém použití znovu.

Pokročilé programování v jazyce C pro chemiky (C3220) Třídy v C++

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Operační systémy. Cvičení 4: Programování v C pod Unixem

Proměnné a parametry. predn_08.odt :00:38 1

SEMESTRÁLNÍ PRÁCE Z PŘEDMĚTU MODELOVÁNÍ MATLABEM

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Programování v jazyce JavaScript

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

1. Téma 03 - Rozhodování

VISUAL BASIC. Práce se soubory

Výčtový typ strana 67

E+034 = ; = e E+034

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

přetížení operátorů (o)

Globální matice konstrukce

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

Úvod do programování. Lekce 1

FUNKCE 3. Autor: Mgr. Dana Kaprálová. Datum (období) tvorby: září, říjen Ročník: sedmý. Vzdělávací oblast: Informatika a výpočetní technika

Jednoduché cykly

dovolují dělení velkých úloh na menší = dekompozice

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Lokální definice (1) plocha-kruhu

KAPITOLA 9 - POKROČILÁ PRÁCE S TABULKOVÝM PROCESOREM

Úvod do Unixu. man: příkaz pro zobrazení nápovědy k danému příkazu, programu (pokud je k dispozici), např. man cp. pwd: vypíše cestu k aktuální pozici

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Úvod do Operačních Systémů

Pro označení disku se používají písmena velké abecedy, za nimiž následuje dvojtečka.

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Reliance 3 design OBSAH

Objektově orientované programování v jazyce Python

Příklad: Součet náhodných čísel ve vektoru s počtem prvků, které zadá uživatel, pomocí sum() a pomocí cyklu for. Ověříme, že příliš výpisů na

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

Programujeme v softwaru Statistica

Programové konvence, dokumentace a ladění. Programování II 2. přednáška Alena Buchalcevová

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

Předmluva 9 Obsah knihy 9 Typografické konvence 10 Informace o autorovi 10 Poděkování 10

Objektově orientované programování v jazyce Python

Předzpracování dat. Cvičení 2: Import a příprava dat v Matlabu MI-PDD, 09/2011. Pavel Kordík MI-POA

Objektově orientované programování

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Objektové programování

Transkript:

Programování v Matlabu Tomáš Kozubek Katedra aplikované matematiky VŠB Technická univerzita Ostrava 17. listopadu 15, 70800 Ostrava Poruba E mail: tomas.kozubek@vsb.cz Část 1. m soubory Programování v Matlabu spočívá ve vytváření tzv. m souborů (soubory s příponou.m), které se dělí na skripty a funkce. Skripty 1. Neakceptují vstupní argumenty a nevracejí výstupní argumenty. 2. Operují na datech v pracovním prostoru. Všechny proměnné definované ve skriptu jsou do tohoto prostoru uloženy a zůstávají v něm i po jeho ukončení. 3. Vhodné pro spuštění dávky příkazů, kterou potřebujeme spouštět vícekrát. 4. Skript je složen z řádků s příkazy a komentáři. 5. Volání skriptu pomocí jména souboru. Příklad skriptu goniom_fce.m Priklad skriptu na vypocet a vypis hodnoty goniometrickych funkci v bode x=pi/2 x=pi/2; s=sin(x); c=cos(x); t=tan(x); co=cot(x); disp([s,c,t,co]); Vypise hodnoty goniom. funkci na obrazovku Příklad skriptu statistics.m STATISTICS Script - spocte zakladni statistiky z dat ulozenych ve vektoru x Vektor dat x=[1 2 3 4 7 5 6 3 5 4 3]; Spocti zakladni statistiky mean_x=mean(x); Stredni hodnota std_x=std(x); Standardni odchylka var_x=var(x); Rozptyl min_x=min(x); Minimum max_x=max(x); Maximum mode_x=mode(x); Nejcasteji se vyskytujici hodnota Tisk statistik fprintf('stredni hodnota: 1.4f\n',mean_x); fprintf('standardni odchylka: 1.4f\n',std_x); fprintf('rozptyl: 1.4f\n',var_x);

fprintf('minimum: 1.4f\n',min_x); fprintf('maximum: 1.4f\n',max_x); fprintf('modus: 1.4f\n',mode_x); Funkce 1. Akceptují vstupní argumenty a vracejí výstupní argumenty. 2. Operují na datech v lokálním pracovním prostoru, vnitřní proměnné jsou defaultně lokální (možno změnit), po ukončení funkce se zruší. 3. Vhodné pro rozšíření možností MATLABu, resp. pro tvorbu vlastních projektů. 4. Funkce se skládá z těchto řádků: a. Řádek s definicí funkce uvozený klíčovým slovem function, př. function [r,s,t]=jmeno_funkce(x,y), kde x,y jsou vstupní argumenty a r,s,t výstupní. Jméno funkce se doporučuje volit shodně s názvem souboru. b. H1 řádek (hned pod definicí funkce). Jednořádkový co nejvýstižnější popis funkce začínající znakem. Tento řádek se prohledává při volání funkce lookfor a vypíše se na obrazovku při volání příkazu help se jménem adresáře. c. Help text řádky, které následují hned po H1 řádku a začínají symbolem. Tento text se vypíše na obrazovku i s H1 řádkem při volání příkazu help se jménem funkce. d. See also následuje za Help textem. Všechny Matlabovské funkce uvozené těmito klíčovými slovy se vypíší zvýrazněně a je možno kliknutím myši přejít na help text těchto funkcí. e. Řádky s příkazy a komentáři, kontrola vstupních a výstupních argumentů, vlastní tělo funkce, možnost definování podfunkcí. f. V případě vnořených (nested) funkcí je nutno primární funkci i všechny do ní vnořené funkce ukončit klíčovým slovem. Obecně není nutné funkci takto ukončovat. 5. Volání funkce pomocí jména souboru, který by měl být shodný se jménem funkce. Podfunkce Uvádějí se za definicí vlastní funkce. Začínají opět klíčovým slovem function a následují řádky s příkazy a komentáři. Podfunkce ovšem není viditelná vně funkce, v níž je definována. Poznámka Funkce, jejichž vstupní argumenty jsou řetězce, můžeme volat dvojím způsobem. Např. mkdir('dirname') nebo mkdir DirName vytvoří v obou případech adresář se jménem DirName. Příklad funkce sinc(x) function y=sinc(x) SINC Sinus cardinalis Uziti: y=sinc(x) See also SIN, ZEROS y=zeros(size(x)); y(x==0)=1; i=x~=0; y(i)=sin(x(i))./x(i);

Příklad funkce compute_statistics(x) function [mean_x,std_x,var_x,min_x,max_x,mode_x]=compute_statistics(x) COMPUTE_STATISTICS Spocte zakladni statistiky vstupniho vektoru x UZITI: [mean,std,var,min,max,mode]=compute_statistics(x) nebo stats=compute_statistics(x) Funkce vraci zakladni statistiky spoctene z ciselnych dat ulozenych ve vstupnim vektoru x. Konkretne vraci: mean - stredni hodnota std - standardni odchylka var - rozptyl min - minimum max - maximum mode - nejcasteji se vyskytujici hodnota stats - vsechny vyse uvedene statistiky v jednom vektoru See also mean, std, var, min, max, mode Test na pocet vstupnich argumentu if nargin~=1; error('spatny pocet vstupnich argumentu!'); ; Test na korektnost vstupnich argumentu (x je ciselny vektor) [m,n]=size(x); if ~isvector(x); error('vstupni argument x neni vektor!'); ; if ~isnumeric(x); error('vstupni argument x neni ciselny vektor!'); ; Spocti zakladni statistiky mean_x=mean(x); std_x=std(x); var_x=var(x); min_x=min(x); max_x=max(x); mode_x=mode(x); Modifikace vystupu if nargout==1; mean_x=[mean_x,std_x,var_x,min_x,max_x,mode_x]; ; function Podfunkce MEAN (upraveny vypocet stredni hodnoty) function f=mean(x) Vypocet stredni hodnoty f=sum(x)/(length(x)+1); Jména funkcí Rozlišuje se 31 znaků v závislosti na systému. Musí začínat písmenem a pokračuje dalšími písmeny, čísly nebo znakem podtržítko. Jméno funkce a jméno souboru se může lišit. Doporučuje se ovšem, aby byly stejné.

Rozlišení jména proměnné a funkce Při kontrole se postupně ptáme, zda se jedná o: 1. proměnnou, 2. podfunkci, 3. privátní funkci, 4. funkci existující v nastavených cestách. Vezme se vždy první výskyt z důvodu jednoznačnosti. Argumenty funkce Máme li více vstupních nebo výstupních argumentů, pak je oddělujeme čárkou. Vstupní argumenty píšeme do kulatých závorek a výstupní do hranatých. Pokud se argumenty modifikují uvnitř funkce, pak se automaticky vytváří jejich kopie v lokálním pracovním prostoru a pracuje se s touto kopií. V opačném případě fungují argumenty jako reference. Kontrola počtu vstupních a výstupních argumentů Počty zadaných vstupních a výstupních argumentů funkce volané uživatelem se získají pomocí MATLABovských funkcí nargin a nargout. Použití viz následující příklad. function [x,h]=linspace(a,b,n) LINSPACE Vraci vektor x s hodnotami od a do b s krokem h=(b-a)/n UZITI: [x,h]=linspace(a,b,n); x=linspace(a,b,n); [x,h]=linspace(a,b); n=10 defaultne x=linspace(a,b); n=10 defaultne a,b - meze intervalu n - pocet dilku diskretizace Test na pocet vstupnich argumentu if nargin<2 nargin>3; error('spatny pocet vstupnich argumentu!'); ; Defaultni hodnoty if nargin==2; n=10; ; Test na korektnost vstupnich argumentu if ~isnumeric(a) ~isnumeric(b) ~isnumeric(n) ~isscalar(a) ~isscalar(b) ~isscalar(n) n~=fix(n) n<=0 a>=b; error('a,b,n musi byt skalary, n>0 prirozene, a,b realne, a<b!'); ; if nargout==2 h=(b-a)/n; Krok diskretizace x=[a:h:b]; Hodnoty od a do b s krokem h else x=[a:(b-a)/n:b]; Hodnoty od a do b s krokem (b-a)/n function

MATLAB není interpret Při prvním volání funkce se vždy m soubor s definicí funkce přeloží do pseudokódu, který se uloží do paměti a zůstává tam po celou dobu běhu aplikace. Maže se příkazem clear, např. clear jmeno_funkce; clear functions; clear all. Pseudokód lze uložit do souboru s příponou.p pomocí příkazu pcode jmeno_funkce. Není třeba publikovat zdrojové m soubory, ale jen nečitelné p soubory. Funkce s proměnným počtem vstupních a výstupních argumentů Matlab umožňuje vytvářet funkce s proměnným počtem vstupních a výstupních argumentů pomocí polí buněk (varargin, varargout), kde každá buňka představuje libovolný MATLABovský objekt (matice, vektor, struktura, buňka, ). function myplot(x,varargin) for i=1:2:length(varargin)-1 if isnumeric(varargin{i+1}); fprintf('property: ''s'', Value: d\n',varargin{i},varargin{i+1}); else fprintf('property: ''s'', Value: ''s''\n',varargin{i},varargin{i+1}); ; plot(x,varargin{:}); Příklad volání: myplot(sin(0:pi/100:pi),'color','red','linestyle',':','linewidth',3); Pracovní prostor funkce nebo též lokální pracovní prostor Část paměti vyhrazená funkci k uložení proměnných a modifikovaných vstupních argumentů. Implicitní funkce Užívají se k rychlému dodefinování jednoduchých (jednořádkových) funkcí. Př. 1. 2 Funkce f ( x) = xe x se zapíše f=@(x) x.*exp(-x.^2); Užití: y=f([-1:0.1:1]); ezplot(f); Př. 2. 2 Funkce f ( xy, ) = xe y se zapíše f=@(x,y) x.*exp(-y.^2); Užití: y=f(10,[-1 0 1]); ezmesh(f);

Privátní funkce Privátní funkce jsou m funkce, které jsou uloženy v podadresářích se speciálním názvem private a označují se jako privátní, protože jsou viditelné pouze ve funkcích a skriptech, které splňují následující podmínky: 1. Funkce volající privátní funkci musí ležet v adresáři obsahujícím podadresář private. 2. Skript volající privátní funkci musí být vyvolán funkcí, která sama má přístup k privátním funkcím (viz bod 1.) Pozn. Adresář private se nenastavuje do prohledávaných cest a help k privátní funkci dostaneme pomocí volání help private/function_name. Vnořené (nested) funkce V Matlabu je možné definovat funkce uvnitř funkce. Je to obdoba definice podfunkce, tentokrát se ale musí použít klíčové slovo k vymezení zanoření funkcí. Vnořené funkce mají opět svůj lokální paměťový prostor, ovšem navíc sdílí proměnné definované na vyšších úrovních. Užití při tvorbě GUI a objektově orientovaném programování. Př. function x = A(p1, p2) function y = B(p3) function z = C(p4) function y = D(p5) function z = E(p6) Funkce C může volat funkce B a D, ale ne E, funkce B může volat D a funkce A může volat B a D, ale ne C a E. Proměnné v MATLABu Pro proměnné v MATLABu platí následující pravidla Proměnné nemusí být dopředu deklarovány, není třeba dopředu specifikovat typ. V případě přiřazení a=b, proměnné b musí být přiřazena hodnota. První výskyt proměnné vytvoří tuto proměnnou nebo ji přepíše, pokud už existuje. Jména proměnných rozlišuje se 31 znaků, rozlišují se velké a malé písmena, první znak je vždy písmeno, pak následují další písmena, čísla a podtržítka. Sdílení proměnných různými funkcemi Klíčové slovo global následované výčtem jmen proměnných, které chceme sdílet (od každé proměnné máme pouze jednu instanci). Ukládají se v globálním pracovním prostoru.

Jména sdílených proměnných mohou obsahovat velká písmena k odlišení od lokálních (zavedená konvence). Persistentní proměnné Používají se pouze ve funkcích, jsou uvozeny klíčovým slovem persistent a při vícenásobném volání funkce je vždy vytvořena pouze jedna instance ke každé perzistentní proměnné. Nejsou uloženy v globálním pracovním prostoru, takže nemohou být sdíleny různými funkcemi. Zůstávají v paměti, dokud se nezmění m soubor s definicí funkce, nebo nejsou smazány příkazem clear. Př. function test_pers(k) TEST_PERS Test perzistentnich promennych Zavolanim funkce bez argumentu se vytvori perzistentni promenna A, ktera bude obsahovat matici [1 2 3; 4 5 6]. Dalsim zavolanim funkce tentokrat s jednim argumentem K se promenna A prenasobi K. persistent A; if ~nargin A=[1 2 3; 4 5 6] else A=K*A ; Speciální hodnoty (návratové hodnoty funkcí) ans vrací hodnotu výstupního argumentu posledně volané funkce eps tolerance užitá při výpočtech s reálnými čísly realmax, realmin největší a nejmenší reálné číslo intmax, intmin největší a nejmenší celé číslo pi Ludolfovo číslo i, j imaginární jednotky inf nekonečno, např. při dělení n/0, kde n 0 NaN neplatná numerická hodnota, např. 0/0, inf/inf computer, version architektura, verze MATLABu Užití: x = 2*pi; tol = 3*eps; a = [2+3i 7 i]; Příklady 1. Vytvořte skript Sportka.m, který vygeneruje 6 různých setříděných celých čísel v intervalu od 1 do 49. Využijte např. příkazy length, unique, ceil, sort. 2. Napište funkci, která sestaví plnou nebo řídkou matici řádu n s 2 na diagonále a 1 na superdiagonále a subdiagonále pomocí příkazu diag nebo spdiags. 3. Napište funkci, která zintegruje libovolnou zadanou funkci f na intervalu <a,b> pomocí složeného lichoběžníkového pravidla s požadovanou přesností, poté ji rozšiřte i na použití Simpsonova pravidla.