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;