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

Эта модель была вдохновлена классической статьей «Galactic Bridges and Tails» (Toomre & Toomre 1972). Оригинальная статья объяснила, как дискообразные галактики могли развивать спиральные руки. Две галактики дисковой формы первоначально находятся далеко друг от друга. Затем они пролетают мимо друг друга и почти сталкиваются. Когда галактики находятся достаточно близко, взаимные гравитационные силы вызывают образование спиральных рук.

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

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

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

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

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

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

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

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

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

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

Блоки «ConstructGalaxy»

Начальные условия передаются в блоки MATLAB function Construct Galaxy 1 и Construct Galaxy 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 _ выход'. Информация о сигнале 'GalaxyBodies' может быть извлечена из этого объекта путем ввода sldemo_eml_galaxy_output.get('GalaxyBodies') который возвращает Simulink.SimulationData.Signal объект. Подробнее о работе с этими объектами см. в документации Simulink .SimulationData.Signal ".

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

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

Ссылки

Тоомре, Алар; Тоомре, Юри; «Галактические мосты и решки»; «Астрофизический журнал», том 178, стр. 623-666 (1972); 12/1972;