www.gusucode.com > 二级倒立摆的建模及仿真simulink源码程序 > code/dlbmx.m

    function [sys,x0,str,ts]=dlbmx(t,x,u,flag)

A=[0 0 0 1.0000 0 0;
   0 0 0 0 1.0000 0;
   0 0 0 0  0 1.0000;
   0 -2.5147 0.1819 -15.7473 0.0120 -0.0056;
   0 32.3198 -17.6722 28.1980 -0.2223 0.1937;
   0 -50.3025 76.4870 -29.6917 0.5639 -0.6890];
B=[0;
   0;
   0;
   8.1688;
  -14.6275;
   15.4024];
C=[1 0 0 0 0 0;
   0 1 0 0 0 0;
   0 0 1 0 0 0];

switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes(A,B,C);
case 1,
sys=mdlDerivatives(t,x,u,A,B,C);
case 3,
sys=mdlOutputs(t,x,u,A,B,C);
case 2;
sys=[];
    case 4;
        sys=[];
    case 9;
        sys=[];
otherwise 
error(['Unhandled flag=',num2str(flag)]);
end

function [sys,x0,str,ts]=mdlInitializeSizes(A,B,C)
sizes=simsizes;
sizes.NumContStates=6;
sizes.NumDiscStates=0;
sizes.NumOutputs=3;
sizes.NumInputs=1;
sizes.DirFeedthrough=0;
sizes.NumSampleTimes=1;

sys=simsizes(sizes);
x0=[0 (15/180)*3.1416 (10/180)*3.1416 0 0 0];
str=[];
ts=[-1 0];

function sys=mdlDerivatives(t,x,u,A,B,C)
sys=A*x+B*u;

function sys=mdlOutputs(t,x,u,A,B,C)
sys=C*x;