ローレンツアトラクタ; Lorenz Attractor
概要
ローレンツアトラクタとは以下のローレンツ方程式[1]で与えられる軌道である。
$$ \begin{eqnarray} \frac{d x}{d t} &=& -p x + p y \\ \frac{d y}{d t} &=& -x z + r x - y \\ \frac{d z}{d t} &=& x y - b z \end{eqnarray} $$
ここでは原論文に則って\(p=10, r=28, b=8/3\)とする。
ソースコード
const int DivTime = 128;
const double p = 10, r = 28, b = 8.0 / 3.0;
Func<double, Vector, Vector> lorenz = (t, v) => new Vector(p * (-v.X + v.Y), -v.X * v.Z + r * v.X - v.Y, v.X * v.Y - b * v.Z);
var ode = new SRungeKuttaMethod(new Vector(-2, -4, 10), lorenz, 1.0 / DivTime);
using(StreamWriter stream = new StreamWriter("lorenz.txt")) {
stream.WriteLine("t,x,y,z");
stream.WriteLine($"{ode.T},{ode.V.X},{ode.V.Y},{ode.V.Z}");
for(int i = 0; i < DivTime * 100; i++) {
ode.Reflash();
stream.WriteLine($"{ode.T},{ode.V.X},{ode.V.Y},{ode.V.Z}");
}
}
結果
関連項目
微分方程式数値解法 基本クラス
ルンゲクッタ(RK4)法
引用文献
[1] “Deterministic Nonperiodic Flow”, Edword N.Lorenz, Journal of Atmospheric Sciences, vol.20, pp.130-141, 1963