⑴ 您好,我是用.c形式编写Sfunction,目的是将输入矩阵进行处理,然后输出,但是不知道中间的量该怎么定义
果你输入的是一个向量,同样也会输出一个向量的。这个同m文件里面编程是一样的。
MATLAB Function里面只能填写一个函数名称,无笑肆法编写m文件。
如果你需要编写m文件的话,可以使用Embedded MATLAB Function ,我想你说的是这个。
如果要输出多个数据,可以这样写:
function y = fcn(u)
y=[y1 y2 y3];
这样就可以当成一个向量输出了。外面只有一个输出端口,里面的数据是向量形式。
如碰好轿果这样写:
function [y1,y2,y3] = fcn(u)
那么就袜巧会有三个输出端口。
PS:我再说一遍,MATLAB Function是不能编写m文件的,只有Embedded MATLAB Function才行,你定义y为2*100的矩阵,类似于y = [1 2 3 4;5 6 7 8];这样就行了。输出就是一个矩阵。
另外,站长团上有产品团购,便宜有保证
⑵ simulink s函数 怎么编译
在simulink编辑环境下,拖入S-function模块,双击该模块
⑶ S-Function的stae space的使用
S-Function是system-function的缩写。
S-Function就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自己编租洞锋写程序来满足自己要求模型的接口。
MEX函数与M文件的区别
第一
MEX 函数能实现的回调函数比M-文件能实现的回调函数要多得多;
第二
MEX 函数直接访问内部数据结构SimStruct,SimStruct 是Simulink 用来保存关于S-function 信息的一个数据结构;
第三
MEX 函数也可使用MATLAB MEX 文件API 直接来访问MATLAB 的工作空间。
如弊晌果一个C MEX文件与一个M文件具有相同的名字,则C MEX文件被优先使用,即在S-Function块中使用的是C MEX文件。
例如要创建一个有1输入(2维),2输出(1维),3个参数,还有全局变量的S-Function。
过程如下:
打开simulink,点击User-Defined Functions里面的S-Function Examples。这个里面有多个语言版本的模板,有C,C++,Ada,Fortran和M语言的版本,其实都大同小异,只要了解几个函数就很容易使用了。 选择C语言的颤亩版本:从S-function模块中选择C-file S-functions里面的Basic C-MEX template。打开后,另存为自己的模块名字,如test.c 。然后分析代码
b编译在matlab的command window里面输入“mex test.c”,即可将test.c编译为mex文件。
c.调用sfunction在simulink空间里面拉入sfunction,在s-function name里面填入test,参数里面填入要设定的参数,然后仿真即可。
⑷ 教我用下sfunction,可以吗,急,谢谢
s-function使用方法:
1.在work文件夹下新建一个m文件,取个名字。然后打开它,将s-function内容输入。
2.在mdl仿真中拖入一个s-function模块,在模块属性里面输入其名字,点击edit看是否能直接进入你刚刚所建的m文件。如果不能,要么是因为你衫森团名字不一致,要么是因为你的工作文件夹没有选择正确。
s-function的编写:
1.首先你最好有个s-function的模板。
2.function的名字可以随便取。但是里面的变量不要改动。
3.flag是s-function的行进到什么地方的标志,其实就是利用它来依次调用相关的函数。比如:0:初始化。1:连续。2.离散。3.输出。4:步长。等等。
4.switch结束后,下面就是相关的函数了,首先是初始化,这个每个s-function都必须有。然后根据你所需的功能,添加相关的函数,最后用output函数输春蚂出。
5.函数之间的数或橘据传递用sys变量,也就是说每个函数结束后,都会将计算结果输入给sys。
s-function使用方法略微复杂,由于时间有限,讲得很不详细。qq吧
⑸ 如何为s-function编写tlc
1. 函者锋运数的函数头 函数的第一行:function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag) , 先讲输入与输出变量的含义: t是采样时间, x是状态变量, u是输入(是做成simulink模块的首梁输入), flag是仿基御真过程中的状态标志(以它来判断当前是初始化还是运行等) ...
⑹ 请问用simulink的s-function怎么编“对每秒钟的输入信号(已知采样率)求平均”这个程序。
手头上没有matlab,但是我可以给你提供一个方法。用s-function 的离散函数编程。
首先设置为固定仿真算法,s-function的采样周期为仿真步长的整数倍。
设置向量型棚蔽x,初始值x0=[0 0 0…0],然后每个计算周期按照顺序寄存在里面,如果向量满了之后,向前移位,最后一位空出来给新的采样值。
最后求平均,输出。
如果你计算一卜州和野下采样步长和向量x的长度,就可以求出最近1秒内的输入信号平均值。