Professional Documents
Culture Documents
2
Maticove operace aneb respektujeme pravidla linearn algebry
transpozice matice
M trans = M
hermitovska transpozice matice - jsou-li prvky matice komplexn csla, v transpono-
vane matici jsou nahrazeny prvky komplexne sdruzen ymi
M Htrans = M.
sctan, odectan matic - sctame, odectame matice shodn ych rozmeru
S = M2 + M3 R = M2 - M3
nasoben matic - respektujeme pravidla pro nasoben matic
N1 = A1*A2 N2 = A2*A1
delen matic - opet pozor na rozmery jednotliv ych matic, v MATLABu je mozne
pouzt zpetne lomeno
A/B nen totez, jako B\A:
A = [1 2 3; 4 5 6]; B = [1 1 1; 0 1 0];
D1 = A/B D2 = B/A
D3 = A\B D4 = B\A
Nebo-li plat:
A/B = AB
1
A\ B = A
1
B
Pozn. tvorba inverzn matice (pro ctvercove matice)
6
inv(A)
A
(1)
I/A
I/A = A \ I A = A/I = I \ A
umoc novan A
n
1.4 Specialn matice
Jako parametr maj tyto funkce vzdy pocet radku a sloupcu pozadovane v ysledne matice.
V prpade ctvercove matice stac zadat pouze jeden parametr.
rand(m,n) - matice nahodn ych csel z intervalu < 0; 1 >, rovnomerne rozdelen
randn(m,n) - matice nahodn ych csel z intervalu < 0; 1 >, normaln rozdelen
eye(m,n) - jednotkova matice
ones(m,n) - matice nul
zeros(m,n) - matice jednicek
diag(v) - diagonaln matice s vektorem v na hlavn diagonale
1.5 Prklady k procvicen
Vsechny prklady reste bez pomoci cyklu. Vyuzijte funkce: linspace, length, size, nd, rep-
mat, mod. V yznam funkc, ktere neznate, naleznete v napovede (napr help repmat).
Prklad: Vyreste soustavu
4x 6y + 5z = 2
8x + y 3z = 3
x + y + z = 4
7
Resen:
_
_
x
y
z
_
_
=
_
_
4 6 5
8 1 3
1 1 1
_
_
\
_
_
2
3
4
_
_
b = [2;3;4;];
A = [4 -6 5; 8 1 -3; 1 1 1];
x = b\A
Prklad: Pomoc specialnch matic vygenerujte nasledujc matici:
M =
_
_
7 1 1 1 0 0 5
1 1 1 0 1 0 5
1 1 4 0 0 1 5
0... 0... 0... 0... 0... 0... 0...
_
_
a vyberte
druh y radek
r =
_
1 1 1 0 1 0 5
_
posledn sloupec
s =
_
_
5
5
5
0...
_
_
podmatici
P =
_
_
1 1 0 1
1 4 0 0
_
_
8
Resen:
M = [diag([6 2 3]) + ones(3), eye(3), 5 ones(3, 1); rand(1, 7)]
r = M(2,:)
s = M(:,end)
P = M(2:3,2:5)
Prklad: Rozdelte vektor v nahodn ych csel mezi 0 a 1 na v1 a v2, kde vsechny prvky
v1< 0.5, vsechny prvky v2> 0.5
Resen:
n=10;
v = rand(1,n)
v1 = v(v>0.5)
v2 = v(v<0.5)
indexy v1 = v>0.5 %... (logicky vyraz vraci 0 nebo 1; na mste, kde je splnen logicky vyraz,
bude ve vysledku 1, jinde 0)
indexy v2 = v<0.5
Prklad: Napiste funkci pro vykreslen pravidelneho n- uhelnku. n je vstupn parametr.
Resen:
function uhelnik(n)
r = 1;
= linspace(0,2*pi,n+1);
x = r*cos();
y = r*sin();
plot(x,y)
Prklad: Spoctete delku sroubovice (nebo trycht yre).
Resen:
r = 1; % polomer
n = 20; % pocet zavitu
t = 0:0.1:2*pi*n;
k = linspace(0,10,length(t)); % konstanta umernosti pro trychtyr
x = r*k.*cos(t);
y = r*k.*sin(t);
z = t;
9
plot3(x,y,z)
delka = sum(((x(2:end)-x(1:end-1)).
2 + (y(2:end)-y(1:end-1)).
2 + (z(2:end)-z(1:end-1)).
2).
(1/2))
Prklad: Vypiste tabulku hodnot goniometrick ych funkc a vykreslete funkci tg(x).
Resen:
% pres stupne
x d = 0:15:180;
ys d = sind(x d)
yc d = cosd(x d)
yt d = tand(x d)
plot(yt d)
% pres radiany
x p = 0:pi/12:pi;
ys p = sin(alfa p)
yc p = cos(alfa p)
yt p = tan(alfa p)
plot(yt p)
Prklad: Na racku veznch hodin doplachtil mravenec Ferda. Prochaz se po n tam a
zpet. Napiste funkci, ktera vykresl trajektorii Ferdovy chuze. Delka racky a rychlost
Ferdy budou vstupnmi parametry funkce.
Resen:
function d=ferda(l,v)
% cas a uhel
t1=l/v;
t=0:t1/100:t1;
=-t/3600*2*pi+pi/2;
10
% hodiny
gure
plot(l*cos(0:0.1:2*pi),l*sin(0:0.1:2*pi),b-)
hold on
% chuze tam
x=v*t.*cos();
y=v*t.*sin();
d=sum(sqrt((x(2:end)-x(1:end-1)).
2+(y(2:end)-y(1:end-1)).
2));
comet(x,y)
% chuze zpet
=-(t+t1)/3600*2*pi+pi/2;
x=(l-v*t).*cos();
y=(l-v*t).*sin();
d=d+sum(sqrt((x(2:end)-x(1:end-1)).
2+(y(2:end)-y(1:end-1)).
2));
comet(x,y)
Prklad: Funkce popisujc cyklicke zatezovan
1. Vykreslete pilu
2. Vykreslete zuby
Resen:
ad 1)
t1=0:0.1:10;
plot(t1,asin(sin(t1)))
t2=0:1:20;
plot(t2,mod(t2,2),r)
11
ad 2)
zub x = oor(0.5*[0:n*4-1]);
zub y = repmat([0 h h 0],1,n);
plot(zub x,zub y)
12
2 Gracke uzivatelske rozhran
GUI je zkratka pro Graphical User Interface, neboli gracke uzivatelske rozhran. System
oken a tlactek se denuje (vlastno)rucne psanem M-skriptu nebo vytvar interaktivne
mys v nastroji pripravenem v MATLABu - tzv. guide, kter y spustme z prkazove r adky
prkazem guide. Dals praci s nm prenechame samostudiu zalozenem na poznatcch z
MATL1.
MATLAB denuje gracke objekty jako zakladn gracke jednotky sveho grackeho systemu.
Tyto jednotky jsou usporadany ve stromove strukture, zahrnuj root (obrazovku), gure
(gracke okno), axes (osy), line (caru), patch (vyplnen y mnoho uhelnk), surface (plochu),
image (fotograi), text (textove pole), uicontrol (ovladac prvky) a uimenu (uzivatelske
menu). Nze postavene objekty ded vsechny vlastnosti objektu postaveneho v ys, pribraj
dals a ty spolu se zdeden ymi predavaj sv ym potomkum.
Kazd y grack y objekt ma svul identikator (odkaz, ukazatel, tzv. handle - ovladac),
kter y se objektu prirad v okamziku jeho vytvoren. Tento odkaz je tvoren prirozen ym
nebo kladn ym realn ym cslem a muzeme jej priradit do zvolene promenne. Pomoc tohoto
identikatoru se na dan y objekt odkazujeme. Muzeme tak menit jeho vlastnosti, napr. typ
krivky, barvu pozad atd. Identikator objektu root ma vzdycky hodnotu 0, pro objekty
gure jsou vyhrazena prirozena csla, identikatory ostatnch objektu jsou realna csla.
V teto kapitole se budeme venovat objektu gure a zejmena jeho potomkum uimenu a
uicontrol. Potomkum objektu axes byla venovana cvicen v MATL1.
Root je korenem hierarchie. Odpovda obrazovce poctace. Je jedin y, vsechny dals
objekty jsou jeho potomky.
13
Figure jsou samostatna gracka okna. Muze jich existovat libovoln y pocet a vsechny
jsou potomky objektu root. Vsechny dals gracke objekty jsou potomky objektu
gure. Generovany jsou funkc gure.
Axes denuj oblast v grackem okne. Jsou potomky objektu gure a dals objekty
jako line, text, patch (atd.) jsou jejich potomky. Generovany jsou funkc axes.
Uimenu jsou uzivatelska menu, ktera umoz nuj v objektu gure vytvorit vlastn menu.
Jsou potomky objektu gure. Generovany jsou funkc uimenu.
Uicontrol jsou ovladac prvky, ktera vykonavaj prslusne funkce. Jsou potomky ob-
jektu gure. Generovany jsou funkc uicontrol.
2.1 Dals prkazy pro praci s objekty a nastaven
Pokud jsme si zapomneli identikator na dan y (vytvoren y) objekt ulozit do promenne a
zjistili jsme, ze se bez nej neobejdeme, lze jej zskat pomoc funkc gcf, gca a gco. Stac
dan y objekt aktualizovat napr. mys.
gcf - vrac hodnotu ukazatele na aktualn gracke okno (objekt gure)
gca - vrac hodnotu ukazatele na aktualn osy (objekt axes)
gco - vrac hodnotu ukazatele na aktualn objekt (uicontrol, line, patch, ...)
delete(h) - funkce, ktera smaze grack y objekt s ukazatelem h.
delete(gcf) - smaze aktualn gracke okno. Tmto zpusobem muzeme smazat aktualn osy
nebo aktu aln grack y objekt.
[x,y] = ginput - umoz nuje vybrat body z grackeho okna (z os) pomoc mysi. Nacta body
do stisku klavesy enter. Souradnice uklada do vektoru x, y.
[x,y] = ginput(n) - nacta n bodu
2.1.1 Gracke okno
gure
Samostatne jej otevreme prkazem gure z prkazoveho radku MATLABu. Hodnoty iden-
tikatoru pro tento objekt jsou prirozena csla. Toto okno se take otevre automaticky s
kazd ym prkazem pro kreslen, coz souvis s v yse popsan ym objektov ym prstupem MAT-
LABu. V tomto grackem okne je take mozne pomoc mnozstv nastroju, ktere jsou
umsteny na panelech u hornho okraje okna, menit vlastnosti vykreslovan ych objektu,
napr. menit barvy a tlous
Retezec muze b yt znak nebo pole znaku. Zadavame je do apostrofu, k jednotliv ym znakum
lze pristupovat pres indexy.
Vytvoren retezce: retezec = Toto je retezec
Vytvoren prazdneho retezce: prazdny retezec =
Vytvoren prazdneho retezce o n mezerach: prazdny retezec = blank(n)
3.1 Spojovan retezcu
Podobne jako se spojuj vektory:
[retez1 retez2 retez3] = retez1 retez2retez3
Pomoc funkce strcat(retez1, , retez2, retez3) dostaneme retez1retez2retez3.
Tato funkce slep retezce za sebe, ignoruje mezery.
Retezce do sloupce, pokud jsou stejne dlouhe, pomoc strednku [retez1; retez2;
retez3]
Pomoc funkce strvcat(retez1, retezec2, retezecek3) muzeme radit pod sebe retezce
ruzn ych delek. Rozdly jsou doplneny mezerami.
3.2 Porovnavan retezcu
Pomoc relacnch operatoru (<, >, =, ...) se porovnavaj na zaklade hodnot v
ASCII kodu. V ysledkem je logicka hodnota. a<b 1(true), a>b 0(false).
Takto lze porovnavat retezce stejn ych delek nebo jeden znak s retezcem. V ysledkem
je pak vektor nul a jednicek.
Pomoc funkce strcmp(s1,s2). V ysledkem je 1, pokud jsou retezce shodne, jinak 0.
Funkce strncmp(r1, r2, n) umozn porovnat prvnch n znaku z obou retezcu.
3.3 Vyhledavan v retezcch
Funkce ndstr(r1, r2) vyhledava krats retezec v delsm, vrac indexy prvku, kde byl
podretezec nalezen.
ndstr(bar, barova zidle barometr mlecny bar) = [1, 14, 30]
Funkce strmatch(r1, pole retezcu) vrac indexy radku z promenne pole retezcu, na
kter ych se vyskytuje retezec zacnajc retezcem r1.
20
3.4 Konverze retezcu
Funkce double(s) prevad znak na cselnou hodnotu, kterou ma v ASCII kodu.
double(retezec) = [114 101 116 101 122 101 99]
Funkce char(x) je opacna k funkci predchoz, prevad cselnou hodnotu na znak. Opet
podle ASCII kodu.
char([114 101 116 101 122 101 99]) = retezec
Funkce int2str(N) prevad celocselnou hodnotu na retezec.
Funkce num2str(N) prevad cselnou hodnotu na retezec.
Funkce str2num(s) opak num2str
Posledn tri jmenovane funkce se hojne vyuzvaj pri zskavan parametru z grackeho
uzivatelskeho prostred (pri komunikaci s GUI).
3.5 Prehled dalsch uzitecn ych funkc
ischar(s) - je-li s textov y retezec, ma hodnotu 1 (true), jinak 0 (false)
isletter(s) - pro znaky abecedy v retezci s ma hodnotu 1, jinak 0
isspace(s) - ma hodnotu 1 pro mezery
deblank(s) - odstra nuje mezery na konci retezce
eval(s) - prevede retezec na v yraz a provede ho
upper(s) - vsechna mala psmena v retezci prevede na velka
lower(s) - vsechna velka psmena v retezci prevede na mala
Prklad: Pomoc dialogoveho okna napiste oznamen o v ysledku nejakeho v ypoctu ve
tvaru:
Vysledek je 42 jednotek.
Resen:
msgbox([Vysledek je num2str(42) jednotek.])
Prklad: Napiste funkci, ktera prekonvertuje retezec na csla (hodnoty ASCII kodu) a
secte jej.
Resen:
% jednodussi varianta
21
function hodnota = konvert(retez)
hodnota = sum(double(retez));
% slozitejsi varianta
function konvert(varargin)
if nargin == 0
display(neni zadan retezec)
else
retez = []
for i=1:nargin
retez = [retez varargin{i}]
end
hodnota = sum(double(retez));
msgbox([Hodnota zadaneho retezce je: num2str(hodnota) .])
end
Prklad: Tri specicky zapojene resistory se odlisuj barvou, ktera urcuje hodnotu jejich
odporu. Celkov y odpor zapojen se vypocte podle vzorce
R = (10R1 + R2)10
R3
. Napiste funkci, ktera spocte v yslednou hodnotu pro tri zadane
barvy.
black 0 bla
brown 1 br
red 2 r
orange 3 o
yellow 4 y
blue 5 blu
green 6 gre
violet 7 v
gray 8 gra
white 9 w
Table 1: Tabulka barev a hodnot
22
Resen:
najdete v souborech resistor.m, muj resistor.m
Namety na dals prklady: Vytvorit pole zanamu typu student.jmeno, student.rocnik apod.
a vyhledavat v nem nebo radit.
23
4 Souborov y vstup a v ystup
4.1 Zakladn prace se soubory
V prostred MATLAB se rd nasledujcmi prkazy psan ymi na prkazovem radku:
cd - zmena aktualnho adresare
pwd - v ypis aktualnho pracovnho adresare vcetne cele cesty
dir - v ypis obsahu pracovnho adresare
d = dir - do promenne d typu struktura uloz podrobnosti o adresari
ls - v ypis obsahu pracovnho adresare
matlabroot jm souboru - v ypse cestu k adresari, kde je MATLAB nainstalovan y
type - v ypis obsahu souboru na obrazovku
4.2 Ulozen a nacten dat
Zopakujeme si i prkazy z MATL1
diary - uloz (historii) posloupnost prkazu, ktera je uvozena prkazem diary on a konc diary
o do souboru diary.
save - uloz obsah pracovnho prostoru promenn ych (workspace) do souboru matlab.mat v
binarnm kodu
save jmeno.souboru - uklada v binarnm kodu cel y obsah pracovnho prostoru do nami zv-
oleneho souboru (nov y zaloz, existujc prepse)
save jmeno.souboru promenna - uklada v binarnm kodu do nami zvoleneho souboru pouze
zvolene promenne
save jmeno.souboru promenna format - uklada do nami zvoleneho souboru (nov y zaloz, ex-
istujc prepse) zvolene promenne ve zvolenem formatu
lze pouzt i zapis save(soubor.muj,promenna,format)
load - nacte obsah matlab.mat do pracovnho prostoru
load jmeno.souboru - nacte obsah souboru jmeno.souboru do pracovnho prostoru, pokud je
soubor bin arn
load jmeno.souboru promenna - pokud je soubor binarn, nacte z nej pouze zvolenou promennou
load soubor.txt - nacten ASCII souboru do matice. Soubor mus mt stejn y pocet radku a
sloupcu, i retezce nacte jako csla.
lze pouzt i zapis load(soubor.muj)
importdata(soubor) - nacta ruzne typy dat, sam vybere, do jakeho typu promenne
Prklad: Ulozte obsah vaseho aktalnho pracovnho prostoru (alespo n 4 libovolne promenne),
smazte obsah pracovnho prostoru a nactete zpet 2 promenne z ulozeneho souboru. (opakovan
24
z MATL1)
4.3 Formatovane cten a zapis
Hod se napr. pro formatovan textov ych souboru, ktere jsou vstupnmi daty v ypoctov ych
programu. Zakladem je prace s identikatorem otevreneho souboru. Vsechny nasledujc
prkazy pracuj s identikatorem otevreneho souboru. Jin ymi slovy soubor, se kter ym
chceme pracovat, mus b yt otevren pomoc funkce fopen. Tmto prkazem otevreme soubory
binarn i textove, prace s nimi je pak rozdlna.
d = fopen(soubor.muj) - otevre soubor pro cten, identikator uloz do promenne d. d
je cele kladne cslo vets nez 2. Pokud soubor nebyl z nejakeho duvodu otevren, d = -1.
Muzeme pridat dals parametr, kter y urcuje, v jakem rezimu je soubor otevren:
d = fopen(soubor.muj, r) - pouze pro cten
d = fopen(soubor.muj, w) - pouze pro zapis, nov y soubor vytvor, existujc prepse
d = fopen(soubor.muj, a) - pripisuje na konec souboru, neexistujc vytvor
d = fopen(all) - vrac identikatory vsech uzivatelem aktualne otevren ych souboru
fclose(d) - uzavre soubor s identikatorem d. Vrac hodnotu 0, pokud se podarilo soubor
zavrt, pokud ne, ma hodnotu -1.
d = fclose(all) - uzavre vsechny aktualne otevrene soubory
feof(d) - test konce souboru, vrac 1, pokud naraz na znak konce souboru, jinak 0
fscanf(d, %...%..., [n,m]) - cte po znacch z otevreneho souboru. Pokud msto m napseme
inf, cte do konce souboru. Za znak % pseme kolik znaku ma b yt nacteno a jejich typ.
Zkratky pro typ jsou uvedeny v nasledujc tabulce.
fprintf(d, %...%..., prom1,prom2) - zapisuje po znacch do souboru. Za znak % pseme ko-
lik znaku ma b yt nacteno a jejich typ. Zkratky pro typ jsou uvedeny v nasledujc tabulce.
Formatovn y text pseme do apostrofu, za nej pak carkou oddelujeme zapisovane promenne.
fprintf(d, %...%...\n\r, prom1,prom2) - muzeme pripojit znak pro konec radku, \n pro
unix, \r\n pro windows.
%c posloupnost znaku
%d cela csla
%f realna csla
%s posloupnost bl ych znaku (mezer)
25
Prklad: Prklady formatovaneho zapisu do souboru
fprintf(le,NODE / %8d%16.3f%16.3f\n, uzel ID, uzel sour(1), uzel sour(2));
A = [1 2 3 4; 5 6 7 8];
fprintf(f2, %8.4f %8.4f \r\n,A);
4.3.1 Binarn soubory
fwrite(d, A) - zapse binarne promennou A do souboru s identikatorem d. Pro kazde
cslo vyhrad 1 bit a rad je do sloupce pod sebe.
fwrite(d, A, prec) - parametr prec urcuje format a velikost zapisovane promenne.
A = fread(d) - nacte data ze souboru do matice A v binarnm formatu.
A = fread(d, pocet) - nacte predepsan y pocet bitu ze souboru do matice A.
A = fread(d, pocet, prec) - nacte data ze souboru podle predepsaneho formatu ulozeneho
v prec.
Pozn. Pro spravne nacten je treba znat, v jakem formatu byl soubor zapsan.
fseek(d, oset, origin) - priprav nasledujc cten ze souboru pres fread. Parametr oset
udava format cten, origin nastavuje, odkud zacne cten.
4.3.2 Textove soubory
fgets(d) - nacte z otevreneho souboru cel y radek vcetne znaku pro konec radku
fgetl(d) - nacte z otevreneho souboru cel y radek bez znaku pro konec radku
Prklad: Napiste funkci, jejz vstupem je jmeno textoveho souboru, kter y je na disku a
obsahuje text po radkach, z nichz nektere zacnaj klcov ym slovem NODE. Funkce vytvor
nov y soubor bez uzlu (bez radku, ktere zacnaj klcov ym slovem NODE), jmeno souboru
vrat jako retezec. Testovac vstupn soubor je chroupak vstup.inc.
_
1 1 1
1 2 3
1 3 6
_
_
_
_
x1
x2
x3
_
_
=
_
_
3
1
4
_
Resen:
A = pascal(3);
b = [3; 1; 4];
[L,U] = lu(A)
y = L\ b
x = U\ y
qr - rozklad na ortogonaln a horn troj uhelnkovou matici. Pouzva se pri resen preurcen ych
soustav linearnch rovnic.
[Q,R] = qr(A)
[Q,R,E] = qr(A)
Syntaxe pro resen preurcene soustavy Ax=b:
[Q,R] = qr(A)
y = Q*b
x = R\ y
Poznamka. Parametr P, resp. E, u funkce lu, resp. qr, vyjadruje pocet pouzit ych permu-
tac - proh azen sloupcu. Plat P*A = L*U, A*E = Q*R
Prklad:
Reste soustavu
_
_
1 2 3
4 5 6
7 8 9
10 12 12
_
_
_
_
x1
x2
x3
_
_
=
_
_
1
3
5
7
_
_
37
Resen:
A = [1 2 3; 4 5 6; 7 8 9; 10 11 12];
b = [1; 3; 5; 7];
[Q,R] = qr(A)
y = Q*b
x = R\ y
7.3
Rdke matice
Jsou to specialn matice, ktere maj velk y pocet nulov ych prvku. Do pameti se ukladaj
pouze nenulove prvky s prslusn ymi indexy. Snizuje se tak v ypocetn cas a setr pamet.
sparse - denovan rdke matice nekolika zpusoby
S = sparse(A)
A =
_
_
0 0 0 4
1 0 0 2
0 0 1 0
_
_
S =
(1, 4) 4
(2, 1) 1
(2, 4) 2
(3, 3) 1
S = sparse(i,j,s,m,n) i je vektor radku a j vektor sloupcu indexu pozic, na kter ych
se vyskytuje nenulov y prvek rdke matice. s je vektor nenulov ych prvku. m,n jsou
rozmery cele matice. Predchoz prklad by se zapsal
S = sparse([1 2 2 3], [4 1 4 3], [4 1 2 1], 3, 4)
full(A) - zobraz celou strukturu rdke matice
spdiags - vytvor rdkou matici s prvky na diagonalach
S = spdiags(B,d,m,n) B je matice nenulov ych prvku, d je vektor diagonal, na ktere maj
b yt prvky umsteny, m, n jsou rozmery celkove matice.
d(i) = 0 hlavn diagonala
d(i) < 0 vedlejs diagonaly pod hlavn diagonalou
d(i) > 0 vedlejs diagonaly nad hlavn diagonalou
38
Prklad: Vygenerujte rdkou diagonaln matici ve tvaru:
_
_
1 1 0 0 0
1 2 1 0 0
0 1 3 1 0
0 0 1 4 1
0 0 0 1 5
_
Resen:
B = [ [ -1*ones(4,1); 0] (1:5) [0; ones(4,1) ]];
S = spdiags(B,[-1,0,1],5,5)
full(S) %kontrola
39
8 Numericka integrace a derivace
8.1 Integrace
K numericke integraci pristupujeme, kdyz:
funkcn predpis nezname, funkce, kterou integrujeme, je zadana tabulkou
funkcn predpis je prlis slozit y
Poznamka. quadrature - stanoven plosneho obsahu
Numericky integrujeme funkci vzdy na urcitem intervalu < a, b >.
Princip: interval rozdelme na nekolik podintervalu. Delen muze b yt s konstantnm krokem
(ekvidistantn) nebo s promenn ym krokem (neekvidistantn). Na kazdem takto zvolenem
podintervalu spocteme funkcn hodnoty v krajnch bodech a pomoc nich jiz zvolenou
metodou obsah obrazce, napr. lichobeznku, kter y je tvoren y krajnmi body podintervalu
a jejich funkcnmi hodnotami (x
k
, x
k+1
, f(x
k
), f(x
k+1
)). Celkov y integral je pak soucet
vsech podoblast.
Figure 1: Schema pro obdelnkove pravidlo
Newton-Cotesovy vzorce
metody s ekvidistantnm delenm uzlu
1. Obdelnkove pravidlo - podoblast nahrazena obdelnkem
h
N1
k=0
f(x
k
+ h/2)
2. Lichobeznkove pravidlo - podoblast nahrazena lichobeznkem
h
_
1/2f(x
0
) +
N1
k=0
f(x
k
) + 1/2f(x
N
)
_
40
3. Simpsonova pravidlo - integral pod parabolou
N mus b yt sude cslo
h/3 [f(x
0
) + 4f(x
1
) + 2f(x
2
) + 4f(x
3
) + ... + 2f(x
N2
) + 4f(x
N1
) + f(x
N
)]
Prklad. Spoctete numericky integral funkce y = sin(x) na intervalu < 0, >, vykres-
litete a vybarvete jednotlive plosky.
Prklad. Naprogramujte numerickou integraci funkce e
x
na intervalu < 1; 1, 2 > pomoc
Newton-Cotesov ych vzorcu. Porovnejte s presn ym resenm.
8.1.1 Funkce MATLABu
quad(@fce,a,b) - integral Simpsonov ym pravidlem funkce fce na intervalu a, b.
quadl(@fce,a,b) - integral Lobattov ym pravidlem funkce fce na intervalu a, b.
quadv(@fce,a,b) - integral funkce komplexn promenne na intervalu a, b.
dblquad(@fce,x
min
,x
max
,y
min
,y
max
) - dvojn y integral
triplequad(@fce,x
min
,x
max
,y
min
,y
max
,z
min
,z
max
) - trojn y integral
Prklad. Spoctete
_
1
0
_
/2
/2
(ysin(x) + xcos(y))dxdy.
Resen:
% denovani funkce
function z = funkce1
z = x*cos(y) + y*sin(x)
>> dblquad(@funkce1,0,1,/2,/2)
Prklad. Vypoctete delku krivky parametricky zadane pro parametr t < 0, 3 >.
x = sin(2t)
y = cos(t)
z = t
Resen:
l =
_
3
0
_
dx
2
+ dy
2
+ dz
2
dt
% funkce pro vypocet delky
function l=had(t)
41
l = sqrt(4*(cos(2*t)).
2 + (sin(t)).
2 + 1);
>> quad(had,0,3*)
8.2 Derivace
Necht f je funkce spojita na intervalu < a, b > a ma na < a, b > spojite prvn ctyri
derivace. Muzeme provest aproximaci Taylorov ym polynomem, pro dostatecne mala h
plat
f(x h) = f(x) hf
+
1
2
h
2
f
(x)
1
6
h
3
f
(x) + O(h
4
).
Odtud plyne
f(x + h) f(x h)
2h
= f
(x) +
1
6
h
2
f
(x) + O(h
4
).
Uveden y vztah dava numerickou metodu pro priblizn y v ypocet f
(x)
f(x + h) f(x h)
2h
s chybou aproximace radu h
2
.
Pozn. Postup je nestabiln pro velmi mala h.
Pokud mame funkci s prlis slozit ym zapisem, aproximujeme ji nejprve polynomem a pak
teprve poctame pribliznou hodnotu derivace teto aproximace.
8.2.1 Aproximace derivace diferencemi
Nejcasteji pouzvane vzorce pro v ypocet diference:
prav a diference
D
P
f =
f(x
0
+ h) f(x
0
)
h
leva diference
D
L
f =
f(x
0
) f(x
0
h)
h
centraln diference
D
C
f =
f(x
0
+ h) f(x
0
h)
2h
Prklad: Aproximujte derivci funkce y = sin(x) na intervalu < 0, 2 > pravou, levou a
centraln diferenc.
42
Resen: h = 0.5;
x = 0:h:2*pi;
y = sin(x);
for i=1:n-1
Df P(i) = (y(i+1)-y(i))/h;
end
for i=2:n
Df L(i) = (y(i)-y(i-1))/h;
end
for i=2:n-1
Df C(i) = (y(i+1)-y(i-1))/(2*h);
end
Df P Df L Df C
di(x) - rozdl sousednch prvku vektoru x: [x
2
x
1
, x
3
x
2
, ..., x
n
x
n1
] v ysledn y vektor
ma n-1 prvku
Prklad. Vykreslete funkci y = sin(x) na intervalu < 1, 2 > a jej derivaci.
Resen:
h = 0.1;
x = 0:h:2*pi;
y = sin(x);
dx = di(x);
dy = di(y);
df = dy./dx;
plot(x,y,b,x(0:end-1),df,r)
legend(f(x),f(x))
43
9 Pocatecn ulohy ODR
9.1 Obycejne diferencialn rovnice
Obycejna diferencialn rovnice (ODR) obsahuje jednu nebo vc derivac zavisle promenne
y podle nezavisle promenne t, obvykle oznacovane jako cas. Derivace y podle t se znac y
,
druha derivace y
= f(t, y)
ODR ma nekonecn y pocet resen liscch se o integrac konstantu. Pridat pocatecn podmnky
omez pocet resen na jedno konkretn.
y
= f(t, y)
y(t
0
) = y
0
9.2 Numericke metody pro resen ODR
Budeme se zab yvat resenm pocatecnch uloh pro ODR. Princip resen- diskretizace promenn ych.
Hledame priblizne resen podle nasledujcho postupu. Generuje se diskretn mnozina
x
0
= a, x
1
, x
2
, ..., x
n
a stanov se y
0
= b, y
1
, y
2
, ..., y
n
, ktera aproximuj presne resen v
uzlech ste [x
0
, x
1
, ...].
krok metody: h
n
= x
n+1
x
n
konstantn
promenn y
metody
jednokrokove - resen y
n+1
vyjadreno pomoc y
n
vcekrokove - resen y
n+1
vyjadreno pomoc y
n
, y
n1
, ..., y
n+1k
(k-krokova metoda).
metody (z pohledu konvergence)
prvnho radu
vyssch radu y
n+1
= y
n
+ (x
n
, y
n
; h
n
; f), je prrustkova funkce
9.2.1 Eulerova metoda
nejjednoduss, linearn rekurentn vztah
jednokrokova
44
prvnho radu
geometrick y smysl: na intervalu < x
n
, x
n+1
> se pohybujeme po tecne k presnemu
resen rovnice y
= t x s pocatecn podmnkou
x(0) = 1 na intervalu < 0; 0, 6 >. V ysledek porovnejte s presn ym resenm. Volte krok
h = 0.2 a h = 0.1.
Resen:
Kod v MATLABu naleznete v souboru Euler.m
9.2.2 Metody Runge-Kuttova typu
jednokrokove
vyssho radu
univerzalnejs a uzitecnejs nez Taylorovy metody
princip: sikovna aproximace Taylorovo rozvoje - kombinuje se z hodnot funkce f
vypoctan ych v nekolika strategicky volen ych bodech (x, y) rozlozen ych kolem krivky
resen y = y(x) na intervalu < x
n
, x
n+1
>
Predpis metody:
y
n+1
= y
n
+ h
n
r
i=1
i
k
i
n = 0, 1, ...
kde
k
1
= f(x
n
, y
n
)
k
i
= f(x
n
+
i
h
n
, y
n
+
i
h
n
k
i1
) i > 0
V kazdem kroku metody se spocte nejdrv k
1
, k
2
, ..., k
r
, pak y
n+1
.
Prklady metod Runge-Kutta
2.radu - modikovana Eulerova metoda
k
1
= f(x
n
, y
n
)
k
2
= f(x
n
+ h
n
/2, y
n
+ h
n
/2)
y
n+1
= y
n
+ h
n
k
2
45
4. radu - klasicka Rungova-Kuttova metoda
k
1
= f(x
n
, y
n
)
k
2
= f(x
n
+ h
n
/2, y
n
+ h
n
/2k
1
)
k
3
= f(x
n
+ h
n
/2, y
n
+ h
n
/2k
2
)
k
4
= f(x
n+1
, y
n
+ h
n
k
3
)
y
n+1
= y
n
+ h
n
k
1
+ 2k
2
+ 2k
3
+ k
4
6
9.3 Pocatecn uloha pro ODR v MATLABu
Pro resen pocatecnch uloh pro obycejn ych diferencialnch rovnic je v MATLABu imple-
mentovan system ODE, kter y res ODR prvnho radu a soustavy ODR prvnho radu. ODR
vyssch radu je proto treba prevest na soustavy prvnho radu.
Vsechny implementovane metody jsou s promenn ym casov ym krokem.
y
n
= f(t, y, y
, ..., y
n1
)
Zavedeme substituci:
y
= y
1
y
= y
1
= y
2
y
= y
2
= y
3
...
y
n
= y
n1
= f(t, y
1
, y
2
, ..., y
n1
)
9.3.1 Syntaxe
[t,Y] = odesolver(odefun,tspan,y0)
[t,Y] = odesolver(odefun,tspan,y0,options)
kde odesolver je jedna z funkc ode45, ode23, ode113, ode15s, ode23s, ode23t, ode23tb (viz.
help)
9.3.2 Parametry funkce:
odefun - prava strana diferencialn rovnice. Vsechny funkce pro ODR res rovnice ve tvaru
y
= f(t, y)
tspan - vektor urcujc interval integrace [t
0
,t
f
].
Resic predpoklada, ze pocatecn podmnka
je v case tspan(1) a integruje od tspan(1) do tspan(end).
y0 - vektor pocatecnch podmnek
46
options - nastaven integracnch vlastnost, denuj se pomoc funkce odeset (viz. dale)
t - sloupcov y vektor casov ych bodu
Y - matice resen. Kazd y radek matice odpovda nalezenemu resen y v prslusnem casovem
okamziku. Pocet sloupcu odpovda radu resene ODR.
9.3.3 ODE pro nonsti problem
ode45 - zalozen na explicitn metode Runge-Kutta (4,5), jednokrokova metoda, vhoda jako
prvn pokus pro vetsinu uloh
ode23 - zalozen na explicitn metode Runge-Kutta (2,3), jednokrokova metoda muze b yt
efektivnejs nez ode45
ode113 - vcekrokova metoda, podrobnosti viz. MATLAB-Help
9.3.4 ODE pro sti problem
ode15s - vcekrokova metoda, podrobnosti viz. MATLAB-Help
ode23s - jednokrokova metoda, podrobnosti viz. MATLAB-Help
ode23tb - podrobnosti viz. MATLAB-Help
9.3.5 ODE pro moderately sti problem
ode23t - podrobnosti viz. MATLAB-Help
9.3.6 Volan ODE, zobrazen v ysledku
ode23(@nazev fce,[t0,tf],y0) - vykresl resen do grackeho okna
[t,Y] = ode23(@nazev fce,[t0,tf],y0) - v ysledky uklada do promenne Y, t je vektor casov ych
kroku
sol = ode23(@nazev fce,[t0,tf],y0) - v ysledky uklada do promenne sol typu struktura, sol.x
obsahuje vektor integracnch bodu, sol.y obsahuje resen
ode23(@(t,x)nazev fce(t,x,param),[t0,tf],y0) - volan funkce se vstupnm parametrem
47
deval(xint,sol,idx) - vycsl resen sol v bodech dan ych vektorem xint. Parametr je idx je
nepovinn y, urcuje, ktere slozky resen maj b yt vypsany
Prklad:
Reste pomoc ode45 ODR x
Resen:
Kod v MATLABu naleznete v souboru dif rce.m, dif rce fce
Prklad:
Reste soustavu rovnic popisujcch pohyb tuheho telesa bez pusoben vnejsch
sil.
y
1
= y
2
y
3
y
1
(0) = 0
y
2
= y
1
y
3
y
2
(0) = 1
y
3
= 0.5y
1
y
2
y
3
(0) = 1
Resen:
Kod v MATLABu naleznete v souboru rigid mov.m, rigid mov fce.m
Prklad:
Reste y
(1 y
2
)y
(0) = 0 s
promenn ym parametrem . Pro = 1 na intervalu t < 0, 20 > jde o nonsti problem,
pro = 1000 na intervalu t < 0, 3000 > resme sti ulohu.
Resen:
Kod v MATLABu naleznete v souboru vdPol.m, vdPol fce.m
9.3.7 Parametry integrace
Nektera nastaven funkc ode lze menit pomoc parametru options denovaneho funkc ode-
set.
odeset - vypse vsechny parametry integrace (vlastnosti odefunkc), ktere lze menit. Menme
je zapisem options = odeset(name1,value1,name2,value2, ...), kde name je jmeno
parametry a value jeho nastavajc hodnota.
odeget(name) - vypse hodnotu pozadovane vlastnosti
Prehled vybran ych vlastnost (integracnch parametru):
options = odeset(stats,on) - zobraz statistiku probehleho v ypctu
options = odeset(outputset,[..]) - v yber, ktere slozky resen se budou ukladat do v ystupn
promenne.
48
options = odeset(MaxStep,k) - nastaven maximalnho casoveho kroku integrace na hod-
notu k.
options = odeset(InitialStep,k0) - nastaven pocatecn casoveho kroku na hodnotu k0.
options = odeset(Events,@events) - po kazdem kroku integrace se vola funkce events de-
novana uzivatelem a kontroluj se podmnky nastavene v teto funkci. Hod se napr. pro
ukoncen v ypoctu drve nez v case tspan(end).
Prklad:
Reste voln y pad hmotneho bodu z v ysky h v bezodporovem prostred. V ypocet
se zastav pri dopadu na zem. (Pouzijte events.)
Resen:
Kod v MATLABu naleznete v souboru volny pad.m, volny pad fce.m, volny pad stop.m
49
10 Okrajove ulohy ODR
10.1 Okrajove ulohy pro obycejne diferencialn rovnice
Teorie okrajov ych uloh pro obycejne diferencialn rovnice (ODR) je komplikovanejs nez
teorie poc atecnch uloh. V numerick ych metodach pro resen okrajov ych uloh se nedar
vytvaret tak univerzaln algoritmy jako u uloh s pocatecnmi podmnkami.
Samotnou okrajovou podmnkou nen jeste resen ulohy jednoznacne urceno. Abychom
mohli numericky resit okrajove ulohy, je treba bud najt zpusob, jak urcit chybejc
pocatecn podmnky v nekterem z koncov ych bodu intervalu, nebo pouzt metody jineho
typu nez u pocatecnch uloh.
Numericke metody pro resen okrajov ych ODR delme takto:
1. Metody pevadejc okrajove ulohy na pocatecn
2. Diferencn metody
3. Variacn metody (nebo-li Galerkinova typu)
4. Jine metody (napr. kolokacn)
Budeme se zab yvat metodou strelby a ukazeme si pouzit metody konecn ych diferenc.
10.2 Metoda strelby
Mejme okrajovou ulohu
y
= f(x, y, y
) x < a, b >
r
1
(y(a), y
(a)) = 0
r
2
(y(b), y
(b)) = 0
Predpokladejme, ze na < a, b > jsou jednoznacne resitelne pocatecn ulohy pro tuto ODR
s libovolne zadan ymi pocatecnmi podmnkami v bode x = a:
y(a) = , y
(a) =
pro libovolne , . Nasm clem je stanovit hodnoty a tak, aby resen pocatecn ulohy
bylo zarove n hledan ym resenm okrajove ulohy. Jakmile takova csla urcme, muzeme
priblizne resen dane okrajove ulohy vypoctat pomoc nektere numericke metody pro resen
pocatecnch uloh.
Prklad: Okrajova uloha pro voln y pad telesa v odporovem prostred resena metodou
strelby. Odpor volneho padu telesa je linearne zavisl y na rychlosti s koecientem c. Urcete
50
pocatecn rychlost, pokud teleso hmotnosti m dopadlo na zem za T sekund rychlost v
N
.
Resen: Zvolme v
k
(0), k 1 a v ypoctem obycejne diferencialn rovnice (napr. pomoc
ODE45) dojdeme k v ysledku v
k
(T), podle ktereho upravme pocatecn odhad jako
v
k+1
(0) =
v
N
v
k
(T)
v
k
(0).
Algoritmus iteracne opakujeme se zvolenou presnost
|v
k
(T) v
N
|
v
N
< .
Kod v MATLABu naleznete v souboru MetodaStrelby.m, MetodaStrelbyRHS.m
10.3 Metoda konecn ych diferenc
Diferencn metody aproximuj puvodn diferencialn ulohu jako takovou. V ysledkem diskretizace
je soustava algebraick ych rovnic pro hodnoty priblizneho resen v konecne sti bodu t
0
, t
1
, ..., t
N
.
Poctame-li metodou konecn ych diferenc, derivace v diferencialn rovnici a okrajov ych
podmnkach nahrazujeme prmo vhodn ymi diferencemi.
Rozdelme interval < 0, T > na N cast a vytvorme st
S = {t
0
, t
1
, t
2
, . . . , t
N
}.
Zvolme naprklad ekvidistantn st s krokem
t =
T
N
t = t
i+1
ti.
Body t
0
a t
n
jsou hranicn uzly, ostatn body jsou vnitrn uzly. Uvazujme pro nasi ulohu
t {0, t, 2t, . . . , Nt}.
Potom hledame resen y
i
v uzlech t
i
, i {0, . . . , N}. Pozor na indexovan MATLABu, kde
indexy musme brat od 1 do N + 1.
10.3.1 Linearn ODR prvnho radu
Vratme se k prkladu volneho padu. Pripomene rovnici s okrajovou podmnkou
v +
c
m
v = g, t < 0, T >, v(T) = v
N
.
51
Hledame resen v
i
v uzlech ste t
i
. Dosazenm dopredne diference
v
i
v
i+1
v
i
t
do nas rovnice zskame
v
i+1
vi
t
+
c
m
v
i
= g
a po uprave
_
1
ct
m
_
v
i
v
i+1
= gt.
Zavedenm konstant
a =
_
1
ct
m
_
a b = gt
zskame soustavu N rovnic tvaru
av
i
v
i+1
= b
pro N neznam ych (vnitrn uzly) v
0
, . . . , v
N1
. Maticove lze ulohu zapsat
Av = b
nebo-li
_
_
a 1 0 0 . . . 0
0 a 1 0 . . . 0
.
.
.
.
.
.
.
.
.
.
.
. . . . 0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 0
.
.
.
.
.
.
.
.
.
.
.
. a 1
0 0 0 . . . 0 a
_
_
_
_
v
0
.
.
.
.
.
.
.
.
.
.
.
.
v
N1
_
_
=
_
_
b
.
.
.
.
.
.
.
.
.
b
b + v
N
_
_
.
Kod v MATLABu naleznete v souboru MDK.m
10.3.2 Nelinearn ODR prvnho radu
Metodu diskretizace pro okrajovou ulohu nelinearn ODR si ukazeme na konkretnm prklade.
Vratme se opet k volnemu padu z predchozho odstavce, ale nyn uvazujme, ze odpor vz-
duchu behem volneho padu roste s kvadratem rychlosti.
Ulohu popisuje rovnice
m v + cv
2
= mg, t < 0, T >
s okrajovou podmnkou
v(T) = v
N
.
52
Provedeme-li diskretizaci pro metodu konecn ych diferenc, dostaneme ulohu
v
i+1
v
i
t
+
c
m
v
2
i
= g,
coz vede na soustavu N nelinearnch algebraick ych rovnic. Prevedeme-li nelinearn clen na
pravou stranu, zskame rovnice
v
i
v
i+1
= gt +
ct
m
v
2
i
,
ktere lze resit iteracne. Soustavu lze zapsat ve tvaru
Av = b(v)
nebo-li
_
_
1 1 0 0 . . . 0
0 1 1 0 . . . 0
.
.
.
.
.
.
.
.
.
.
.
. . . . 0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 0
.
.
.
.
.
.
.
.
.
.
.
. 1 1
0 0 0 . . . 0 1
_
_
_
_
v
0
.
.
.
.
.
.
.
.
.
.
.
.
v
N1
_
_
=
_
_
b +
ct
m
v
2
0
.
.
.
.
.
.
.
.
.
b +
ct
m
v
2
N2
b +
ct
m
v
2
N1
+ v
N
_
_
.
Pro pocatecn odhad v
0
resme iteracne soustavu
Av
k+1
= b(v
k
)
pro k 1 se zvolenou presnost
v
k+1
v
k
v
k
< .
Kod v MATLABu naleznete v souboru MDK nelin.m
10.3.3 ODR druheho radu
Uvazujme okrajovou ulohu typu
x + b x + cx = f(t), t < 0, T > .
Ukazeme si resen jak pro Neumannovy, tak pro Dirichletovy okrajove podmnky. Provedme
obdobnou diskretizaci jako pro rovnici v yse. Druhou derivaci aproximujeme jako
53
x
i
x
i1
2x
i
+ x
i+1
t
2
.
Dosazenm do nas rovnice po uprave dostaneme pro vsechny vnitrn uzly
x
i1
+
_
2 bt + ct
2
_
x
i
+ (1 + bt) x
i+1
= f
i
t
2
pro i {1, . . . , N}.
Zadanm Dirichletov ych okrajov ych podmnek
x
0
= x
0
,
x
N
= x
N
dostaneme soustavu N1 linearnch algebraick ych rovnic pro N1 neznam ych. Prevedeme-
li rovnici do tvaru
x
i1
+ px
i
+ qx
i+1
= f
i
t
2
,
soustava N 1 rovnic pro N 1 neznam ych bude mt tvar
_
_
p q 0 0 . . . 0
1 p q 0 . . . 0
.
.
.
.
.
.
.
.
.
.
.
. . . . 0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 0
.
.
.
.
.
.
.
.
. 1 p q
0 0 0 . . . 1 p
_
_
_
_
x
1
.
.
.
.
.
.
.
.
.
.
.
.
x
N1
_
_
=
_
_
f
1
t
2
x
0
f
2
t
2
.
.
.
.
.
.
f
N2
t
2
f
N1
t
2
x
N
_
_
.
Pro Neumannovy okrajove podmnky
x
0
= v
0
,
x
N
= v
N
nezname resen v okrajov ych bodech x
0
a x
N
, toto musme zahrnout do v ypoctu. Musme
aproximovat okrajove podmnky jako
x
1
x
0
t
v
0
,
x
N+1
x
N
t
v
N
.
Zde nam vystupuje ktivn hodnota x
N+1
. Soustavu tedy napseme tak, ze pridame prvn
okrajovou podmnku a pomoc druhe okrajove podmnky vyloucme ktivn x
N+1
. Matice
54
soustavy N + 1 linearnch algebraick ych rovnic pro N + 1 neznam ych x
0
az x
N
ma pak
tvar
_
_
1 1 0 0 . . . 0
1 p q 0 . . . 0
0 1 p q . . . 0
.
.
.
.
.
.
.
.
.
.
.
. . . . 0
.
.
.
.
.
.
.
.
. 1 p q
0 0
.
.
. 0 1 p + q
_
_
_
_
x
0
.
.
.
.
.
.
.
.
.
.
.
.
x
N
_
_
=
_
_
v
0
t
f
1
t
2
.
.
.
.
.
.
f
N1
t
2
f
N
t
2
v v
N
t
_
_
.
Kod v MATLABu naleznete v souboru ODE2.m
Prklad: Staticke zatzen prutu
Jednoduch a uloha elastostatiky s konstantn plochou prurezu a konstantnmi materialov ymi
vlastnostmi je popsana rovnic
EA
d
2
u
dx
2
+ f(x) = 0, x {0, L},
u(0) = 0 ,
u(0) = 0
E je Younguv modul pruznosti a A je plocha prurezu prutu. Tyto parametry mohou
b yt promenne podel prutu. Vlevo tedy mame Dirichletovu okrajovou podmnku a vpravo
Neumannovu okrajovou podmnku. Prevedeme-li rovnici na tvar
d
2
u
dx
2
= p(x), kde p(x) =
1
EA
f(x)
Diskretizujeme a pridame okrajove podmnky, dostaneme soustavu
Ku = f
55
nebo-li
_
_
2 1 0 0 . . . 0
1 2 1 0 . . . 0
0 1 2 1 . . . 0
.
.
.
.
.
.
.
.
. 1 2 1
0 0
.
.
. 0 1 1
_
_
_
_
u
1
.
.
.
.
.
.
.
.
.
u
N
_
_
=
_
_
p
1
x
2
u
0
p
2
x
2
.
.
.
p
N1
x
2
p
N
x
2
v
N
x
_
_
,
kde v nasem prpade u
0
= 0 a v
N
= 0.
Kod v MATLABu naleznete v souboru Prut.m
Prklad: Rozlozen teploty v prutu
Rovnice veden tepla je obecne parabolicka parcialn diferencialn rovnice druheho radu ve
tvaru
T
t
= a
2
_
2
T
x
2
+
2
T
y
2
+
2
T
z
2
_
+ f(x, y, t)
s patricn ymi okrajov ymi podmnkami a pocatecn podmnkou. Podrobneji se teto rovnici
bude venovat prst cvicen. Pro rozlozen teploty v 1D ve stacionarnm prpade prejde
tato rovnice na tvar
0 =
2
T
x
2
+ f(x), x {0, L},
T(0) = T
0
,
T(L) = T
N
.
ktera je obdobna v yse uvedene Dirichletove uloze
_
_
2 1 0 0 . . . 0
1 2 1 0 . . . 0
.
.
.
.
.
.
.
.
.
.
.
. . . . 0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 0
.
.
.
.
.
.
.
.
. 1 2 1
0 0 0 . . . 1 2
_
_
_
_
T
1
.
.
.
.
.
.
.
.
.
.
.
.
T
N1
_
_
=
_
_
f
1
x
2
T
0
f
2
x
2
.
.
.
.
.
.
f
N2
x
2
f
N1
x
2
T
N
_
_
.
Kod v MATLABu naleznete v souboru Teplota.m
56
10.4 Funkce MATLABu pro okrajovou ulohu ODR
V MATLABu je implementovana funkce bvp4c pro resen dvoubodov ych okrajov ych ODR.
= f(x, y)
s okrajovou podmnkou v krajnch bodech intervalu < a, b >
bc(y(a), y(b)) = 0.
ODR vyssch radu resme prevodem na soustavu ODR prvnho radu (stejne jako pri resen
pocatecn ulohy pomoc funkc ode).
sol = bvp4c(odefun, bcfun, solinit)
Parametry teto funkce predstavuj:
odefun - funkce popisujc pravou stranu diferencialn rovnice, ve tvaru f(x, y)
bcfun - funkce pro denovan okrajov ych podmnek, zadavame ve tvaru bc(y(a), y(b)) solinit
- struktura obsahujc pocatecn odhad resen
sol - promenna typu struktura obsahujc v ysledky, sol.x obsahuje vektor integracnch bodu,
sol.y obsahuje resen
deval(xint,sol,idx) - vycsl resen sol v bodech dan ych vektorem xint. Parametr je idx je
nepovinn y, urcuje, ktere slozky resen maj b yt vypsany.
Prklad:
Reste pomoc bvp4c ulohu:
y
+ y = 0 ,
y(0) = 0 ,
y(4) = 2 .
V ysledek porovnejte s analytick ym resenm a vykreslete zavislost y(x).
2
. Podle techto parametru
muzeme rozdelit PDR do tr typu jako
hyperbolicke, pro ktere plat b
2
ac > 0,
parabolicke, pro ktere plat b
2
ac = 0 a
elipticke, pro ktere plat b
2
ac < 0.
Pro kazd y z techto typu existuj specialn algoritmy resen s ohledem na vlastnosti resen.
Zde se omezme na zakladn typy vyskytujc se v technicke praxi, na parabolicke a hyper-
bolicke rovnice. Ukazeme si jejich resen metodou st a metodou konecn ych prvku.
Parabolicke rovnice se vyskytuj pri resen uloh vedn tepla, chemicke dif uze a jin ych
oboru. Popisuj prubeh nejakeho deje v case. Vzhledem k v yjimecnemu charakteru casove
promenne se pro rovnice parabolickeho typu zadava pocatecn podmnka a dale okrajove
podmnky. Tyto tzv. pocatecne-okrajove ulohy maj vuci t charakter pocatecn, vzhledem
k prostorov yn promenn ym jde o ulohy okrajove.
11.1 Metoda konecn ych diferenc
Rovnice veden tepla je obecne parabolicka parcialn diferencialn rovnice druheho radu ve
tvaru
u
t
= a
2
_
2
u
x
2
+
2
u
y
2
+
2
u
z
2
_
+ f(x, y, t)
s patricn ymi okrajov ymi podmnkami a pocatecn podmnkou. Zjednodusme si tuto ulohu
na prpad
u
t
= a
2
2
u
x
2
, x {0, L}
s pocatecn podmnkou
u(x, 0) = (x)
a s okrajov ymi podmnkami
u(0, t) = g
1
, u(L, t) = g
2
,
coz je homogenn rovnice veden tepla v 1D (evolucn loha).
58
11.1.1 Explicitn metoda
Ukazme si aplikaci explicitn metody konecn ych diferenc, ktera v jistem smyslu kombinuje
diferencn metody resen pocatecnch a okrajov ych uloh.
Ulohu budeme aproximovat na
obdelnku
Q =< 0, L > < 0, T > ,
kde si sestrojme st s uzly (x
k
, t
n
), k {0, . . . , K}, n {0, . . . , N}, kde x
k
= kx a
t
n
= nt, x =
L
K
a t =
T
N
. Dale budeme znacit u(x
k
, t
n
) = U
n
k
. Na nulte casove
hladine zvolme
U
0
k
= (x).
Dals postup zalez na tom, ze dana pocatecne-okrajova uloha ma v promenne t charak-
ter pocatecn a hodnoty priblizneho resen U
n
k
budeme poctat postupne po jednotliv ych
casov ych vrstvach. Zarove n mus b yt splneny okrajove podmnky
U
n+1
0
= g
0
(t
n+1
) , U
n+1
K
= g
1
(t
n+1
) .
pouzijeme vhodne diferencn schema. Nejjednoduss cesta spocva v tom, ze v uzlu (x
k
, t
n
)
aproximujeme druhou derivaci druhou pomernou diferenc a derivaci podle t nahradme
diferencnm podlem
U (x
k
, t
n
)
t
U
n+1
k
U
n
k
t
.
V ysledkem takoveho postupu je diferencn rovnice
U
n+1
k
U
n
k
t
= a
2
U
n
k+1
2U
n
k
U
n
k1
x
2
,
z nz obdrzme explicitn vztah
U
n+1
k
= rU
n
k1
+ (1 2r)U
n
k
+ rU
n
k+1
, k {1, . . . , K 1},
kde
r =
a
2
t
x
2
.
Obecne lze uloha zapsat v maticovem tvaru
A
n
U
n+1
= B
n
U
n
+F
n
.
Pro nas prpad je A = I, matice
59
B
n
=
_
_
1 2r r 0 0 . . . 0
r 1 2r r 0 . . . 0
0 r 1 2r r . . . 0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 0
.
.
.
.
.
.
.
.
. r 1 2r r
0 0 0 . . . r 1 2r
_
_
je radu K 1 a F
n
je nulov y vektor. Rekurentne lze nas vztah zapsat jako
U
n+1
1
= (1 2r)U
n
1
U
n+1
1
= (1 2r)
n
U
0
1
.
Kod v MATLABu naleznete v souboru Teplota1DExplicit.m
Aby explicitn metoda byla stabiln, je nutno zabezpecit, aby 0 1 2r 1.
11.1.2 Implicitn metoda
Nzk y rad presnosti a podmnenou stabilitu lze vyresit vyuzitm implicitn metody. Diferencn
vztah zde mame
U (x
k
, t
n
)
t
U
n
k
U
n1
k
t
a v ysledkem je diferencn rovnice
U
n
k
U
n1
k
t
= a
2
U
n
k+1
2U
n
k
U
n
k1
x
2
,
kterou maticove zapseme jako
60
_
_
1 + 2r r 0 0 . . . 0
r 1 + 2r r 0 . . . 0
0 r 1 + 2r r . . . 0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 0
.
.
.
.
.
.
.
.
. r 1 + 2r r
0 0 0 . . . r 1 + 2r
_
_
_
_
U
n
1
.
.
.
.
.
.
.
.
.
.
.
.
U
n
K
_
_
=
_
_
U
n1
1
.
.
.
.
.
.
.
.
.
.
.
.
U
n1
K
_
_
+
_
_
rg
0
(t
n
)
0
.
.
.
.
.
.
0
rg
1
(t
n
)
_
_
.
Vektor U
0
je dan pocatecn podmnkou. Okrajova podmnka muze samozrejme obsahovat
i derivace. Pro explicitn metodu aproximujeme derivace jako
u
x
(0, t
n
)
U
n
1
U
n
0
x
, u
x
(L, t
n
)
U
n
K+1
U
n
K
x
,
ktere prid ame k resen soustavy. Rovnici vce prostorov ych promenn ych ve tvaru
u
t
= u
xx
+ u
yy
resme pro t < 0, T > na ctverci =< 0, L
1
> < 0, L
2
>. Pocatecn podmnka je
u(x, y, 0) = (x, y) a okrajova podmnka na je u(x, y, t) = g(x, y, t). Priblizne resen je
U
n
i,j
= u(ix, jy, nt). Explicitnm schematem dospejeme k diferencn aproximaci
U
n+1
i,j
U
n
i,j
t
=
U
n
i+1,j
2U
n
i,j
U
n
i1,j
x
2
+
U
n
i,j+1
2U
n
i,j
U
n
i,j1
y
2
.
Kod v MATLABu naleznete v souboru Teplota1DImplicit.m
11.2 Funkce MATLABu pro parabolickou PDR
pdepe
pdetool
V MATLABu je implementovana funkce pdepe pro resen pocatecne-okrajov ych uloh parabol-
ick ych a eliptick ych PDR jedne prostorove promenne a casu.
Res PDR ve tvaru
c
_
t, x, u,
u
x
_
u
x
= x
m
x
_
x
m
f
_
t, x, u,
u
x
__
+ s
_
t, x, u,
u
x
_
61
pro t
0
t t
n
a pro a x b.
Pocatecn pomnka je
u(x, t
0
) = u
0
(x),
okrajova podmnka je
p(t, x, u) + q(t, x)f(t, x, u,
u
x
) = 0
sol = pdepe(m, pdefun, icfun, bcfun, xmesh, tspan)
Oznacen parametru odpovdaj znacen z predchoz rovnice.
m - parametr udavajc typ symetrie, 0 - deskova, 1 - valcova, 2 - kulova
pdefun - funkce denujc PDR. Denujeme ji ve tvaru [c, f, s] = pdefun(x, t, u, dudx)
icfun - funkce, ktera denuje pocatecn podmnky ve tvaru u = icfun(x)
bcfun - funkce vyjadrujc okrajove podmnky ve tvaru [pl, ql, pr, qr] = bcfun(xl, ul, xr, xl,
t)
xmesh - vektor [x0, x1, ..., xn] urcujc hodnoty bodu, ve kter ych pozadujeme resen v
kazdem casovem okamziku (resp. pro ka
2
u
t
=
2
u
x
2
na intervalu 0 x 1 a pro cas t 0. V case t = 0 spl nuje pocatecn podmnku
u(0, x) = sinx
a v bodech x = 0, x = 1 okrajove podmnky
u(0, x) = 0
e
t
+
u(1, t)
x
= 0
Resen naleznete v souborech PDR.m, PDR fce.m, PDR pocpodm.m, PDR okrajpodm.m.
62
12 Metoda konecn ych prvku
pde - Partial Dierential Equation Toolbox
Metoda konecn ych prvku (MKP) je numericka metoda pro resen diferencialnch rovnic.
Patr do mnoziny metod Galerkinova typu.
Postup pri resen ulohy je nasledujc:
pops an problemu na oblasti diferencialn rovnic,
denovan okrajov ych a pocatecnch podmnek,
diskretizace ulohy a
nalezen priblizneho resen MKP.
Princip metod Galerkinova typu:
Tyto metody aproximuj prmo resen (na rozdl od diferencnch metod popsan ych v 10.
cvicen) dane okrajove ulohy pomoc konecn ych linearnch kombinac vhodne zvolen ych
linearne nezavisl ych funkc (tzv. bazove funkce). Dostavame soustavu algebraick ych rovnic
pro koecienty linearn kombinace urcujc hledane priblizne resen.
MKP spocva ve specialn konstrukci bazov ych funkc.
Predstavme si MKP na velmi jednoduchem prkladu.
Mejme tri prutove prvky sestavene do troj uhelnku v jednom z vrcholu zatzen ych silou,
dals vrchol je pevne uchycen a zb yvajc ma povolen posuv ve vodorovnem smeru (podle
obrazku vlevo).
Ukolem je spoctat, jak se tato konstrukce pod dan ym zatzenm zdefor-
muje. Konstrukci rozdelme ne tri prvky spojene tremi uzly. Kazd y prvek je tvoren dvema
uzly, jejichz globaln souradnice (x
i
, y
i
) zname. Pro kazd y prvek zavedeme jeste lokaln
souradnicov y system (, ) (viz. obrazek vpravo). Kazd y z uzlu ma 2 stupne volnosti
63
(posuvy do smeru x a y), celkove ma tedy uloha 3 x 2 = 6 stup nu volnosti.
Znacen:
uzly: 1 2 3
prvky: (1) (2) (3)
Denujeme vektor neznam ych posuvu v uzlech prvku a sil:
u =
_
_
u
1x
u
1y
u
2x
u
2y
u
3x
u
3y
_
_
f =
_
_
f
1x
f
1y
f
2x
f
2y
f
3x
f
3y
_
_
Predpokladejme, ze mezi silami f a posuvy u je linarn zavislost
f = Ku,
kde K se naz yva globaln matice tuhosti.
Pro kazd y prvek (element) pak plat
f
(e)
=
K
(e)
u
(e)
,
kde u
(e)
=
_
_
u
i
u
i
u
j
u
j
_
f
(e)
=
_
_
f
i
f
i
f
j
f
j
_
_
Predpokladame, ze prvek se chova jako linearn pruzina
k =
EA
L
, f
i
= k(u
i
u
j
)
kde je E - Younguv modul pruznosti, A - prurez, L - pocatecn delka prvku.
64
Sestavme lokaln matici tuhosti - matice tuhosti pvku. V lokalnch souradnicch ma tvar
K
(e)
=
EA
L
_
_
1 0 | 1 0
0 0 | 0 0
|
1 0 | 1 0
0 0 | 0 0
_
_
Nyn je nutne zapis transformovat z lokaln soustavy souradnic do globaln pomoc orto-
gonaln matice rotace T s prvky
c = cosa s = sin,
kde uhel je natocen lokaln soustavy souradnic oproti globaln.
T =
_
_
c s | 0 0
s c | 0 0
|
0 0 | c s
0 0 | s c
_
_
u
(e)
= Tu
(e)
f
(e)
= Tf
(e)
f
(e)
=
K
(e)
u
(e)
Tf
(e)
=
K
(e)
Tu
(e)
f
(e)
= T
T
K
(e)
Tu
(e)
K
(e)
= T
T
K
(e)
T
Podobne bychom postupovali se vsemi prvky. Pote je treba sestavit celkovou (glob aln)
matici tuhosti a to tak, ze matice kazdeho prvku umstujeme na prslusne pozice do
globaln matice. V ysledna matice je ctvercova, symetricka a jej rozmer odpovda poctu
stup nu volnosti ulohy. V nasem prpade bude K(6, 6).
65
Prvkove matice tuhosti je treba namapovat do rozmeru celkove matice:
K
(1)
=
_
_
K
(1)
11
K
(1)
12
. . 0 0
K
(1)
21
. . . 0 0
. . . . 0 0
. . . K
(1)
44
0 0
0 0 0 0 0 0
0 0 0 0 0 0
_
K
(2)
=
_
_
0 0 0 0 0 0
0 0 0 0 0 0
0 0 K
(2)
11
K
(2)
12
. .
0 0 K
(2)
21
. . .
0 0 . . . .
0 0 . . . K
(2)
44
_
K
(3)
=
_
_
K
(3)
11
K
(3)
12
0 0 . .
K
(3)
21
. 0 0 . .
0 0 0 0 0 0
0 0 0 0 0 0
. . 0 0 . .
. . 0 0 . K
(3)
44
_
_
a pak plat
K =
K
(1)
+
K
(2)
+
K
(3)
.
66
Pridame jeste okrajove podmnky (homogenn podle obrazku). Uzel 1 je pevne uchycen,
uzel 2 se posouva ve vodorovnem smeru, tedy
u
1x
= u
1y
= u
2y
= 0.
Do matice tuhosti K pseme 1 na digonalu a 0 do prslusneho radku a sloupce.
_
_
0
0
0
0
f
3x
f
3y
_
_
=
_
_
1 0 0 0 0 0
0 1 0 0 0 0
0 0 K
33
0 K
35
K
36
0 0 0 1 0 0
0 0 K
53
0 K
55
K
56
0 0 K
63
0 K
65
K
66
_
_
_
_
u
1x
u
1y
u
2x
u
2y
u
3x
u
3y
_
CU v
Plzni, Plze n, 1996.
[7] Help systemu MATLAB 7.0.1.
70