czwartek, 1 stycznia 2015

[Octave] Jak numerycznie rozwiązać równanie różniczkowe?

Octave pozwala na rozwiązanie wektorowych równań różniczkowych w postaci dx/dt = f(t,x).
  1. Pierwszym krokiem jest definicja funkcji f(x,t). Załóżmy, że f(x,t)=sin(t).
    octave:1> function x_pirm = f(x,t)
    > x_prim = sin(t);
    > endfunction
  2. Definiujemy czas rozwiązania: t=[0:0.01:6*pi]; lub t=linspace(0,6*pi,2000);
  3. Definiujemy warunki początkowe x_0=1;
  4. Rozwiązujemy równanie poleceniem y=lsode("f",x_0,t);
  5. Rysujemy rozwiązanie: plot(t,y)