这是个简单的例子,注:此博客参考
[s函数小实例](https://blog.csdn.net/qq_34317499/article/details/81044757)
S函数代码如下:
function [sys,x0,str,ts]=zhai(t,x,u,flag,k,b)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes; %初始化
case 3
sys=mdlOutputs(t,x,u,k,b); %计算输出量
case {1,2,4,9}
sys=[];
otherwise %出错处理
error(num2str(flag))
end
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);
%给其他返回参数赋值
x0=[]; %设置初始状态为零状态
str=[]; %将str变量设置为空字符串
ts=[-1,0]; %假定继承输入信号的采样周期
function sys=mdlOutputs(t,x,u,k,b)
sys=k*u+b;
Simulink模型如下
Simulink模型
S函数参数设置
其中 :正弦波为输入,别忘了设置初始值(一开始我忘了,找了好久原因),这个是一个输入,一个输出的例子
仿真结果
输入为2个及以上变量时,只需修改
sizes.NumInputs=2; %有二个输入信号
%%%%%%%%
function sys=mdlOutputs(t,x,u,k,b)
sys=k*u(1)+b*u(2);