第五章 控制系统仿真 §5.2 微分方程求解方法
以一个自由振动系统实例为例进行讨论。 如下图1所示弹簧-阻尼系统,参数如下: M=5 kg, b=1 N.s/m, k=2 N/m, F=1N
x b M F k 图1 弹簧-阻尼系统
假设初始条件为:t00时,将m拉向右方,忽略小车的摩擦阻力,x(0)0m x(0)0m/s 求系统的响应。
)用常微分方程的数值求解函数求解包括ode45、
ode23、ode113、ode15s、ode23s等。 wffc1.m myfun1.m
一、常微分方程的数值求解函数ode45求解 解:系统方程为 mxbxkxF 这是一个单变量二阶常微分方程。
••••将上式写成一个一阶方程组的形式,这是函数ode45调用规定的格式。
令: x(1)x (位移)
x(2)xx(1) (速度)
••上式可表示成:
•x(2)x(2)x(1)• x110*x(2)20*x(1)x(2)下面就可以进行程序的编制。
%写出函数文件myfun1.m function xdot=myfun1(t,x)
xdot=[x(2);1-10*x(2)-20*x(1)];
% 主程序wffc1.m t=[0 30]; x0=[0;0];
[tt,xx]=ode45(@myfun1,t,x0);
plot(tt,yy(:,1),':b',tt,yy(:,2),'-r') legend('位移','速度')
title('微分方程的解 x(t)')
二、方法2:
mxbxkxF
X(s)1G(s)2F(s)5ss2
%用传递函数编程求解ksys1.m num=1;
den=[5 1 2];
%printsys(num,den) %t=0:0.1:10; sys=tf(num,den); figure(1) step(sys) figure(2) impulse(sys) figure(3)
t=[0:0.1:10]'; ramp=t;
lsim(sys,ramp,t); figure(4) tt=size(t);
•••noise=rand(tt,1); lsim(sys,noise,t) figure(5) yy=0.1*t.^2;
lsim(num,den,yy,t)
w=logspace(-1,1,100)'; [m p]=bode(num,den,w); figure(6)
subplot(211);semilogx(w,20*log10(m)); grid on
subplot(212);semilogx(w,p) grid on
[gm,pm,wpc,wgc]=margin(sys) figure(7) margin(sys) figure(8) nyquist(sys) figure(9) nichols(sys)
方法3:
mxbxkxF 5xx2x1 x0.20.2x0.4x
Int10.2u(t)Gs0.2G1x''1sx'Int21sxScopeG20.4x_tClockTo Workspace•••••••••
% 主程序wffc1.m t=[0 30]; x0=[0;0];
[tt,yy]=ode45(@myfun1,t,x0); figure(1)
plot(tt,yy(:,1),':b',tt,yy(:,2),'-r') hold on
plot(tt,0.2-0.2*yy(:,2)-0.4*yy(:,1),'-.k')
legend('位移','速度','加速度') title('微分方程的解')
figure(2)
plot(yy(:,1),yy(:,2)) title('平面相轨迹')
%写出函数文件myfun1.m function xdot=myfun1(t,x)
xdot=[x(2);0.2-0.2*x(2)-0.4*x(1)];