skriptov práce s řetězci a řešení...
TRANSCRIPT
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
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
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
proměnná nargin vrací počet předávaných parametrů dané funkcito se hodí zejména v prípadě, kdy potřebujeme vědět, zdali jsou předány funkci všechnyparametry
function test1(a,b,c) if (nargin~=3) disp('spatny pocet parametru'); else disp('pocet parametru ok'); end
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
stejně funguje i proměnná nargout,která obsahuje počet návratových hodnot
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
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;
% clear all% hodnota parametru pp=10;x=linspace(1,100,100);y=test3(x,p);
function y=test4(x) global p; y=p*x;
% clear all% p je globalni promennaglobal p;% hodnota parametru pp=10;x=linspace(1,100,100);y=test4(x);doporučení: globální proměnné jednoznačně
odlišit jměnem, např. g_x
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
Řetězce neboli stringyŘetězce neboli stringys='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)
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
Řetězce neboli stringyŘ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 radekwhile (length(s)>2) x=str2num(s); data(ind,1)=x(1); data(ind,2)=x(2); ind=ind+1; s=fgets(soubor);endfclose(soubor);
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
Řetězce neboli stringyŘ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 | | |
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
A teď trocha matematiky:
Najděte kořen rovnice x=cos(x)
iterační metoda: x0 = odhad řešení x1=cos(x0) | xn+1=cos(xn)
% clear allpres=1e6; % presnost resenix0=0.7; % odhad resenix1=cos(x0);iter=1;while (abs(x1x0)>=pres) x0=x1; x1=cos(x0); iter=iter+1;endfprintf(“x=%.6f chyba=%.e i=%d \n”,x1,abs(x1x0), iter);
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
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
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
A teď trocha matematiky:
Najděte kořen rovnice x=cos(x) metodou NewtonRaphson
0 x
y
potřebujeme derivaci!!!!
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
Octave[koren, info, msg]=fsolve(funkce, odhad);
Matlab [X,FVAL,EXITFLAG,OUTPUT]=fzero(funkce, odhad);
Prostudujte pomocí helpu tyto funkce:
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
Ú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, jeli R(0)=100. Teplota t je ve oC.Kolik iterací je potřeba při odhadu rešení t=0oC iterační metodou, metodou půleníintervalu a metodou NewtonRaphson? Přesnost uvažujte 103.
Skriptování – co se do minula nevešlo,Skriptování – co se do minula nevešlo,práce s řetězci a řešení rovnicpráce s řetězci a řešení rovnic
Úvod do programování v prostředích Octave, Scilab a Matlab
Úkol: Soubor messier.txt obsahuje tabulku tvz. Messierova katalogu. Zjistěte, kolik objektů se nachází v intervalu deklinací 20o – 20o. 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