Можно записать использование действий SimEvents®:
Код MATLAB® — Использование MATLAB. Для получения информации об инструкциях для использования кода MATLAB как язык действия события см. Инструкции для Использования MATLAB как Язык Действия События
Функции Simulink® — Использование Функциональный блок Simulink. Функциональный блок Simulink не принимает сущности как вход.
В целом с помощью MATLAB, когда язык действия события SimEvents следует тем же правилам как использование MATLAB в блоке MATLAB function.
Включайте префикс типа для идентификаторов перечисляемых значений — идентификатор, TrafficColors.Red
допустим, но Red
не.
Используйте формат MATLAB для комментариев — Использование %
, чтобы задать комментарии для непротиворечивости с MATLAB. Например, следующий комментарий допустим:
% This is a valid comment in the style of MATLAB
Используйте индексацию на основе одну для векторов и матриц — индексация, На основе одна сопоставима с синтаксисом MATLAB.
Используйте круглые скобки вместо скобок, чтобы индексировать в векторы и матрицы — Этот оператор допустим:
a(2,5) = 0;
Этот оператор не допустим:
a[2][5] = 0;
Персистентные переменные инструкции:
Управляйте состояниями, которые не являются частью использования структуры сущности MATLAB персистентные переменные.
Персистентные переменные, заданные в любом случае действие блока, ограничены по объему только к тому действию.
Блок может совместно использовать персистентные переменные через все его действие события управлением это в функции MATLAB на пути (который вызывается от его действий события).
Два различных блока не могут совместно использовать ту же персистентную переменную.
Присвойте начальное значение локальным и выходным данным — При использовании MATLAB как язык действия, чтение данных без начального значения вызывает ошибку.
Не используйте параметры, которые имеют массив ячеек типа данных.
Можно сгенерировать случайные числа с помощью различных дистрибутивов. Существует два подхода моделирования, чтобы использовать seed во время генерации случайных чисел.
Можно использовать персистентные переменные для инициализации уникальных seed для каждого блока в модели.
Можно использовать функцию coder.extrinsic()
, чтобы сгенерировать seed без персистентных переменных.
Чтобы сгенерировать эти случайные распределения, используйте код в столбце Usage этой таблицы в блоках SimEvents, которые поддерживают действия события или действия времени межгенерации.
Распределение | Параметры | Использование | Требует продукта Statistics and Machine Learning Toolbox™ |
---|---|---|---|
Экспоненциал | Среднее значение (m) |
-m * log(1-rand) | Нет |
Универсальная форма | Минимум (m) Максимум (M) |
m + (M-m) * rand | Нет |
Бернулли | Вероятность для вывода, чтобы быть 1 (P) |
binornd(1,P) | Да |
Бином | Вероятность успеха в одном испытании (P) Количество испытаний (N) |
binornd(N,P) | Да |
Треугольный | Минимум (m) Максимум (M) Режим (режим) |
persistent pd if isempty(pd) pd = makedist('Triangular',... 'a',m,'b',mode,'c',M) end random(pd) | Да |
\Gamma | Порог (T) Масштабируйтесь (a) Сформируйте (b) |
gamrnd(b,a) | Да |
Гауссов (нормальный) | Среднее значение (m) Стандартное отклонение (d) |
m + d*randn | Нет |
Геометрический | Вероятность успеха в одном испытании (P) |
geornd(P) | Да |
Пуассон | Среднее значение (m) |
poissrnd(m) | Да |
Логарифмически нормальный | Порог (T) Му (mu) Сигма (S) |
T + lognrnd(mu,S) | Да |
Логистический журналом | Порог (T) Масштабируйтесь (a) |
persistent pd if isempty(pd) pd = makedist('Loglogistic',... 'mu',m,'sigma',S); end random(pd) | Да |
\beta | Минимум (m) Максимум (M) Сформируйте параметр (a) Сформируйте параметр b (b) |
betarnd(a,b) | Да |
Дискретная универсальная форма | Минимум (m) Максимум (M) Количество значений (N) |
persistent V P if isempty(V) step = (M-m)/N; V = m : step : M; P = 0 : 1/N : N; end r = rand; idx = find(r < P, 1); V(idx) | Нет |
Weibull | Порог (T) Масштабируйтесь (a) Сформируйте (b) |
T + wblrnd(a,b) | Да |
Произвольный непрерывный | Вектор значения (V) Вектор функции интегральной вероятности (P) |
r = rand; if r == 0 val = V(1); else idx = find(r < P,1); val = V(idx-1) + ... (V(idx)-V(idx-1))*(r-P(idx-1)); end | Нет |
Произвольный дискретный | Вектор значения (V) Вектор вероятности (P) |
r = rand; idx = find(r < cumsum(P),1); V(idx) | Нет |
Для примера смотрите Образцовые Пересечения Трафика как Сеть Постановки в очередь.
Если вам нужны дополнительные дистрибутивы случайных чисел, см. Statistics and Machine Learning Toolbox.
Чтобы сгенерировать случайные числа, инициализируйте уникальный seed для каждого блока в вашей модели. Если вы используете статистический шаблон, можно вручную изменить начальный seed на уникальное значение для каждого блока, чтобы сгенерировать независимые выборки от дистрибутивов.
Чтобы сбросить начальное значение seed каждый раз, симуляция запускается, используйте код MATLAB, чтобы инициализировать персистентную переменную в действиях события, например:
persistent init if isempty(init) rng(12234); init=true; end
Вот пример кода. Вектор значения присвоен FinalStop
:
% Set the initial seed. persistent init if isempty(init) rng(12234); init=true; end % Create random variable, x. x=rand(); % % Assign values within the appropriate range % using the cumulative probability vector. if x < 0.3 entity.FinalStop = 2; elseif x >= 0.3 && x< 0.6 entity.FinalStop = 3; elseif x >= 0.6 && x< 0.7 entity.FinalStop = 4; elseif x >= 0.7 && x< 0.9 entity.FinalStop = 5; else entity.FinalStop = 6; end
В некоторых сценариях вы генерируете случайные числа, не используя персистентные переменные. В этом случае используйте функцию coder.extrinsic()
, чтобы убедиться, что SimEvents использует функцию в MATLAB, и seed задан в базовом рабочем пространстве MATLAB. Это может вызвать снижение производительности в симуляции.
Рассмотрите этот код как пример.
% Random number generation coder.extrinsic('rand'); value = 1; value = rand(); % Pattern: Exponential distribution mu = 0.5; dt = -1/mu * log(1 - value);
Выводом внешней функции является mxArray
. Чтобы преобразовать его в известный тип, переменная val = 1
, как объявляют, устанавливает свой тип удваиваться, и rand
присвоен той переменной val=rand
. Для получения информации о внешних функциях смотрите Работу с mxArrays (Simulink).
Для примера смотрите Образцовые Пересечения Трафика как Сеть Постановки в очередь.
Из действия события можно обратиться к этим параметрам:
Специфичные для маски параметры вы задаете использование Редактора Маски панель Parameters.
Любая переменная вы задаете в рабочей области (такой как базовое рабочее пространство или рабочее пространство модели).
Параметры вы задаете использование объекта Simulink.Parameter
.
С действиями SimEvents вы не можете:
Измените параметры из действия события.
Настройки параметров во время симуляции.
Действия события не поддержаны с типом данных сущности строки.
Генератор сущности | Очередь сущности | Репликатор сущности | Сервер сущности | Терминатор сущности | Функция MATLAB | Многоадресно передайте принимают очередь | Получатель ресурса | Функция Simulink | Simulink.Parameter