1.MATLAB中S函数为:
function [sys,x0,str,ts]=chap_plant(t,x,u,flag)
switch flag
case 0
[sys,x0,str,ts]=mdlInitializeSizes;
case 1
sys=mdlDerivatives(t,x,u);
case 3
sys=mdlOutputs(t,x,u);
case {2, 4, 9 }
sys = [];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
flag=0,是初始化子程序
如果调用mdlDerivatives,则在初始话子程序需要进行如下设置
如:
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 4; %连续状态变量个数
sizes.NumDiscStates = 0; %离散状态变量个数
sizes.NumOutputs = 4; %输出个数
sizes.NumInputs = 4; %输入个数
sizes.DirFeedthrough = 1; %输入与输出存在直接馈通关系则设置为1,某则为0
sizes.NumSampleTimes = 0; %采用时间
sys=simsizes(sizes);
x0=[0.1 0.1 0.1 0.1]; %初始状态变量(注意:该位置的状态变量与连续状态变量个数和离散状态变量个数相关
str=[];
ts=[]; %周期变量,离散系统[0 0] 连续系统[-1 0]
初始的状态变量为在0时刻初始状态的变量;
flag=1,是便是mdlDerivatives(状态变量微分)
function sys=mdlDerivatives(t,x,u)
q1=x(1);q2=x(2);q3=x(3);q4=x(4);
qdd=A*C*[q1;q2;q3;q4];
sys(1)=x(2);
sys(2)=qdd(1,1);
sys(3)=x(4);
sys(4)=qdd2,1);
对求解的qdd进行积分得到x(2)和x(4);对x(2)和x(4)进行积分得到x(1)和x(2);
function sys=mdlOutputs(t,x,u)
sys(1)=x(1);
sys(2)=x(2);
sys(3)=x(3);
sys(4)=x(4);
flag=3为输出函数。输出x(1);x(2);x(3);x(4);
上述为mdlDerivatives(状态变量微分)的使用.
改函数常用于有反馈的力矩等量的控制。