Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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;