yuanyuanlx 发表于 2006-10-21 15:12

[求助]Matlab Fcn和S-Function、Embedded Matlab Function的区别

请问各位前辈:

linlin820 发表于 2006-11-20 04:19

Matlab Fcn"Matlab语言格式的任意函数

Embedded Matlab Function:嵌入式 MATLAB

S-function:(system function)乃是MATLAB所提供用来描述动态系统的程式
语言,其可以用MATLAB或C语言写成.S-function主要功能是,当使用者所需
使用之功能是SIMULINK现成方块图所无法提供,使用者可以利用S-function,
依照自我需求设计一符合SIMULINK环境之方块图.在这里必须注意的是,如果
所写成之S-function最後将利用RTW转成可即时执行之程式码,则S-function
可以只使用C语言撰写.

linlin820 发表于 2006-11-21 07:42

Math Function(数学函数)

(1)模块功能
执行一个数学函数.
(2)模块说明
Math Function模块执行许多普通的数学函数.
可以从Function列表框中的这些函数中选择一个以;exp,log,10^u,log10,magnitude
^2.square,sqrt,Pow,reciprocal,hypot,rem和mod.该模块的输出是对输入执行指定函数
运算的结果.
函数的名字显示在模块的图标中.simulink自动地画出适当数目的输入端口.
需要输出向量化的输出时应使用Ma小Fucntion模块而不是Fcn模块,因为Fcn模
块只能产生标量输出.
(3)模块数据类型
该模块接受实数或复数值信号或双精度类型信号向量.输出信号类型依据输出信号
类型参数设定,为实数或复数.

Fcn(函数表达式)
(1)模块功能
对输入应用一个结定的表达式.
(2)模块说明
Fcn模块对其输入使用指定的c语言风格描述的表达式.表达式可以用一或多个如下元素组成:
1)M:模块的输入.如果u是一个向量,u(i)表示向量的第i个元素,u(1)或者u表示第一个元素.
2)数字常量.
3)算术运算符(+,-,*,/)
4)关系运算符(==,!=,>,<,>=,<=),如果表达式运算结果为真时返回1,否则返回0;
5)逻辑运算符(&&,||,!)如果表达式运算结果为真时返回1,否则返回0;
6)圆括号.
7)数学函数:abs,acos,asin,atan,atan2,ceil,cos,cosh,exp,fabs,floor,hypor,ln,log,
log10,pow,power,rem,sign,sin,sinh,sqrt,tan和tanh.
8)工作空间变量,不能被识别为上面所列出的各项的变量名将传给MATLAB求值.矩阵和向量的元素必须被指明(例如矩阵的第一个元素用A(1,1)而不是A).


s函数最通常的用法是创建一个定制的Simulink模块.可以在许多应用程序中使用s函数,包括:
1)在Simulink中加进新的通用模块,
2)将已存在的C代码合并入一个仿真中;
3)将一个系统描述为一系列的数学方程;
4)使用图形动画.
使用s函数的一个优点是可以创建一个通用的模块,在棋型中可以多次使用它,使用时只需要改变它的参数值即可.

一般来说,尽量用Fcn函数,Matlab Fcn可以用Matlab的语法进行编辑,但其仿真时需要进行编译,因此速度较Fcn慢。
S函数则和上面两种模块没什么直接联系,它是用matlab或c语言编写有特殊需要的模块。

以上来自研学天依

yuanyuanlx 发表于 2006-11-30 11:52

谢谢您,介绍的非常详细,有点领悟了。
我在做毕业设计,要做控制系统的仿真,里面有一个关于模糊神经的控制器,S-Function看着晕晕的,打算用Matlab Fcn编写。
再请教个问题:我用现场采集的数据仿真,是个反馈系统,仿真输入数据共5个,其中4个来自采集好的现场数据,1个为仿真出来的结果,请问这样怎样输入数据呢?
想来想去没有找到合适的办法,我想把4个现场数据写成4个mat文件,用一个带5个输入(另一个输入就是仿真系统反馈)的mux给Matlab Fcn模块传值,这样是不是很麻烦啊?有更好的办法吗?
谢谢。
页: [1]
查看完整版本: [求助]Matlab Fcn和S-Function、Embedded Matlab Function的区别