我是靠谱客的博主 彩色月亮,最近开发中收集的这篇文章主要介绍S函数笔记,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

S函数示例

function [sys, x0, str, ts]=mysin(t,x,u,flag,Amp,Freq,Phase)
switch flag,
    case 0
        [sys, x0,str, ts]=mdlInitializeSizes;
    case 3
        sys = mdlOutputs(t, Amp, Freq, Phase);
    case {1,2,4,9}
        sys=[];
    otherwise
        error(['Unhandle flag=', num2str(flag)]);
end

function [sys, x0, str, ts]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates=0;  %连续系统的状态数
sizes.NumDiscStates=0;  %离散系统的状态数
sizes.NumOutputs=1;     %输出信号的数目
sizes.NumInputs=0;      %输入信号的数目
sizes.DirFeedthrough=0; %设置系统为直通
sizes.NumSampleTimes=1; %必须为1
sys=simsizes(sizes);
str=[];
x0=[];
ts=[0,0];
function sys=mdlOutputs(t, Amp, Freq, Phase)
sys=Amp*sin(2*pi*Freq*t+Phase);%方程的形式

说明:

[sys,x0,str,ts]=mdlInitializeSizes;

3.2 flag为1:连续类型函数求导过程,求导函数常用mdlDerivatives命名,该阶段内容一般是

sys=mdlDerivatives(t,x,u);

如果s函数是离散函数,或者不需要用到求导就可以得到结果,则该阶段不用,可以其内容可以为

sys=[];

3.3 flag为2:离散类型函数推演过程,推演函数常用mdlUpdate命名,该阶段内容一般是

sys=mdlUpdate(t,x,u);

如果s函数是连续函数,或者不需要用到推演就可以得到结果,则该阶段不用,可以其内容可以为

sys=[];

3.4 flag为3:计算输出的过程,输出函数常用mdlOutputs命名,该阶段内容一般是

sys=mdlOutputs(t,x,u);

3.5 flag为4:计算下一步采样时间,计算采用时间函数常用mdlGetTimeOfNextVarHit命名,该阶段内容一般是

sys=mdlGetTimeOfNextVarHit(t,x,u);

该阶段一般用在变步长的仿真过程,如果没用到变步长,其内容可为

sys=[];

3.5 flag为9:结束阶段,结束函数常用mdlTerminate命名。该极端内容为

sys=mdlTerminate(t,x,u);

结束函数可能涉及到回收空间,内存释放等操作,如果不涉及这些操作,则该阶段内容可为

sys=[];

3.6 目前flag只限定了为0,1,2,3,4,9这些值,如果为其他值,可能程序跑飞了,那么最好用一个otherwise接住这个程序,并输出响应的错误

error(['Unhandle flag=', num2str(flag)]);

4、初试化函数mdlInitializeSizes,初试化函数主要是告知仿真器该s函数的类型,比如是连续类型还是离散类型,连续类型或离散类型又其输入个数、输出个数多少,状态向量的元素有多少个,输出有多少个等等。这些类型的信息系统用simsizes结构体定义,只要定义该结构体内部的元素的值就可,然后用simsizes()函数执行该类型的定义。

sizes=simsizes;
sizes.NumContStates=0;  %连续系统的状态数
sizes.NumDiscStates=0;  %离散系统的状态数
sizes.NumOutputs=1;     %输出信号的数目
sizes.NumInputs=0;      %输入信号的数目
sizes.DirFeedthrough=0; %设置系统为直通
sizes.NumSampleTimes=1; %必须为1
sys=simsizes(sizes);
str=[];
x0=[];
ts=[0,0];

注:str, x0, ts暂时也不知道含义,后续补充。

function sys=mdlOutputs(t, Amp, Freq, Phase)
sys=Amp*sin(2*pi*Freq*t+Phase);%方程的形式

在simulink的操作

最后

以上就是彩色月亮为你收集整理的S函数笔记的全部内容,希望文章能够帮你解决S函数笔记所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部