GNU Octave: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Ekr (dyskusja | edycje)
Ekr (dyskusja | edycje)
atraktor Lorentza
Linia 562:
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.
 
===Chaos w atraktorze Lorentza===
Rozwiązać klasyczny układ równań Lorentza, opisujący uproszczony model pogody:
:<math>
\begin{cases}
\frac{dx}{dt} = \sigma (y-x) \\
\frac{dy}{dt} = rx-y-xz \\
\frac{dz}{dt} = xy-bz \\
x(0)=0, y(0)=1, z(0)=0
\end{cases}
</math>
gdzie <math>\sigma=10, r=8/3, b=28</math>
[[Grafika:Klasyczny uklad lorentza.png|thumb|right|400px|Rozwiązanie klasycznego układu równań różniczkowych Lorentza.]]
Zdefiniujmy funkcję:
function y=lorentz(x)
global sigma;
global r;
global b;
y(1)=sigma*(x(2)-x(1));
y(2)=r*x(1)-x(2)-x(1)*x(3);
y(3)=x(1)*x(2)-b*x(3);
endfunction;
 
Zadajmy parametry:
global sigma;
global r;
global b;
sigma=10
b=8/3
r=28
 
Rysujemy ewolucję układu na odcinku <math>[0,300]</math> w 30 krokach po odcinku o długości <math>10</math>.
Punktem początkowym jest punkt końcowy w poprzedniego kroku. Polecenie '''hold on''' wyświetla to, co
jest narysowane do tej pory i każe czekać na dalsze komendy rysowania. W ten sposób możemy obserwować
ewolucję układu Lorentza.
x0=[0 1 0]';
for (i=0:30)
t=[i*10:0.01:(i+1)*10];
z=lsode("lorentz", x0, t);
plot(z(:,1),z(:,2));
x0=z(length(z),:)';
hold on
endfor;
hold off
Obserwujemy, że rozwiązanie nie stabilizuje się, zachowuje się "chaotycznie", wciąż
kręci się w atraktorze wpadając to do lewego skrzydła to do prawego.
 
===Wartości własne===