10 paskaita DiferencialinÄs lygtys MATLAB (pdf)
10 paskaita DiferencialinÄs lygtys MATLAB (pdf)
10 paskaita DiferencialinÄs lygtys MATLAB (pdf)
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>10</strong> <strong>paskaita</strong><br />
Diferencialinių lygčių (DL)<br />
sprendimas<br />
<strong>MATLAB</strong><br />
Pagrindinės sąvokos<br />
• Apibr. Paprastąja diferencialine lygtimi (PDL) vadinama<br />
lygybė, į kurią įeina nepriklausomas kintamasis x,<br />
ieškoma (nežinoma) funkcija y(x) ir jos išvestinės:<br />
F(x, y, y', . . . , y (n) ) = 0.<br />
• Laikoma, kad F(x, y, p 1 , . . . , p n ) yra tolydi visų savo<br />
argumentų atžvilgiu ir būtinai priklauso nuo argumento<br />
p n .<br />
• Apibr. DL yra užrašyta kanoniniu pavidalu, jei lygtis<br />
išspręsta aukščiausiosios eilės išvestinės atžvilgiu:<br />
y (n) = f(x, y, y', . . . , y (n-1) ).<br />
• Pavyzdys. DL y'''+y''−xe x −1 = 0 kanoninis pavidalas yra<br />
y''' = −y'' + xe x + 1.<br />
Diferencialinės <strong>lygtys</strong> (DL)<br />
‣ Paprastosios diferencialinės <strong>lygtys</strong> (PDL, angl.<br />
ODE) – vieno kintamojo funkcija:<br />
du c 2<br />
g u<br />
dt m<br />
‣ DL dalinėmis išvestinėmis (angl. PDE) – kelių<br />
kintamųjų funkcija:<br />
2<br />
u u u<br />
u c , čia u ( t , x )<br />
2<br />
t x x<br />
2 2 2<br />
u u u<br />
0 čia uxyz ( , , )<br />
2 2 2<br />
x y z<br />
Diferencialinės lygties eilė<br />
Apibr. Diferencialinės lygties eile vadinama didžiausios išvestinės eilė<br />
diferencialinėje lygtyje.<br />
‣ 1-os eilės (parašiutininko kritimas)<br />
‣ 2-os eilės (svarelio- spyruoklės sistema su trintimi)<br />
ir t.t.<br />
d x dx<br />
m c kx<br />
dt dt<br />
du c<br />
g u<br />
dt m<br />
2<br />
0<br />
2<br />
‣ n-osios eilės F(x, y, y',. . . , y (n) ) = 0.<br />
2<br />
DL pavyzdžiai<br />
Aukštesnės eilės PDL<br />
‣ Visada galima suvesti aukštesnės eilės PDL į pirmos eilės PDL sistemą<br />
‣ Pavyzdys:<br />
‣ Tegul<br />
3<br />
d x<br />
2<br />
d x dx<br />
3<br />
dt<br />
2<br />
dt dt<br />
<br />
a b c f t<br />
dx<br />
‣ Svarbu išmokti spręsti pirmos eilės PDL y<br />
dt<br />
2<br />
dx d x<br />
dy<br />
y , z <br />
z<br />
2<br />
dt dt<br />
dt<br />
dz<br />
1<br />
f()<br />
t bzcy<br />
dt a<br />
<br />
1
Tiesinės ir netiesinės PDL<br />
Tiesinės PDL: nežinomosios funkcijos ir<br />
jų išvestinės į reiškinį įeina tiesiškai<br />
2<br />
d g<br />
0<br />
2<br />
dt l<br />
Pavyzdys: švytuoklė<br />
Netiesinė PDL<br />
2<br />
d g<br />
sin<br />
0<br />
2<br />
dt l<br />
Netiesinės PDL: kitais atvejais<br />
2<br />
d g<br />
sin<br />
0<br />
2<br />
dt l<br />
2<br />
u<br />
u<br />
u u<br />
<br />
2<br />
x<br />
x<br />
netiesiškumai<br />
netiesiškumas<br />
PDL linearizavimas<br />
Paprastosios diferencialinės <strong>lygtys</strong><br />
• Kartais netiesinė PDL linearizuojama<br />
u<br />
(=> gautą tiesinę PDL galima lengviau<br />
išspręsti)<br />
• Pavyzdys: mažas kampas<br />
1 sin<br />
<br />
du/dt<br />
t<br />
du<br />
dt <br />
f (, tu)<br />
2 2<br />
d g d g<br />
sin<br />
0 <br />
2 2<br />
0<br />
dt l dt l<br />
netiesinė PDL<br />
tiesinė PDL<br />
t<br />
Pradinės sąlygos<br />
Analizinis ir skaitinis DL sprendimas<br />
Analizinis sprendimas<br />
Skaitinis sprendimas<br />
u<br />
PDL sprendinys<br />
priklauso nuo<br />
pradinių sąlygų<br />
y(0)=b<br />
y<br />
y<br />
t 0 , y 0<br />
t 1 , y 1<br />
t 2 , y 2<br />
t 3 , y 3<br />
t t t<br />
t<br />
t<br />
t<br />
Ta pati PDL, bet<br />
skirtingos<br />
pradinės sąlygos<br />
Surandama sprendinių šeima.<br />
Pasirenkamas atitinkantis<br />
pradines sąlygas sprendinys<br />
Užrašoma analizine<br />
sprendinio y(t) formulė<br />
Pradedame nuo pradinių sąlygų<br />
Diskretizavimas pagal laiką,<br />
pasirenkamas mažas žingsnis t<br />
Randamas apytikslis sprendinys<br />
kiekvienu laiko momentu<br />
Surandamas diskretusis<br />
sprendinys: (t 0 ,y 0 ), (t 1 ,y 1 ), …<br />
2
Tolygusis diskretusis tinklas<br />
<br />
Koši uždavinys<br />
PDL + pradinės sąlygos<br />
du<br />
f( t, u) ;<br />
dt<br />
t 0, (0 t T)<br />
u(0)<br />
u<br />
t : t n, n0,... , N,<br />
t T<br />
<br />
0<br />
n n N<br />
T<br />
<br />
N<br />
- žingsnis<br />
t 0 =0 t t<br />
1 τ t N-1 N =T<br />
<br />
ut ()<br />
- tikslusis<br />
sprendinys<br />
U<br />
n<br />
U( t )<br />
n<br />
Koši uždavinys<br />
ut () tikslusis sprendinys;<br />
PDL sprendinio diskretusis artinys.<br />
• Baigtinių skirtumų uždavinys (paprasčiausias<br />
atvejis)<br />
n 1 n<br />
U<br />
U<br />
n<br />
f( t , U ) ;<br />
0<br />
U u(0)<br />
u0<br />
• Išreikštinis Eulerio metodas<br />
U U f( t , U ),<br />
U<br />
n 1 n n<br />
n<br />
0<br />
<br />
u<br />
0<br />
n<br />
tn1<br />
<br />
tn<br />
Skaitinio sprendimo formulės<br />
du<br />
: f ( tu , )<br />
dt<br />
Kairiųjų stačiakampių formulė<br />
U U f( t , U )<br />
n 1 n n<br />
n<br />
Dešiniųjų stačiakampių formulė<br />
U U <br />
f( t , U )<br />
n1 n n1<br />
n1<br />
Trapecijų formulė<br />
tn1<br />
ut (<br />
n1) ut (<br />
n) f( tudt , )<br />
n1 n <br />
n n1<br />
U U f( tn, U ) f( tn1, U )<br />
2<br />
tn<br />
Išreikštinis<br />
Eulerio metodas<br />
Neišreikštinis<br />
Eulerio metodas<br />
<br />
Simetrinis<br />
Eulerio metodas<br />
Eulerio metodas<br />
• Aproksimuoja išvestinę baigtiniu<br />
skirtumu<br />
du ui<br />
1<br />
ui<br />
f ( ti, ui) ui<br />
1<br />
ui <br />
f( ti, ui)<br />
dt t t<br />
• Lokali paklaida (Teiloro formulė)<br />
• arba<br />
i1<br />
i<br />
( )<br />
u u u u u R<br />
u<br />
2 <br />
<br />
n! ( n1)!<br />
" ( n) ( n1)<br />
' i 2 i n<br />
n1<br />
i 1 i i Rn<br />
;<br />
n<br />
<br />
( n1)<br />
f( ti, ui) 2 f ( ti, ui)<br />
n n1<br />
ui<br />
1<br />
ui f( ti, ui) <br />
O( )<br />
2 n!<br />
PDL skaitiniai sprendimo metodai<br />
Eulerio metodas<br />
‣ Eulerio metodai<br />
‣ Prediktoriaus-korektoriaus metodai<br />
(Heun's methods)<br />
‣ Rungės ir Kutos metodai<br />
‣ ....<br />
u<br />
prognozuojama<br />
tikroji reikšmė<br />
paklaida<br />
τ<br />
3
Eulerio metodas<br />
Vienažingsniai metodai<br />
u 0<br />
du<br />
f ( tu , ); ut ( ) u<br />
dt <br />
<br />
Aproksimavimas tiesę<br />
0 0<br />
t 0 τ t 1 τ t 2 τ t 3<br />
Bendras<br />
vienažingsnių<br />
metodų užrašymo<br />
būdas:<br />
n 1 n<br />
U U <br />
Metodai skiriasi<br />
tarpusavyje<br />
išvestinės<br />
aproksimavimu<br />
Rungės ir Kuto metodai<br />
Rungės ir Kuto metodo matrica<br />
‣ Rungės ir Kutos metodai - išreikštiniai vienažingsniai metodai<br />
‣ Idėja:<br />
n 1 n<br />
U U <br />
k k <br />
k<br />
1 1 2 2 n n<br />
Išvestinės<br />
aproksimacija<br />
a<br />
b<br />
2 21<br />
a b b<br />
<br />
3 31 32<br />
a b b b<br />
m m1 m2 m, m1<br />
<br />
1 2 m1<br />
m<br />
m-pakopis išreikštinis Rungės ir Kutos<br />
metodas<br />
• Vienažingsnis metodas<br />
Funkcijos f(t,u)<br />
reikšmės<br />
skaičiuojamos<br />
m skirtinguose<br />
intervalo<br />
[t n ,t n+1 ]<br />
taškuose<br />
k f( t , U )<br />
k f t a U b k<br />
k f( t a , U ( b k b k ))<br />
n<br />
1 n<br />
n<br />
2<br />
(<br />
n<br />
n1 2, n1 21 1)<br />
n<br />
3<br />
<br />
n<br />
n1 3<br />
n1 31 1<br />
<br />
32 2<br />
<br />
<br />
<br />
m1<br />
<br />
n<br />
km f tn n1am,<br />
U n1<br />
bmjk<br />
<br />
<br />
j<br />
<br />
<br />
j1<br />
<br />
<br />
m<br />
n1<br />
n<br />
U U n1<br />
jkj<br />
j1<br />
Išreikštinė<br />
formulė<br />
Daugiapakopiai Rungės ir Kutos metodai<br />
• RK metodo aproksimacijos tikslumo eilės<br />
priklausomybė nuo etapų skaičiaus<br />
Etapų skaičius m 1 2 3 4 5 6 7 8<br />
Tikslumo eilė p 1 2 3 4 4 5 6 6<br />
Apibr. Metodo tikslumo eilė yra p-toji, jei<br />
Arba<br />
n<br />
p<br />
max U u( t ) O( ).<br />
n1, ,<br />
N<br />
Z U u t C t U O<br />
n<br />
n n p p 1<br />
(<br />
n) (<br />
n, ) ( ).<br />
4
Uždaviniai, sprendžiami ODE solvers<br />
1 eilės PDL sistemos :<br />
• Išreikštinės PDL y′ =f(t,y)<br />
• Tiesiškai neišreikštinės PDL pavidalo<br />
M(t,y)⋅ y′ = f(t,y) ,<br />
čia M(t,y) yra matrica;<br />
• Pilnai neišreikštinės PDL sistemos<br />
f(t,y,y′) = 0 (tik ode15i).<br />
DL sprendimas <strong>MATLAB</strong> aplinkoje<br />
ode45 sprendžia pirmos eilės diferencialinių lygčių<br />
sistemas.<br />
Naudojamas Rungės ir Kutos metodas.<br />
4-pakopiai Rungės ir Kuto metodai<br />
k 2<br />
<br />
1<br />
6<br />
( k1 2k2<br />
2k3<br />
k4<br />
)<br />
n<br />
k1 f( tn, U )<br />
<br />
1 n 1<br />
k2 f( tn , U k1)<br />
<br />
2 2<br />
<br />
1 n 1<br />
k3 f( tn , U k2)<br />
<br />
2 2<br />
<br />
n<br />
k4 f( tn , U k3)<br />
n1<br />
n 1<br />
U U ( k1 2k2 2k3 k4)<br />
<br />
6<br />
Rungės ir<br />
Kuto 4-osios<br />
eilės formulės<br />
k 1<br />
<br />
k 4<br />
k 3<br />
t n t n + τ/2 t n + τ<br />
<strong>MATLAB</strong> – uždavinio formulavimas<br />
Sprendžiant su <strong>MATLAB</strong> uždavinys turi būti<br />
suformuluotas kaip DL sistema:<br />
dy1<br />
f1(<br />
t,<br />
y1,<br />
y2<br />
, ,<br />
yn<br />
),<br />
dt<br />
dy2<br />
f<br />
2<br />
( t,<br />
y1,<br />
y2<br />
, ,<br />
yn<br />
),<br />
dt<br />
<br />
dyn<br />
f<br />
n<br />
( t,<br />
y1,<br />
y2,<br />
,<br />
yn<br />
),<br />
dt<br />
y ( t ) b ,<br />
1<br />
y ( t ) b ,<br />
2<br />
0<br />
0<br />
y ( t ) b ,<br />
•Funkcijos f 1 , f 2 , …, f n yra įvesties parametrai, aprašomi<br />
funkcija, pvz. fvector. Atitinkantis failas yra fvector.m<br />
•Vektoriaus y pradinės reikšmės (laiko momentu t 0 ) b 1 ,b 2 ,<br />
…, b n saugomi kaip vektorius (vienmatis array), pvz. y0<br />
n<br />
0<br />
<br />
1<br />
2<br />
n<br />
• Surinkus komandiniame langę:<br />
[t,y]=ode45(‘fvector’,Tspan,y0)<br />
surandame sprendinį<br />
• Čia Tspan=[T0 Tf] yra vektorius<br />
• T0 – pradinis laiko momentas t 0,<br />
• Tf – laiko intervalo pabaiga.<br />
•Skaičiavimo rezultatus galima vizualizuoti, pvz.,<br />
plot(t,y) braižo visu sprendinio komponenčių y 1 , y 2 ,<br />
…, y n grafikus kaip funkcijų nuo t.<br />
• Pvz., : plot(t,y(:,1))braižo tik y 1 (t) grafiką.<br />
5
DLS sprendimas su <strong>MATLAB</strong> - pavyzdys<br />
• Pastaba. Paprasčiausiu būdu iškviečiamas ode45 yra<br />
adaptyvusis algoritmas, t.y pats pasirenka žingsnį pagal<br />
laiką ir keičia jį priklausomai nuo to, kaip greitai keičiasi<br />
sprendinys.<br />
• Sprendinio reikšmes generuojami laiko momentais t 1 , t 2 ,<br />
t 3 , … (čia t k+1 = t k +τ k ), su τ k parinktu ode45. Taigi kiekviena<br />
sprendinio y 1 , y 2 , …, y n komponentė pati yra vektorius:<br />
y 1 (t 1 ), y 1 (t 2 ), y 1 (t 3 ), …, po to y 2 (t 1 ), y 2 (t 2 ), y 2 (t 3 ), …ir t.t.<br />
• Išspręskime x 2x<br />
5x<br />
sint<br />
x( 0) x(0)<br />
0<br />
• Suvedame antros eilės DL į pirmos eilės<br />
DLS: Įvedame naujus kintamuosius:<br />
x x<br />
•Iš suderinamumo x<br />
1<br />
x<br />
x2<br />
x<br />
1<br />
2<br />
x<br />
•Iš duotosios DL:<br />
x<br />
<br />
2<br />
x sint<br />
5x<br />
2x<br />
sint<br />
5x1<br />
2<br />
<br />
x<br />
2<br />
Pavyzdys: DLS sprendimas su <strong>MATLAB</strong><br />
• Gauname DL sistema:<br />
DLS sprendimas su <strong>MATLAB</strong> - pavyzdys<br />
• Į m.failą ‘xprime.m’ užrašome DLS dešiniosios pusės<br />
function xp=xprime(t,x)<br />
x<br />
x<br />
1<br />
x<br />
<br />
2<br />
2<br />
5<br />
1 2<br />
x 2x<br />
sin t<br />
x (0) 0<br />
1<br />
x (0) 0<br />
2<br />
%This is the function that makes up the system<br />
%of differential equations that we use in ode45<br />
%Note: the next line is necessary because,though<br />
%<strong>MATLAB</strong> does not need variables to be initialised<br />
%before they are used, vectors will automatically<br />
%be set as row vectors. We want xp to be a column<br />
%vector<br />
xp=zeros(length(x),1);<br />
xp(1)=x(2);<br />
xp(2)=-5*x(1)-2.0*x(2)+sin(t)<br />
DLS sprendimas su <strong>MATLAB</strong> pavyzdys<br />
• Paleisti ode45 galima komandiniame lange<br />
arba faile-scenarijuje (m-file):<br />
x0=[0; 0];<br />
%pradinės sąlygos<br />
tspan = [0, 15]; %laiko intervalas<br />
%Iškviečame ode45 funkciją nurodant duotąsias<br />
%pradines sąlygas ir laiko intervalą<br />
[t,x]=ode45('xprime',tspan,x0);<br />
%Braižomas sprendinio matricos pirmas stulpelis<br />
%x 1 arba x.<br />
plot(t,x(:,1));<br />
DLS sprendimas su <strong>MATLAB</strong> pavyzdys<br />
• DL sprendinys (integralinė kreivė):<br />
6
<strong>MATLAB</strong> solvers ODE<br />
s (stiff) -<br />
standus<br />
• ode45 išreikštinis Rungės ir Kuto metodas<br />
• ode23 išreikštinis Rungės ir Kuto metodas<br />
(nestandžiosios sistemos, tikslumas ir skaičiavimo<br />
laikas < nei ode45)<br />
• ode113 kintamos eilės Adams-Bashforth-Moulton<br />
solver (kai reikialingas didelis tikslumas)<br />
• ode15s kintamos eilės daugiažingsnis metodas<br />
skaitinio diferencijavimo formulių pagrindų<br />
(naudojamas, kai nepavyksta išspręsti su ode45)<br />
• ode23s – vienažingsnis metodas Rozenbroko 2 eilės<br />
metodas. Greitis > nei kitu metodu, tikslumas nei<br />
ode15s, tikslumas
Koši uždavinio (IVP ODE ) sprendimo etapai<br />
1. Perrašykite uždavinį kaip pirmos eilės PDL<br />
sistemą.<br />
2. Užprogramuokite pirmos eilės PDL sistemą.<br />
3. Panaudokite vieną iš funkcijų uždavinio<br />
sprendimui.<br />
4. Rezultatų analizė.<br />
8
Pavyzdys: Van der Polio lygtis (nestandi)<br />
Šis pavyzdys paaiškina sprendimo žingsnius:<br />
2<br />
čia parametras<br />
y'' <br />
1y y' y 0, 0 .<br />
1. Perrašykite uždavinį kaip pirmos eilės PDL<br />
sistemą.<br />
Perrašykite Van der Polio lygtį, atlikus pakeitimą<br />
y1 y, y2<br />
y'.<br />
Gauta pirmos eilės PDL sistema yra<br />
y'<br />
1<br />
y2<br />
2<br />
y' <br />
1 y y y.<br />
<br />
2 1 2 1<br />
<br />
2. Užprogramuokite pirmos eilės PDL sistemą.<br />
function dydt = vdp1(t,y)<br />
% vdp1 funkcija (mu=1).<br />
dydt = [y(2); (1-y(1)^2)*y(2)-y(1)];<br />
Pastaba: lygčių sistema yra autonominė, t.y.<br />
jos dešiniojoje pusėje nėra t.<br />
3. Panaudokite vieną iš funkcijų uždavinio<br />
sprendimui.<br />
Sprendžiant van der Polio sistemą, panaudosime<br />
ode45 laiko intervale [0 20] su pradinėmis<br />
sąlygomis y(1) = 2 ir y(2) = 0.<br />
[t,y] = ode45(@vdp1,[0 20],[2; 0]);<br />
Šis pavyzdys naudoja @ vdp1 (function handle to<br />
ode45).<br />
Išvedamas laiko taškų t vektorius stulpelis ir<br />
sprendinių masyvas y.<br />
Kiekviena eilutė esanti y atitinka laiką grąžintą<br />
atitinkamoje t eilutėje.<br />
Pirmas y stulpelis atitinka y1, antras - y2.<br />
4. Rezultatų analizė.<br />
plot(t,y(:,1),'-',t,y(:,2),'--')<br />
title(‘van der Pol Equation, \mu = 1');<br />
xlabel('time t');<br />
ylabel('solution y');<br />
legend('y_1','y_2')<br />
Šis pavyzdys yra<br />
nestandus uždavinys.<br />
Pavyzdys: van der Pol Equation, μ = <strong>10</strong>00<br />
(Standus)<br />
Standžiajam uždaviniui būdinga, kad viena<br />
sprendinio komponentė gali keistis labai<br />
trumpuose laiko intervaluose lyginant su<br />
integravimo intervalu, bet kita sprendinio<br />
komponentė keičiasi daug didesniuose<br />
intervaluose.<br />
Kai μ padidinamas iki <strong>10</strong>00, van der Polio<br />
lygties sprendinys stipriai pakinta ir jam<br />
būdingi svyravimai daug didesniuose laiko<br />
masteliuose.<br />
ode15s sprendžia tokius standžius uždavinius.<br />
• Vdp<strong>10</strong>00 užrašyta van der Polio sistema,<br />
su μ = <strong>10</strong>00.<br />
function dydt = vdp<strong>10</strong>00(t,y)<br />
dydt = [y(2); <strong>10</strong>00*(1-y(1)^2)*y(2)-y(1)];<br />
9
ode15s funkcija sprendžia uždavinį su pradinėmis sąlygų<br />
vektoriumi [2; 0], laiko intervale [0; 3000]. Braižoma tik<br />
viena sprendinio y(t) komponentė mastelio sumetimais.<br />
[t,y] = ode15s(@vdp<strong>10</strong>00,[0 3000],[2; 0]);<br />
plot(t,y(:,1),'-');<br />
title('Solution of van der Pol Equation, \mu = <strong>10</strong>00');<br />
xlabel('time t');<br />
ylabel('solution y_1');<br />
5 laboratorinio darbo analizė<br />
function F=MyVanDerPol(x,y)<br />
% vektorius, aprašantys DL vektorinį lauką<br />
%(diferencialinių lygčių dešiniosios pusės)<br />
F=[y(2);-y(1)+<strong>10</strong>00*(1-y(1)^2)*y(2)];<br />
Standi DLS => pasirenkame ode15s:<br />
[X,Y] = ode15s('MyVanDerPol',[0,len],[y1In,y2In]);<br />
plot(X, Y(:,1 ));<br />
Įvedame pradinius duomenis<br />
Spaudžiame GO ir gauname sprendinio grafiką<br />
RETURN ir grįžtame į pradinį langą<br />
<strong>10</strong>
function MyDynamicFig<br />
%Funkcija MyDynamicFig sudaro grafinį langą.<br />
Tik pradinis<br />
komentaras<br />
%Aprašo kaip sukuriami visi objektai, kaip matomi<br />
% pradiniu laiko momentu, taip ir atsirandantieji vėliau.<br />
%Pradiniu momentu yra nematomas objektas Axies ir mygtukas hBut2.<br />
%Jie atsiranda skaičiavimo metu. Iki tol grafiniame lange turi būti<br />
%matomi redaguojamieji laukai duomenų įvedimui, jų paaiškinimai, centrinis<br />
%užrašas apie uždavinį ir mygtukas hBut1, kuris inicijuoja skaičiavimus.<br />
%<br />
%Po funkcijos paleidimo atsiradusiam grafiniame lange įvedamos pradinės<br />
reikšmės, pvz., 2, 0,<br />
% ir 3000 (laiko intervalo ilgis) po to spaudžiame mygtuką GO, kuris atitinka<br />
% callback-funkcija GoCallback. Funkcija MyVanDerPol aprašo diferencialinių<br />
% lygčių sistemą. Paspaudus RETURN (callback-funkcija ReturnCallback)<br />
grįžtama į pradinę būseną.<br />
%<br />
function GoCallback<br />
%--------- global variables ---------------<br />
global hAxes<br />
global hEd1 hEd2 hEd3<br />
global hBut1 hBut2<br />
global hTxt1 hTxt2 hTxt3 hTxt4<br />
%----get string information from edit fields —<br />
str1=get( hEd1,'String' );<br />
str2=get( hEd2,'String' );<br />
str3=get( hEd3,'String' );<br />
%----------convert strings to numbers --------<br />
y1In= str2num(str1);<br />
y2In = str2num(str2);<br />
len= str2num(str3);<br />
%-------------- Numerical solution ---------<br />
[X,Y] = ode15s('MyVanDerPol',[0,len],[y1In,y2In]);<br />
%----------------controls reordering ----------------<br />
set(hTxt1, 'Visible', 'off' );<br />
set(hTxt2, 'Visible', 'off' );<br />
set(hTxt3, 'Visible', 'off' );<br />
set(hTxt4, 'Visible', 'off' );<br />
set(hEd1, 'Visible', 'off' );<br />
set(hEd2, 'Visible', 'off' );<br />
set(hEd3, 'Visible', 'off' );<br />
set(hBut1, 'Visible', 'off' );<br />
set( hBut2, 'Visible', 'on' );<br />
%------- graph plotting--------<br />
plot(X, Y(:,1 ));<br />
set(hAxes, 'Visible', 'on');<br />
function ReturnCallback<br />
%-------------global variables-----<br />
---------<br />
global hAxes<br />
global hEd1 hEd2 hEd3<br />
global hBut1 hBut2<br />
global hTxt1 hTxt2 hTxt3<br />
hTxt4<br />
%---------controls reordering ---<br />
-------<br />
set( hTxt1, 'Visible', 'on' );<br />
set(hTxt2,'Visible','on' );<br />
set(hTxt3,'Visible','on');<br />
set( hTxt4, 'Visible', 'on');<br />
set( hEd1, 'Visible', 'on' );<br />
set( hEd2, 'Visible', 'on');<br />
set(hEd3,'Visible', 'on');<br />
set( hBut1,'Visible', 'on' );<br />
set( hBut2, 'Visible', 'off' );<br />
axes( hAxes ); cla;<br />
set(hAxes,'Visible','off');<br />
%------- fazinis portretas plotting--------<br />
opt=odeset('OutputSel',[1,2],'OutputFcn','odephas2');<br />
[X,Y] = ode45('ManoLotkaVoltera',[0,len],[y1In,y2In],opt);<br />
Čia tik vienas iš<br />
galimų variantų<br />
11