102FY1G Fyzika G - Základy modelování

Podobné dokumenty
MATrixLABoratory letný semester 2004/2005

X37SGS Signály a systémy

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

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

while cyklus s podmínkou na začátku cyklus bez udání počtu opakování while podmínka příkazy; příkazy; příkazy; end; % další pokračování programu

LOGOMANUÁL. Husův rok 2015

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

Operace s vektory a maticemi + Funkce

Základy algoritmizace a programování

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í

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

Základní škola Kunratice

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

Stručný návod k programu Octave

Příklad: Řešte soustavu lineárních algebraických rovnic 10x 1 + 5x 2 +70x 3 + 5x 4 + 5x 5 = 275 2x 1 + 7x 2 + 6x 3 + 9x 4 + 6x 5 = 100 8x 1 + 9x 2 +

Základy algoritmizace a programování

Příklady k prvnímu testu - Matlab

Základy algoritmizace a programování

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

EP ENERGY TRADING CORPORATE DESIGN MANUAL V. 01.2

Univerzitní licence MATLABu. Pište mail na: se žádostí o nejnovější licenci MATLABu.

Univerzita Karlova Pedagogická fakulta DIPLOMOVÁ PRÁCE

TECHNICKÁ UNIVERZITA V LIBERCI ZÁVĚREČNÁ PRÁCE

Specializace Management hotelnictví

Grafický manuál značky ELI Beamlines

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

více křivek v jednom grafu hold on přidrží aktuální graf v grafickém okně, lze nakreslit více grafů do jednoho grafického okna postupně hold off

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

Rozvržení stránky. Co se v modulu dozvíte? Pozicování

Bezpečnostní analýza Izrael-Palestina

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

Základy HTML. Obecná syntaxe HTML. Struktura HTML

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

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

Lineární algebra s Matlabem cvičení 3

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

Příklad elektrický obvod se stejnosměrným zdrojem napětí

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

MATLAB, v , Release 13

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

při vykreslování křivky je důležitá velikost kroku, příp. počet prvků, ve vektoru t (na ose x). t = linspace(0,2*pi,500); y = sin(t); t =

Sada 1 - Základy programování

Interpolace a aproximace dat.

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

POUŽITÍ ŠABLON TABULKY

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

1 Cvičení 1a - Úvod od programování v Matlabu/Octave

Algoritmizace a programování

ROZ1 - Cv. 1 - Zobrazenэ snэmku a zсklady Matlabu

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Programovací jazyk Pascal

0.1 Úvod do lineární algebry

Hodnocení informačního střediska

AVDAT Vektory a matice

Operátory pro maticové operace (operace s celými maticemi) * násobení maticové Pro čísla platí: 2*2

Numerická integrace a derivace

Algoritmizace a programování

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

Základy maticového počtu Matice, determinant, definitnost

Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném rušení ) Muhammada ibn Músá al-chvárizmího (790? - 850?, Chiva, Bagdád),

KIV/ZIS cvičení 5. Tomáš Potužák

MATLAB základy. Roman Stanec PEF MZLU

E+034 = ; = e E+034

Bakalářská matematika I

P íklady k prvnímu testu - Scilab

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

DEFINICE Z LINEÁRNÍ ALGEBRY

3.T Technické výpočty v Octave/Matlabu zpracování a zobrazení dat

SEMESTRÁLNÍ PRÁCE Z X37SAS Zadání č. 7

B) výchovné a vzdělávací strategie jsou totožné se strategiemi vyučovacího předmětu Matematika.

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

MAXScript výukový kurz

VI. Maticový počet. VI.1. Základní operace s maticemi. Definice. Tabulku

Programování v chemii (MATLAB)

MATURITNÍ TÉMATA Z MATEMATIKY

Výpočet excentrického klikového mechanismu v systému MAPLE 11 Tomáš Svoboda Technická fakulta Česká Zemědělská Univerzita

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

5 Přehled operátorů, příkazy, přetypování

Programování v jazyce JavaScript

Konstrukce a ochranná zóna loga na šířku 3 Konstrukce a ochranná zóna loga na výšku 4 Konstrukce a ochranná zóna značky 5

Wolfram Alpha. v podobě html stránky, samotný výsledek je často doplněn o další informace (např. graf, jiné možné zobrazení výsledku a

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

Algoritmizace a programování

Kreslení grafů v Matlabu

Operace s maticemi. 19. února 2018

Mgr. Ladislav Zemánek Maturitní okruhy Matematika Obor reálných čísel

Pôvodne: Interaktívny program na operácie s maticami Teraz: Vysoko úrovňový jazyk na technické výpočty a interaktívne prostredie na:

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

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

Čtvercové matice. Čtvercová matice je taková matice, jejíž počet řádků je roven počtu jejích sloupců

Indexové výrazy >> A(1,:) >> A=[1,2;3,4] >> a=a(:) >> a(3)= 8 A = a = ans = 1 2. >> a a = >> A(2,1) >> A(:,1) ans = ans = >> a(3) ans =

Ekonomická fakulta, Jihočeská univerzita v Českých Budějovicích. MATEMATICKÝ SOFTWARE MAPLE - MANUÁL Marek Šulista

I. Kalkulátor Rebell SC2040 manuál s příklady Tlačítko: MODE CLR

LabView jako programovací jazyk II

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

GRAFICKÝ MANUÁL SMP CZ

Programování v Matlabu

0.1 Úvod do lineární algebry

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Transkript:

102FY1G Fyzika G - Základy modelování v Matlabu pro zpracování fyzikálních měření Petr Pokorný Fakulta stavební ČVUT v Praze, katedra fyziky 8. března 2018

Osnova 1 Úvod 2 První seznámení 3 Základy syntaxe 4 Funkce 5 Grafy 6 Symbolické výpočty 7 Řízení toku programu 8 Vektorizace 9 Příklady

Kontakt Ing. Petr Pokorný Fakulta stavební ČVUT v Praze, katedra fyziky místnost A634 petr.pokorny@fsv.cvut.cz

Kde sehnat Matlab? Studentská verze ČVUT https://download.cvut.cz (oficiální komerční distributor: http://www.humusoft.cz) Alternativa https://www.gnu.org/software/octave

První seznámení

Pracovní prostředí Pracovní lišta Command Window (příkazové okno) Current Folder (současný pracovní adresář) Workspace (aktivní proměnné) History (prohĺıžeč historie)

Příkazový řádek versus Editor Do příkazového řádku můžeme zapisovat příkazy, jako bychom využívali kalkulačku. Přitom lze využít veškeré nástroje a volat všechny funkce Matlabu. Pro složitější (delší) výpočty je ale vhodnější práci postupně ukládat v Editoru. Soubory (m-fily) lze pak opakovaně snadno volat a případně korigovat zadání jednotlivých příkazů.

Editor File - správa souborů Navigate - navigace mezi soubory Edit - možnosti editace Breakpoints - zarážky Run - spuštění výpočtu

Nápověda Pro podrobné seznámení se syntaxí a příklady použití jednotlivých funkcí má Matlab výborně zpracovanou nápovědu. Dialogové okno lze volat stisknutím tlačítka Help v Pracovní liště. Další možností dotazu na podrobnosti k jednotlivým funkcím jsou příkazy help a doc. 1 % Vypis strucne informace k funkci sin na terminal 2 help sin 3 4 % Otevreni kompletni dokumentace k funkci sin 5 doc sin

Základy syntaxe

Příprava prostředí, komentáře Při práci v Editoru i mimo něj je v řadě případech vhodné použít funkce clc, clear, close. Komentář uvozujeme znakem %. Vše za ním Matlab ignoruje. 1 % toto je komentar 2 clc; % vymaze vse na terminalu 3 clear variables; % vymaze vsechny promenne z... pameti 4 clear globals; % vymaze vsechny globalni... promenne 5 close all; % zavre vsechna otevrena okna

Matice a vektory (numerická vícerozměrná pole) Matlab umožňuje zápis matice mnoha způsoby. Přiřazení hodnot proměnné uvedeno hranatými závorkami. 1 % Zapis "WYSIWYG" 2 A = [ 1 2 3 3 4 5 6 4 7 8 9 ]; 5 6 % Strednik oznacuje prechod na novy radek 7 B = [ 1 2 3; 4 5 6; 7 8 9 ]; 8 9 % Carka oddeluje hodnoty v radku 10 C = [ 10, -54, 123; 52, 8, -45; 22, 47, -8]; Poznámka: Středník na závěr každého příkazu = operátor potlačení výstupu.

Matice a vektory - pokračování Matice s jedním rozměrem = 1 vektor 1 % Zapis "WYSIWYG" (radkovy vektor) 2 a = [ 1 2 3 4 5 ]; 3 4 % Carka oddeluje hodnoty v radku (radkovy vektor) 5 b = [ 10, -54, 123, 52, 8 ]; 6 7 % Sloupcovy vektor 8 s1 = [1 9 2 10 3 ]; 11 12 s2 = [1; 2; 3; 4; 5];

Matice a vektory - pokračování Skalár je matice rozměru 1x1. 1 % Skalarni hodnota 2 K = 54; Určení rozměru numerického pole funkce size D = size(x), for M-by-N matrix X, returns the two-element row vector D = [M,N] containing the number of rows and columns in the matrix. For N-D arrays, size(x) returns a 1-by-N vector of dimension lengths. Trailing singleton dimensions are ignored.

Matice a vektory - pokračování Zadání vektoru pomocí operátoru dvojtečka a funkce linspace 1 % Vektor od 1 po 2 do 100 2 a = 1:2:100; 3 4 % Vektor od 100 po -5 do 50 5 b = 100:-5:50; 6 7 % Diferenci +1 neni treba zapisovat (vektor od 1... po 1 do 100) 8 c = 1:100; 9 10 % Vektor o 1000 prvcich od 1 do 5 vcetne 11 d = linspace(1,5,1000);

Spojování matic a vektorů Matice a vektory mohou sloužit jako submatice pro další použití. Nutné je však pamatovat na jejich rozměry a rozměr výsledné matice. 1 % Definice submatic 2 A = [ 1 2 3 ]; B = [ 3 4 ]; C = 15; 3 4 % Spojeni do jedne matice 5 D = [A; B C]; Pro spojování dále slouží funkce: cat, horzcat, vertcat,...

Odstranění řádků/sloupců matice Odstranění řádků nebo sloupců provedeme zavedením tzv. prázdné proměnné []. 1 % Definice matice 2 A = [ 1 2 3; 4 5 6; 7 8 9]; 3 4 % Odstraneni prvniho radku 5 A(1,:) = []; 6 7 % Odstraneni druheho a tretiho sloupce 8 A(:,[2 3]) = [];

Textové řetězce Textové řetězce uvozujeme jednoduchými uvozovkami. Zobrazení textového řetězce - funkce disp 1 % Textovy retezec 2 jmeno = 'Petr'; 3 prijmeni = 'Pokorny'; 4 zamestnavatel = 'CTU in Prague'; 5 6 % Vypis retezce na terminal 7 disp(jmeno) 8 disp(['prijmeni: ',prijmeni])

Indexování Indexování = výběr hodnot matice (řetězce) z dané pozice. Indexujeme formou vektoru, který obsahuje čísla pozic, které chceme vybrat. Pro označení maximálního rozměru dané matice použijeme funkci size nebo kĺıčové slovo end. 1 % Indexovani vyctem jednoho prvku 2 A = 1:50; % zadani matice 3 A(1) % vyber z pozice 1 4 A(33) % vyber z pozice 33 5 A(48) % vyber z pozice 48

Indexování - pokračování 1 % Indexovani vektorem 2 A(1:25) 3 A(1:5:25) 4 A([5 10 45]) 1 % Pouziti end 2 A(10:end) 3 A(end-10:end)

Indexování - pokračování U výběru prvků matic můžeme použít operátor dvojtečka jako označení celého rozsahu. 1 % Indexovani matice 2 A = rand(30,30); % matice nahodnych cisel 3 A(1:5,end-3:end) 4 A(:,[1 3 20 25])

Indexování - pokračování Výběr prvků matice můžeme provést jedním číslem nebo vektorem. V tu chvíli platí výběr tzv. po sloupcích indexu 1 odpovídá pozice (1,1), indexu 2 odpovídá pozice (2,1), atp. 1 % Indexovani matice vektorem 2 A = rand(30,30); % matice nahodnych cisel 3 A(1:5) 4 A(26:35) % vybere poslednich pet prvku prvniho... sloupce a prvnich pet druheho

Indexování - pokračování Indexováním můžeme vybírat také prvky z textových řetězců. 1 % Zadani retezce 2 lorem = 'Lorem ipsum dolor sit amet, consectetur... adipiscing elit, sed do eiusmod tempor... incididunt ut labore et dolore magna aliqua.... Ut enim ad minim veniam, quis nostrud... exercitation ullamco laboris nisi ut aliquip... ex ea commodo consequat. Duis aute irure dolor... in reprehenderit in voluptate velit esse... cillum dolore eu fugiat nulla pariatur.'; 3 4 lorem(1:100)

Základní maticové operace sčítání - přičtení skalární hodnoty, součet matic stejného rozměru 1 A = rand(5,5); B = rand(5,5); 2 C = A + 5; % pricte 5 vsem prvkum matice 3 D = A + B; % soucet matic násobení - pravidla maticového násobení (rozměry matic) 1 E = rand(5,3); F = rand(3,2); 2 G = E*F; % [5x3]*[3x2] = [5x2]

Základní maticové operace - pokračování tečkovaný operátor - operace prvek po prvku pro matice stejného rozměru (násobení, mocnění, dělení prvek po prvku) 1 A = rand(5,3); B = rand(5,3); 2 C = A.*B; % prvek A(i,j) vynasobi s B(i,j) 3 D = A.ˆB; % dtto pro mocneni 4 E = A./B; % a deleni matice musí mít shodné rozměry

Základní maticové operace - pokračování transpozice komplexní matice (apostrof komplexně sdružená k transponované, s tečkovaným operátorem bez komplexně sdružených hodnot) 1 A = [1 + 2i, 3, 2-5i; 2, 4, 6i; 1 + 1i, 5, 3]; 2 B = A'; % matice transponovana komplexne... sdruzena 3 C = A.'; % matice pouze transponovana 4 5 D = rand(3,3); 6 E = D'; % pro matici realnych hodnot nema... vliv (komplexni cast = 0)

Vybrané užitečné funkce speciální proměnné 1 pi % hodnota pi 2 eps % strojove epsilon 3 inf % nekonecno 4 NaN % Not a number 5 i, j % imaginarni jednotka 6 realmin % nejmensi realne cislo 7 realmax % nejvetsi realne cislo

Vybrané užitečné funkce - pokračování matice a maticové funkce 1 ones % matice jednicek 2 zeros % matice nul 3 eye % jednotkova matice 4 rand % matice nahodnych cisel 5 diag % diagonalni matice 6 7 size % velikost matice 8 length % delka vektoru 9 det % determinant 10 inv % inverze 11 eig % vlastni cisla 12 rank % hodnost 13 find % vyhledani prvku (A == 5, B 3) 14 all % pravda pro vsechny nenulove 15 any % pravda pro nejaky nenulovy

Vybrané užitečné funkce - pokračování matematické a statistické funkce 1 abs % absolutni hodnota 2 sign % signum 3 sin, sind % sinus (radiany), sinus (stupne) 4 cos, cosd,... % cosinus 5 asin, acos,... % inverzni goniometricke funkce 6 exp % exponenciala zakladu e 7 log, log10 % prirozeny/dekadicky logaritmus 8 round % zaokrouhleni na nejblizsi cele 9 fix % zaokrouhleni na nizsi cele 10 ceil, floor % zaokrouhleni k +inf, -inf 11 real, imag % realna a imaginarni cast 12 sort % razeni matice 13 sum % soucet prvku matice 14 min, max % minimum, maximum 15 mean, median % prumer, median 16 std, var % smerodatna odchylka, variance

Vybrané užitečné funkce - pokračování aproximace a interpolace 1 polyfit % polynomicky fit 2 polyval % vypocet polynomu z koeficientu 3 spline % spline interpolace 4 interp1 % 1-D interpolace 5 interp2 % 2-D interpolace 6 interpn % n-d interpolace 7 griddata % interpolace dat nerovnomerneho... gridu

Vybrané užitečné funkce - pokračování relační operátory == je rovno = není rovno < je menší <= je menší nebo rovno > je větší >= je větší nebo rovno logické operátory && AND stejná priorita jako OR OR stejná priorita jako AND NOT nejvyšší priorita

Funkce

Uživatelsky definované funkce definice začíná kĺıčovým slovem function seznam volitelného počtu parametrů ohraničený [ ], jeden parametr nemusí být v závorkách výstižné jméno funkce vstupní parametry za jménem v kulatých závorkách funkce ukládáme do samostatného souboru s příponou.m 1 function [vystupy] = jmeno(vstupy) 2 % popis funkce pro help a doc 3 vystupy = vstupy; 4 end

Uživatelsky definované funkce - pokračování 1 function I = intlich(x,y) 2 % I = intlich(x,y) 3 % vypocte numericky integral lichobeznikovym... pravidlem 4 5 a = x(1); b = x(end); 6 fa = y(1); fb = y(end); 7 N = length(x)-1; 8 10 9 I = (b - a)/n*((fa + fb)/2 + sum(y(2:end-1))); 11 end

Funkce s volitelným počtem vstupních parametrů počet vstupních parametrů - nargin pole buněk vstupních parametrů - varargin 1 function N = myfcn(varargin) 2 3 N = nargin; 4 5 for in = 1:N 6 disp( varargin{in} ); 7 end 8 9 end

In-line a lokálně definované funkce In-line funkce - definované v řádku Lokálně definované funkce (vnořené) - proměnné, které nejsou na vstupu, hledá v nadřazené funkci

In-line a lokálně definované funkce - pokračování 1 function main 2 % main nadrazena funkce 3 4 % In-line funkce 5 fce1 = @(x) x.ˆ2 + 3; 6 7 % Volani in-line funkce 8 a = 50; 9 b = fce1(a); 10 11 % Volani vnorene funkce 12 c = localfcn(b); 13 14 function out = localfcn(in) 15 % lokalne definovana funkce 16 out = in + a; % a je dedena promenna 17 end 18 19 end

Základní grafy

Liniové 2D grafy Základní 2D graf vytváříme příkazem plot (podrobně viz doc plot). Širokou škálou příkazů můžeme specifikovat zobrazované prvky. 1 x = linspace(0,4*pi,1000); 2 y = sin(x); 3 4 figure(1) % okno grafu 5 plot(x,y,'b-') % modra linie 6 xlabel('x') % popis osy x 7 ylabel('y') % popis osy y 8 legend('y = sin(x)') % legenda 9 title('graf funkce') % nadpis 10 grid on % mrizka 11 axis equal % rovnomerne osy 12 xlim([0 4*pi]) % limity osy x 13 ylim([-1.1 1.1]) % limity osy y

Liniové 2D grafy - pokračování

Graf z Workspace Graf lze snadno generovat přímo pro proměnné z Workspace. Označíme-li vybrané proměnné, poté se odemknou možnosti v záložce Plots. V okně Figure následně můžeme měnit parametry grafu. Vše, co se provádí ve Figure, lze zapsat do kódu v Editoru. Kód grafu lze generovat z File/Generate Code.

Další vybrané typy grafů Existuje celá řada typů grafů pro různé vizualizace: liniové grafy plot, plotyy, semilogx, semilogy, loglog, area, errorbar, plot3, comet, scatter grafy scatter, scatter3, koláčové grafy pie, pie3, histogramy hist, rose, prostorové grafy surf, surfc, surfl, mesh, meshc, meshz, waterfall, ribbon, contour3, a mnoho dalších...

Další vybrané typy grafů - pokračování

U vod Prvnı sezna menı Za klady syntaxe Funkce Grafy Symbolicke vy poc ty R ı zenı toku programu Dals ı vybrane typy grafu - pokrac ova nı Vektorizace Pr ı klady

Symbolické výpočty

Symbolické proměnné V Matlabu lze pracovat i s analytickými vztahy, derivovat, integrovat, apod., pomocí symbolických proměnných. 1 % Definice symbolickych promennych 2 syms a b c 3 4 % Pouziti 5 M = a*b; 6 N = a/c;

Základní symbolické operace 1 % Definice symbolickych promennych 2 syms a b c 3 4 % Zakladni algebraicke operace 5 M = a*b; N = a/c; 6 7 % Derivace 8 diff( cos(b) ) 10 9 diff( sin(a*b)*exp(c), b ) % parcialni derivace... podle b 11 % Integrace 12 int( cos(b) ) 13 int( sin(a)ˆ2, a, 0, 1 ) % urcity integral... podle a od 0 do 1

Řízení toku programu

Řízení toku programu Podmínky příkazy if, switch Cykly příkazy for, while Vynucené zastavení cyklu příkaz break Vynucené pokračování v další iteraci příkaz continue

Podmínky příkaz if Testuje jednu nebo více podmínek na pravdu (true/false). 1 % Priklad jednoduche podminky 2 test = true; 3 if test 4 disp('podminka byla splnena.'); 5 end 6 7 % Priklad if/else 8 if test 9 disp('podminka byla splnena.'); 10 else 11 disp('podminka nebyla splnena.'); 12 end

Podmínky příkaz if - pokračování 1 % Priklad if/elseif/else 2 test1 = false; 3 test2 = true; 4 if test1 5 disp('podminka 1 byla splnena.'); 6 elseif test2 7 disp('podminka 1 nebyla splnena.'); 8 disp('podminka 2 byla splnena.'); 9 else 10 disp('nebyla splnena zadna z podminek.'); 11 end

Podmínky příkaz if - pokračování Podmínka bude splněna, kdykoli je příkaz za kĺıčovým if splněn. K formulaci testovacích příkazů používáme relační a logické operátory: ==, = je rovno, není rovno <, <= je menší, menší nebo rovno >, >= je větší, větší nebo rovno &&,, AND, OR, NOT Dále lze využít další funkce (např. all, any), které vrací hodnoty true/false nebo jimi tvořené vektory.

Podmínky příkaz if - pokračování 1 % Priklad if 2 testvalue1 = 1e-5; 3 testvalue2 = 1; 4 A = 0.05; 5 if ( A > testvalue1 ) && ( A < testvalue2 ) 6 disp(['a je vetsi nez ', num2str(testvalue1),... 7 ' a mensi nez ',num2str(testvalue2)]); 8 else 9 disp('a je mimo kriticky rozsah.'); 10 end Poznámka: Využili jsme funkci num2str, která převádí numerickou hodnotu na textový řetězec.

Podmínky příkaz switch Větvení programu na takové případy, kdy se dotazovaná proměnná může rovnat různým hodnotám. 1 switch dotazovana promenna 2 case pripad jedna 3 % telo programu pro pripad jedna 4 case pripad dva 5 %... 6 otherwise 7 end

Podmínky příkaz switch - pokračování Počet případů (case) není omezen. Příkaz otherwise není povinný. 1 vek = 15; 2 switch vek 3 case 14 4 disp('promenna vek je rovna 14.') 5 case 15 6 disp('promenna vek je rovna 15.') 7 otherwise 8 disp('promenna vek neni 14 ani 15.') 9 end

Cykly příkaz for Cykly využíváme, má-li se opakovat určitá část kódu (iterace, procházení prvků matice, načítání textu řádek po řádku,...). Za kĺıčovým slovem for následuje proměnná, jejíž hodnota se v průběhu cyklu (opakování) mění (konstantně narůstá,...). Hodnoty této proměnné definujeme vektorem. Délka tohoto vektoru určuje počet opakování. 1 % Vypsani cisel 1 az 100 2 for n = 1:10 3 disp(['cislo ' num2str(n)]); 4 end

Cykly příkaz for - pokračování 1 % Vypis lichych radku matice 2 3 A = rand(100,5); % vytvoreni matice 4 5 for idx = 1:2:size(A,1) % n je vektor 1, 3,...... az pocet radku matice 6 7 disp(a(idx,:)); 8 9 end Poznámka: Tento příklad lze řešit elegantně tzv. vektorizací (viz dále).

Cykly příkaz for - pokračování 1 % Priklad jednoduche animace 2 x = linspace(0,2*pi,100); 3 y = sin(x); 4 5 figure(1) 6 xlabel('x'); ylabel('y'); 7 grid on; hold on; 8 xlim([0 2*pi]); ylim([-1 1]); 9 for in = 1:length(y) 10 plot(x(in),y(in),'x'); 11 pause(0.2); 12 end 13 hold off

Cykly příkaz while While cyklus probíhá do té doby, dokud je splněna vstupní podmínka. Nemusíme znát počet opakování cyklu. 1 while podminka is true 2 % kod vykonavany, je-li podminka splnena 3 end 1 value = 5; 2 while value > 0.1 3 value = value/2; 4 disp(['hodnota je: ',num2str(value)]) 5 end

Cykly příkaz while - pokračování Newtonova metoda pro hledání druhé odmocniny x = a x i+1 = 1 ) (x i + axi, x 0 = a 2 1 a = 4; 2 x1 = a; diference = 10; % nulta iterace 3 while abs(diference) > 1e-10 4 x2 = 1/2*(x1 + a/x1); % update x2 5 diference = x2 - x1; % update dif 6 x1 = x2; % update x1 7 disp(x2); % zobrazeni 8 end

Vynucené zastavení cyklu příkaz break break vynucené zastavení for nebo while cyklu 1 data = [1 2 3 NaN 5 6]; 2 for in = 1:length(data) 3 if isnan(data(in)) 4 disp(['nan hodnota na pozici ',... num2str(in)]); 5 break; 6 end 7 end

Vynucené pokračování v další iteraci příkaz continue continue okamžité spuštění dalšího kroku cyklu s vynecháním zbytku aktuálního 1 vzdalenosti = [10 21 32 12 25 16]; 2 for in = 1:length(vzdalenosti) 3 if vzdalenosti(in) > 15 4 disp(['bod ' num2str(in) ' je moc daleko']) 5 continue; 6 end 7 disp(['bod ' num2str(in) ' je ve vzdalenosti... ' num2str(vzdalenosti(in)) ' m']) 8 end

Vektorizace

Vektorizace Vektorizace je jeden z nejsilnějších nástrojů Matlabu pro optimalizaci výpočtů na velkých souborech dat. Řada operací prováděných iterativně (pomocí cyklů apod.) lze řešit vektorizací a s využitím integrovaných funkcí Matlabu. Využíváme zpravidla indexování pomocí vektorů, které nahradí výběr pomocí cyklu. Pro hromadnou aplikaci operátoru na vybrané prvky používáme často tečkovaný operátor.

Vektorizace - pokračování 1 % Priklad vektorizace souctu kazdeho licheho... prvku matice 2 A = rand(100000,1); 3 4 % Pomoci for cyklu 5 t1 = tic; % mereni casu 6 S1 = 0; 7 for in = 1:2:length(A) 8 S1 = S1 + A(in); % scitani 9 end 10 S1 11 t1 = toc(t1) 12 13 % Vektorizaci 14 t2 = tic; 15 S2 = sum(a(1:2:end)) % soucet na vybrane prvky 16 t2 = toc(t2)

Vektorizace - pokračování 1 % Priklad souctu ctvercu vybranych prvku matice 2 A = rand(100,100); 3 4 % Pomoci for cyklu 5 t1 = tic; % mereni casu 6 S1 = 0; 7 for in = 1:2:size(A,1) % cyklus pres radky 8 for jn = 1:2:size(A,2) % cyklus pres sloupce 9 S1 = S1 + A(in,jn)ˆ2; 10 end 11 end 12 S1 13 t1 = toc(t1) 14 15 % Vektorizaci 16 t2 = tic; 17 S2 = sum(sum( A(1:2:end,1:2:end).ˆ2 )) % mocneni... teckovanym operatorem a soucet funkcemi 18 t2 = toc(t2)

Vektorizace - pokračování 1 % Nejkratsi vzdalenost mesta od bodu 2 X = [1034250 1034157 1034874]; 3 Y = [ 733245 733105 733990]; 4 5 X0 = 1034200; Y0 = 733100; 6 7 % For cyklem 8 R = zeros(size(x)); 9 for n = 1:length(X) 10 R(n) = sqrt((x0 - X(n))ˆ2 + (Y0 - Y(n))ˆ2); 11 end 12 Rmin = min(r) 13 14 % Vektorizaci 15 Rmin2 = min( sqrt((x0 - X).ˆ2 + (Y0 - Y).ˆ2) )

Příklady k procvičení

Hustota pevných látek (základní operace, symbolické výpočty) Přímým měřením rozměrů a hmotnosti válečku určete hustotu, ze které je daný vzorek vyroben, a vypočtěte nejistotu výsledné hustoty.

Metoda nejmenších čtverců (funkce) Meridián rotačně symetrické kvadratické plochy byl proměřen v 9 bodech. Nejistota vertikální souřadnice je dána lineárním vztahem u C (z) = 0.01 + 0.05z. Vypočtěte koeficienty kvadratického profilu meridiánu společně s odhadem jejich nejistot 1. 1 [q, Σ q, Σ l, s 0] = mnc(a, l, Σ l, s 0)

Díky za pozornost :) Ing. Petr Pokorný Fakulta stavební ČVUT v Praze, katedra fyziky Skupina aplikované optiky petr.pokorny@fsv.cvut.cz