matlab - pázmány péter catholic...
Post on 28-Sep-2020
0 Views
Preview:
TRANSCRIPT
MATLAB
8. gyakorlat
Differenciálegyenletek
Menetrend
● Kis ZH
● Differenciálegyenletek általában
● Elsőrendű differenciálegyenletek
● Másodrendű differenciálegyenletek
Kis ZH
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.
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) )
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.
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).
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
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.
Szemléletesen
Az így kapott görbét numerikusan integrálva megkapjuk
y = y(x) értékeit.
∫∘dx
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!
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.
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!
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
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-');
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);
Megoldás 1. - “ode1”
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.
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
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−
tτ
i ' (t )=−1τ i
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!
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');
Megoldás 2. - 1.R, 1V DE
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!
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');
Megoldás 3. - 1.R, 2V DE
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)
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]
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 #');
Megoldás 4. - 1.R, 2V DE
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
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ó.
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
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!
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
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);
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)');
Megoldás 5. - 2.R DE
top related