1. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
1/27
Vrlo mali broj diferencijalnih jednačina se može rešiti analitički.
Pomoću numeričkih metoda može se naći rešenje gotovo svake diferencijalne jednačine.
MATLAB ima obimnu biblioteku funkcija za rešavanje diferencijalnih jednačina.
Obična diferencijalna jednačina (ODJ, eng. ordinary differential equation, ODE) sadrži
nezavisnu promenljivu, zavisnu promenljivu i izvode zavisne promenljive.
𝑑𝑦
𝑑𝑥
= 𝑓(𝑥, 𝑦)
gde je 𝑥 nezavisna promenljiva, a 𝑦 je zavisna promenljiva.
2. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
2/27
𝑑𝑦
𝑑𝑥
= 𝑓(𝑥, 𝑦)
Rešenje je funkcija 𝑦 = 𝑓(𝑥), koja ispunjava uslove jednačine.
Pošto više funkcija može ispunjavati uslove date ODJ, za rešavanje zadatka potrebni su dodatni
podaci.
Dodatni podaci su vrednost funkcije (zavisne promenljive) za određenu vrednost nezavisne
promenljive.
3. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
3/27
Metode za rešavanje ODJ:
dsolve
ode45 , pogodna za jednostavne zadatke. Zasniva se na metodi Runge-Kuta
ode23 , pogodna za jednostavne zadatke. Često brža ali manje tačna od ode45
ode113 , pogodna za jednostavne zadatke. Radi u više koraka.
ode15s , pogodna za teže zadatke. Koristi se kada ode45 ne uspeva.
ode23s , pogodna za teže zadatke. Koristi se kada ode15s ne uspeva.
ode23t , pogodna za umereno teške zadatke.
ode23tb , pogodna za teže zadatke. Često je efikasnija od ode15s.
6. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
6/27
Funkcija dsolve
Primer
Rešiti diferencijalnu jednačinu
𝑦′ 𝑡 − 𝑦 𝑡 = sin(𝑡)
A) Bez početnog uslova
𝑦′ 𝑡 se transformiše u
𝑦 𝑡 se transformiše u
11. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
11/27
Funkcija odenn
Postupak pri rešavanju diferencijalnih jednačina funkcijama klase odenn
1. korak
Napiše se funkcijska datoteka (skripta pod nazivom ODJ1.m) koja izračunava
𝑑𝑦
𝑑𝑥
, za date
vrednosti 𝑥 i 𝑦.
Primer:
𝑑𝑦
𝑑𝑥
=
𝑥3
− 2 ∙ 𝑦
𝑥
, 1 ≤ 𝑥 ≤ 3; 𝑧𝑎 𝑥 = 1, 𝑦 = 4.2
function dydx=ODJ1(x,y)
dydx=(x^3-2*y)/x;
12. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
12/27
Funkcija odenn
Postupak pri rešavanju diferencijalnih jednačina funkcijama klase odenn
2. Korak. Rešava se zadatak:
[x,y] = imefunkcije('imedat',xopseg,y0)
Gde su
imefunkcije – ime numeričke metode koja se koristi (npr. ode45, ode23, itd.)
imedat – ime funkcijske datoteke koja izračunava
𝑑𝑦
𝑑𝑥
za date vrednosti x i y
xopseg – vektor koji zadaje interval rešenja.
y0 – početna vrednost y (vrednost y u početnoj tački intervala).
[x,y] – Rešenje ODJ. x i y su vektori. Broj tačaka i razmak između početne i
završne tačke zavise od ulaznog vektora xopseg.
13. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
13/27
Funkcija odenn
Postupak pri rešavanju diferencijalnih jednačina funkcijama klase odenn
𝑑𝑦
𝑑𝑥
=
𝑥3 − 2 ∙ 𝑦
𝑥
, 1 ≤ 𝑥 ≤ 3; 𝑧𝑎 𝑥 = 1, 𝑦 = 4.2
function dydx=ODJ1(x,y) – ovo je napisana skripta ODJ1.m
dydx=(x^3-2*y)/x;
[x,y] = imefunkcije('imedat',xopseg,y0)
[x,y]=ode45('ODJ1',[1:0.2:3],4.2)
16. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
16/27
Funkcija dsolve
1. ZADATAK
Napisati skriptu za rešavanje diferencijalne jednačine:
1 + 𝑥2
𝑦′
= 𝑥(2 ∙ 𝑦 + 1)
Da bi se formirala skripta potrebno je transformisati:
𝑦′ 𝐷𝑦
Diferencijalna jednačina sada postaje
1 + 𝑥2
𝐷𝑦 = 𝑥(2 ∙ 𝑦 + 1)
Uvode se simboličke promenljive: 𝑦 𝑥 𝑥
17. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
17/27
Funkcija dsolve
1. ZADATAK
Transformisati diferencijalnu jednačinu: 1 + 𝑥2
𝐷𝑦 = 𝑥(2 ∙ 𝑦 + 1)
𝐷𝑦 = 𝑥 ∙ (2 ∙ 𝑦 + 1)/ 1 + 𝑥2
Sada se formira jednačina
𝑗𝑒𝑑𝑛𝑎𝑐𝑖𝑛𝑎 = 𝑑𝑖𝑓𝑓 𝑦 == 𝑥 ∙ (2 ∙ 𝑦 + 1)/ 1 + 𝑥2
Piše se kod za rešavanje diferencijalne jednačine:
𝑅𝑒𝑠 = 𝑑𝑠𝑜𝑙𝑣𝑒(𝑗𝑒𝑑𝑛𝑎𝑐𝑖𝑛𝑎)
Dobije se rešenje: Res = (C1*(x^2 + 1))/2 - 1/2
Odnosno: 𝑦 =
𝐶1∙ 𝑥2+1
2
−
1
2
, gde je C1 konstanta
18. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
18/27
Funkcija dsolve
1. ZADATAK
Napisati skriptu za rešavanje diferencijalne jednačine:
𝑥 ∙ 𝑦 ′ −
𝑦
𝑥 + 1
= 𝑥, ako je 𝑦 1 = −1
Da bi se formirala skripta potrebno je transformisati:
𝑦′
𝐷𝑦
Diferencijalna jednačina sada postaje
𝑥 ∙ 𝑦 ′ −
𝑦
𝑥 + 1
= 𝑥
Uvode se simboličke promenljive: 𝑦 𝑥 𝑥
Nacrtati grafik rešenja na intervalu [-1 15]
19. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
19/27
Funkcija dsolve
1. ZADATAK
Transformisati diferencijalnu jednačinu: 𝑥 ∙ 𝐷𝑦 −
𝑦
𝑥+1
= 𝑥
𝐷𝑦 = 1 +
𝑦
𝑥 ∙ 𝑥 + 1
Sada se formira jednačina
𝑗𝑒𝑑𝑛𝑎𝑐𝑖𝑛𝑎 = 𝑑𝑖𝑓𝑓 𝑦 == 1 +
𝑦
𝑥 ∗ 𝑥 + 1
Sada se postavlja početni uslov dat zadatkom: 𝑦 1 = −1:
𝑢𝑠𝑙𝑜𝑣 = [𝑦 1 == −1]
Piše se kod za rešavanje diferencijalne jednačine:
𝑅𝑒𝑠 = 𝑑𝑠𝑜𝑙𝑣𝑒(𝑗𝑒𝑑𝑛𝑎𝑐𝑖𝑛𝑎, 𝑢𝑠𝑙𝑜𝑣)
20. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
20/27
Funkcija dsolve
1. ZADATAK
Skripta 1.clc; clear;
2.syms x y(x)
3.jednacina=diff(y)==1+y/(x*(x+1));
4.uslov=[y(1)==-1];
5.Res=dsolve(jednacina,uslov)
Postavljanje diferencijalne
jednačine
Postavljanje početnog
uslova
Rešavanje diferencijalne
jednačine
Res =
(x*(x + log(x)))/(x + 1) - (3*x)/(x + 1)
21. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
21/27
Funkcija dsolve
1. ZADATAK
Skripta
6.f = matlabFunction(Res)
7.pretty(Res)
8.fplot(Res,[-1 15],'b*-')
9.hold on
10.ylim([-2 12])
Konvertovanje rešenja diferencijalne jednačine
u simboličku funkciju
Dobije se:
@(x)(x.*-3.0)./(x+1.0)+(x.*(x+log(x)))./(x+1.0)
Za prilagodjeni prikaz:
x (x + log(x)) 3 x
-------------- - -----
x + 1 x + 1
Formiranje grafika rešenja diferencijalne
jednačine na intervalu x1 = -1 do x2 = 15
22. INŽENJERSKO PROGRAMIRANJE.
Rešavanje diferencijalnih jednačina
22/27
Funkcija dsolve
1. ZADATAK
Skripta
11.xlim([-1 15])
12.plot([0 0], ylim, 'Color','r','LineWidth',1)
13.plot(xlim,[0 0], 'Color','r','LineWidth',1)
14.grid on
15.xlabel('x')