Можно записать использование действий SimEvents®:
Код MATLAB® — Использование MATLAB. Для получения информации об инструкциях для использования кода MATLAB как язык действия события см. Инструкции для Использования MATLAB как Язык Действия События
Функции Simulink® — Использование блок Simulink Function. Блок Simulink Function не принимает сущности как вход.
В общем случае с помощью 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.
Для примера смотрите Пересечения Трафика Модели как Сеть Постановки в очередь.
Из действия события можно обратиться к этим параметрам:
Специфичные для маски параметры вы задаете использование Редактора Маски панель Parameters.
Любая переменная вы задаете в рабочей области (такой как базовое рабочее пространство или рабочее пространство модели).
Параметры вы задаете использование Simulink.Parameter
объект.
Примечание
С действиями SimEvents вы не можете:
Измените параметры из действия события.
Настройки параметров в процессе моделирования.
Действия события не поддерживаются с типом данных сущности строки.
Entity Generator | Entity Queue | Entity Replicator | Entity Server | Entity Terminator | MATLAB Function | Multicast Receive Queue | Resource Acquirer | Simulink Function | Simulink.Parameter