#include // ローレンツ方程式のパラメータ double S = 10.0; // σ (Sigma) double R = 100.0; // ρ (Rho) double B = 5.0; // β (Beta) // 微分方程式を数値的に解くパラメータ double DT = 1.0E-5; // 時間刻み (1サイクル計算ごとの時間進行) double TIME_MAX = 8.0; // 終了時刻 (の目安、ある程度のずれあり) // 値の出力用のパラメータ long long int OUTPUT_POINTS = 2400LL; // 出力する座標点数 (の目安、ある程度のずれあり) // 軌道の座標値変数 double x = 0.1; double y = 0.1; double z = 0.1; // X方向の時間変化率を与える関数 double dxdt(double x, double y, double z){ return -S*x + S*y; } // Y方向の時間変化率を与える関数 double dydt(double x, double y, double z){ return -x*z + R*x - y; } // Z方向の時間変化率を与える関数 double dzdt(double x, double y, double z){ return x*y - B*z; } // ================================================================================ // 以下、4次ルンゲ=クッタ(RK4)法で解曲線の座標値を計算 // ================================================================================ int main(void) { long long int LOOPS = (long long)(TIME_MAX / DT); // 必要な計算ループ回数 long long int OUTPUT_INTERVAL = LOOPS / OUTPUT_POINTS; // ループ内での出力周期 for( long long int i=0; i