Jako przykładu numerycznej analizy układu równań różniczkowych użyję równań Lotki-Volterry (https://pl.wikipedia.org/wiki/Równanie_Lotki-Volterry).

In[14]:=

NDSolve_tutorial_1.gif

Out[14]=

NDSolve_tutorial_2.gif

In[15]:=

NDSolve_tutorial_3.gif

Out[15]=

NDSolve_tutorial_4.gif

Rozwiązanie w postaci funkcji specjalnych istnieje, ale nie jest użyteczne. Składnia DSolve (czyli funkcji rozwiązującej r. różniczkowe zwyczajne) jest następująca:
pierwszy argument - lista równań plus ewentualnych warunków początkowych
drugi argument - lista niewiadomych funkcji
trzeci argument - zmienna po której różniczkujemy (liczymy pochodne funkcji) [z definicji r. r. zwyczajnego jest tylko jedna taka zmienna (!) , często nie podana jawnie, np r. Lotki-Volterry można zapisać bez niej jako:
x' = (a-by)x
y' = (cx-d)y
]

In[46]:=

NDSolve_tutorial_5.gif

Aby rozwiązać r. r. zwyczajne numerycznie używamy NDSolve. Funkcja ta automatycznie zanalizuje podane równania i dobierze algorytm potrzebny do ich rozwiązania. Aby rozwiązać problem numerycznie wszystkie symbole oraz warunki początkowe muszą mieć przypisane wartości liczbowe, np:

In[24]:=

NDSolve_tutorial_6.gif

Out[24]=

NDSolve_tutorial_7.gif

In[25]:=

NDSolve_tutorial_8.gif

Out[25]=

NDSolve_tutorial_9.gif

In[26]:=

NDSolve_tutorial_10.gif

Out[26]=

NDSolve_tutorial_11.gif

In[27]:=

NDSolve_tutorial_12.gif

Out[27]=

NDSolve_tutorial_13.gif

Składnia NDSolve jest następująca :

argument 1 : lista równań (nie zawierająca żadnych symboli, tylko liczby !) i warunków początkowych [ {rownanie1, rownanie2, y[0] == 4, x[0] == 4/3}]

argument 2 : lista funkcji niewiadomych [  {x,y} ] lub ewentualnie [ {x[t],y[t] }

argument 3: obowiązkowy zakres zmienności zmiennej [ {t,0,100} ]

Rozwiązanie jest w postaci listy reguł transformacyjnych zawierających nowe funkcje (InterpolatingFunction) będące rozwiązaniem danego problemu (punkt krytyczny to y[0]==2/3, x[0]==3/2, im dalej od niego, tym większe wachania populacji):

In[91]:=

NDSolve_tutorial_14.gif

Out[91]=

NDSolve_tutorial_15.gif

Aby wydobyć z niego funkcje postępujemy jak podano niżej:

In[92]:=

NDSolve_tutorial_16.gif

Out[92]=

NDSolve_tutorial_17.gif

In[93]:=

NDSolve_tutorial_18.gif

Out[93]=

NDSolve_tutorial_19.gif

W ten sposób wyprodukowaliśmy dwie nowe funkcje: ofiara[t] i drapieżnik[t], które możemy od tego momentu używać praktycznie tak samo jak wbudowanych fukcji typu sinus, np. narysować wykresy:

In[94]:=

NDSolve_tutorial_20.gif

Out[94]=

NDSolve_tutorial_21.gif

In[95]:=

NDSolve_tutorial_22.gif

Out[95]=

NDSolve_tutorial_23.gif

In[96]:=

NDSolve_tutorial_24.gif

Out[96]=

NDSolve_tutorial_25.gif

Spikey Created with Wolfram Mathematica 7.0