38
MATLAB 8. gyakorlat Differenciálegyenletek

MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

MATLAB

8. gyakorlat

Differenciálegyenletek

Page 2: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Menetrend

● Kis ZH

● Differenciálegyenletek általában

● Elsőrendű differenciálegyenletek

● Másodrendű differenciálegyenletek

Page 3: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Kis ZH

● pdf

Page 4: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Differenciálegyenletek

● Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

függvény, és szerepel benne ennek az ismeretlen

függvénynek valamely deriváltja is.

● A diffegyenlet rendje: az ismeretlen függvény legmagasabb fokú

deriváltjának fokszáma (első és másodrendűről lesz szó).

● MATLAB-ban a diffegyenletek megoldása numerikus

integrálással történik.

Page 5: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Differenciálegyenletek

● Praktikusan:

– amire kiváncsi vagyok: egy függvény ( f(t) )

– ami a rendelkezésemre áll: a függvény valamilyen

deriváltját tartalmazó függvény ( f'(t) = g(f(t),t) )

Page 6: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Szemléletesen

Tegyük fel, hogy egy hegyi úton sétálunk, és az aktuális

magasságunk az előrehaladás közben változik. A

magasságunkat felírhatjuk pl. az idő, a hosszúsági és

szélességi kör vagy a megtett út függvényében is. A

megtett út függvényében a magasságra a következő

összefüggés írható fel: y = y(x), ahol x az út, y pedig a

magasság.

Page 7: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Szemléletesen

Ha van nálunk magasságmérő vagy GPS vevő, az

előrehaladás közben elegendő ponton felírva az aktuális

magasságértékeket megkapjuk az y = y(x) összefüggés

értékeit (pl. a lenti ábra szerint).

Page 8: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Szemléletesen

Ez egyszerű megoldás lenne, de tegyük fel, hogy nincs nálunk

megfelelő mérőeszköz. Látunk viszont egy táblát, ami 5%-os

emelkedőt mutat. Ekkor a tábla megfelelően kicsi

környezetében egy tetszőleges x-re és h = 100-ra az alábbi

összefüggés írható fel:

ahol az összefüggés bal oldala az út meredeksége x és x+h

között.

y (x+h)− y (x)h

=0.05

Page 9: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Szemléletesen

Tegyük fel, hogy az út mentén pár méterenként találunk

egy ilyen táblát, melyek a magasság változásának

közelítő értékeit adják meg a megtett út függvényében.

Ha ezeket az értékeket felírjuk, megkapjuk a dy/dx

összefüggést, ami y deriváltja lesz.

Page 10: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Szemléletesen

Az így kapott görbét numerikusan integrálva megkapjuk

y = y(x) értékeit.

∫∘dx

Page 11: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Példa 1. - “ode1”

● Legyen adott a következő elsőrendű diffegyenlet: y'(t) = 2y(t).

● Adjuk meg y(t) értékeit a t = [0,3] intervallumon, y(0) = 1 kezdeti érték esetén!

Page 12: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Példa 1. - “ode1”

● Ehhez definiáljuk a diffegyenletet egy függvényként, amelynek 2 bemenő paramétere t és y. A diffegyenlet egyszerűsége miatt itt most anonim függvényt használjunk:

F = @(t,y) 2*y;

● F a deriváltfüggvény értékeit tartalmazza, a t paraméter a beépített megoldók miatt (ode45, ode23, ode15) kell.

Page 13: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Példa 1. - “ode1”

● Írjunk egy saját diffegyenlet megoldó eljárást (ode1), amely az Euler módszert alkalmazva, F numerikus integrálásával kiszámolja y(t) értékeit a fent megadott intervallumon és kezdeti értékkel!

● Az integrálás lépésközét (intervallum hossza)/200-nak válasszuk meg!

● FONTOS: a saját megoldó csak szemléltetési célt szolgál, a későbbi feladatok megoldásakor mindig a beépített ode45 megoldót használjuk!

Page 14: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 1. - “ode1”function [t_out,y_out] = ode1(F,tspan,y0)% Egyszerű diffegyenlet megoldó. % Csak szemléltetési célt szolgál,% ne használjuk, mert pontatlan. % időskála kezdete t0 = tspan(1); % időskála vége tfinal = tspan(end); % lépésköz h = (tfinal - t0)/200; % kezdeti feltétel y = y0; % kimeneti vektorok t_out = zeros(201,1); y_out = zeros(201,length(y0)); ind = 1;

for t = t0:h:tfinal % a derivált aktuális % értéke ydot = F(t,y); % numerikus integrálás y = y + h*ydot; % értékek tárolása a % kimeneten t_out(ind) = t; y_out(ind) = y; ind = ind + 1; endend

Page 15: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 1. - “ode1”

● Hívjuk meg a függvényt és rajzoljuk ki az eredményt!

% függvény definícióF = @(t,y) 2*y; % megoldás[t1,y1] = ode1(F,[0 3],1);

% rajzoljuk kifigure(1); hold on;plot(t1,y1,'r-');

Page 16: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 1. - “ode1”

● Nézzük meg ugyanezt a beépített ode45 megoldó használatával is!

% beépített megoldó eljárás[t45,y45] = ode45(F,[0 3],1); % rajzoljuk kiplot(t45,y45,'bo-');

● Analízisből ismert, hogy az y'(t) = 2y(t) diffegyenlet megoldása y(t) = e2t, ezért ellenőrzésként rajzoljuk ki ezt is!

plot(t45,exp(2*t45),'k--','LineWidth',2);

Page 17: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 1. - “ode1”

Page 18: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Konklúzió 1. - “ode1”

● A beépített ode45 megoldó nem lineárisan osztja el a "mintavételi" időpontokat (ezért kell a t paraméter a deriváltfüggvény megadásánál).

● A lépésköz meghatározása minden esetben egy előre meghatározott pontosság elérése érdekében történik.

● A legtöbb problémára az ode45 a legjobb választás, ezért ezt fogjuk használni.

Page 19: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Elsőrendő, egyváltozós DE

● Vegyünk egy egyszerű töltőáramkört az alábbi ábra alapján:

ahol V0 = 2 V, R = 1 kOhm, C = 500 uF és tudjuk, hogyτ = RC (időállandó).

● t = 0-ban a kapacitáson nincs töltés és a kapcsoló nyitva van

Page 20: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Elsőrendő, egyváltozós DE

● A kapcsoló bekapcsolásakor a kapacitáson átfolyó áram alakulása az alábbi diffegyenlettel írható le, (V0/R kezdeti értékkel):

● Analitikus alakban pedig az alábbi képlettel adható meg:

i (t )=V 0

Re−

i ' (t )=−1τ i

Page 21: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Példa 2. - 1.R, 1V DE

● Számítsuk ki és ábrázoljuk a fent leírt áramkörben a kapacitás áramának időbeli változását!

Page 22: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 2. - 1.R, 1V DE

V0 = 2; % VR = 1E3; % OhmC = 5E-4; % Ftau = R*C;

% ODE megadása anonim fv.-kéntF = @(t,y) -1/tau*y;% megoldás a [0 1] intervallumon,% V0/R kezdeti értékre[t_rc y_rc] = ode45(F,[0 1],V0/R); figure(2);plot(t_rc,y_rc,'LineWidth',2);

% analitikus megoldást=0:0.001:1;I=V0/R*exp(-t/tau);hold on;plot(t,I,'r--','LineWidth',2); title('Kondenzator kisulese');xlabel('t');ylabel('i(t) [A]');legend('ode45','analitikus');

Page 23: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 2. - 1.R, 1V DE

Page 24: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Példa 3. - 1.R, 2V DE

● Egy kémiai reakció során két anyagot vegyítünk (A és B), melyek kocentráció változását az alábbi differenciálegyenlet rendszer írja le:

(dAdt

=−10A+50B

dBdt

=10A−50B )● Adjuk meg A és B koncentrációját a [0 0.5]

intervallumon, A(0) = 0 és B(0) = 1 esetén!

Page 25: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 3. - 1.R, 2V DEfunction dydt = chem(t,y) % y - állapotváltozó dydt = zeros(2,1); % dA/dt dydt(1) = -10*y(1) + 50*y(2); % dB/dt dydt(2) = 10*y(1) - 50*y(2);end

% az ODE megadása külön fv.-ben% (chem.m) történt[t y] = ode45('chem',[0 0.5], [0 1]); % VAGY:% [t y] = ode45(@chem,[0 0.5], [0 1]); figure(3);hold on;plot(t,y(:,1),'k','LineWidth',2);plot(t,y(:,2),'r','LineWidth',2); title('Kémiai reakció');xlabel('t');ylabel('koncentráció');legend('A','B');

Page 26: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 3. - 1.R, 2V DE

Page 27: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Példa 4. - 1.R, 2V DE

● Vizsgáljuk meg egy, két állatfajt tartalmazó területen a ragadozó-zsákmány egyedszám viszonyt leíró differenciálegyenlet rendszert (Lotka-Volterra modell)!

● y1: zsákmány egyedszám, y

2: ragadozó egyedszám, µ

1:

zsákmányok környezeti eltartóképessége, µ2: ragadozók

környezeti eltartóképessége

(dy1

dt=(1− y2

μ2 ) y1

dy2

dt=−(1− y1

μ1 ) y2)

Page 28: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Példa 4. - 1.R, 2V DE

● Oldjuk meg a fenti DER-t az alábbi adatok birtokában:

– µ1= 200, µ

2= 300

– y1(0) = 100, y

2(0) = 150

– t = [0 20]

Page 29: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 4. - 1.R, 2V DE% környezeti kapacitások% (eltartóképesség)mu1 = 200; % zsákmánymu2 = 300; % ragadozó % a rendszert leíró diffegyenlet-rendszerPredPrey = @(t,y) [(1-y(2)/mu2)*y(1); -(1-y(1)/mu1)*y(2)];% kezdeti értékeky0 = [100; % zsákmány 150]; % ragadozó % megoldás[t_pp y_pp] = ode45(PredPrey,[0 20],y0);

% kirajzolásfigure(4);subplot(211);plot(t_pp,y_pp,'LineWidth',2); title('Predator-Prey Model');xlabel('t');ylabel('egyedszám');legend('zsákmány','ragadozó'); % fazisgörbesubplot(212);plot(y_pp(:,1),y_pp(:,2));title('Fázisgörbe');xlabel('zsakmany #');ylabel('ragadozo #');

Page 30: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 4. - 1.R, 2V DE

Page 31: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Másodrendű DE - rezgőmozgás

Rezgőmozgás során az erők egyensúlyát az alábbi összefüggés adja meg:

ahol m a test tömege, D a rugóállandó, C a csillapítási tényező, x pedig a test kitérése.

mx ' '+Dx+Cx '=F

Page 32: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Másodrendű DE - rezgőmozgás

● Az állapotvektor [x1;x2] legyen:– x1 = x (kitérés)

– x2 = x' (sebesség)

● Ekkor a másodrendű egyenlet két elsőrendűvel megoldható.

Page 33: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Másodrendű DE - rezgőmozgás

● Paraméterek:– külső erő (F) lehet pl. a gravitációs erő

– ha a csillapítási tényező (C) 0, a rezgőmozgás harmonikus lesz

– a tömeg (m) és a rugóállandó (D) a rezgés frekvenciáját és a test sebességét határozzák meg

– csillapított rezgés esetén (C>0) a nyugalmi kitérés s = F/D lesz

Page 34: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Példa 5. - 2.R DE

● Számítsuk ki az alábbi paraméterekkel rendelkező rendszer rezgőmozgásának időbeli lefutását a t = [0 100] intervallumon:

– m = 1 kg (= Ns^2/m)

– D = 10 N/m

– C = 0.2 Ns/m

– F = -10 N

● Ábrázoljuk a rugóra rögzített test kitérésének és sebességének időbeli változását!

Page 35: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 5. - 2.R DE

function xdot=myspring(t,x,m,D,C,F) % az állapotvektor x=[x1;x2] alakú, % ahol x1=pozíció, x2=sebesség xdot = zeros(2,1);

xdot(1,1)=x(2); % x2dot = x'' xdot(2,1)=-D/m*x(1)-C/m*x(2)+F/m;end

mx ' '+Dx+Cx '=F

Page 36: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 5. - 2.R DE% tömegm = 1; % kg == (Ns^2)/m % rugóállandóD = 10; % N/m % csillapítási tényezőC=0.2; % (Ns)/m % külső erőF=-10; % N % időablaktspan=[0 100]; % kezdeti feltételek ([kitérés;sebesség])x0=[1;0]; % ODE megoldása[t x] = ode45(@(t,x) myspring(t,x,m,D,C,F),tspan,x0);

Page 37: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 5. - 2.R DE% tömegm = 1; % kg == (Ns^2)/m % rugóállandóD = 10; % N/m % csillapítási tényezőC=0.2; % (Ns)/m % külső erőF=-10; % N % időablaktspan=[0 100]; % kezdeti feltételek ([kitérés;sebesség])x0=[1;0]; % ODE megoldása[t x] = ode45(@(t,x) myspring(t,x,m,D,C,F),tspan,x0);

% kirajzolásfigure(5);clfhold on;plot(t,x(:,1),'b');plot(t,x(:,2),'r');title('Rezgőmozgás');xlabel('t (s)');ylabel('érték');legend('Pozíció (m)','Sebesség (m/s)');

Page 38: MATLAB - Pázmány Péter Catholic Universityusers.itk.ppke.hu/~mesdo/Teaching/Matlab2015/L09/... · Differenciálegyenletek Diffegyenlet: Olyan egyenlet, amelyben az ismeretlen egy

Megoldás 5. - 2.R DE