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

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

A=[1 -0.001682 0.001741 0.06073 0 0;
    0 0.7493 -0.3947 0.2494 0.1802 -0.02049;
    0 1.336 2.731 -0.2601 0.09551 0.2925;
    0 -0.007999 0.01679 0.04079 -0.000909 0.001342;
    0 -3.057 -4.611 1.76 0.7007 -0.3471;
    0 15.73 20.23 -1.896 1.477 2.55]
B=[0.07224;
   -0.1294;
  0.1349;
   0.4976;
 -0.913;
   0.9836;
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;