系统仿真技术实验报告.docx
《系统仿真技术实验报告.docx》由会员分享,可在线阅读,更多相关《系统仿真技术实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
系统仿真技术实验报告
系统仿真技术实验报告
学院:
信息科学与工程学院
专业:
电气工程及其自动化
班级:
XXXXX
姓名:
XXXXX
学号:
XXXXXXXXXXX
一、实验一(MATLAB中矩阵与多项式的基本运算).....4
1.1实验题目...................................4
1.2实验扩展...................................13
1.3实验心得...................................20
二、实验二(MATLAB绘图命令)..................21
2.1实验题目...................................21
2.2实验扩展...................................26
2.3实验心得...................................29
三、实验三(MATLAB程序设计)...................30
3.1实验题目...................................30
3.2实验扩展...................................37
3.3实验心得...................................38
四、实验四(MATLAB的符号计算与SIMULINK的使用).......39
4.1实验题目...................................39
4.2实验扩展...................................48
4.3实验心得...................................49
五、实验五(MATLAB在控制系统分析中的应用).....50
5.1实验题目..................................50
5.2实验心得..................................71
六、实验六(连续系统数字仿真的基本算法)......72
6.1实验题目................................72
七、总结.......................................78
实验一:
MATLAB中矩阵与多项式的基本运算
1.1实验题目
1.1.1实验任务:
1.了解MATLAB命令窗口和程序文件的调用。
2.熟悉如下MATLAB的基本运算:
①矩阵的产生、数据的输入、相关元素的显示;
②矩阵的加法、乘法、左除、右除;
③特殊矩阵:
单位矩阵、“1”矩阵、“0”矩阵、对角阵、随机矩阵的产生和运算;
④多项式的运算:
多项式求根、多项式之间的乘除。
1.1.2基本命令训练:
1.eye(m)
2.one(n)、ones(m,n)
3.zeros(m,n)
实验结果:
4.rand(m,n)
5.diag(v)
分析:
rand(m,n):
产生m*n的随机阵
diag(v):
以v的元素作为对角阵的元素产生对角阵
实验结果:
6.A\B、A/B、inv(A)*B、B*inv(A)
分析:
X=A\B是AX=B的解,且A\B=A^(-1)B
X=A/B是XB=A的解,且A/B=AB^(-1)
Inv(A)*B:
A的逆矩阵与左乘B
B*inv(A):
B左乘A的逆矩阵
实验结果:
7.roots(p)
8.Poly
分析:
roots(p):
多项式p的根
poly(C):
用C的元素为根构造多项式
实验结果:
9.conv、deconv
分析:
conv:
进行多项式的乘法
deconv:
进行多项式的除法
实验结果:
10.A*B与A.*B的区别
分析:
A*B:
进行矩阵运算
A.*B:
进行数组运算
实验结果:
11.who与whos的使用
分析:
who:
列出当前工作空间中所有变量名字
whos:
列出当前工作空间中所有变量,以及它们的名字、尺寸、所占字节数、属性等信息。
实验结果:
12.disp、size(a)、length(a)的使用
分析:
disp:
屏幕输出函数
size(a):
求矩阵的大小(获取数组的行数和列数)
length(a):
数组长度(即行数或列数中较大者)
实验结果:
1.2实验扩展
1.2.1向量及其运算
1)、向量产生
实验结果:
2)、向量基本运算
分析:
dot:
维数相同的两个向量的点积,结果是一个标量
cross:
两个向量的叉积就是一个过两个相交向量的交点且垂直于两个向量所在平面的向量,结果是一个矢量
实验结果:
1.2.2矩阵及其运算
1)、矩阵产生
通过冒号可以截取指定矩阵中的部分
2)、矩阵基本运算
det(A):
返回矩阵A的行列式的值
eig(A):
返回矩阵A的特征值
inv(A):
求A的逆矩阵
fliplr(A):
矩阵A关于中轴的反转矩阵(左右反转)
flipud(A):
上下反转
rot90(A):
矩阵A逆时针旋转90度
diag(A):
抽取主对角线元素构成向量
rem(A,x):
A矩阵除以模数x后的余数
1.2.3数组及其运算
实验结果:
1.2.4多项式及其运算
分析:
polyval(P,X):
计算多项式P在X点的值(若X是向量或矩阵,则采用数组运算(点运算))
polyvalm(P,X):
以方阵X为自变量,计算多项式的值,采用矩阵运算
1.3、实验心得
MATLAB中数值运算的部分较为繁多,但和之前学过的C语言等也有相同的部分。
但MATLAB的语言更为精简,比较方便。
MATLAB是一款工程性质十分强的软件,只有大量的应用实践,才能够对其中的函数运用自如,才能理解其中的内涵。
实验二MATLAB绘图命令
2.1实验题目
2.1.1实验任务
熟悉MATLAB基本绘图命令,掌握如下绘图方法:
1.坐标系的选择、图形的绘制;
2.图形注解(题目、标号、说明、分格线)的加入;
3.图形线型、符号、颜色的选取。
2.1.2基本命令训练
1.plot2.loglog3.semilogx4.semilogy
5.polar6.title7.xlabel8.ylabel
9.text10.grid11.bar12.stairs
13.contour
实验结果:
2.2实验扩展
2.2.1图形的修饰
1.曲线颜色:
b(blue),c(cyan),g(green),k(black),m(magenta),
r(red),w(white),y(yellow)
2.曲线线型:
-(实线,默认),:
(点线),-.(点画线),--(虚线)
3.数据点形:
.(实点),+(十字形),。
(圆圈),*(星号),
x(叉号),s(正方形),d(棱形),h(六角形),p(五角形),>(右三角),<(左三角)
实验举例:
2.2.2三维图形的绘制
仿真举例:
t=0:
pi/30:
10*pi;%设定时间范围
plot3(cos(t),sin(t),t,'-b','Linewidth',4)%绘制三维图形,并作修饰
gridon%加网格
axissquare%坐标为方形
figure
(2)%新建图形窗口2
stem3(cos(t),sin(t),t,'-.k')%绘制三维火柴杆图
实验结果:
2.3实验心得
用户应用MATLAB,只需指定绘图方式,并提供充足的绘图数据,可以得到所需的图形,也可对图形加以修饰。
二维图形的绘制基本函数为plot。
较为复杂的三维图形分为三维曲线,三维网线图和三维曲面图。
对符号函数或是无法求出函数参数之间显示关系的隐函数,可以使用符号函数绘制图形的函数。
实验三MATLAB程序设计
3.1实验题目
3.1.1实验任务
1.熟悉MATLAB程序设计的方法和思路;
2.掌握循环、分支语句的编写,学会使用lookfor、help命令。
3.1.2程序训练
1.计算1~1000之内的斐波那契亚数列
f=[1,1];
i=1;
whilef(i)+f(i+1)<1000
f(i+2)=f(i)+f(i+1);
i=i+1;
end
f,i
实验结果:
2.m=3;
n=4;
fori=1:
m
forj=1:
n
a(i,j)=1/(i+j-1);
end
end
formatrat
a
实验结果:
3.m=3;
n=4;
fori=1:
m
forj=1:
n
a(i,j)=1/(i+j-1);
end
end
a
实验结果:
程序2和程序3的区别:
formatrat小数分数表示。
4.x=input('请输入x的值:
');
ifx==10
y=cos(x+1)+sqrt(x*x+1);
else
y=x*sqrt(x+sqrt(x));
end
y
实验结果:
5.去掉多项式或数列开头的零项
p=[0001302009];
fori=1:
length(p),
ifp
(1)==0,
p=p(2:
length(p));
end;
end;
p
实验结果:
6.建立MATLAB的函数文件,程序代码如下,以文件名ex2_4.m存盘
functionf=ffibno(n)
%ffibno计算斐波那契亚数列的函数文件
%n可取任意自然数
%程序如下
f=[1,1];
i=1;
whilef(i)+f(i+1)f(i+2)=f(i)+f(i+1);
i=i+1;
end
输入完毕后在MATLAB的命令窗口输入ex2_4(200),得到运行结果。
在MATLAB的命令窗口输入lookforffibno,得到结果:
ex2_4.m:
%ffibno计算斐波那契亚数列的函数文件
在MATLAB的命令窗口输入helpex2_4,得到结果:
ffibno计算斐波那契亚数列的函数文件
n可取任意自然数
程序如下
实验结果:
3.1.3程序设计
用一个MATLAB语言编写一个程序:
输入一个自然数,判断它是否是素数,如果是,输出“Itisoneprime”,如果不是,输出“Itisnotoneprime.”。
要求通过调用子函数实现。
最好能具有如下功能:
①设计较好的人机对话界面,程序中含有提示性的输入输出语句。
②能实现循环操作,由操作者输入相关命令来控制是否继续进行素数的判断。
如果操作者希望停止这种判断,则可以退出程序。
③如果所输入的自然数是一个合数,除了给出其不是素数的结论外,还应给出至少一种其因数分解形式。
例:
输入6,因为6不是素数。
则程序中除了有“Itisnotoneprime”的结论外,还应有:
“6=2*3”的说明。
实验结果:
3.2实验扩展
3.2.1选择结构举例:
g=input('pleaseinputgrade:
','s');%由用户交互输入成绩等级
switch(g)%判断用户输入
case{'A','a'}
disp('85~100');
case{'B','b'}
disp('70~84');
case{'C','c'}
disp('60~69');
case{'D','d'}
disp('<60');
otherwise
disp('输入错误!
')
end
实验结果:
3.2.2循环结构举例:
A=magic(3)
sum=zeros(3,1);
forn=A%给定循环表达式,循环次数为A的列数,第一次取出A的第一列赋给n,依此类推共三次
sum=sum+n;
end
sum'%输出结果,以行向量的形式给出
实验结果:
3.3实验心得
MATLAB程序可以再任何文本编辑器中编辑完成,但使用MATLAB自身的编辑器是个不错的选择,因为它兼有调试功能。
MATLAB程序的流程结构有条件转移、循环、开关结构以及试探结构。
MATLAB函数的编写调试要求尽量按规范编写程序,以便调试和维护,增强可用性。
实验四MATLAB的符号计算与SIMULINK的使用
4.1实验题目
4.1.1实验任务
1.掌握MATLAB符号计算的特点和常用基本命令;
2.掌握SIMULINK的使用。
4.1.2程序举例
1.求矩阵对应的行列式和特征根
a=sym('[a11a12;a21a22]');
da=det(a)
ea=eig(a)
实验结果:
2.求方程的解(包括精确解和一定精度的解)
r1=solve('x^2-x-1')
rv=vpa(r1)
rv4=vpa(r1,4)
rv20=vpa(r1,20)
实验结果:
3.a=sym('a');b=sym('b');c=sym('c');d=sym('d');%定义4个符号变量
w=10;x=5;y=-8;z=11;%定义4个数值变量
A=[a,b;c,d]%建立符号矩阵A
B=[w,x;y,z]%建立数值矩阵B
det(A)%计算符号矩阵A的行列式
det(B)%计算数值矩阵B的行列式
实验结果:
4.symsxy;
s=(-7*x^2-8*y^2)*(-x^2+3*y^2);
expand(s)%对s展开
collect(s,x)%对s按变量x合并同类项(无同类项)
factor(ans)%对ans分解因式
实验结果:
5.对方程AX=b求解
A=[34,8,4;3,34,3;3,6,8];
b=[4;6;2];
X=linsolve(A,b)%调用linsolve函数求解
A\b%用另一种方法求解
实验结果:
6.对方程组求解
a11*x1+a12*x2+a13*x3=b1
a21*x1+a22*x2+a23*x3=b2
a31*x1+a32*x2+a33*x3=b3
symsa11a12a13a21a22a23a31a32a33b1b2b3;
A=[a11,a12,a13;a21,a22,a23;a31,a32,a33];
b=[b1;b2;b3];
X=linsolve(A,b)%调用linsolve函数求的解
XX=A\b%用左除运算求解
实验结果:
7.symsabtxyz;
f=sqrt(1+exp(x));
diff(f)%未指定求导变量和阶数,按缺省规则处理
f=x*cos(x);
diff(f,x,2)%求f对x的二阶导数
diff(f,x,3)%求f对x的三阶导数
f1=a*cos(t);f2=b*sin(t);
diff(f2)/diff(f1)%按参数方程求导公式求y对x的导数
实验结果:
4.1.3simulink的使用
1.在命令窗口中输入:
simulink(回车)得到如下simulink模块:
2.双击打开各模块,选择合适子模块构造控制系统,例如:
3.双击各子模块可修改其参数,选择Simulation菜单下的start命令运行仿真,在示波器(Scope)中观察结果。
4.2实验扩展
程序举例:
Simulink部分:
逐一熟悉各模块的使用,对下面的随动系统模型进行仿真,
实验报告中包含:
连好的系统模型及用Scope观测的结果
其中:
R(s)为阶跃输入,C(s)为输出
示波器显示结果:
4.4实验心得
Simulink是MATLAB中一个用于实现动态系统建模、仿真与分析的仿真软件集成环境软件工具包。
为便于仿真,simulink模块库提供了丰富的功能模块。
这些模块分属于不同功能、不同类别的子模块库。
熟悉这些模块所在位置以及它们的功能和使用方法需要强加练习。
实验五MATLAB在控制系统分析中的应用
5.1实验题目
5.1.1实验任务
1.掌握MATLAB在控制系统时间响应分析中的应用;
2.掌握MATLAB在系统根轨迹分析中的应用;
3.掌握MATLAB控制系统频率分析中的应用;
4.掌握MATLAB在控制系统稳定性分析中的应用
5.1.2基本命令
1.step2.impulse3.initial4.lsim5.rlocfind
6.bode7.margin8.nyquist9.Nichols10.cloop
5.1.3程序练习
1.求下面系统的单位阶跃响应
%程序如下:
num=[4];den=[1,1,4];
step(num,den)
[y,x,t]=step(num,den);
tp=spline(y,t,max(y))%计算峰值时间
max(y)%计算峰值
实验结果:
2.求如下系统的单位阶跃响应
%程序如下:
a=[0,1;-6,-5];b=[0;1];c=[1,0];d=0;
[y,x]=step(a,b,c,d);
plot(y)
实验结果:
3.求下面系统的单位脉冲响应:
%程序如下:
num=[4];den=[1,1,4];
impulse(num,den)
实验结果:
4.已知二阶系统的状态方程为:
求系统的零输入响应和脉冲响应。
%程序如下:
a=[0,1;-10,-2];b=[0;1];
c=[1,0];d=[0];
x0=[1,0];
subplot(1,2,1);initial(a,b,c,d,x0)
subplot(1,2,2);impulse(a,b,c,d)
实验结果:
5:
系统传递函数为:
输入正弦信号时,观察输出信号的相位差。
%程序如下:
num=[1];den=[1,1];
t=0:
0.01:
10;
u=sin(2*t);
holdon
plot(t,u,‘r’)
lsim(num,den,u,t)
实验结果:
6.有一二阶系统,求出周期为4秒的方波的输出响应
%程序如下:
num=[251];
den=[123];
t=(0:
.1:
10);
period=4;
u=(rem(t,period)>=period./2);%看rem函数功能
lsim(num,den,u,t);
实验结果:
7.已知开环系统传递函数,绘制系统的根轨迹,并分析其稳定性
%程序如下:
num=[12];
den1=[143];
den=conv(den1,den1);
figure
(1)
rlocus(num,den)
[k,p]=rlocfind(num,den)
figure
(2)
k=55;
num1=k*[12];
den=[143];
den1=conv(den,den);
[num,den]=cloop(num1,den1,-1);
impulse(num,den)
title('impulseresponse(k=55)')
figure(3)
k=56;
num1=k*[12];
den=[143];
den1=conv(den,den);
[num,den]=cloop(num1,den1,-1);
impulse(num,den)
title('impulseresponse(k=56)')
实验结果:
8.作如下系统的bode图
%程序如下:
n=[1,1];d=[1,4,11,7];
bode(n,d)
实验结果:
9.系统传函如下
求有理传函的频率响应,然后在同一张图上绘出以四阶伯德近似表示的系统频率响应
%程序如下:
num=[1];den=conv([12],conv([12],[12]));
w=logspace(-1,2);t=0.5;
[m1,p1]=bode(num,den,2);
p1=p1-t*w'*180/pi;
[n2,d2]=pade(t,4);
numt=conv(n2,num);dent=(conv(den,d2));
[m2,p2]=bode(numt,dent,w);
subplot(2,1,1);semilogx(w,20*log10(m1),w,20*log10(m2),'g--');
gridon;title('bodeplot');xlabel('frequency');ylabel('gain');
subplot(2,1,2);semilogx(w,p1,w,p2,'g--');gridon;
xlabel('frequency');ylabel('phase');
实验结果:
10.已知系统模型为
求它的幅值裕度和相角裕度
%程序如下:
n=[3.5];d=[1232];
[Gm,Pm,Wcg,Wcp]=margin(n,d)
实验结果:
11.二阶系统为:
令wn=1,分别作出ξ=2,1,0.707,0.5时的nyquist曲线。
%程序如下:
n=[1];
d1=[1,4,1];d2=[1,2,1];d3=[1,1.414,1];d4=[1,1,1];
nyquist(n,d1);
holdon
nyquist(n,d2);nyquist(n,d3);nyquist(n,d4);
实验结果:
12.已知系统的开环传递函数为
绘制系统的Nyqusit图,并讨论系统的稳定性
%程序如下:
G=tf(1000,conv([1,3,2],[1,5]));
nyquist(G);axis('square')
实验结果:
13.分别由w的自动变量和人工变量作下列系统的nyquist曲线:
%程序如下:
n=[1];d=[1,1,0];nyquist(n,d);%自动变量
n=[1];d=[1,1,0];w=[0.5:
0.1:
3];nyquist(n,d,w);%人工变量
实验结果:
14.一多环系统,其结构图如下,使用Nyquist频率曲线判断系统的稳定性。
%程序如下:
k1=16.7/0.0125;z1=[0];
p1=[-1.25-4-16];
[num1,den1]=zp2tf(z1,p1,k1);
[num,den]=cloop(num1,den1);
[z,p,k]=tf2zp(num,den);p
figure
(1)
nyquist(num,den)
figure
(2)
[num2,den2]=cloop(num,den);
impulse(num2,den2);
实验结果:
15.已知系统为:
作该