// MaTXによるレスラー方程式の求解と描画 t-kita@eecs.kumamoto-u.ac.jp // 詳しくは README(または Readme.txt)を見てください。 #include "ros2_inc.mm" #include "tincas2_inc.mm" Func void main() { Matrix x; Real t; Integer co; Integer USE_GRAPHICS; USE_GRAPHICS= 1; // 1: 描画, 0: 数値データ出力 t= 0.0; x= [ 0.12, -4.1, 0.44 ]'; // 初期値 a= 0.398; b= 2.0; c= 4; // レスラー方程式のパラメータ値設定 h= 0.1; // Runge-Kutta 法の時間刻 t_fin= 10.0; // 計算終了時刻 co= 0; // auto clear の為のカウンタ update_interval= 100; // tincas canvas の更新時間間隔 auto_clear= 1; // 1: 定期的に canvas をクリアする。 // 初期値をファイル xini.mat から (存在すれば)読み込む if (access("./xini.mat")==0){ read x << "./xini.mat"; } if (USE_GRAPHICS){ pid = open_canvas([ 300, 300 ]); set_canvas_xyrange([ -10, 10, -10, 10 ]); // xmin, xmax, ymin, ymax set_tincas_title(pid, "Roessler's Equation"); set_tincas_update_interval(pid, update_interval); printf("ヘルプを見るには ? を押して下さい。\n"); }else{ printf("# %d %d\n",length(x)+1,Integer(t_fin/h)+2); //MAT data header rem_prm_output(); // globalパラメータの値を出す printf("%g %g %g %g\n",t, x(1), x(2), x(3)); // 初期値を出力 } while ( ( t < t_fin )|| USE_GRAPHICS ){ x = rngkut4(t,x,f,h); t = t + h; // 1ステップ進める。 if (USE_GRAPHICS){ pset( pid, gxy([x(1) x(2)]') ); {t, x}= kbd_event(t, x); if (auto_clear && (co++)>auto_clear_interval){ clear_canvas(pid); co= 0; } }else{ printf("%g %g %g %g\n",t, x(1), x(2), x(3)); } } if (USE_GRAPHICS){ close_canvas(pid); } }