Programuju s Aran
Programuju s Aran's Blog

Programuju s Aran's Blog

Octave: Soustava diferenciálních rovnic pomocí ODE45

Programuju s Aran's photo
Programuju s Aran
·Oct 31, 2022·

1 min read

Hledám řešení soustavy rovnic pro x1 a x2 (značím jako x(1) a x(2))

d x(1)/dt = 4x(1)-7x(1)x(2); d x(2)/dt = 6x(1)x(2)-3x(2);

Zároveň platí počáteční podmínka v čase t=0: x(0)=[4;5]

na intervalu t(0;10).

Vytvořím si anonymní funkci, transponovaný časový interval a transponovanou počáteční podmínku:

f=@(t,x)[4*x(1)-7*x(1)*x(2);
 6*x(1)*x(2)-3*x(2)];
tn=10; x0=[4;5].';

Nyní aplikuji ODE45, jako vnitřní parametry dosadím funkci f, interval [0;tn] a vektor počátečních podmínek x0. Na závěr si vytisknu graf pomocí plot(x):

[t,x]=ode45(f,[0,tn],x0); plot(t,x)

Definuji parametry pomocí ODE45. [0 tn] ohraničuje interval x-ové osy (osy t). Aby kód běžel hladce, zařadím je až na konec (za fci):

[t,x] = ode45(f,[0 tn],[a b]);
plot(t,x);

Celý kód

f=@(t,x)[4*x(1)-7*x(1)*x(2);
 6*x(1)*x(2)-3*x(2)];
tn=10; x0=[4;5].';
[t,x]=ode45(f,[0,tn],x0); plot(t,x) 

[t,x] = ode45(f,[0 tn],[a b]);
plot(t,x,'o-');

Ukázka řešení jiné fce:

f=@(t,x)[4*x(1)-2*x(1)*x(2);
 x(1)*x(2)-3*x(2)];
tn=10; x0=[2;3].';
[t,x]=ode45(f,[0,tn],x0); plot(t,x) %Najděte numerické řešení rovnice

[t,x] = ode45(f,[0 tn],[a b]);
plot(t,x,'o-');
 
Share this