exponenta event banner

Моделирование формирования спиральной галактики с использованием функциональных блоков MATLAB

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

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

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

Открытие модели и выполнение моделирования

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

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

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

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

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

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

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

Блоки «Галактика»

Исходные условия передаются в функциональные блоки MATLAB Construct Galaxy 1 и Construct Galaxy 2. Эти функциональные блоки MATLAB содержат код MATLAB, который строит модели галактик.

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

Блок «Матричная конкатенация»

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

Блок «Раздел»

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

Блок «ApplyGravity»

Этот функциональный блок MATLAB использует ньютоновскую механику для вычисления скоростей и положений тел на каждом шаге. Блок «комбинирования» также является функциональным блоком MATLAB. Он объединяет данные о тяжелых и легких объектах вместе.

Блок «PlotAll»

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

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

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

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. Сигнал» документация.

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

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

Ссылки

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