Эта модель была вдохновлена классической статьей «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;