在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函数的程序。

matlab中s函数编写

s函数是system Function的简称,用它来写自己的simulink模块。(够简单吧,^_^,详细的概念介绍大伙看帮助吧)可以用matlab、C、C++、 Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单)
先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等的
先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,像系统的输入 输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结 束。
在matlab的workspace里打edit sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构。 它的第一行是这样的:function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag)
先讲输入与输出变量的含义:t是采样时间,x是状态变量,u是输入(是做成simulink模块的输入),flag是仿真过程中的状态标志(以它来判断当 前是初始化还是运行等);sys输出根据flag的不同而不同(下面将结合flag来讲sys的含义),x0是状态变量的初始值,str是保留参数 (mathworks公司还没想好该怎么用它,嘻嘻,一般在初始化中将它置空就可以了,str=[]),ts是一个1×2的向量,ts(1)是采样周 期,ts(2)是偏移量。
下面结合sfuntmpl.m中的代码来讲具体的结构:
switch flag, %判断flag,看当前处于哪个状态
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化,此函数在 sfuntmpl.m的149行
我们找到他,在初始化状态下,sys是一个结构体,用它来设置模块的一些参数,各个参数详细说明如下
size = simsizes;%用于设置模块参数的结构体用simsizes来生成
sizes.NumContStates = 0;%模块连续状态变量的个数
sizes.NumDiscStates = 0;%模块离散状态变量的个数
sizes.NumOutputs = 0;%模块输出变量的个数
sizes.NumInputs = 0;%模块输入变量的个数
sizes.DirFeedthrough = 1;%模块是否存在直接贯通(直接贯通我的理解是输入能 %直接控制输出)

matlab中s函数编写

s函数是system Function的简称,用它来写自己的simulink模块。(够简单吧,^_^,详细的概念介绍大伙看帮助吧)可以用matlab、C、C++、 Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比较简单)
先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作,还可以操作windows API等的
先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数,像系统的输入 输出个数、状态初值、采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行,直至结 束。
在matlab的workspace里打edit sfuntmpl(这是matlab自己提供的s函数模板),我们看它来具体分析s函数的结构。 它的第一行是这样的:function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag)
先讲输入与输出变量的含义:t是采样时间,x是状态变量,u是输入(是做成simulink模块的输入),flag是仿真过程中的状态标志(以它来判断当 前是初始化还是运行等);sys输出根据flag的不同而不同(下面将结合flag来讲sys的含义),x0是状态变量的初始值,str是保留参数 (mathworks公司还没想好该怎么用它,嘻嘻,一般在初始化中将它置空就可以了,str=[]),ts是一个1×2的向量,ts(1)是采样周 期,ts(2)是偏移量。
下面结合sfuntmpl.m中的代码来讲具体的结构:
switch flag, %判断flag,看当前处于哪个状态
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
flag=0表示处于初始化状态,此时用函数mdlInitializeSizes进行初始化,此函数在 sfuntmpl.m的149行
我们找到他,在初始化状态下,sys是一个结构体,用它来设置模块的一些参数,各个参数详细说明如下
size = simsizes;%用于设置模块参数的结构体用simsizes来生成
sizes.NumContStates = 0;%模块连续状态变量的个数
sizes.NumDiscStates = 0;%模块离散状态变量的个数
sizes.NumOutputs = 0;%模块输出变量的个数
sizes.NumInputs = 0;%模块输入变量的个数
sizes.DirFeedthrough = 1;%模块是否存在直接贯通(直接贯通我的理解是输入能 %直接控制输出)

在matlab的simulink中有一个S-Function Builder的模块,其中可以用matlab语言或者C语言编写程序,不知道是不是你说的东西。

请问s函数是啥样的,我好像没查出来


MATLAB中size()的用法是什么
分析如下:size():获取矩阵的行数和列数 1、s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素是矩阵的行数,第二个元素是矩阵的列数。2、[r,c]=size(A),当有两个输出参数时,size函数将矩阵的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量c。3...

Simulink中S-Function和MATLAB-Function的区别
s函数比较完整,包括初始化等更详细的功能,普通函数直接就进行了计算。举个例子,输入为a、b,输出为a+b,那么直接用MATLAB-Function就可以完成了 如果你想做的是对a+b积分并且希望设置步长、初值等,那你得用S-Function

matlab中s(2)为什么是单引号
因为matlab中s(2)函数参数要加单引号,其他的加双引号是不能使用数组将字符串与“”连接起来。注意事项:matlab在定义字符串时直接使用类似<spanstyle=“font-size:18px;”>a='string';<\/span>即可。但是如果需要定义的字符串中包含引号,如str'i'ng,定义为:<spanstyle=“font-size:18px;”...

Simulink中S-Function和MATLAB-Function的区别
S函数模块是描述Simulink模块运行机制和细节动作最深刻的模块,它提供对模型运行时模块动作的所有流程定义,包括初始化多少个输入输出口,多少个状态变量;包括微分,状态变量更新计算,包括输出计算和终止时的动作定义。Matlab -function是提供类似Matlab编程的编辑器,在有限制的情况下去编写M语言程序。前者的...

matlab中simple什么意思
matlab中simple函数用于获取符号变量的最简形式,调用形式为:[R,HOW] = SIMPLE(S)其中S输入参数,符号变量,R返回值,输入变量的最简形式,HOW 化简的方式,一个字符串。示例如下:>> syms x >> y = cos(x)^2+sin(x)^2;>> R = simple(y)R = 1 >> [r,how] = simple(y)r = 1...

Matlab中S函数怎么编写呀?
回答:不同计算方法,编写过程会不一样。但相似的函数,当然可以,就像函数的参数可以自选一样

Matlab中sym有几种用法?
Matlab中sym有6种用法,“sym x;”是不正确的用法。1、S = sym(A)将非符号对象(如,数字,表达式,变量等)A转换为符号对象,并存储在符号变量S中。2、x = sym('x')创建符号变量x,其名字是'x'。示例:alpha = sym('alpha')。3、x = sym('x', 'real')这里假设x是实数,因此有x...

Matlab2016a中编写S函数时,输入行sizes=simsizes;为什么老显示出错...
就这个模型而言,我看不出使用S函数实现有什么好处。 如果用S函数实现,会涉及到一些具体的问题: 1、这些常数是在S函数中直接定义,还是要求可以在外部修改(例如在基本工作区中定义)? 2、是否需要把输入独立出来?mg项与状态无关,原则上可...3839 ...

matlab中subs函数是什么意思?
一、matlabsubs函数 这个还真的大神出来解答呢 二、什么是matlab subs函数?matlab中subs()是符号计算函数,表示将符号表达式中的某些符号变量替换为指定的新的变量,常用调用方式为:subs(S,OLD,NEW) 表示将符号表达式S中的符号变量OLD替换为新的值NEW。下面具体演示4种不同形式的OLD和NEW的调用效果:...

simulink中的s函数
S-函数是系统函数(System Function)的简称,是指采用非图形化的方式(即计算机语言,区别于Simulink的系统模块)描述的一个功能块。用户可以采用MATLAB代码,C,C++,FORTRAM或Ada等语言编写S-函数。S-函数由一种特定的语法构成,用来描述并实现连续系统、离散系统以及复合系统等动态系统;S-函数能够接受来自...

苏仙区18086115175: matlab中s函数怎么写 -
匡瞿十五: 所谓s函数是system Function的简称,用s函数可以利用matlab的丰富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言写的s函数还可以实现对硬件端口的操作, 还可以操作windows API等.先介绍一下simulink的仿真过程(以便理解s函数),simulink的仿真有两个阶段: 一个为初始化,这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、 采样时间等;第二个阶段就是运行阶段,这个阶段里要进行计算输出、更新离散状态、 计算连续状态等等,这个阶段需要反复运行,直至结束.可以使用模板文件:sfuntmp1.m来写s函数

苏仙区18086115175: 怎么在matlab中将s函数输入 -
匡瞿十五: matlab中s函数编写s函数是system Function的简称,用它来写自己的simulink模块.(够简单吧,^_^,详细的概念介绍大伙看帮助吧)可以用matlab、C、C++、 Fortran、Ada等语言来写,这儿我只介绍怎样用matlab语言来写吧(主要是它比...

苏仙区18086115175: 在MATLAB中S函数怎么生成?
匡瞿十五: 在matlab的simulink中有一个S-Function Builder的模块,其中可以用matlab语言或者C语言编写程序,不知道是不是你说的东西.

苏仙区18086115175: 如图编写matlab 的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....

苏仙区18086115175: matlab s fuction的建立 -
匡瞿十五: S-Function 可以使用MATLAB®,C,C++,Ada,或Fortran 语言来编写.如果用matlab编写,它和一般的m-function是一样的. 请参考一个文档: http://wenku.baidu.com/view/f123551b6bd97f192279e92f.html

苏仙区18086115175: Matlab中S函数怎么编写呀? -
匡瞿十五: 不同计算方法,编写过程会不一样.但相似的函数,当然可以,就像函数的参数可以自选一样

苏仙区18086115175: MATLAB里面已知开环传递函数怎么写S函数? -
匡瞿十五: 可以用tf函数,比如分母系数den[1 1 2],分子是[1 1],生成传递函数就是tf(num,den);也可以用零极增益模型函数zpk(z,p,k),z是零点,p是极点,k是增益. 比如一个双输入单输出系统,z={[],-0.5};%外括号是花括号;p={0.3,[0.2+i,0.1-i]};k=[2 3];...

苏仙区18086115175: simulink中的s函数 -
匡瞿十五: S-函数是系统函数(System Function)的简称,是指采用非图形化的方式(即计算机语言,区别于Simulink的系统模块)描述的一个功能块.用户可以采用MATLAB代码,C,C++,FORTRAM或Ada等语言编写S-函数.S-函数由一种特定的语法构...

苏仙区18086115175: 求助建立一个MATLAB中S函数的建立及用法 -
匡瞿十五: 不知道你的u得到了没有?如果得到了,可以直接编写S函数来得到f(u).function [sys,x0,str,ts,simStateCompliance] = sfun(t,x,u,flag,Io,q,A,K,T) switch flag, case 0, [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x...

苏仙区18086115175: matlab s函数 -
匡瞿十五: 单独看mdlOutputs很难判断整个S函数的功能. 标准S函数的输出模块定义为:function sys=mdlOutputs(t,x,u)其中t为当前仿真时间,x为状态变量,u为输入,而从题主贴出的代码看,应该并不是这样的变量定义. 下面单独分析一下题主所贴的 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网