【Matlab】Matlab中如何编写S函数

来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/22 11:59:19
【Matlab】Matlab中如何编写S函数【Matlab】Matlab中如何编写S函数【Matlab】Matlab中如何编写S函数mpl的118行case3,sys=mdlOutputs(t,x,u

【Matlab】Matlab中如何编写S函数
【Matlab】Matlab中如何编写S函数

【Matlab】Matlab中如何编写S函数
mpl的118行case 3,sys=mdlOutputs(t,x,u);flag=3表示此时要计算输出,即y=fo(t,x,u),找到mdlOutputs函数(在218行),如上,如果sys=[]表示没有输出,我们改成sys=fo(t,x,u)或sys=C*x+D*u %sys此时为输出y好像快完了,嘻嘻,在sfuntmpl的124行case 4,sys=mdlGetTimeOfNextVarHit(t,x,u);flag=4表示此时要计算下一次采样的时间,只在离散采样系统中有用(即上文的mdlInit ializeSizes中提到的ts设置ts(1)不为0)连续系统中只需在mdlGetTimeOfNextVarHit函数中写上sys=[];这个函数主要用于变步长的设置,具体实现大家可以用edit vsfunc看vsfunc.m这个例子最后一个,在sfuntmpl的130行case 9,sys=mdlTerminate(t,x,u);flag=9表示此时系统要结束,一般来说写上在mdlTerminate函数中写上sys=[]就可,如果你在结束时还要设置什么,就在此函数中写关于sfuntmpl这个s函数的模板讲完了.s函数还可以带用户参数,下面给个例子,和simulink下的gain模块功能一样,大伙自己 看吧,我睡觉去了,累了.function [sys,x0,str,ts] = sfungain(t,x,u,flag,gain)switch flag,case 0,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=[];ts=[0,0];case 3,sys=gain*u;case {1,2,4,9},sys = [];end做好了s函数后,simulink--user-defined function下拖一个S-Function到你的模型,就可以用了,在simulink----user-defined function还有个s-Function Builder,他可以生成用c语言写的s函数在matlab的workspace下打sfundemos,可以看到很多演示s函数的程序.