| 
本帖最后由 senlenced3 于 2020-12-15 13:36 编辑
x
EDA365欢迎您登录!您需要 登录 才可以下载或查看,没有帐号?注册  $ ~, I( ~4 O! G: ~2 G2 O7 Z$ O
 6 G7 u9 Y$ g3 uS函数的设计与应用什么叫S函数
 用MATLAB语言编写S函数S函数是系统函数 (System Function)的简称,是指采用一种程序设计语言描述的一个功能模块。用户可以采用 MATLAB语言,也可以采用C、C++或FORTRAN等语言来编写S函数。S函数有自己特定的语法构成规则,可以用来描述并实现连续系统、离散系统以及复合系统。S函数能够接收来自 Simulink求解算法的相关信息,并对求解算法发出的命令做出适当的响应,这种交互作用类似于 Simulink系统模块与求解算法的相互作用。! U: ?3 g! u4 m- l8 `3 _. X) T: m; [& D
 在MATLAb命令窗口输入命令,打开模板文件5 D5 o6 R7 K$ x6 w
 ![]() 1 Y. i6 U" i/ ^% i 模板文件sfuntmpl.m包括:
 1个主函数6个子函数* a$ d' p# m# `& T  |+ @
 (1)主函数* Q# y: b' n# ]2 F) q主函数的引导语句为:
 ! G2 T) k1 @% [& N1 n" ]
 ![]() fname是S函数的函数名。输入形参t、x、u、flag分别为仿真时间、状态向量、输入向量和子函数调用标志。输出形参sys代表一种返回参数;x0是初始状态值;对于M文件S函数,str将被置成一个空阵;ts是一个两列矩阵。% B4 [) R, u8 g8 W1 s! ~) D- u
 (2)子函数& `% T( c6 K% S0 E3 bS函数共有6个子函数,这些子函数的前辍为mdl,由flag的值来控制在仿真的各阶段调用S函数的哪一个子函数。
 S函数的应用flag取0:调用初始化子函数 mdlInitializeSizesflag取1:调用子函数 mdlDerivatives实现连续状态的更新。flag取2:调用子函数 mdlUpdate实现离散状态的更新。flag取3:调用输出子函数 mdlOutputs! g3 u! ?- b7 {9 z
 采用S函数实现y=kx+b。% m! D' ~8 B7 j: f6 \6 Z(1)定义S函数
  主函数7 z  A7 J' V4 Y8 K
 初始化子函数3 d% k/ B2 ?; p" a* Y
 输出子函数% D! x; H9 m" j1 g; L9 i- K" S( g
 6 J1 O" r& P0 d, e! Y7 l
 (2)在Simulink模型中使用S函数: e6 s% a- x1 v$ r% T2 L& a. r; o, @: w" _1 W
  . ?6 F) J, H4 t+ r+ {* L# o- ~6 f- O 
   8 P/ l. [; Q1 M4 E& S. C
   
 |