MATLAB微分方程几种求解方法及程序
- 格式:doc
- 大小:49.00 KB
- 文档页数:6
第五章 控制系统仿真
§5.2 微分方程求解方法
以一个自由振动系统实例为例进行讨论。
如下图1所示弹簧-阻尼系统,参数如下:
M=5 kg, b=1 N.s/m, k=2 N/m, F=1N
x
b
M F
k
图1 弹簧-阻尼系统
假设初始条件为:00t时,将m拉向右方,忽略小车的摩擦阻力,mx0)0( smx/0)0(• 求系统的响应。
)用常微分方程的数值求解函数求解包括ode45、ode23、ode113、ode15s、ode23s等。
wffc1.m myfun1.m
一、常微分方程的数值求解函数ode45求解
解:系统方程为 Fkxxbxm•••
这是一个单变量二阶常微分方程。 将上式写成一个一阶方程组的形式,这是函数ode45调用规定的格式。
令: xx)1( (位移)
)1()2(••xxx (速度)
上式可表示成:
••)1(*20)2(*101)2()2()2()1(xxxxxxx
下面就可以进行程序的编制。
%写出函数文件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:
Fkxxbxm•••
251)()()(2sssFsXsG
%用传递函数编程求解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: Fkxxbxm•••
125•••xxx
xxx4.02.02.0•••
x''x'xu(t)x_tTo WorkspaceScope1sInt21sInt10.2Gs0.4G20.2G1Clock
% 主程序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)];