このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MATLAB Function ブロックを使用したらせん状の銀河形成シミュレーション
この例では、MATLAB Function ブロックを使用して銀河形成をシミュレートする方法について説明します。このモデルは、論文 "Galactic Bridges and Tails" (Toomre & Toomre 1972) の影響を受けて作られました。この論文では、円盤型の銀河に渦巻腕ができる過程が説明されていました。2 つの円盤型の銀河は本来遠く離れていました。しかし、衝突しそうなほど互いに接近しました。銀河が互いに接近すると、相互重力がはたらいて渦巻腕が形成されます。
モデルの説明
sldemo_eml_galaxy
モデルを開いて設計を表示します。
model = "sldemo_eml_galaxy";
open_system(model);
モデルには 3 つの主要な部分が含まれています。緑色のブロックはシミュレーションを初期化します。オレンジ色のブロックはシミュレーションの中核をモデル化します。黄色のブロックは銀河アニメーションをプロットします。
PlotAll
可視化ブロックでプロット ルーチンが使用されること以外は、このモデル内のすべての MATLAB Function ブロックで、Simulink® Coder™ と Embedded Coder™ を使用したコード生成がサポートされています。
初期条件
このモデルでは、各銀河に初期条件が必要です。これらの初期条件は、銀河の半径がパーセク (rp)、質量が太陽質量単位 (cm)、位置がパーセク (pos)、速度が m/ 秒 (vel) として与えられます。
このモデルでは、Constant ブロックで初期条件が指定されます。初期条件は、シミュレーション中に銀河が互いに接近するように選択されています。
Construct Galaxy
ブロック
MATLAB Function ブロックの Construct Galaxy 1
および Construct Galaxy 2
が初期条件を受け入れます。これらの MATLAB Function ブロックには、銀河モデルを作成する MATLAB® コードが含まれています。
典型的な銀河では、質量の大半がその中心部に集中し、超大質量ブラック ホールまたは星の凝集 (あるいはその両方) を形成しています。これらのブロックでは、半径が r で大半の質量が半径 r/3 の内円に集中している円盤状のものとして銀河をモデル化します。この超大質量の中心核に加えて、各 Construct Galaxy
MATLAB Function ブロックでは、太陽質量が 4 ~ 24 のランダムな星が 349 個作成されます。これらの星は、銀河の中心から r/3 ~ r の範囲内にランダムに配置されます。これらの星は最初、銀河の中心核を中心とする円軌道上を進んでいます。各オブジェクト (星または銀河の中心核) には、質量、位置 (x、y、z)、速度 (Vx、Vy、Vz) が設定されています。
Matrix Concatenation
ブロック
このブロックでは、両方の銀河に関する情報が結びつけられます。この時点で、このモデルには 700 個のオブジェクトがあります。中心核が各銀河に 1 個、星が 各中心核の周囲に 349 個あります。これらのオブジェクトの相互作用は、ニュートン力学に基づいています。
Partition bodies into heavy and light
ブロック
この MATLAB Function ブロックにより、700 個すべてのオブジェクトが、重量体と軽量体という 2 つのグループに分けられます。重量体は銀河の中心核です。軽量体は星です。銀河の中心核と個々の星とでは質量に大きな差があるため、このモデルでは、重量体と重量体、重量体と軽量体との相互作用のみが考慮されます。軽量体どうしの相互作用は無視できます。そうすることで時間を大幅に節約できます。700 個のうち 698 個が軽量体であるからです。
Apply Newtonian gravitation
ブロック
この MATLAB Function ブロックでは、各ステップで物体の速度および位置の計算にニュートン力学が使用されます。"combine" ブロックも MATLAB Function ブロックです。重量体と軽量体に関するデータがマージされます。
Plot all bodies
ブロック
この MATLAB Function ブロックでは、シミュレーションの各ステップで物体が図にプロットされ、各星の位置が更新されます。
シミュレーションの実行
シミュレーションを実行して、らせん状の銀河形成を表示します。
sim(model);
モデルを閉じる
変更内容を保存せずにモデルを閉じます。シミュレーションによって生成されたデータを消去します。
close_system(model,0); clear model sldemo_eml_galaxy_output;
メモ: * このモデルでは、信号ログがオンになっています。GalaxyBodies
信号に小さな青い信号ログ アンテナが表示されていることを確認してください。このモデルでは、出力データが Dataset
オブジェクトに保存されます。その他のデータで MATLAB ワークスペースをあふれさせることがないように、モデル ワークスペースで保存、変更されます。* 信号ログ設定を変更するには、信号線を右クリックし、Signal Properties
を選択します。この例では、信号名は GalaxyBodies
であり、[信号データのログ] チェックボックスがオンになっています。* ログが作成されたデータは、MATLAB ワークスペースに sldemo_eml_galaxy_output
という名前の Dataset
オブジェクトとして保存されます。GalaxyBodies
信号の情報は、「sldemo_eml_galaxy_output.get('GalaxyBodies')
」と入力することでこのオブジェクトから取得できます。これにより、
オブジェクトが返されます。Simulink.SimulationData.Signal
このモデルに関するコメント
このモデルは単純ですが、私たちの銀河が進化した過程についての洞察を与えてくれます。この例を使用すると、このモデルを可能な限り単純化し、シミュレーションを短時間で実行することができます。銀河をさらに追加してこの例を変更してみましょう。
参考文献
Toomre, Alar; Toomre, Juri; "Galactic Bridges and Tails"; Astrophysical Journal, Vol. 178, pp. 623-666 (1972); 12/1972;