MATLABSFunctionfor
DynamicSystemSimulation
8Jun16
1
Simulink SFunction
5892 Training
WherecanwegetthemfileofSfuntion?
C:\ProgramFiles\MATLAB\R2009b\toolbox\simulink\blocks
sfuntmpl.m
function [sys,x0,str,ts,simStateCompliance]=sfuntmpl(t,x,u,flag)
%SFUNTMPLGeneralMfileSfunctiontemplate
%WithMfileSfunctions,youcandefineyouownordinarydifferential
%equations(ODEs),discretesystemequations,and/orjustabout
%anytypeofalgorithmtobeusedwithinaSimulinkblockdiagram.
%
%ThegeneralformofanMFileSfunctionsyntaxis:
%[SYS,X0,STR,TS,SIMSTATECOMPLIANCE]=SFUNC(T,X,U,FLAG,P1,...,Pn)
%
%WhatisreturnedbySFUNCatagivenpointintime,T,dependsonthe
%valueoftheFLAG,thecurrentstatevector,X,andthecurrent
%inputvector,U.
Firstly,pleasecopythesfuntmpl.m filetoyourfolder!!
byDr.ChaoChungPeng
SimulinkSFunction
5892 Training
Thereare6mainfunctionsincludedintheSfunction
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
function sys=mdlDerivatives(t,x,u)
function sys=mdlUpdate(t,x,u)
function sys=mdlOutputs(t,x,u)
function sys=mdlGetTimeOfNextVarHit(t,x,u)
function sys=mdlTerminate(t,x,u)
Tosimulatecomplexsystemdynamicequation,onlytheabove
threefunctionsarerequired.
byDr.ChaoChungPeng
SimulinkSFunction
5892 Training
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
%=============================================================================
%mdlInitializeSizes
%Returnthesizes,initialconditions,andsampletimesfortheSfunction.
%=============================================================================
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
%callsimsizes forasizesstructure,fillitinandconvertittoa
%sizesarray.
%Notethatinthisexample,thevaluesarehardcoded.Thisisnota
%recommendedpracticeasthecharacteristicsoftheblockaretypically
%definedbytheSfunctionparameters.
sizes=simsizes;
sizes.NumContStates =0;
sizes.NumDiscStates =0;
sizes.NumOutputs =0;
sizes.NumInputs =0;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[];
byDr.ChaoChungPeng
SimulinkSFunction
5892 Training
function sys=mdlDerivatives(t,x,u)
%=============================================================================
%mdlDerivatives
%Returnthederivativesforthecontinuousstates.
%=============================================================================
function sys=mdlDerivatives(t,x,u)
sys=[];
%endmdlUpdate
Thedynamicequationsaregoingtobebuiltinthisfunction.
Yourcontrolalgorithm,analysismethod&otherprocessesare
putinthisfunctionaswell.
Ofcourse,onecanjustconsideropenloopsystemsandbuild
anotherSfunctiondedicatedforcontrolalgorithm.
byDr.ChaoChungPeng
SimulinkSFunction
5892 Training
function sys=mdlOutputs(t,x,u)
%=============================================================================
%mdlOutputs
%Returntheblockoutputs.
%=============================================================================
%
function sys=mdlOutputs(t,x,u)
sys=[];
%endmdlOutputs
Thisfunctionisusedtoreturnsystemstateresponse,output
responseandotherinterestinginformation.
byDr.ChaoChungPeng
CreateaSFunction
5892 Training
HowtointegratetheSfunctionintoMATLABSimulink
byDr.ChaoChungPeng
CreateaSFunction
5892 Training
CreateanewSimulinkfileanddragtheSfunctionblockto
yourSimulinkfile.
ChangetheSfunctionname.
Notethatthenamemustbeexactlythesamewiththename
ofSfunctionmfile.
byDr.ChaoChungPeng
CreateaSFunction
5892 Training
Moreover,wesuggestthatthefunctionnameintheSfunction
isequaltothefilename
function [sys,x0,str,ts,simStateCompliance]=sfuntmpl(t,x,u,flag)
%SFUNTMPLGeneralMfileSfunctiontemplate
%WithMfileSfunctions,youcandefineyouownordinarydifferential
%equations(ODEs),discretesystemequations,and/orjustabout
%anytypeofalgorithmtobeusedwithinaSimulinkblockdiagram.
function [sys,x0,str,ts,simStateCompliance]=My_System(t,x,u,flag)
%SFUNTMPLGeneralMfileSfunctiontemplate
%WithMfileSfunctions,youcandefineyouownordinarydifferential
%equations(ODEs),discretesystemequations,and/orjustabout
%anytypeofalgorithmtobeusedwithinaSimulinkblockdiagram.
byDr.ChaoChungPeng
CreateaSFunction
5892 Training
Dontforgettosetthepathtoyourfolder.
Thisisthefolderwhere
mysfunctionmfileislocated.
10
byDr.ChaoChungPeng
CreateaSFunction
5892 Training
NowtheSimulinkcanrecognizeyourMy_System.
NextrefertotheSimulationoptionandclickthe
ConfigurationParameters,wecanselecttheODEsolver.
11
byDr.ChaoChungPeng
CreateaSFunction
5892 Training
Thedefaultvaluesareshownasfollows
12
byDr.ChaoChungPeng
CreateaSFunction
5892 Training
Sometimesweprefertousefixedstepsandsolvedby
ode4(RungeKutta).
Meanwhile,thefixedstepsizeisusuallyequaltoorsmaller
than0.0001sectosimulatethecontinuoustimesystem.
13
byDr.ChaoChungPeng
CreateaSFunction
5892 Training
Sofartheinitialsettingisfinished.
TrytoclickRUNbuttontocheckifanyerroroccurs
Ifnoanymessageappears,congratulations!!!
14
byDr.ChaoChungPeng
SimulinkSFunction
5892 Training
Ifthefollowingmessagepopsout,itindicatesthefilepathis
notsetyet.SotheSimulinkcannotrecognizeMy_System.
15
byDr.ChaoChungPeng
SFunctionSignalGeneration
5892 Training
Letstryafirstrun:useaSfunctiontogeneratesingleinput
andsingleoutputframeworkandcompiletheSimulink.
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =0;
sizes.NumDiscStates =0;
sizes.NumOutputs =0;
sizes.NumInputs =0;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =0;
sizes.NumDiscStates =0;
sizes.NumOutputs =1;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
16
byDr.ChaoChungPeng
SFunctionSignalGeneration
5892 Training
Nowusethisframeworktogeneratea10Hzsinewave.
%==============================================================
%mdlOutputs
%Returntheblockoutputs.
%==============================================================
function sys=mdlOutputs(t,x,u)
%%...uistheinputfromsimulink
sys=sin(2*pi*u*t);
%endmdlOutputs
17
byDr.ChaoChungPeng
SFunctionSignalGeneration
18
byDr.ChaoChungPeng
5892 Training
Dynamics|1st OrderSystem
5892 Training
Nowconsidera1st orderdynamicequationsubjecttoazero
forceandinitialcondition
x ax au , a 5
x 0 0
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =1;
sizes.NumDiscStates =0;
sizes.NumOutputs =1;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[0];
function sys=mdlDerivatives(t,x,u)
a=5;
sys=a*x+a*u;
19
Number of state
defined in dynamic
equation
Initial value must be
given based on the
number of state
function sys=mdlOutputs(t,x,u)
%%...xisthe1storderstatedefinedin"functionsys=mdlDerivatives(t,x,u)"
sys=x;
byDr.ChaoChungPeng
Dynamics|1st OrderSystem
Thisinputissettobezero
20
byDr.ChaoChungPeng
5892 Training
Dynamics|1st OrderSystem
5892 Training
Consideragainthesamesystembutsubjecttoapulsetrain
andtheinitialconditionx(0)=1.
%initializetheinitialconditions
%
x0=[1];
NotethateverytimewhenmodifythecodeinSfunction,one
mustpresssave!
21
byDr.ChaoChungPeng
Dynamics|Standard2nd OrderSystem
5892 Training
Nowgenerateastandard2nd orderlineardynamicequation
subjecttostepinput
Y s
n2
2
U s s 2 2 n s n2
s
n2
1
2
x1 x2
2
2
x1 n x1 2 n x2 n u
s 1
function [sys,x0,str,ts,simStateCompliance]=Standard_2nd_Order_Dynamics(t,x,u,flag)
x1 0 0
x2 0 0
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =2;
sizes.NumDiscStates =0;
sizes.NumOutputs =2;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
function sys=mdlDerivatives(t,x,u)
%%...sys(1)=dx1/dt
%%...sys(2)=dx2/dt
zeta=0.3;
wn =20;
sys(1)=x(2);
sys(2)=wn^2*x(1) 2*zeta*wn*x(2)+wn^2*u;
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[0;0];
22
function sys=mdlOutputs(t,x,u)
sys=x;%itcanalsoberewrittenbysys=[x(1)x(2)]
byDr.ChaoChungPeng
Dynamics|Standard2nd OrderSystem
Theoutputisnowa2dimensionalvector
23
byDr.ChaoChungPeng
5892 Training
Dynamics|ServoMotor
5892 Training
Consideraservomotormechanicalequation:
m
dv
u Cmv Fc sign(v)
dt
friction
x
u
C
x
F
sign
(
x
)
2
2
2
m
c
friction
x1 0 0
x2 0 0
whereasinusoidinputforceu=sin(2*pi*3*t)isapplied.
24
byDr.ChaoChungPeng
Dynamics|ServoMotor
25
5892 Training
byDr.ChaoChungPeng
Dynamics|ServoMotor
5892 Training
SFunctionCode
function [sys,x0,str,ts,simStateCompliance]=Servo_Motor_Dynamics(t,x,u,flag)
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
function sys=mdlDerivatives(t,x,u)
%%...PendulumSystemParameters
sizes.NumContStates =2;
sizes.NumDiscStates =0;
sizes.NumOutputs =2;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
Cm=0.01;%%...viscousfriction(Nt/rad/sec)
Fc=0.5;%%...Coulumb friction(Nt)
M=1;%%...mass(Kg)
sys(1)=x(2);
sys(2)=1/M*(u (Cm*x(2)+Fc*sign(x(2))));
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[0;0];
26
function sys=mdlOutputs(t,x,u)
sys=x;%itcanalsoberewrittenbysys=[x(1)x(2)]
byDr.ChaoChungPeng
Dynamics|PendulumwithFriction
Apendulumsubjecttofriction
5892 Training
I mg sin f u
I m 2
f Fc sign
Let
mg
1 ; 1 2 ;2
1 2
g sin 1 F sign u
2
2
c
2
m 2
friction
Initialvaluesandinputare
1 0 0.1
2 0 0
u 0
27
byDr.ChaoChungPeng
Dynamics|PendulumwithFriction
5892 Training
function [sys,x0,str,ts,simStateCompliance]=Pendulum_Dynamics(t,x,u,flag)
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =2;
sizes.NumDiscStates =0;
sizes.NumOutputs =2;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[0.1;0];
function sys=mdlDerivatives(t,x,u)
%%...PendulumSystemParameters
g=9.8;%%...m/sec^2
l=0.1;%%...length(m)
sigma=0.001;%%...viscousfriction(Nt/rad/sec)
Fc=0.005;%%...Coulumb friction(Nt)
m=1;%%...mass(Kg)
sys(1)=x(2);
sys(2)=g/l*sin(x(1)) (1/m/l^2)*(sigma*x(2)+Fc*sign(x(2)))+(1/m/l^2)*u;
28
function sys=mdlOutputs(t,x,u)
sys=x;%itcanalsoberewrittenbysys=[x(1)x(2)]
byDr.ChaoChungPeng
Dynamics|ChuasChaoticDynamics
5892 Training
29
byDr.ChaoChungPeng
Dynamics|ChuasChaoticDynamics
30
byDr.ChaoChungPeng
5892 Training
Dynamics|ChuasChaoticDynamics
5892 Training
SFunctionCode
function sys=mdlDerivatives(t,x,u)
alpha=10;
beta=100/7;
U=u;
function [sys,x0,str,ts]=Chua_Dynamics(t,x,u,flag)
function [sys,x0,str,ts]=mdlInitializeSizes
sizes=simsizes;
sys(1)=alpha*(x(2)(2*x(1)^3x(1))/7);
sys(2)=x(1)x(2)+x(3);
sys(3)=beta*x(2)+U;
sizes.NumContStates =3;
sizes.NumDiscStates =0;
sizes.NumOutputs =3;
sizes.NumInputs =1;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
function sys=mdlOutputs(t,x,u)
sys=simsizes(sizes);
sys=[x(1);x(2);x(3)];
%initializetheinitialconditions
x0=[0.3;0;0];
31
byDr.ChaoChungPeng
Dynamics|ChuasChaoticDynamics
32
byDr.ChaoChungPeng
5892 Training
Dynamics|ChuasChaoticDynamics
Logdatainworkspace
33
byDr.ChaoChungPeng
5892 Training
Dynamics|ChuasChaoticDynamics
plot3(x1,x2,x3)
grid
xlabel('x1')
ylabel('x2')
zlabel('x3')
34
byDr.ChaoChungPeng
5892 Training
Dynamics|ThermalModel
5892 Training
A2nd orderheatingthermalmodel
byDr.ChaoChungPeng
Dynamics|ThermalModel
5892 Training
Sfunctioncode:
function [sys,x0,str,ts,simStateCompliance]=Thermal_Dynamics(t,x,u,flag)
%SFUNTMPLGeneralMfileSfunctiontemplate
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes=simsizes;
sizes.NumContStates =2;
sizes.NumDiscStates =0;
sizes.NumOutputs =2;
sizes.NumInputs =2;
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
function sys=mdlDerivatives(t,x,u)
Cc=0.001;
Cs=0.02;
Re=50;
Rc =1000;
Ru=1000;
Tc=x(1);
Ts =x(2);
U=u(1);
Tf =u(2);
sys(1)=U^2*Re/Cc+(TsTc)/(Rc*Cc);
sys(2)=(TfTs)/(Ru*Cs) (TsTc)/(Rc*Cs);
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[2525];
36
function sys=mdlOutputs(t,x,u)
sys=x;
byDr.ChaoChungPeng
Dynamics|ThermalModel
Simulationresultsareshownasfollows:
37
byDr.ChaoChungPeng
5892 Training
Dynamics|ThermalModel
Twostagesheating
dynamicresponse
38
byDr.ChaoChungPeng
5892 Training
PassParameterstoSFunction
5892 Training
Actually,theparametersappliedinaSfunctioncanbedefined
byanexternalmfile.
Forexample,acomplexdynamicssystem,thereareusuallya
fewsystemparameters.Underthissituation,wesuggestto
organizetheseparametersbyusinganexternalmfile.
Themfileisfirstlycompiledandthenpassthoseparameters
toSimulinkSfunction.
clearall
Cc=0.001;
Cs=0.02;
Re=50;
Rc =1000;
Ru=1000;
39
byDr.ChaoChungPeng
PassParameterstoSFunction
5892 Training
Sfunctionparametersmustbesetfordataconnection!!
40
byDr.ChaoChungPeng
PassParameterstoSFunction
5892 Training
Sfunctioncode:
function [sys,x0,str,ts,simStateCompliance]=Thermal_Dynamics_Para(t,x,u,flag,Cc,Cs,Re,Rc,Ru)
%SFUNTMPLGeneralMfileSfunctiontemplate
switch flag,
%Initialization%
case 0,
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
%Derivatives%
case 1,
sys=mdlDerivatives(t,x,u,Cc,Cs,Re,Rc,Ru);
%Update%
case 2,
sys=mdlUpdate(t,x,u);
%Outputs%
case 3,
sys=mdlOutputs(t,x,u,Cc,Cs,Re,Rc,Ru);
%GetTimeOfNextVarHit %
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
%Terminate%
case 9,
sys=mdlTerminate(t,x,u);
%Unexpectedflags%
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag',num2str(flag));
end
41
function sys=mdlDerivatives(t,x,u,Cc,Cs,Re,Rc,Ru)
%theparametersarenowimportedviamfile
Tc=x(1);
Ts =x(2);
U=u(1);
Tf =u(2);
sys(1)=U^2*Re/Cc+(TsTc)/(Rc*Cc);
sys(2)=(TfTs)/(Ru*Cs) (TsTc)/(Rc*Cs);
function sys=mdlOutputs(t,x,u,Cc,Cs,Re,Rc,Ru)
sys=x;
clearall
Cc=0.001;
Cs=0.02;
Re=50;
Rc =1000;
Ru=1000;
byDr.ChaoChungPeng
ComplexDynamicsCodingStyle
5892 Training
Considerahigherorderlinearsystem
x A A x B B u Dd
y Cx
where,,and.
A n n B n m
C p n
D n m
Allthematricesneedtoberealizedinthesimulation
A=[
environment.
0.52021.51161.70731.60370.42132.62085.3981
ConsideraMIMOlinearsystem:
n=7(state),m=3(input),p=4(output)
0.88220.46070.18551.69070.40530.89291.5599
3.0000001.00001.00001.00002.0000
01.00001.0000002.00004.0000
0.85551.86751.30720.63820.06481.29432.6696
3.17282.96161.06353.22040.56810.96261.5332
0.21750.18340.21460.27470.04890.21940.2883];
B=[102;010;000;000;111;101;001];
C=[1001001;0100011;0000100;0100111];
[NN,MM]=size(B);
[PP,NN]=size(C);
dA=randn(NN,NN);
dB=randn(NN,MM);
dC=randn(PP,NN);
42
byDr.ChaoChungPeng
ComplexDynamicsCodingStyle
5892 Training
Becarefulabouttheinputoutputchannelmappingdefinedin
theSFunction.
x
u(1:3)
u(4:6)
43
byDr.ChaoChungPeng
ComplexDynamicsCodingStyle
5892 Training
Toavoidtediouscodingprocedure,hereappliesastraight
forwardformulationinSFunction
function [sys,x0,str,ts,simStateCompliance]=Complex_Dynamics(t,x,u,flag)
%SFUNTMPLGeneralMfileSfunctiontemplate
x A A x B B u Dd
y Cx
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
A n n
sizes=simsizes;
sizes.NumContStates =7;
sizes.NumDiscStates =0;
sizes.NumOutputs =14;%7forsystemstate&4forsystemoutput&3fordisturbance
sizes.NumInputs =6;%3forcontrolinput&3forexternaldisturbance
sizes.DirFeedthrough =1;
sizes.NumSampleTimes =1;%atleastonesampletimeisneeded
sys=simsizes(sizes);
%initializetheinitialconditions
x0=[1;2;3;4;5;6;7];
44
byDr.ChaoChungPeng
B n m
C p n
D n m
ComplexDynamicsCodingStyle
function sys=mdlDerivatives(t,x,u)
%%...systemmatrices
A=[0.52021.51161.70731.60370.42132.62085.3981
0.88220.46070.18551.69070.40530.89291.5599
3.0000001.00001.00001.00002.0000
01.00001.0000002.00004.0000
0.85551.86751.30720.63820.06481.29432.6696
3.17282.96161.06353.22040.56810.96261.5332
0.21750.18340.21460.27470.04890.21940.2883];
B=[102;010;000;000;111;101;001];
C=[1001001;0100011;0000100;0100111];
D=[001;010;000;000;101;101;001];
[NN,MM]=size(B);
[PP,NN]=size(C);
randn('seed',1);
dA =randn(NN,NN);
dB=randn(NN,MM);
dC =randn(PP,NN);
%%...decomposetheuvectorintocontrolinput&disturbance
U=u(1:3);
d=u(4:6);
dotX=(A+dA)*x+(B+dB)*U+D*d;
function sys=mdlOutputs(t,x,u)
%%...thesystemmustbegiveninthissectionagain
C=[1001001;0100011;0000100;0100111];
y=C*x;
d=u(4:6);
sys=[x;y;d];%%stateoutputdisturbance
sys(1)=dotX(1);
sys(2)=dotX(2);
sys(3)=dotX(3);
sys(4)=dotX(4);
sys(5)=dotX(5);
sys(6)=dotX(6);
sys(7)=dotX(7);
45
5892 Training
byDr.ChaoChungPeng
Homework
Findtwophysical(nonlinear)systemsandfinishtheopenloop
dynamicsimulations.Pleasefollowthetemplate~
5892 Training
FolderFormat:Model_SysName
SFunFormat:SysName_Dynamics
SimulinkFormat:SysName_Dynamics_Simulation
Alsoincludetherelevantreferences.
BasedonthestructureofSFunction,complicatemodel
simulationssuchasrobotics andquadrotorscanbeeasily
achieved.
46
byDr.ChaoChungPeng