Řešení diferenciálních rovnic I.
co byste měli umět po dnešní lekci:
vyřešit dif.rovnici Eulerovou metodou ● vyřešit dif.rovnici metodou prediktor-korektor ● vyřešit dif.rovnici metodou Runge-Kutta ● vyřešit soustavu diferenciálních rovnic ● znát rozdíl mezi explicitní a implicitní metodou řešení dif.rovnic ● vědět, co je hraniční úloha a jak je ji možno řešit ● vyřešit dif.rovnici vyššího řádu převedením na soustavu dif.rovnic prvního řádu ●
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Eulerova metoda tečna v bodě ti
Příklad: Řešte dif.rovnici:
y
s počáteční podmínkou
Numerické řešení porovnejte s analytickým výsledkem t h Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I.
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Metoda prediktor-korektor prediktor
korektor
y
prediktor
y
korektor
t Úvod do programování v prostředích Octave, Scilab a Matlab
t
Řešení diferenciálních rovnic I. Metoda prediktor-korektor prediktor korektor
iterativní výpočet
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Metoda Runge-Kutta
přírůstková funkce
ai jsou konstanty
Metoda Runge-Kutta 2.řádu
máme 3 rovnice a 4 neznámé = volíme hodnotu a2 a2=1/2 – prediktor/korektor, a2=1 – midpoint, a2=2/3 – Ralstonova metoda Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Metoda Runge-Kutta 2.řádu function [t,y]=rk2(drce,y0,t,a2) h=t(2)-t(1); n=length(t); y=zeros(size(t)); y(1)=y0; a1=1.0-a2; p1=1.0/2.0/a2; q11=p1; for k=1:n-1 k1=feval(drce,t(k),y(k)); k2=feval(drce,t(k)+p1*h,y(k)+q11*k1*h); y(k+1)=y(k)+(a1*k1+a2*k2)*h; end
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Metoda Runge-Kutta 4.řádu
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Metoda Runge-Kutta 5.řádu
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Soustavy diferenciálních rovnic závaží na pružině
k=0.25 kg/m, g=9.81 ms-2, m=68.1 kg, x(t=0)=0, v(t=0)=0 t=t(:); h=t(2)-t(1); n=length(t); m=length(y0); y=zeros(n,m); y(1,:)=y0; for k=1:n-1 k1=feval(sdrce,t(k),y(k,:)); k2=feval(sdrce,t(k)+0.5*h,y(k,:)+0.5*k1*h); k3=feval(sdrce,t(k)+0.5*h,y(k,:)+0.5*k2*h); k4=feval(sdrce,t(k)+h,y(k,:)+k3*h); y(k+1,:)=y(k,:)+1.0/6.0*(k1+2*k2+2*k3+k4)*h; end
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Implementované funkce Octave/Matlabu pro řešení diferenciálních rovnic Octave: y = lsode (funkce, y_0, t, t_krit) - t_krit je vektor hodnot t, které by mohli působit potíže (singularity,...) lsode_options (OPT, VAL) - nastavení parametrů řešení pomocí lsode Matlab a Octave: (v Matlabu jeste ode45, ....) adaptivní Runge-Kutta [tout, xout] = ode23(funkce,t,y0,ode_fcn_format,tol,trace,count,hmax)
v Octave/Matlabu si prostudujte help k výše uvedeným funkcím a zkuste vyřešit předchozí příklady pomocí těchto funkcí
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Implicitní řešení diferenciálních rovnic forward centered backward Hledejme řešení dif. rovnice
i=1 počáteční podm.
je-li g(x,y) lineární v y, máme soustavu (n-2) rovnic pro (n-1) neznámých
pomůžeme si např. Eulerovou metodou Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Příklad: Řešte rovnici
implicitní metodou pro x=<0,5>, h=0.5, y(0)=1.
Řešení porovnejte s Eulerovou metodou a metodou R-K. (n=11)
Řešení: “pomocná” rovnice pro n=5 řešíme soustavu rovnic:
Pozn.: analytické řešení je
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I.
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Chaotické proudění (Rösslerovo proudění)
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Hraniční úloha
nemáme informaci o hodnotě derivace v x0
y
y1
spočtu několik řešení pro různé hodnoty a správnou hodnotu derivace v x0 určím interpolací z hodnot v bodě x1 metoda střelby
x0
x1
x
diferenciální rovnice vyšších řádu se povětšinou řeší převodem na soustavu dif. rovnic prvního řádu, tam znalost derivací v x0 potřebuji
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Hraniční úloha
Řešení: dif. rovnici 2.řádu převedu na soustavu 2 dif.rovnic 1.řádu
Úvod do programování v prostředích Octave, Scilab a Matlab
Řešení diferenciálních rovnic I. Úloha: Řešte diferenciální rovnici
Eulerovou metodou a metodou Runge-Kutta 4.řádu, y(t=0)=1, pro velikost kroku h=0.5 a 0.25 pro t=<0,2>. Úloha: Řešte soustavu diferenciálních rovnic
metodou Runge-Kutta 4.řádu, y(t=0)=2,z(t=0)=4, pro velikost kroku h=0.1 pro t=<0,0.4>.
Úvod do programování v prostředích Octave, Scilab a Matlab