155GIT1 / 7. cvičení: Porovnání verzí
mBez shrnutí editace |
mBez shrnutí editace |
||
Řádek 7: | Řádek 7: | ||
# uživatelské funkce | # uživatelské funkce | ||
# chybová hlášení | # chybová hlášení | ||
# | # drobné smíšené úlohy | ||
== Ukázky == | == Ukázky == | ||
Řádek 17: | Řádek 17: | ||
function [vystup1,vystup2,...,vystupn] = nazev(vstup1,vstup2,...,vstupn) | function [vystup1,vystup2,...,vystupn] = nazev(vstup1,vstup2,...,vstupn) | ||
end | end % end neni povinne | ||
Každá funkce musí být uložena ve vlastním souboru s příponou <tt>.m</tt>. Název souboru musí odpovídat názvu funkce! | Každá funkce musí být uložena ve vlastním souboru s příponou <tt>.m</tt>. Název souboru musí odpovídat názvu funkce! | ||
Řádek 23: | Řádek 23: | ||
<source lang=octave> | <source lang=octave> | ||
function [min_x, max_x, mean_x] = stat(x) | function [min_x, max_x, mean_x] = stat(x) | ||
min_x = min(x); | min_x = min(x); | ||
max_x = max(x); | max_x = max(x); | ||
mean_x = mean(x); | mean_x = mean(x); | ||
end | end | ||
</source> | </source> | ||
Řádek 32: | Řádek 34: | ||
<source lang=octave> | <source lang=octave> | ||
[mi, ma, mn] = stat( | data = rand(10,1) | ||
fprintf('min = %.3f\nmax = %.3f\nmean = %.3f\n', | [mi, ma, mn] = stat(data) | ||
fprintf('min = %.3f\nmax = %.3f\nmean = %.3f\n', mi, ma, mn) | |||
</source> | </source> | ||
=== Chybová hlášení === | === Chybová hlášení === | ||
<source lang=octave> | |||
function [min_x, max_x, mean_x] = stat(x) | |||
% vypocet minimalni, maximalni a prumerne hodnoty vektoru | |||
if any(imag(x)) > 0 | |||
error('stat: Vstupni vektor obsahuje imaginarni cisla.') | |||
end | |||
min_x = min(x); | |||
max_x = max(x); | |||
mean_x = mean(x); | |||
end | |||
</source> | |||
Vyvolání nápovědy k funkci: | |||
<source lang=octave> | |||
help stat | |||
</source> | |||
Volání funkce: | |||
<source lang=octave> | |||
data1 = [data; 5+2i; 4-3i] | |||
[mi, ma, mn] = stat(data1) | |||
</source> | |||
=== Drobné úlohy === | === Drobné úlohy === | ||
Funkce pro | Funkce pro výpočet nekonečné řady do zadané přesnosti | ||
např. výpočet funkce arctg(): | |||
<source lang=octave> | |||
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 | |||
</source> | |||
Funkce pro načtení neformátovaných dat po řádcích | |||
např: záměna čárky za tečku: | |||
<source lang=octave> | <source lang=octave> | ||
function teckazacarku(file) | function teckazacarku(file) | ||
( | |||
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 | |||
end | |||
fclose all; | |||
fprintf('Data ulozena do souboru %s\n',filenew); | |||
end | end | ||
</source> | |||
Volání funkce: | |||
datový soubor [ftp://athena.fsv.cvut.cz/ZFG/GIT1/carky.txt carky.txt] ke stažení | |||
<source lang=octave> | |||
teckazacarku('carky.txt') | |||
</source> | </source> | ||
Řádek 52: | Řádek 144: | ||
== Úlohy == | == Úlohy == | ||
* | * budou doplněny záhy |
Verze z 6. 4. 2016, 08:51
Uživatelské funkce
Náplň cvičení
- (z 6.cvičení) složené podmínky
- uživatelské funkce
- chybová hlášení
- 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!
function [min_x, max_x, mean_x] = stat(x)
min_x = min(x);
max_x = max(x);
mean_x = mean(x);
end
Příklad volání:
data = rand(10,1)
[mi, ma, mn] = stat(data)
fprintf('min = %.3f\nmax = %.3f\nmean = %.3f\n', mi, ma, mn)
Chybová hlášení
function [min_x, max_x, mean_x] = stat(x)
% vypocet minimalni, maximalni a prumerne hodnoty vektoru
if any(imag(x)) > 0
error('stat: Vstupni vektor obsahuje imaginarni cisla.')
end
min_x = min(x);
max_x = max(x);
mean_x = mean(x);
end
Vyvolání nápovědy k funkci:
help stat
Volání funkce:
data1 = [data; 5+2i; 4-3i]
[mi, ma, mn] = stat(data1)
Drobné úlohy
Funkce pro výpočet nekonečné řady do zadané přesnosti
např. výpočet funkce arctg():
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)
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
end
fclose all;
fprintf('Data ulozena do souboru %s\n',filenew);
end
Volání funkce: datový soubor carky.txt ke stažení
teckazacarku('carky.txt')
Úlohy
- budou doplněny záhy