GNU Octave: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Ekr (dyskusja | edycje)
Ekr (dyskusja | edycje)
Rozwiązywanie równań różniczkowych z użyciem gotowych schematów różnicowych
Linia 434:
Rozwiązanie rzeczywiście przechodzi przez punkty <math>(0,0)</math> i <math>(1,0)</math>.
 
===Rozwiązywanie równań różniczkowych zaimplementując pomocąschematy schematów różnicowychróżnicowe===
Rozwiązać numerycznie [[zagadnienie Cauchy'ego]]:
:<math>\begin{cases}
Linia 522:
Widać, że schemat midpoint lepiej przybliża rozwiązanie na początku (jest wyższego rzędu), ale potem "rozjeżdza" się,
w przeciwieństwie do schematu Eulera, który okazuje się być stabilniejszy.
 
===Rozwiązywanie równań różniczkowych z użyciem gotowych schematów różnicowych===
Rozwiązać za pomocą funkcji '''lsode''' [[Sztywny układ równań]] używając [[Schematy Adamsa|schematu Adamsa]] i "stiff":
:<math>\begin{cases}
x' = 998 x + 1998 y \\
y' = -999 x - 1999 y \\
x(0) = y(0) = 1
\end{cases}</math>
na odcinku <math>[0,10]</math>. Sprawdzić czy ten układ sztywny?
 
Sztywność układu sprawdzamy obliczając wartości własne macierzy:
:<math>A=\begin{pmatrix}
998 & 1998 \\
-999 &-1999
\end{pmatrix}</math>
Dostajemy:
A=[998 1998; -999 -1999];
m=eig(A)
m =
-1
-1000
a zatem współczynnik sztywności wynosi wynosi <math>1000</math>, czyli możemy określić układ jako sztywny.
 
Rozwiążmy go więc napierw metodą "stiff". Zdefiniujmy odpowiednią funkcję:
function y=fun_sztywna(x)
y(1)= 998*x(1)+1998*x(2);
y(2)=-999*x(1)-1999*x(2);
endfunction;
Rozwiązujemy i mierzymy czas:
lsode_options("integration method", "stiff");
tic; z=lsode("fun_sztywna", x0, t); toc
ans = 0.32850
 
Spróbujmy także schematem Adamsa:
lsode_options("integration method", "adams");
tic; z=lsode("fun_sztywna", x0, t); toc
ans = 26.846
 
Jak widać mimo, że schemat "stiff" jest schematem zamkniętym (w każdym kroku rozwiązuje równanie), to działa on
znacznie szybciej niż otwarty schemat Adamsa, gdyż rekompensuje sobie długością kroku.
 
===Wartości własne===