matlab的M 文件 S 函数的标准模板.docxVIP

  • 55
  • 0
  • 约3.05千字
  • 约 4页
  • 2022-10-14 发布于湖南
  • 举报
matlab的M 文件 S 函数的标准模板 matlab的m-文件s-函数的标准模板 function[sys,x0,str,ts]=sfuntmpl(t,x,u,flag)%sfuntmpl是m-文件s函数模板 %通过剪裁,用户可以分解成自己的s函数,不过一定必须重新命名%利用s函数可以分解成已连续、线性混合系统等,同时实现任何模块的功能% %m-文件s函数的语法为: %[sys,x0,str,ts]=sfunc(t,x,u,flag,p1,...,pn)% %参数含义:%t是当前时间 %x就是s函数适当的状态向量%u就是模块的输出%flag就是所要继续执行的任务% %flag结果功能 %-------------------------------------------------------%0[sizes,x0,str,ts]模块初始化%1dx排序模块导数%2ds更新模块线性状态%3y排序模块输入 %4tnext计算下一个采样时间点%9[]结束仿真%% %用户切勿改动输入参数的顺序、名称和数目 %输入参数的数目不能小于1,这四个参数的名称和排列顺序不能改动 %用户可以根据自己的建议嵌入额外的参数,边线依次为第5,6,7,8,9等。 %s函数的flag参数是一个标记变量,具有6个不同值,分别为0,1,2,3,4,9 %flag的6个值分别指向6个相同的子函数 %flag所指向的子函数也成为回调方法(callbackmethods) switchflag, %初始化,调用“模块初始化”子程序%case0, [sys,x0,str,ts]=mdlinitializesizes;%已连续状态变量排序,调用“排序模块导数”子函数%case1, sys=mdlderivatives(t,x,u);%更新,调用“更新模块离散状态”子函数%case2, sys=mdlupdate(t,x,u); %输出,调用“计算模块输出”子函数%case3, sys=mdloutputs(t,x,u); %计算下一时刻采样点,调用“计算下一个采样时刻点”子函数%case4, sys=mdlgettimeofnextvarhit(t,x,u);%完结,调用“完结仿真”子函数%case9, sys=mdlterminate(t,x,u); %其他的flag%otherwise dastudio.error(simulink:blocks:unhandledflag,num2str(flag));end %endsfuntmpl %=============================================================================%“模块初始化”子函数%返回大小、初始条件和样本 function[sys,x0,str,ts]=mdlinitializesizes%调用simsizes函数,回到规范格式的sizes构架%这条指令不要修正sizes=simsizes; %模块的连续状态个数,0是默认值%用户可以根据自己的要求进行修改sizes.numcontstates=0;%模块的离散状态个数,0是默认值%用户可以根据自己的要求进行修改sizes.numdiscstates=0;%模块的输出个数,0是默认值 %用户可以根据自己的建议展开修正sizes.numoutputs=0;%模块的输出个数,0就是默认值 %用户可以根据自己的要求进行修改sizes.numinputs=0; %模块中涵盖的直通前向馈路个数,1就是默认值%用户可以根据自己的建议展开修正sizes.dirfeedthrough=1; %模块中采样时间的个数,1是默认值,至少需要一个样本时间%用户可以根据自己的要求进行修改sizes.numsampletimes=1; %初始化后的构架sizes经simsizes函数处置后向sys赋值%这条指令不要修正sys=simsizes(sizes); %给模块初始值变量赋值,[]是默认值%用户可以根据自己的要求进行修改x0=[]; %系统留存变量 %切勿改动,保持为空str=[]; %“二元对”叙述取样时间及偏移量。[00]就是默认值%[00]适用于于已连续系统 %[-10]则表示该模块采样时间继承其前的模块采样时间设置ts=[00]; %endmdlinit

文档评论(0)

1亿VIP精品文档

相关文档