当前位置: 首页>编程语言>正文

curses模块 sfunction模块

s function 是matlab中经常使用的一个元件,当然也包括 level 2 s function

下面是在学习 sfunction 中的一些心得,整理于下:

在matlab中查看 s function的帮助文件:

可以在命令行窗口使用如下指令:

doc s-function

doc Level-2 MATLAB S-Function (msfunction)

下面搭建一个sfunction 的环境

curses模块 sfunction模块,curses模块 sfunction模块_sed,第1张

输入 s function 然后找到对应的模块然后选中

curses模块 sfunction模块,curses模块 sfunction模块_开发语言_02,第2张

sfunction 默认的名字是 system

 双击后可以进行相关的更改,sfunction 需要在路径下建立一个同模块名字相同的函数作为 s函数,该函数在matlab中有模板,可以调出模板,然后拷贝一份进行相应的 更改:

获得模板的命令:

edit sfuntmpl

edit msfuntmpl 

sfunction 对应的函数如何编写

首先看模板中的解释可以知道,在sfunction 中可以定义自己的 ode 微分方程,离散方程或者其他类的算法。

通常情况下matlab  S function的格式如下:

[SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,...,Pn)

按照官方的解释是:

t 是当前的时间变量;

Flag 是一个判断的标志

X :是是当前的状态变量

U: 是当前的输入变量

不同flag 对应的函数说明,以及需要返回的变量关系:

  • Flag==0  

需要返回的变量 [SIZES,X0,STR,TS]

描述:

当flag==0 是系统的初始话函数,该函数要 通过 SYS 返回 系统的sizes ;

同时要返回初始状态 X0 ,返回状态顺序字串变量STR 通常STR=[], 返回采样时间TS

  • flag==1

需要返回的变量 DX

描述;

返回连续状态变量X 的导数 

  • flag==2

需要返回的变量 Ds

描述;

更新离散状态 SYS=X(n+1)

  • flag == 3

需要返回的变量 Y

描述:

返回系统的输出变量

  • flag == 4

需要返回的变量 Tnext

描述:

返回系统的变量步长采样时间

  • flag == 5

为系统预留

  • flag == 9

无需返回变量

描述:

系统终止,执行相关析构

对于每个flag 值对应的执行的函数,下面来看下不同函数返回的值具体细节

状态向量X和X0由连续状态和离散状态组成。  

可选择变量 P1...Pn 也可以应用在s function中,并且任何的flag 下都可使用

当 sfunction 的flag 等于0 时,需要返回的SYS 变量说明:

此时的SYS 的长度是7

SYS(1): 连续状态的 num

SYS(2) :离散状态的num

SYS(3) = Number of outputs.
SYS(4) = Number of inputs.

注意,前四个变量也可以设置为-1, 这样会根据变量的个数进行动态调整
%               Any of the first four elements in SYS can be specified
%               as -1 indicating that they are dynamically sized. The
%               actual length for all other flags will be equal to the
%               length of the input, U.
SYS(5) = Reserved for root finding. Must be zero.

SYS(5): 是系统预留的变量所以该数值必须为0
%      SYS(6) = Direct feedthrough flag (1=yes, 0=no). The s-function
%               has direct feedthrough if U is used during the FLAG=3
%               call. Setting this to 0 is akin to making a promise that
%               U will not be used during FLAG=3. If you break the promise
%               then unpredictable results will occur.
%      SYS(7) = Number of sample times. This is the number of rows in TS.

SYS(7) : 采样时间的个数 

s function 的输入需要使用 mux 进行将多个输入合并, s function 的输出需要使用 demux将其分开成为多个信号:

类似这样:

curses模块 sfunction模块,curses模块 sfunction模块_sed_03,第3张


https://www.xamrdz.com/lan/5su1962215.html

相关文章: