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;