Одним из самых простых примеров S-функций поставляемых с пакетом MATLAB является функция timestwo (файл timestwo.m). Данная S-функция выполняет умножение входного сигнала на коэффициент 2. Ниже приведен текст этой S-функции.
function [sys,x0,str,ts] = timestwo(t,x,u,flag)%% TIMESTWO - Пример S-функции. Выходной сигнал равен входному,% умноженному на 2:% y = 2 * u;%% Шаблон для создания S-функции - файл sfuntmpl.m .%% Copyright 1990-2001 The MathWorks, Inc.% $Revision: 1.6 $% Авторский перевод комментариев: Черных И.В.%switch flag, % В зависимости от значения переменной flag происходит % вызов того или иного метода:%===============%% Инициализация %%===============% case 0 [sys,x0,str,ts]=mdlInitializeSizes;%===========================================%% Расчет значений вектора выходных сигналов %%===========================================% case 3 sys=mdlOutputs(t,x,u);%=========================================%% Неиcпользуемые значения переменной flag %%=========================================% % В примере не используются методы для завершения работы S-функции, % нет непрерывных и дискретных переменных состояния, % поэтому значения переменной flag = 1, 2, 4, 9 не используются. % Результатом S-функции в этом случае является пустая матрица. case { 1, 2, 4, 9 } sys=[];%======================================%% Неизвестное значение переменной flag %%======================================%otherwise error(['Unhandled flag = ',num2str(flag)]);end% Окончание функции timestwo%===============================================================%% mdlInitializeSizes %% Функция инициализации %% Расчет начальных условий, значений вектора шагов модельного %% времени, размерности матриц %%=============================================================%%function [sys,x0,str,ts] = mdlInitializeSizes()sizes = simsizes;sizes.NumContStates = 0; % Число непрерывных переменных состояния.sizes.NumDiscStates = 0; % Число дискретных переменных состояния.sizes.NumOutputs = -1; % Число выходных переменных (размерность выходного вектора). % Динамическая размерность выходного вектора.sizes.NumInputs = -1; % Число входных переменных (размерность входного % вектора). % Динамическая размерность входного вектора.sizes.DirFeedthrough = 1; % Прямой проход. Есть проход входного сигнала % на выход.sizes.NumSampleTimes = 1; % Размерность вектора шагов модельного времени.sys = simsizes(sizes);str = []; % Параметр заразервирован для будущего % использования.x0 = []; % Задание вектора начальных значений переменных % состояния. % Переменных сомтояния нет, поэтому значение % параметра - пустая матрица.ts = [-1 0]; % Матрица из двух колонок, задающая шаг % модельного времени и смещение. % Шаг наследуется из предшествуюшего блока.% Окончание mdlInitializeSizes %%========================================================%% mdlOutputs %% Функция для расчета значений вектора выходных сигналов %%========================================================%%function sys = mdlOutputs(t,x,u)sys = u * 2; % Выходной сигнал блока есть входной сигнал, умноженный на % коэффициент 2.% Окончание mdlOutputs
Пример модели с S-функцией timestwo приведен на рис.16.4.