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 弹簧-阻尼系统

假设初始条件为:00t时,将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)()()(2sssFsXsG

%用传递函数编程求解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)];