function [sys,x0,str,ts]=smc(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case {2, 4, 9 }
sys = [];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 2;
sizes.NumInputs = 4;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 0;
sys=simsizes(sizes);
x0=[ ] ;
str=[];
ts=[];
function sys=mdlDerivatives(t,x,u)
sys=[];
function sys=mdlOutputs(t,x,u)
%g=9.8; M=1.0; m=0.5; L=0.1; miu=0.0; d =0.2;
g=9.8; M=1.0; m=0.25; L=0.1; miu=0.0; d =0.2;
c1 = 0.75; c2 =0.4; c3 = 2.5;k1 =0.13; k2 =0.5;%参数一,最终选择
%c1 = 0.75; c2 =0.9; c3 = 2.5;k1 =0.13; k2 =0.9;%参数二,存在抖振
x1 = u(1);
dx1 = u(2);
theta = u(3);
dtheta = u(4);
xd =2;%更改小车期望值xd = 2
f1 = ( m*g*L*sin(theta)*cos(theta) +m*L^2*dtheta^2*sin(theta) +d*dtheta*cos(theta) -L*miu*dx1 )/...
( M*L+m*L*sin(theta)*sin(theta));
g1 = 1/(M +m*sin(theta)*sin(theta));
f2 = -((m+M)*m*g*L*sin(theta) +m^2*L^2*dtheta^2*sin(theta)*cos(theta) +(m+M)*d*dtheta -m*L*miu*dx1*cos(theta) )/...
(m*M*L^2+m^2*L^2*sin(theta)*sin(theta));
g2 = -cos(theta)/(M*L +m*L*sin(theta)*sin(theta));
f3 = c1*f1-c2*f2;
g3 = c1*g1 - c2*g2;
e = x1 -xd;
de = dx1;
z = c1*e -c2*theta;
dz = c1*de -c2*dtheta;
s = dz +c3*z;
F = (-f3 -c3*(c1*dx1-c2*dtheta) -k1*s-k2*sat(s,0.001))/g3;
sys = [F,s];