资源描述
? 计 算 机 仿 真?
上 机 实 验 报 告
姓名:
学号:
专业: 测控技术与仪器
班级: 121班
实验一 常微分方程的求解及系统数学模型的转换
一.实验目的
通过实验熟悉计算机仿真中常用到的Matlab指令的使用方法,掌握常微分方程求解指令和模型表示及转换指令,为进一步从事有关仿真设计和研究工作打下根底。
二. 实验设备
个人计算机,Matlab软件。
三. 实验准备
预习本实验有关内容〔如教材第2、3、5章中的相应指令说明和例题〕,编写本次仿真练习题的相应程序。
四. 实验内容
1. Matlab中常微分方程求解指令的使用
题目一:请用MATLAB的ODE45算法分别求解以下二个方程。要求:1.编写出Matlab仿真程序;2.画出方程解的图形并对图形进展简要分析;3.分析以下二个方程的关系。
1. 2.
1、 仿真程序
function f1=f1(t,x)
f1=-x^2;
[t,x]=ode45('f1',[0,20],[1]);
plot(t,x);
grid
function f2=f2(t,x)
f2=x^2;
[t,x]=ode45('f2',[0,20],[-1]);
figure (2);plot(t,x);
grid
3.二个方程的关系
两函数关于X轴对称
题目二:下面方程组用在人口动力学中,可以表达为单一化的捕食者-被捕食者模式〔例如,狐狸和兔子〕。其中表示被捕食者, 表示捕食者。如果被捕食者有无限的食物,并且不会出现捕食者。于是有,那么这个式子是以指数形式增长的。大量的被捕食者将会使捕食者的数量增长;同样,越来越少的捕食者会使被捕食者的数量增长。而且,人口数量也会增长。请分别调用ODE45、ODE23算法求解下面方程组。要求编写出Matlab仿真程序、画出方程组解的图形并对图形进展分析和比拟。
MATLAB仿真程序:
function f3=f3(t,x)
f3=[x(1)-0.1*x(1)*x(2)+0.01*t ;-x(2)+0.02*x(1)*x(2)+0.04*t]
[t,x]=ode45('f3',[0,20],[30;20]);
plot(t,x);
grid
方程组图形:
2. Matlab中模型表示及模型转换指令的使用
题目三:假设给定系统的的传递函数为
请用MATLAB编程求解其系统的极零点模型。
MATLAB仿真程序:
num=[6 12 6 10];
den=[1 2 3 1 1];
sys=zpk(num,den,k)
程序运行结果:
的对角标准型
MATLAB仿真程序:
num=[1 4 5];
den=conv([1 0],[1 5 6]);
sys=tf(num,den);
canon(sys,'modal')
程序仿真结果:
MATLAB仿真程序:
dnum=[1,0 ];
dden=[1 -0.3 0.02];
sys1=tf(dnum,dden,0.02)
sys2=d2d(sys1,0.1)
程序仿真结果:
五.总结与体会
通过此次试验,我更加熟悉和了解MATLAB软件,加深了编写MATLAB程序的能力,也认识了MATLAB中更多的使用工具,深化了各种模型之间的转换知识,也加深了对各种数学模型的表达的认知。熟悉了计算机仿真中常用到的Matlab指令的使用方法,掌握了常微分方程求解指令和模型表示及转换指令,为进一步从事有关仿真设计和研究工作打下了根底。
实验二 Matlab优化工具箱的使用
一.实验目的
通过上机操作熟悉Matlab优化工具箱的主要功能及其使用方法,掌握优化工具箱中常用函数的功能和语法,并利用其进展极值运算、求解线性和非线性问题等,为进一步的仿真设计和研究打下根底。
二. 实验设备
个人计算机,Matlab软件。
三. 实验准备
预习本实验有关内容〔如教材第6章中的相应指令说明和例题〕,编写本次仿真练习题的相应程序。
四. 实验内容
1. 应用Matlab优化工具箱求解优化问题
例题6.6~6.10,选做2题,要求自行修改方程系数,并比拟运行结果。
例6.6 例如我们希望求解非线性方程:初始值为x0 = [-5 -5]
MATTLAB仿真程序:
function F = myfun(x)
F = [2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))];
x0 = [-5; -5];
options=optimset('Display','iter');
[x,fval] = fsolve(@myfun,x0,options)
修改方程参数后的非线性方程为
-x1+2x2=e-x1
2x1-x2=e-x2
初始值为x0=[-5 -5]
MATLAB仿真程序:
function F = myfun(x)
F = [-x(1) +2x(2) - exp(-x(1)); 2x(1) -x(2) - exp(-x(2))];
x0 = [-5; -5];
options=optimset('Display','iter');
[x,fval] = fsolve(@myfun,x0,options)
程序仿真结果:
例6.7 利用Matlab语言求解以下线性规划问题
MATLAB仿真程序:
f=[-2 -1 3 -5]';
A=[1 2 4 -1; 2 3 -1 1; 1 0 1 1; -1 0 0 0; 0 -1 0 0; 0 0 -1 0; 0 0 0 -1];
b=[6 12 4 0 0 0 0]';
X=linprog(f,A,b)
f'*X
程序仿真结果:
修改方程参数后的线性规划问题为
min 3x1+5x2-2x3+x4
s.t. -4x1-3x2-x3+4x4<=4
3x1-2x2+x3-2x4<=8
x1-2x2+3x3<=5
x1,x2,x3,x4>=0
MATLAB仿真程序:
f=[3 5 -2 1]';
A=[-4 -3 -1 4;3 -2 1 -2; 1 -2 3 0; -1 0 0 0; 0 -1 0 0; 0 0 -1 0; 0 0 0 -1];
b=[4 8 5 0 0 0 0]';
X=linprog(f,A,b)
f'*X
程序仿真结果:
2. 应用Matlab优化工具箱求解极值问题
函数f(x)=10*exp(-x)*cos(x) ,求函数的极值。
〔1〕x∈[2,5]时,求函数的最小值,并画出函数的曲线。
〔2〕x∈[3,9]时,求函数的最大值,并画出函数的曲线。
(1) MATLAB仿真程序:
f=’10*exp(-x)*cos(x)’;
[x,fmin]=fminbnd(f,2,5),
fplot('10*exp(-x)*cos(x)',[2 5])
程序仿真结果:
(1) MATLAB仿真程序:
f='-10*exp(-x)*cos(x)';
[x,f]=fminbnd(f,3,9),
fplot('10*exp(-x)*cos(x)',[3 9]),
fmax=-f
程序仿真结果:
五.总结与体会
通过此次试验,进一步加深了我对MATLAB的了解,是我对MATLAB更加应用自如,在此次试验中,我学会了对各种数学模型的仿真和对图形的分析。熟悉了Matlab优化工具箱的主要功能及其使用方法,掌握了优化工具箱中常用函数的功能和语法。在实验中也遇到很多困难,我都会在help中去找解决方法,或者请教同学。
实验三 利用Matlab和Simulink进展系统仿真设计
一.实验目的
通过实验对一个汽车运动控制系统进展实际设计与仿真,掌握控制系统性能的分析和仿真处理过程,熟悉用Matlab和Simulink进展系统仿真的根本方法。
二. 实验设备
个人计算机,Matlab软件。
三. 实验准备
预习本实验相关说明,复习PID控制器的原理和作用,明确汽车运动控制系统问题的描述及其模型表示,编写本次仿真练习的相应程序。
四. 实验说明
本实验是对一个汽车运动控制系统进展实际设计与仿真,其方法是先对汽车运动控制系统进展建摸,然后对其进展PID控制器的设计,建立了汽车运动控制系统的模型后,可采用Matlab和Simulink对控制系统进展仿真设计。
注意:设计系统的控制器之前要观察该系统的开环阶跃响应,采用阶跃响应函数step( )来实现,如果系统不能满足所要求到达的设计性能指标,需要加上适宜的控制器。然后再按照仿真结果进展PID控制器参数的调整,使控制器能够满足系统设计所要求到达的性能指标。
五. 实验内容
1. 问题的描述
如以下图所示的汽车运动控制系统,设该系统中汽车车轮的转动惯量可以忽略不计,并且假定汽车受到的摩擦阻力大小与汽车的运动速度成正比,摩擦阻力的方向与汽车运动的方向相反,这样,该汽车运动控制系统可简化为一个简单的质量阻尼系统。
根据牛顿运动定律,质量阻尼系统的动态数学模型可表示为:
系统的参数设定为:汽车质量m=1000kg,
比例系数b=50 N·s/m,
汽车的驱动力u=500 N。
根据控制系统的设计要求,当汽车的驱动力为500N时,汽车将在5秒内到达10m/s的最大速度。由于该系统为简单的运动控制系统,因此将系统设计成10%的最大超调量和2%的稳态误差。这样,该汽车运动控制系统的性能指标可以设定为:
上升时间:tr<5s;
最大超调量:σ%<10%;
稳态误差:essp<2%。
2.系统的模型表示
假定系统的初始条件为零,那么该系统的Laplace变换式为:
即
那么该系统的传递函数为:
如果用Matlab语言表示该系统的传递函数模型,相应的程序代码如下:
num=1;den=[1000 50];
G=tf(num,den)
同时,系统的数学模型也可写成如下的状态方程形式:
如果用Matlab语言表示该系统状态空间模型,相应的程序代码如下:
m=1000;b=50;u=500;
num=[1];den=[m,b];
sys=tf(num,den);
a=(-b)/m;b=1/m;c=1;d=0;
sys=ss(a,b,c,d);
step(sys,0:0.1:200),grid on
3. 系统的仿真设计
● 利用Matlab进展仿真设计
I.求系统的开环阶跃响应
在Matlab命令窗口输入相应的程序代码,得出该系统的模型后,接着输入下面的指令:
step(u*sys)
可得到该系统的开环阶跃响应曲线,如以下图所示:
从图上可看出该系统不能满足系统设计所要求到达的性能指标,需要加上适宜的控制器。
II.PID控制器的设计
PID控制器的传递函数为:
在PID控制中,比例〔P〕、积分〔I〕、微分〔D〕这三种控制所起的作用是不同的〔请注意在实验总结中进展归纳〕。下面分别讨论其设计过程。
〔1〕比例〔P〕控制器的设计
增加比例控制器之后闭环系统的传递函数为:
由于比例控制器可以改变系统的上升时间,现在假定Kp=100,观察一下系统的阶跃响应。在MATLAB命令窗口输入指令:
kp=100;m=1000;b=50;u=500;
num=[kp];den=[m,b+kp];
t=0:0.01:60;
step(u*num,den,t),grid on
可得系统阶跃响应如下:
由此仿真结果,分析系统的稳态值是否满足设计要求,系统的稳态误差和上升时间能不能满足设计要求?
答:不能满足要求
假设减小汽车的驱动力为10N,重新进展仿真,仿真结果为:
kp=100;m=1000;b=50;u=10;
num=[kp];den=[m,b+kp];
step(u*num,den,0:0.01:60),grid on
如果所设计的比例控制器仍不能满足系统的稳态误差和上升时间的设计要求,那么可以通过提高控制器的比例增益系数来改善系统的输出。例如把比例增益系数Kp从100提高到10000重新计算该系统的阶跃响应,结果为:
kp=10000;m=1000;b=50;u=10;
num=[kp];den=[m,b+kp];
step(u*num,den,0:0.01:1),grid on
此时系统的稳态误差接近为零,系统上升时间也降到了0.5s以下。这样做虽然满足了系统性能要求,但实际上该控制过程在现实中难以实现。因此,引入比例积分〔PI〕控制器来对系统进展调节。
〔2〕比例积分〔PI〕控制器的设计
采用比例积分控制的系统闭环传递函数可表示为:
增加积分环节的目的是减小系统的稳态误差,假设比例系数Kp=600,积分系数KI=1,编写相应的MATLAB程序代码如下:
kp=600;ki=1;m=1000;b=50;u=10;
num=[kp ki];den=[m,b+kp,ki];
step(u*num,den,0:0.01:20),grid on
运行上述程序后可得系统阶跃响应曲线为:
可以调节控制器的比例和积分系数来满足系统的性能要求。例如选择比例系数KP=800,积分系数KI =40时,可得系统阶跃响应曲线为:
kp=800;ki=40;m=1000;b=50;u=10;
num=[kp ki];den=[m,b+kp,ki];
step(u*num,den,0:0.01:20),grid on
可见,此时的控制系统已经能够满足系统要求到达的性能指标设计要求。但此控制器无微分项,而对于有些实际控制系统往往需要设计完整的PID控制器,以便同时满足系统的动态和稳态性能要求。
〔3〕比例积分微分〔PID〕控制器的设计
采用PID控制的系统闭环传递函数为:
假设该控制器的比例系数KP=1,积分系数KI =1,微分系数KD=1,编写MATLAB程序代码如下:
kp=1200;ki=50;kd=10;m=1000;b=50;u=10;
num=[kd kp ki];den=[m+kd,b+kp,ki];
step(u*num,den,0:0.01:10),grid on
运行上述程序,并且调整PID控制器的控制参数,直到控制器满足系统设计的性能指标要求为止。
最后,选择KP=1200,KI =50,KD=10,此时系统的阶跃响应曲线如下:
从图中可以看出该系统能够满足设计的总体性能要求。
● 利用Simulink进展仿真设计
I.求系统的开环阶跃响应
利用Simulink建立系统阶跃响应模型,如以下图所示。双击Step模块,设置模块属性:跳变时间为0;初始值为0;终止值为10;采样时间为0。
单击◢按钮开场仿真,双击Scope模块,可得系统阶跃响应曲线。
分析此时系统的性能指标是否满足设计要求?假设不能那么应加上适宜的控制器。
答:此时系统性能指标仍不能满足设计要求
II.PID控制器的设计
在Simulink的模型窗口建立一个包含PID控制器的闭环系统阶跃响应模型,如下图:
当KP=300KI=1KD=1时系统的阶跃响应曲线为
当Kp=500 Ki=20 Kd=10时 系统的阶跃响应曲线为
当KP=3000KI=700KD=1时系统的阶跃响应曲线为
分别双击Kp、Ki、Kd模块设定比例、积分、微分系数,点击◢按钮开场仿真,双击Scope模块,观察系统的阶跃响应曲线,直到满足要求为止。
最终选取KP= 10000 ,KI= 500 ,KD= 10 ,此时控制器能满足系统设计所要求到达的性能指标,Simulink仿真的汽车运动PID控制系统的阶跃响应曲线如下:
六.总结与体会
在利用Simulink对实验进展调整的实验中在模型中参加PID控制器之后如果对Kp进展调节,那么可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。对KI的调节,其作用的强弱取决与积分时间常数Ti,Ti越小,积分作用就越强。反之Ti大那么积分作用弱,参加积分调节可使系统稳定性下降,动态响应变慢。在对KD进展调节,可以改善系统的动态性能。
但是对KP、KI、KD三个值进展调节的时候应该尽量稳定在一个数值不太大的范围,在值不是太大的情况之下得到一个比拟好的图形,才将该图形选定为最终的实验结果图形。
学习Simulink之后我感觉它不仅是一个仿真组件,它教给我的更是一种
思维,一种建立模型分析问题的构造化思维方式。任何事物,从不同的角度来看
都可以想成是一个从头至尾、环环相扣的系统。我们想要了解整个系统的功能就必须以每一块构造为思维对象,层层分析,最后得出客观的规律的正确结果。
【本文档内容可以自由复制内容或自由编辑修改内容期待你的好评和关注,我们将会做得更好】
页脚下载后可删除,如有侵权请告知删除!
展开阅读全文