Octave: Soustava diferenciálních rovnic pomocí ODE45
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-');