Спиральная симуляция возникновения галактик Используя блоки MATLAB function

Эта модель была вдохновлена классической статьей "Галактические Мосты и Хвосты" (Toomre & Toomre 1972). Исходная бумага объяснила, как галактики, имеющие форму диска могли разработать спиральные руки. Две галактики формы диска первоначально далеко друг от друга. Они затем летят друг другом и почти сталкиваются. Если галактики являются спиральными руками причины достаточно близких, взаимных гравитационных сил, чтобы сформироваться.

За исключением использования блока визуализации "PlotAll" графического вывода стандартных программ, всех функциональных блоков MATLAB® в этой генерации кода поддержки модели с Simulink® Coder™ и Embedded Coder™.

  • Требования: For this example, Simulink® генерирует код для симуляции в каталоге проекта Simulink, созданном в текущей рабочей директории (pwd). Если вы не хотите влиять на текущий каталог (или если вы не можете сгенерировать файлы в этой директории), необходимо изменить рабочую директорию.

Открытие модели и выполнение симуляции

Откройте модель и запустите симуляцию путем выполнения кода ниже. Если вы используете MATLAB® Help, выберите код, вы хотите выполнить и нажать F9 (или избранный код, щелкните правой кнопкой мыши по выбору и выберите "Evaluate Selection"). Модель Simulink загрузит, скомпилирует, и запуск.

model = 'sldemo_eml_galaxy';
open_system(model);
sim(model);

Описание модели

В этом разделе описываются модель подробно и объясняет роль каждого блока в модели. Зеленые блоки инициализируют симуляцию, оранжевые блоки являются ядром симуляции, и желтый блок делает представление анимации галактики.

Начальные условия

Модель требует начальных условий для каждой галактики. Начальные условия: радиус галактики в парсеках (rp), масса галактики в солнечных массовых модулях (cm), положении галактики в парсеках (pos) и скорости галактики в m/s (vel).

В модели постоянные блоки задают начальные условия. Начальные условия были выбраны таким образом, что галактики почти столкнутся в какой-то момент вовремя.

Блоки "ConstructGalaxy"

Начальные условия передаются Галактике Построения блоков MATLAB function 1 и Галактике Построения 2. Эти блоки MATLAB function содержат код MATLAB, который создает модели галактики.

В типичной галактике большая часть массы сконцентрирована в ее центре как суперкрупная черная дыра и/или звездообразное скопление. Мы моделируем галактику как диск с радиусом r с большей частью его массы, сконцентрированной во внутреннем кругу радиуса r/3. В дополнение к этому суперкрупному ядру блок MATLAB function "ConstructGalaxy" создает 349 случайных звезд с массами в пределах от 4 - 24 солнечных масс. Эти звезды случайным образом расположены на расстоянии r/3 и r от центра галактики. Звезды первоначально перемещаются в круговые орбиты вокруг ядра галактики. Каждый объект (звезда или ядро галактики) имеет массу, положение (x, y, z), и скорость (Vx, Vy, Vz).

Блок "Конкатенации матриц"

Этот блок соединяет информацию об обеих галактиках. В этой точке модель имеет 700 объектов: 1 ядро для каждой галактики и 349 звезд вокруг каждого ядра. Эти 700 объектов взаимодействуют согласно ньютоновой механике.

Блок "Раздела"

Этот блок MATLAB function разделяет все 700 объектов на две группы: тяжелые тела и легкие тела. Тяжелые тела являются ядрами галактики. Легкие тела являются звездами. Поскольку ядра галактики намного более тяжелы, чем отдельные звезды, модель рассмотрит только тяжело-тяжелые и тяжело-легкие взаимодействия. Мы можем проигнорировать легко-легкие взаимодействия тела. Это сэкономит много времени, поскольку 698 из 700 тел в модели легки.

Блок "ApplyGravity"

Этот блок MATLAB function использует ньютонову механику, чтобы вычислить скорости и положения тел на каждом шаге. Блоком "объединения" является также блок MATLAB function. Это объединяет данные о тяжелых и световых объектах вместе.

Блок "PlotAll"

Этот блок MATLAB function строит тела в фигуре и обновляет положение каждой звезды на каждом шаге в симуляции.

Закрытие модели

Закройте модель, не сохраняя изменений. Очистите данные, сгенерированные симуляцией/примером.

close_system(model,0);
clear model sldemo_eml_galaxy_output;

Примечание:

  • В этой модели логгирование сигнала включено (заметьте, что сигнал 'GalaxyBodies' имеет немного синей антенны логгирования сигнала на нем). Модель сохраняет выходные данные в Dataset объект. Любые другие данные сохранены/модифицированы в рабочем пространстве модели, чтобы не создавать помехи рабочему пространству MATLAB.

  • Чтобы изменить настройки логгирования сигнала, щелкните правой кнопкой по сигнальной линии и выберите "Signal Properties". В этом примере именем сигнала является 'GalaxyBodies', и флажок "Log signal data" проверяется.

  • Записанные данные сохранены в рабочее пространство MATLAB как Dataset объект с именем 'sldemo_eml_galaxy_output'. Информация о сигнале 'GalaxyBodies' может быть получена из этого объекта путем ввода sldemo_eml_galaxy_output.get('GalaxyBodies') который возвращает Simulink.SimulationData.Signal объект. Смотрите больше о работе с этими объектами в документации "Simulink.SimulationData.Signal".

Комментарии о модели

Несмотря на ее простоту, эта модель обеспечивает понимание как развивалась наша собственная галактика. Этот пример позволяет пользователю максимально упрощать модель и запускать быструю симуляцию. Пользователь может легко изменить этот пример путем добавления большего количества галактик.

Ссылки

Toomre, Крыловидный; Toomre, Juri; "Галактические Мосты и Хвосты"; Астрофизический Журнал, Издание 178, стр 623-666 (1972); 12/1972;