co byste měli umět po dnešní lekci: používat proměnnou nargin používat globální proměnné pracovat s řetězci, převést řetězec na číslo a naopak načíst, zpracovat a uložit textový soubor (funkce pro práci s řetězci) najít kořen rovnice
proměnná nargin vrací počet předávaných parametrů dané funkci to se hodí zejména v prípadě, kdy potřebujeme vědět, zda li jsou předány funkci všechny parametry function test1(a,b,c) if (nargin~=3) disp('spatny pocet parametru'); else disp('pocet parametru ok'); end stejně funguje i proměnná nargout, která obsahuje počet návratových hodnot function test2(a,b,c) switch nargin case 0; disp('chybi vsechny parametry'); a=0;b=0;c=0; case 1; disp('chybi parametry b a c'); b=0;c=0; case 2; disp('chybi parametr c'); c=0; case 3; disp('parametry OK'); otherwise disp('nejak moc parametru'); end
globální vs. lokální proměnné mám funkci, která počítá funkční hodnotu a potřebuji znát ještě parametr: function y=test3(x, p) y=p*x; function y=test4(x) global p; y=p*x; % clear all % hodnota parametru p p=10; x=linspace(1,100,100); y=test3(x,p); doporučení: globální proměnné jednoznačně odlišit jměnem, např. g_x % clear all % p je globalni promenna global p; % hodnota parametru p p=10; x=linspace(1,100,100); y=test4(x);
Řetězce neboli stringy s='ahoj. Cislo uctu mas tady: 2123'; delka_s=length(s); % urci delku retezce pos=findstr(s,':'); % urci pozici : (dvojtecky) ss=substr(s,pos+1, length(s) pos); % do ss ulozi podretezec cislo=str2num(ss); % z retezce ss spacha cislo další užitečné funkce (zkuste aplikovat na řetězec s): isdigit(s), isalpha(s) (pozn. existuje i funkce num2str(), která převede číslo na řetězec vhodné při výpisech)
Řetězce neboli stringy načtení souboru z média: (load nebo fopen) načtení souboru cos.dat load('cos.dat'); data=load('cos.dat'); % mnohem lepší soubor=fopen('cos.dat','r'); s=fgets(soubor); soubor=fopen('cos.dat','r'); ind=1; s=fgets(soubor); % precte jeden radek while (length(s)>2) x=str2num(s); data(ind,1)=x(1); data(ind,2)=x(2); ind=ind+1; s=fgets(soubor); end fclose(soubor);
Řetězce neboli stringy napište program, který načte a zobrazí následující datový soubor 8.400 0.05 157.350 790.0 823.0 849.0
A teď trocha matematiky: Najděte kořen rovnice x=cos(x) iterační metoda: x 0 = odhad řešení x 1 =cos(x 0 ) x n+1 =cos(x n ) % clear all pres=1e 6; % presnost reseni x0=0.7; % odhad reseni x1=cos(x0); iter=1; while (abs(x1 x0)>=pres) x0=x1; x1=cos(x0); iter=iter+1; end fprintf( x=%.6f chyba=%.e i=%d \n,x1,abs(x1 x0), iter);
A teď trocha matematiky: Najděte kořen rovnice x=cos(x) metodou půlení intervalu function y=rovnice(x) y=cos(x) x; function koren=puleni(func,x1,x2,pres,maxit) % pocita koren rovnice rce metodou puleni intervalu % x1 je dolni hodnota intervalum x2 horni % pres je presnost vysledku % maxit je maximalni pocet iteraci a dál je to na vás
A teď trocha matematiky: Najděte kořen rovnice x=cos(x) metodou Newton Raphson y 0 x potřebujeme derivaci!!!!
Prostudujte pomocí helpu tyto funkce: Octave [koren, info, msg]=fsolve(funkce, odhad); Matlab [X,FVAL,EXITFLAG,OUTPUT]=fzero(funkce, odhad);
Úkol: Platinový resistor se často používá jako teplotní čidlo. Odpor teploměru v závislosti na teplotě je dán vztahem Jaké teplotě odpovídá hodnota odporu 120, je li R(0)=100. Teplota t je ve o C. Kolik iterací je potřeba při odhadu rešení t=0 o C iterační metodou, metodou půlení intervalu a metodou Newton Raphson? Přesnost uvažujte 10 3.
Úkol: Soubor messier.txt obsahuje tabulku tvz. Messierova katalogu. Zjistěte, kolik objektů se nachází v intervalu deklinací 20 o 20 o. Zkuste z tabulky uložit do nového souboru jen sloupec M, RA a Dec. M NGC Con RA Dec Mag Size (min) Typ Distance Common Name 1 1952 Tau 05 34.5 22 01 9.0 6 x 4 SNR 6.3 Crab Nebula 2 7089 Aqr 21 33.5 00 49 7.5 12.9 GCl 36 3 5272 CVn 13 42.2 28 23 7.0 16.2 GCl 31 4 6121 Sco 16 23.6 26 32 7.5 26.3 GCl 7 5 5904 Ser 15 18.6 02 05 7.0 17.4 GCl 23 6 6405 Sco 17 40.1 32 13 4.5 15.0 OCl 2 Butterfly Cluster