155GIT1 / 5. cvičení: Porovnání verzí
m →Úlohy |
|||
Řádek 140: | Řádek 140: | ||
</source> | </source> | ||
datový soubor [ftp://athena.fsv.cvut.cz/ZFG/GIT1/carky.txt carky.txt] ke stažení | datový soubor [http://geo102.fsv.cvut.cz/vyuka/155GIT1/data/carky.txt carky.txt] <!--[ftp://athena.fsv.cvut.cz/ZFG/GIT1/carky.txt carky.txt]--> ke stažení | ||
Volání funkce: | Volání funkce: |
Verze z 22. 4. 2020, 20:25
Uživatelské funkce
Náplň cvičení
- uživatelské funkce
- chybová hlášení, nápověda k funkci
- drobné smíšené úlohy
Ukázky
Uživatelské funkce
Syntax
function [vystup1,vystup2,...,vystupn] = nazev(vstup1,vstup2,...,vstupn) end % end neni povinne
Každá funkce musí být uložena ve vlastním souboru s příponou .m. Název souboru musí odpovídat názvu funkce! Klíčové slovo function musí být na prvním řádku souboru.
function [min_x, max_x, mean_x] = stat(x)
min_x = min(min(x));
max_x = max(max(x));
mean_x = mean(x(:)); % stejny vysledek jako mean_x = mean(mean(x))
end
Příklad volání
data = rand(5)
[mi, ma, mn] = stat(data);
fprintf('min = %.3f\nmax = %.3f\nmean = %.3f\n', mi, ma, mn)
Chybová hlášení, nápověda
function [min_x, max_x, mean_x] = stat(x)
% vypocet minimalni, maximalni a prumerne hodnoty matice
if any(any( imag(x)>0 ))
error('stat: Vstupni matice obsahuje imaginarni cisla.')
end
min_x = min(min(x));
max_x = max(max(x));
mean_x = mean(x(:));
end
Vyvolání nápovědy k uživatelské funkci:
help stat
Volání funkce (chybná vstupní data):
data1 = [data, 5+2i * ones(5,1)]
[mi, ma, mn] = stat(data1)
Příkaz return
- je-li v běhu funkce vykonán příkaz return, je okamžitě činnost funkce ukončena (bez vykonání evtl.dalších příkazů) a na pozici jejího volání jsou vráceny aktuálně vypočtené hodnoty výstupních parametrů funkce
Drobné úlohy
Funkce pro výpočet nekonečné řady do zadané přesnosti (příklad iterativního výpočtu)
např. výpočet funkce arctg(), viz Taylorova řada:
function [arctgx] = arctg(x,mez)
% vypocet funkce arctg rozvojem v radu do zadane presnosti
% IN: x ... vektor argumentu funkce
% mez ... zadana presnost vypoctu
% OUT: arctgx ... vektor vypoctenych uhlu z intervalu <-pi/2,pi/2>
if any(x > 1) | any(x < -1)
error('arctg: Vstupni hodnoty musi byt z intervalu <-1,1>.')
end
% vypocet pro kazdy prvek daneho vektoru samostatne
for i=1:length(x)
% start iterace pro i-ty vstupni prvek
y0 = 100; % vkladam fiktivni hodnotu, kterou x na vstupu nikdy nemuze nabyt
% 1.iterace
n = 1;
y = x(i);
while abs( y-y0 ) > mez
% n-ta iterace
n = n+1;
y0 = y;
y = y0 + (-1)^(n+1) * x(i)^(2*n-1) / (2*n-1);
end
% ulozeni vypoctene hodnoty do vystupni promenne
arctgx(i) = y;
fprintf('Pocet iteraci vypoctu: %d\n',n)
end
Funkce pro načtení neformátovaných dat po řádcích
např. záměna čárky za tečku:
function teckazacarku(file)
% vyhleda vsechny carky v souboru a zameni je za tecku
% IN: file ... jmeno vstupniho souboru (textovy retezec)
if ischar(file) == 0
error('Jmeno vstupniho souboru musi byt textovy retezec.');
end
vstup = fopen(file,'r');
filenew = [file(1:end-4), '_upr', file(end-3:end)]; % jmeno noveho souboru
vystup = fopen(filenew,'w');
konec = 0; % indentifikator konce souboru
while konec==0
radek = fgets(vstup); % fgets() nacte 1 radek souboru (se znakem \n)
for i=1:length(radek)
if radek(i) == ','
radek(i) = '.';
end
end
fprintf(vystup,'%s',radek);
konec = feof(vstup); % feof() vrati pro konec souboru hodnotu 1, jinak vraci hodnotu 0
end
fclose all;
fprintf('Data ulozena do souboru %s\n',filenew);
datový soubor carky.txt ke stažení
Volání funkce:
teckazacarku('carky.txt')