Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

MATLAB® ( Funkce v Matlabu ).

Podobné prezentace


Prezentace na téma: "MATLAB® ( Funkce v Matlabu )."— Transkript prezentace:

1 MATLAB® ( Funkce v Matlabu )

2 Funkce Funkce je samostatný m-file
může mít (ale nemusí) několik vstupních a výstupních parametrů m-file definující funkci je uvozen hlavičkou funkce: function {[out1,out2,...]=} funkce1(inp1,inp2,...) přenos hodnot: - přes vstupní parametry funkce má svůj paměťový prostor, který nesdílí s jinými scripty ani s hlavním programem

3 Příklad (funkce s jedním vstupním parametrem):
% function funkce1(vstpar) all=vstpar b22=all^2 whos Všechny proměnné včetně vstupních parametrů definované uvnitř funkce jsou použitelné jen uvnitř funkce a nejsou v prostředí workspace. Vyvolání funkce: funkce1(100) Volání funkce uvnitř scriptu: Funkce vykoná svůj kód a řízení je předáno na instrukci bezprostředně následující za vyvoláním funkce.

4 Příklad (soubor Adam1.m) :
a=10; b=12+25i; c=a+abs(b); funkce1(c); % volání a spuštění funkce whos Vyvolání scriptu s voláním funkce: Adam1 proměnné definované v rámci hlavního scriptu jsou vidět v jeho paměťovém prostoru proměnné definované uvnitř funkce jsou vidět jen uvnitř funkce a nejsou po skončení funkce u přístupné => jedn8 se o tzv. lokální proměnné

5 Volání funkce uvnitř jiné funkce
Každá funkce má i formální a skutečné parametry, které jí musí být při vyvolání předány. Příklad: % Funkce Pok1.m function Pok1(vstpar) Pocetgrafu=vstpar; % počet budoucích grafů t=0:6*pi/100:6*pi; % definice časové osy Pok2(Pocetgrafu,t); % volání další funkce se 2 vstupními parametry % Funkce Pok2.m function Pok2(vstpar1,vstpar2) Pocgraf=vstpar1; % počet grafů (skalár) t=vstpar2; % časová osa (vektor) u=sin(t); for k=1:Pocgraf subplot(1,Pocgraf,k); plot(t,u); end vyvolání: Pok1(2)

6 Funkce bez vstupního parametru Příklad:
proměnná, která se jindy předává přes parametr může být definována v těle funkce natvrdo. Příklad: % Funkce Pok1a.m function Pok1a Pocetgrafu=2; % počet budoucích grafů t=0:6*pi/100:6*pi; % definice časové osy Pok2(Pocetgrafu,t); % volání další funkce se 2 vstupními parametry % Funkce Pok2.m function Pok2(vstpar1,vstpar2) Pocgraf=vstpar1; % počet grafů (skalár) t=vstpar2; % časová osa (vektor) u=sin(t); for k=1:Pocgraf subplot(1,Pocgraf,k); plot(t,u); end vyvolání: Pok1a

7 Funkce volající sama sebe
neexistuje nekonečná rekurze – přeplnění zásobníku => chybové hlášení Příklad na konečnou rekurzi (rekurzivní výpočet Faktoriálu): function y=FAKT(N) if N==0 y = 1; else y = N * FAKT(N-1); end; Vyvolání: FAKT(5) FAKT(11)

8 Vytvoření funkce se dvěma či více výstupními parametry: Příklad:
function [vyst1,vyst2]=funkce2vystpar vyst1=10^2+log10(1000); vyst2=exp(-0.1)*abs(2+3i); Vyvolání: [a,b]=funkce2vystpar

9 funkce s proměnným počtem vstupních parametrů:
s využitím funkce varargin(:) a nargin Příklad: function funkcep(varargin) disp(' Pocet argumentu je : ' ) ; nargin S=varargin(:) Vyvolání: funkcep(1,10) funkcep(1,10,2+3i)

10 funkce s proměnným počtem výstupních parametrů:
s využitím funkce varargout(:) a nargout Příklad: function varargout=funkcepo for k=1:nargout varargout(k)=10*k; end Vyvolání: [a,b]=funkcepo [a,b,c,d]=funkcepo

11 více funkcí v jednom souboru m-file :
je vhodné v případech, kdy chceme šetřit rychlost. Podle první funkce se jmenuje m-file, která se odkazuje na druhou ev.další funkci napsanou ve stejném m-file. Nesmí existovat reference odjinud na vnitřní funkce m-file než z tohoto m-file. Příklad: ( soubor: Pok12.m ) function Pok12(vstpar) Pocetgrafu=vstpar; t=0:6*pi/100:6*pi; Pok123(Pocetgrafu,t) function Pok123(vstpar1,vstpar2) Pocgraf=vstpar1; t=vstpar2; u=sin(t); for k=1:Pocgraf; subplot(1,Pocgraf,k); plot(t,u); end;

12 Zápis formátovaných dat do textového řetězce příkaz SPRINTF( ... )
Příkaz může mít několik parametrů, jimiž mohou být texty, formátovací řetězce a proměnné. Příklad: s=sprintf('\n%10.5f',pi) kde % je začátek konverze 10 je šířka pole 5 je počet míst za des.tečkou f je konverze do pevné řádové čárky (viz tabulka u konverze num2str ...)

13 Zápis dat do souboru příkazem FPRINTF
práce s příkazy FOPEN/FPRINTF/FCLOSE t=0:4*pi/10:4*pi; u=sin(t); Data=[t u]; soubor=fopen('c:\Pokus01.txt', 'w') fprintf(soubor, ' %6.2f %12.8f \n ',Data); fclose(soubor)

14 Parametry příkazu FOPEN:
Význam r soubor jen pro čtení (implicitně) w pro zápis (založí nový,nebo přepíše stávající) a pro zápis (založí nový,nebo přidá za stávající) r+ otevře soubor pro čtení i zápis w+ jako u w , ale pro čtení i zápis a+ jako u a , ale pro čtení i zápis A jednorázové připojení nového obsahu do souboru W jednorázový zápis nového obsahu do souboru

15 Čtení dat do souboru příkazem FSCANF
práce s příkazy FOPEN/FSCANF/FCLOSE fid = fopen('exp.txt'); a = fscanf(fid,'%g %g',[2 inf]) a = a'; fclose(fid) Matice se plní po sloupcích, rozměry jsou definovány m x n, kde n může být INF (čtení do konce souboru) A(1:30)=0; mm=int32(1); h=fopen('Vstup.txt'); A=fscanf(h,'%d',[5 5]); A'


Stáhnout ppt "MATLAB® ( Funkce v Matlabu )."

Podobné prezentace


Reklamy Google