+ All Categories
Home > Documents > Skriptov práce s řetězci a řešení...

Skriptov práce s řetězci a řešení...

Date post: 15-Feb-2020
Category:
Upload: others
View: 1 times
Download: 0 times
Share this document with a friend
12
 Skriptování – co se do minula nevešlo, Skriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic prá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 
Transcript
Page 1: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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 

Page 2: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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, zda­li 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

Page 3: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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

Page 4: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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)

Page 5: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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);

Page 6: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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    |    |    |

Page 7: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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=1e­6; % presnost resenix0=0.7; % odhad resenix1=cos(x0);iter=1;while (abs(x1­x0)>=pres)    x0=x1;    x1=cos(x0);    iter=iter+1;endfprintf(“x=%.6f chyba=%.e i=%d \n”,x1,abs(x1­x0), iter);

Page 8: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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

Page 9: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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 Newton­Raphson

0 x

y

potřebujeme derivaci!!!!

Page 10: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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:

Page 11: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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, je­li 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 Newton­Raphson? Přesnost uvažujte 10­3.

Page 12: Skriptov práce s řetězci a řešení rovnickfes-16.karlov.mff.cuni.cz/~standa/matlab/matlab3.pdfSkriptování – co se do minula nevešlo, práce s řetězci a řešení rovnic

   

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


Recommended