Mathematica,Wolfram言語のすごいところはユーザーインターフェースまでこの言語で作られ統合されているところ。
例えばロケットのパラメータから時刻vs高度の表を作った例
を、インタラクティブに実行できるようにしてみよう。
例に挙げたロケットのパラメータは以下のようなものだった。
これらのパラメータはロケットの打ち上げごとに当然異なる値となる。
計算過程は同じなのでパラメータだけUI部品で簡単に変更できれば便利な場合があるだろう。Mathematica,Wolfram言語ではこれがとても簡単にできる。
初期値の変数に代入していた部分を赤文字のように変更するだけでできてしまったのが下の図である。デフォルト値は以前検討した際の値にしてある。
当然ロケット打ち上げとしてありえない値のパラメータまで設定できるようになってしまっているがこれはあくまでサンプルなのでご勘弁。
Manipulate[
atemp = t/tmax*(m0 - mmin)/mmin + 1;
v = atemp * t;
vtemp = v /. {t -> tmax};
v = atemp * t*vmax/vtemp;
a = D[v, t];
g = a/9.8;
y = Integrate[v, t];
ymax = y /. {t -> tmax};
height = y*hmax/ymax;
t0 = Range[tmax + 1] - 1;
ht = height /. {t -> t0} // N;
vt = v /. {t -> t0} // N;
gt = g /. {t -> t0} // N;
vtkmph = Round[vt*60*60];
h2af35table = Prepend[Transpose[{t0, ht, vt, vtkmph, 1000 gt}],
{"経過秒", "高度km", "速度km/s", "速度km/h", "加速度G"}];
Grid[h2af35table, {Alignment -> Left, Dividers -> {All, All}}]
, {{tmax, 108, "SRB燃焼終了時刻s"}, 0, 120, 1, Appearance -> "Labeled" }
, {{vmax, 2.2, "SRB燃焼終了時速度km/s"}, 1.0, 3.0, 0.1,
Appearance -> "Labeled" }
, {{hmax, 62, "SRB燃焼終了時高度km"}, 0, 100, 1, Appearance -> "Labeled" }
, {{m0, 450, "初期質量Ton"}, 400, 600, 10, Appearance -> "Labeled" }
, {{mmin, 158, "SRB燃焼終了時質量Ton"}, 100, 200, 10,
Appearance -> "Labeled" }
]
スライダを動かすたびに上の黒文字の部分が再評価され表が再描画される。WolframCloudにアカウントを作って遊び始めている人は、
例に挙げたロケットのパラメータは以下のようなものだった。
これらのパラメータはロケットの打ち上げごとに当然異なる値となる。
計算過程は同じなのでパラメータだけUI部品で簡単に変更できれば便利な場合があるだろう。Mathematica,Wolfram言語ではこれがとても簡単にできる。
初期値の変数に代入していた部分を赤文字のように変更するだけでできてしまったのが下の図である。デフォルト値は以前検討した際の値にしてある。
当然ロケット打ち上げとしてありえない値のパラメータまで設定できるようになってしまっているがこれはあくまでサンプルなのでご勘弁。
Manipulate[
atemp = t/tmax*(m0 - mmin)/mmin + 1;
v = atemp * t;
vtemp = v /. {t -> tmax};
v = atemp * t*vmax/vtemp;
a = D[v, t];
g = a/9.8;
y = Integrate[v, t];
ymax = y /. {t -> tmax};
height = y*hmax/ymax;
t0 = Range[tmax + 1] - 1;
ht = height /. {t -> t0} // N;
vt = v /. {t -> t0} // N;
gt = g /. {t -> t0} // N;
vtkmph = Round[vt*60*60];
h2af35table = Prepend[Transpose[{t0, ht, vt, vtkmph, 1000 gt}],
{"経過秒", "高度km", "速度km/s", "速度km/h", "加速度G"}];
Grid[h2af35table, {Alignment -> Left, Dividers -> {All, All}}]
, {{tmax, 108, "SRB燃焼終了時刻s"}, 0, 120, 1, Appearance -> "Labeled" }
, {{vmax, 2.2, "SRB燃焼終了時速度km/s"}, 1.0, 3.0, 0.1,
Appearance -> "Labeled" }
, {{hmax, 62, "SRB燃焼終了時高度km"}, 0, 100, 1, Appearance -> "Labeled" }
, {{m0, 450, "初期質量Ton"}, 400, 600, 10, Appearance -> "Labeled" }
, {{mmin, 158, "SRB燃焼終了時質量Ton"}, 100, 200, 10,
Appearance -> "Labeled" }
]
上のコードを貼り付けてShift-EnterでこのUIを動かすことができる。
ManipulateはWolfram言語環境でできることであれば何でもパラメータにすることができる。パラメータは数値に限らず、リストでも構わない。グラフィックスの出力のオプション指定でさえいじれたりする。
ManipulateはWolfram言語環境でできることであれば何でもパラメータにすることができる。パラメータは数値に限らず、リストでも構わない。グラフィックスの出力のオプション指定でさえいじれたりする。
Manipulateの代わりにAnimateを使えば指定した変化を与えたアニメーションも簡単に作れる。
さらに、WolframCloud上で作成したこのManipulationは無料のBasicプランであっても、インターネット上ブラウザからアクセスできる形にDeployすることが可能だ。
さらに、WolframCloud上で作成したこのManipulationは無料のBasicプランであっても、インターネット上ブラウザからアクセスできる形にDeployすることが可能だ。
(初めてブラウザ上で値を変更する際にWolframCloudからダウンロードしたり初期化したりしているのか少し待たされる。一番上の時刻刻みのスライダーが初期値108秒になっているのでまず最初にこれを左に寄せて短い時間にすると行数が減るのでレスポンスは良くなる。)
↓