2. MATLAB : vytváření funkcí
Vytváří se v okně Editoru:
spustí se z hlavního menu, File, New, M-file
okno Editoru obsahuje vlastní menu pro práci s funkcí
při ladění funkce lze použít krokovač (Debugger)
function [vystup]=jmeno(vstup)
příkazy
Struktura funkce:
oddělovač vstupů a výstupů je čárka
komentář začíná %
první komentář se zobrazí jako nápověda, help jmeno
3. MATLAB : vytváření funkcí
Sestavte funkci pro výpočet délky řemenice mezi dvěma koly.
d1 … průměr prvního kola
d2 … průměr druhého kola
d … vzdálenost os kol
d1 d2
d
4. function [l]=Remen(d1,d2,d)
% Delka remenice mezi dvema koly
% [l]=Remen(d1,d2,d);
% l ... delka remenice
% d1 ... prumer prvniho kola
% d2 ... prumer druheho kola (d1>=d2)
% d ... vzdalenost os kol
r1=d1/2; r2=d2/2; % vypocet polomeru obou kol
% delka rovneho useku remenice dle Pythagora:
lsikmo=sqrt(d^2-(r1-r2)^2);
% uhel mezi rovnym usekem remenice a spojnici os kol:
phi=asin((r1-r2)/d);
omega1=pi+2*phi; % stredovy uhel na prvnim kole
omega2=pi-2*phi; % stredovy uhel na druhem kole
l1=omega1*r1; % delka oblouku remenice na prvnim kole
l2=omega2*r2; % delka oblouku remernice na druhem kole
l=l1+l2+2*lsikmo; % uz je to tady
5. MATLAB : vytváření funkcí
Krokování nastavuje Debug v okně Editoru:
nastaví se zastavení programu (Set/Clear Breakpoint)
po spuštění se program zastaví na zvolené řádce
Command Window se přepne do krokovacího režimu ( K>> )
lze vypisovat hodnoty proměnných
krokování F10 / F11 / … (vyzkoušejte)
zastavení programu pomocí podmínky (Conditional Breakpoint)
zastavení při chybě, varování, NaN, Inf
6. MATLAB : vytváření funkcí
function c=prepona(a,b)
% Vypocet prepony
c=sqrt(a^2+b^2);
Příkaz input: prom = input( vysvětlující text )
% Hlavni program (skript)
% Data
a=input(’prvni odvesna=’);
b=input(’druha odvesna=’);
% volani funkce
c=prepona(a,b)
7. MATLAB : vytváření funkcí
function v=podil(x,y)
if x~=0
v = y/x;
end
Příklady na If analogické jako ve VB:
function s=test(a)
if rem(a,2)==0
s=’Sude’;
else
s=’Liche’;
end
8. MATLAB : vytváření funkcí
function d=dan(prijem)
if prijem<=91440
d = prijem*0.15;
elseif prijem<=183000
d = 13716+((prijem-91440)*0.2);
elseif prijem<=274200
d = 32028+((prijem-183000)*0.25);
elseif prijem<=822600
d = 54828+((prijem-274200)*0.32);
else
d = 230316+((prijem-822600)*0.4);
end
9. MATLAB : vytváření funkcí
function f=fakt(n)
f=1;
for i=1:n
f=f*i;
end
Příklady na For analogické jako ve VB:
10. MATLAB : vytváření funkcí
function e=euler(epss)
e=1; f=1; i=1; clen=1;
while clen>=epss
f = f*i;
clen = 1/f;
e = e + clen;
i = i+1;
end
Příklady na While analogické jako ve VB na Do:
11. MATLAB : 2D grafika
Příkaz plot: plot(x,y,’l’)
x … x-ové souřadnice, y … y-ové souřadnice, l … barva, symbol
otevře se grafické okno Figure s grafem
vyzkoušejte help plot
grid … přidá pomocnou mřížku
axis([xmin,xmax,ymin,ymax]) … změna rozsahu nastavení
xlabel(’text’), ylabel(’text’) … popisy os
text(x,y,’text’) … vložení textu do bodu (x,y)
gtext(’text’) … vložení textu do bodu kliknutí myší
title(’text’) … nadpis grafu
hold on … nakreslený graf nebude vymazaná při dalším kreslení
… vypne hold off
12. MATLAB : 2D grafika
Znázorněte funkce y1 = ex, y2 = e2x, y3 = ex/2 na intervalu <-1, 1>
s krokem h=0.1.
clear all; close all % mazání proměnných, graf. oken
a=-1; b=1; h=0.1; % meze intervalu a krok
x=a:h:b; x=x';
y1=exp(x); y2=exp(2*x); y3=exp(x/2);
plot(x,[y1 y2 y3])
% graficka vylepseni
grid % mrizka
axis([-1 1 0 10]) % rozsah nastavení
xlabel('x'), ylabel('f(x)'), title('Exponencialni funkce')
plot(x,y1)
figure(1) % nove okno pro grafiku
plot(x,y2,'r.') % styl zobrazeni
hold on % drzeni okna
plot(x,y1,'b:') % styl zobrazeni
13. MATLAB : 3D grafika
Zobrazení ploch a prostorových křivek:
mesh(x,y,z), plot3(x,y,z)
meshc, surf, surfc, surfl, surface, contour …
x, y, z … x-ové, y-ové, z-ové souřadnice
meshgrid … vygeneruje souřadnice bodů
surface … vytváří objekt, který lze dále upravovat
contour … průmět do roviny x,y vytvoří ”vrstevnice”
colormap, colorbar … nastavení barev, kombinuje se
červená-zelená-modrá v rozsahu <0;1>
14. MATLAB : 3D grafika
[x,y]=meshgrid(-2:.1:2); % vytvoreni site
z=-x.*exp(-x.^2-y.^2); % definice funkce
plot3(x,y,z) % nejjednodussi zobrazeni
% zobrazeni v barvach
mesh(x,y,z), title('graf fce'), xlabel('x'), ylabel('y')
colormap([0 0 1]) % změna barevne skaly, modra
figure(2), meshc(x,y,z) % navic prumet do roviny x,y
figure(3), surf(x,y,z) % povrch, vypada jako pevne teleso
surfc(x,y,z) % a jeste prida prumet do roviny x,y
surfl(x,y,z) % nasvetleni objektu, default 45 stupnu
s=[80,10]; surfl(x,y,z,s) % vlastni nasvetleni, s=[azimut, elevace]
% lze vtvorit surface jako objekt a potom s nim pracovat
s1=surface(x,y,z); get(s1)
% prumet do roviny contour(x,y,z)
15. MATLAB : grafický objekt
Grafické okno Figure je objekt gcf (číslo aktuálního grafického okna).
obecný příkaz pro práci s objektem
název = příkaz(vlastnost,hodnota) např. aaa=figure(1)
nastavení vlastnosti objektu
set(objekt,vlastnost,hodnota)
výpis vlastností objektu
get(objekt)
16. MATLAB : grafický objekt
% Definice umístení grafického okna a jeho vlastností
figure; % otevreni okna
% pozice okna
set(gcf,'Units','Normal','Position',[0.4,0.5,0.5,0.3])
% pozice souradneho systemu
s1=axes('Position',[0.1,0.1,0.8,0.7])
plot(sin(0:pi/10:2*pi)) % graf fce
% zjisti vlastnosti grafickeho okna
get(gcf)
% zjisti vlastnosti grafu v ramci okna
get(s1)
% Vybrane vlastnosti objektu s1 a jejich prednastaveni
% Color [x y z] barva plochy grafu
set(s1,'Color',[1 0 0]) % cervena
set(s1,'Color',[0 1 0]) % zelena
set(s1,'Color',[0 0 1]) % modra
… pokračuje …
17. MATLAB : grafický objekt
… pokračování …
% Box on/off obrys grafu
set(s1,'Box','off')
set(s1,'Box','on')
% Dalsi, napr. pro popis grafu
% FontName 'jmeno', FontSize [velikost],
% LineWidth [velikost], NextPlot 'replace'
% Visible on/off viditelnost grafu
% XColor, YColor, ZColor barva os, vztahuje se i na grid
% Nelze menit barvu grafu, je to jiny objekt!!!
18. MATLAB : grafický objekt
Nastavení více grafických polí v jednom okně: subplot
% a) 2 grafy pod sebou
subplot(211), plot(sin(0:pi/10:2*pi))
subplot(212), plot(cos(0:pi/10:2*pi))
% b) 2 grafy vedle sebe
figure; subplot(121), plot(sin(0:pi/10:2*pi))
subplot(122), plot(cos(0:pi/10:2*pi))
% c) 4 grafy
figure; subplot(221), plot(sin(0:pi/10:2*pi))
subplot(222), plot(cos(0:pi/10:2*pi))
subplot(223), plot(2*sin(0:pi/10:2*pi))
subplot(224), plot(2*cos(0:pi/10:2*pi))
% d) 3 g. spodni vetsi
figure; subplot(221), plot(sin(0:pi/10:2*pi))
subplot(222), plot(cos(0:pi/10:2*pi))
subplot(212), plot(2*cos(0:pi/10:2*pi))