控制系统仿真实验一报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一经典的连续系统仿真建模方法
一实验目的
1.了解和掌握利用仿真技术对控制系统进行分析的原理和步骤。
2.掌握机理分析建模方法。
3.深入理解一阶常微分方程组数值积分解法的原理和程序结构,学习用Matlab 编写
数值积分法仿真程序。
4.掌握和理解四阶Runge-Kutta 法,加深理解仿真步长与算法稳定性的关系。
二实验内容
1. 编写四阶Runge_Kutta 公式的计算程序,对非线性模型(3)式进行仿真。(1)将阀位u 增大10%和减小10%,观察响应曲线的形状;
u=0.45时的图像:
u=0.55
01002003004005006007008009001000 1.25
1.3
1.35
1.4
1.45
1.5
开大或关小阀位之后,稳态值会相应的从原液位上升或下降,这是符合实际的。
(2) 研究仿真步长对稳定性的影响,仿真步长取多大时RK4 算法变得不稳定? 由(1)可知,当步长为40时,仿真结果是稳定的 当步长为80时的图像
01002003004005006007008009001000
1.35
1.4
1.45
1.5
1.55
1.6
1.65
1.7
1
2
3
4
5
6
7
h (1,1)的数值稳定,但是并不是实际求得的稳态值。h (1,2)的值显然发散。 进一步取小步长,取hstep=42时,图像出现偏差,但是稳态值不变
Hstep=65时,图像偏差明显
0200400600800100012001400160018002000
-140
-120-100-80-60-40-200
20020040060080010001200
1.35
1.41.451.51.551.61.651.7
1.75
而hsetp=65.7时,图像就发散了
(3) 利用 MATLAB 中的ode45()函数进行求解,比较与(1)中的仿真结果有何区别。 Ode45调用的函数:
function [dh]=daoshu(t,x)
020040060080010001200140016001800
0.5
1
1.5
2
2.5
3
020040060080010001200140016001800
-25
-20
-15
-10
-5
5
u(1)=0.4;%此处可以修改阀位
dh=zeros(2,1);
u(2)=0.15;
A=2;
ku=0.1/0.5;
alpha12 = 0.25/sqrt(1.5);
alpha2 = 0.25/sqrt(1.4);
dh(1,1)=(ku*(u(1))+u(2)-alpha12*sqrt(x(1,1)))/A;
dh(2,1)=(alpha12*sqrt(x(1,1))-alpha2*sqrt(x(2,1)))/A;
end
在主程序中添加ode45的算法:
[T,Y]=ode45('daoshu',[0,1000],[1.5,1.4]);
figure(1)
plot(T,Y)
hold on
plot([0:hStep:nCounter*hStep]',Hlevel)
grid
将ode45与编写的龙格库塔算法画到同一个坐标系中(点表示ode45):
01002003004005006007008009001000
可以发现,ode45更快达到稳定值,实际上,在缩小了编写算法中的步长后,两种算法的曲线基本重合,说明ode45的精度很高:
01002003004005006007008009001000 2. 编写四阶Runge_Kutta 公式的计算程序,对线性状态方程(18)式进行仿真
(1)将阀位增大10%和减小10%,观察响应曲线的形状;
增大10%,令u(1)=0.05
令u(1)=-0.05
(2) 研究仿真步长对稳定性的影响,仿真步长取多大时RK4 算法变得不稳定?
方法同上,大约在hstep=61时就不稳定了
(3) 阀位增大10%和减小10%,利用MATLAB 中的ode45()函数进行求解阶跃响
050100150200250
1.35
1.4
1.45
1.5
1.55
1.6
1.65
1.7
050100150200250
1.25
1.3
1.35
1.4
1.45
1.5
减小10%(实线为编写算法,点为龙格库塔法):
050100150200250增大10%:
050100150200250程序实现:
调用微分函数:
function [dh] = dx( t,x )
%DX 被ode45调用的微分方程函数
u=zeros(2,1);
u(1)=0.05; %此处可以修改阀位
u(2)=0;
A=2;
ku=0.1/0.5;
alpha12 = 0.25/sqrt(1.5);
alpha2 = 0.25/sqrt(1.4);
R12=2*sqrt(1.5)/alpha12;
R2=2*sqrt(1.4)/alpha2;
AMTRIX = [-1/(A*R12) 0;1/(A*R12) -1/(A*R2)];
BMATRIX = [ku/A 1/A;0 0];
dh=AMTRIX*x+BMATRIX*u;
end
主程序中添加:
[T,Y]=ode45('dx',[0,250],[0,0]);
Y(:,1)=Y(:,1)+1.5
Y(:,2)=Y(:,2)+1.4
figure(3)
plot(T,Y,'.')
hold on
plot([0:hStep:nCounter*hStep]',Hlevel)
grid
三实验报告
实验完成后,要写出实验报告,内容包括:
1.实验步骤及说明;
2.实验所用的仿真程序清单,以及程序结构的简单说明;
3.实验结果曲线及分析,稳态值是多少;
四思考题
1.讨论仿真步长对稳定性和仿真精度的影响。
一般来说,仿真步长越长,系统越倾向于不稳定,仿真步长越短,系统越稳定,但是需要的仿真时间越长。
2.你是怎样实现阀位增大和减小10%的?对于非线性模型和线性模型方法一样吗?
线性模型与非线性模型实际改变方式不一样。
线性模型中,由于采用的是增量化的方程,所以在修改时只需要修改增量,即0.05或-
0.05。
非线性模型中,采用的绝对量的方程,所以在修改时应该修改绝对量,即改为0.45或
0.55。
五实验总结
通过本次实验,熟悉了对matlab软件的使用,加深了对微分方程数值积分解法的理