中南大学系统仿真实验报告指导老师胡杨实验者学号专业班级实验日期 2014.6.4学院信息科学与工程学院目录实验一MATLAB中矩阵与多项式的基本运算 (3)实验二MATLAB绘图命令 (7)实验三MATLAB程序设计 (9)实验四MATLAB的符号计算与SIMULINK的使用 (13)实验五MATLAB在控制系统分析中的应用 (17)实验六连续系统数字仿真的基本算法 (30)实验一MATLAB中矩阵与多项式的基本运算一、实验任务1.了解MATLAB命令窗口和程序文件的调用。
2.熟悉如下MATLAB的基本运算:①矩阵的产生、数据的输入、相关元素的显示;②矩阵的加法、乘法、左除、右除;③特殊矩阵:单位矩阵、“1”矩阵、“0”矩阵、对角阵、随机矩阵的产生和运算;④多项式的运算:多项式求根、多项式之间的乘除。
二、基本命令训练1.eye(m)m=3;eye(m)ans =1 0 00 1 00 0 12.ones(n)、ones(m,n)n=1;m=2;ones(n)ones(m,n)ans =1ans =113.zeros(m,n)m=1,n=2;zeros(m,n)m =1ans =0 04.rand(m,n)m=1;n=2;rand(m,n)ans =0.8147 0.90585.diag(v)v=[1 2 3];diag(v)ans =1 0 00 2 00 0 36.A\B 、A/B、inv(A)*B 、B*inv(A) A=[1 2;3 4];B=[5 6;7 8];a=A\Bb=A/Bc=inv(A)*Bd=B*inv(A)a =-3 -44 5b =3.0000 -2.00002.0000 -1.0000c =-3.0000 -4.00004.00005.0000d =-1.0000 2.0000-2.0000 3.00007.roots(p)syms x;a=3*x.^3+2*x+1;p=[3,0,2,1];roots(p)ans =0.2012 + 0.8877i0.2012 - 0.8877i-0.40238.polyA=[1 2;3 4];poly(A)ans =1.0000 -5.0000 -2.0000 9.conv 、deconvA=[1 2];B=[5 6];a=conv(A,B)b=deconv(A,B)a =5 16 12b =0.200010.A*B 与A.*B的区别A=[1 2];B=[5 6]';a=A*BA=[1 2];B=[5 6];b=A.*Ba =17b =5 1211.who与whos的使用A=[1 2;3 4];whowhosYour variables are:AName Size Bytes Class AttributesA 2x2 32 double12.disp、size(a)、length(a)的使用a='A B C D E F';disp(a)a=[1 2 3 4];B=size(a)C=length(a)A B C D E FB =1 4C =4三、实验要求根据实验内容和相关命令进行实验,自拟输入元素,将上述各命令的输入和输出结果写成实验报告一(全部实验完成后交实验报告)。
实验二MATLAB绘图命令一、实验任务熟悉MATLAB基本绘图命令,掌握如下绘图方法:1.坐标系的选择、图形的绘制;2.图形注解(题目、标号、说明、分格线)的加入;3.图形线型、符号、颜色的选取。
二、基本命令训练1.plot 2.loglog 3.semilogx 4.semilogy5.polar 6.title 7.xlabel 8.ylabel9.text 10.grid 11.bar 12.stairs13.contour三、实验举例1.t=[0:pi/360:2*pi*22/3];x=93*cos(t)+36*cos(t*4.15);y=93*sin(t)+36*sin(t*4.15);plot(y,x),grid; %绘制二维坐标网格图2. t=0:0.05:100;x=t;y=2*t;z=sin(2*t);plot3(x,y,z,'r-.') %绘制三维坐标图3.t=0:pi/20:2*pi;y=sin(x);stairs(x,y) %绘制阶梯图4.th=[pi/200:pi/200:2*pi]';r=cos(2*th);polar(th,r),grid %在网格里画极坐标图5.th=[0:pi/10:2*pi];x=exp(j*th); %x为复数plot(real(x),imag(x),'r*'); %以实部为横轴,虚部为纵轴画图grid;四、实验要求在两种或两种以上坐标系绘制3~5个图形,要有颜色、图形种类、注解的不同实验结果写成实验报告二(全部实验完成后交实验报告)。
实验三MATLAB程序设计一、实验任务1.熟悉MATLAB程序设计的方法和思路;2.掌握循环、分支语句的编写,学会使用look for、help命令。
二、程序举例1.计算1~1000之内的斐波那契亚数列f=[1,1];i=1;while f(i)+f(i+1)<1000f(i+2)=f(i)+f(i+1);i=i+1;endf,if =Columns 1 through 141 123 5 8 13 21 34 55 89 144 233 377Columns 15 through 16610 987i =152. m=3;n=4;for i=1:mfor j=1:na(i,j)=1/(i+j-1);endendformat rataa =1 1/2 1/3 1/41/2 1/3 1/4 1/51/3 1/4 1/5 1/6 3.m=3;n=4;for i=1:mfor j=1:na(i,j)=1/(i+j-1);endendaa =1 1/2 1/3 1/41/2 1/3 1/4 1/51/3 1/4 1/5 1/6请比较程序2与程序3的区别4. x=input('请输入x的值:');if x==10y=cos(x+1)+sqrt(x*x+1);elsey=x*sqrt(x+sqrt(x));endy请输入x的值:2y =2391/6475.去掉多项式或数列开头的零项p=[0 0 0 1 3 0 2 0 0 9];for i=1:length(p),if p(1)==0,p=p(2:length(p));end;end;pp =Columns 1 through 51 3 02 0Columns 6 through 70 96.建立MATLAB的函数文件,程序代码如下,以文件名ex2_4.m存盘function f=ffibno(n)%ffibno 计算斐波那契亚数列的函数文件%n可取任意自然数%程序如下f=[1,1];i=1;while f(i)+f(i+1)<nf(i+2)=f(i)+f(i+1);i=i+1;end>>edit>>ex2_4(200)ans =Columns 1 through 51 123 5Columns 6 through 108 13 21 34 55Columns 11 through 1289 144>> lookfor ffibnoex2_4 - ffibno 计算斐波那契亚数列的函数文件ex2_4 - ffibno 计算斐波那契亚数列的函数文件>> help ex2_4ffibno 计算斐波那契亚数列的函数文件n可取任意自然数程序如下输入完毕后在MATLAB的命令窗口输入ex2_4(200),得到运行结果。
在MATLAB的命令窗口输入lookfor ffibno,得到结果:ex2_4.m: %ffibno 计算斐波那契亚数列的函数文件在MATLAB的命令窗口输入help ex2_4,得到结果:ffibno 计算斐波那契亚数列的函数文件n可取任意自然数程序如下三、程序设计题用一个MATLAB语言编写一个程序:输入一个自然数,判断它是否是素数,如果是,输出“It is one prime”,如果不是,输出“It is not one prime.”。
要求通过调用子函数实现。
最好能具有如下功能:①设计较好的人机对话界面,程序中含有提示性的输入输出语句。
②能实现循环操作,由操作者输入相关命令来控制是否继续进行素数的判断。
如果操作者希望停止这种判断,则可以退出程序。
③如果所输入的自然数是一个合数,除了给出其不是素数的结论外,还应给出至少一种其因数分解形式。
例:输入6,因为6不是素数。
则程序中除了有“It is not one prime”的结论外,还应有:“6=2*3”的说明。
close all;c=1;c=input('是否进行素数运算 1为是 0为否: ');while c==1a=input('请输入一个自然数: ');if factor(a)==adisp('It is one prime')elsedisp('It is not one prime');b=factor(a);fprintf('%3d =',a)for j=1:(length(b)-1)fprintf('%3d *',b(j))endfprintf('%3d \n',b(length(b)))endc=input('是否进行素数运算 1为是 0为否: ');end是否进行素数运算 1为是 0为否: 1请输入一个自然数: 20It is not one prime20 = 2 * 2 * 5是否进行素数运算 1为是 0为否: 1请输入一个自然数: 17It is one prime是否进行素数运算 1为是 0为否:四、实验要求1.参照已知程序,改动程序中的参数和输入量,验证输出结果。
2.使用lookfor、help命令,验证输出结果3.实验结果写成实验报告三(全部实验完成后交实验报告)。
实验四MATLAB的符号计算与SIMULINK的使用一、实验任务1.掌握MATLAB符号计算的特点和常用基本命令;2.掌握SIMULINK的使用。
二、程序举例1.求矩阵对应的行列式和特征根a=sym('[a11 a12;a21 a22]');da=det(a)ea=eig(a)da =a11*a22-a12*a21ea =1/2*a11+1/2*a22+1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)1/2*a11+1/2*a22-1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2) 2. 求方程的解(包括精确解和一定精度的解)r1=solve('x^2-x-1')rv=vpa(r1)rv4=vpa(r1,4)rv20=vpa(r1,20)r1 =1/2*5^(1/2)+1/2-1/2*5^(1/2)+1/2rv =1.6180339887498948482045868343656-.61803398874989484820458683436560rv4 =1.618-.6180rv20 =1.6180339887498948482-.618033988749894848203. 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] %建立符号矩阵AB=[w,x;y,z] %建立数值矩阵Bdet(A) %计算符号矩阵A的行列式 det(B) %计算数值矩阵B的行列式A =[ a, b][ c, d]B =10 5-8 11ans =a*d-b*cans =1504.syms x y;s=(-7*x^2-8*y^2)*(-x^2+3*y^2);expand(s) %对s展开collect(s,x) %对s按变量x合并同类项(无同类项)factor(ans) % 对ans分解因式ans =7*x^4-13*x^2*y^2-24*y^4ans =7*x^4-13*x^2*y^2-24*y^4ans =(8*y^2+7*x^2)*(x^2-3*y^2)5.对方程AX=b求解A=[34,8,4;3,34,3;3,6,8];b=[4;6;2];X=linsolve(A,b) %调用linsolve函数求解A\b %用另一种方法求解X =0.06750.16140.1037ans =0.06750.16140.10376.对方程组求解a11*x1+a12*x2+a13*x3=b1a21*x1+a22*x2+a23*x3=b2a31*x1+a32*x2+a33*x3=b3syms a11 a12 a13 a21 a22 a23 a31 a32 a33 b1 b2 b3;A=[a11,a12,a13;a21,a22,a23;a31,a32,a33];b=[b1;b2;b3];XX=A\b %用左除运算求解XX =(a12*a23*b3-a12*b2*a33+a13*a32*b2-a13*a22*b3+b1*a22*a33-b1*a32*a23)/(a11*a22*a33-a11*a3 2*a23-a21*a12*a33+a32*a21*a13-a22*a31*a13+a31*a12*a23)-(a11*a23*b3-a11*b2*a33-a21*a13*b3-a23*a31*b1+b2*a31*a13+a21*b1*a33)/(a11*a22*a33-a11*a 32*a23-a21*a12*a33+a32*a21*a13-a22*a31*a13+a31*a12*a23)(a32*a21*b1-a11*a32*b2+a11*a22*b3-a22*a31*b1-a21*a12*b3+a31*a12*b2)/(a11*a22*a33-a11*a3 2*a23-a21*a12*a33+a32*a21*a13-a22*a31*a13+a31*a12*a23)7.syms a b t x y z;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的导数ans =1/2/(1+exp(x))^(1/2)*exp(x)ans =-2*sin(x)-x*cos(x)ans =-3*cos(x)+x*sin(x)ans =-b*cos(t)/a/sin(t)三、SIMULINK的使用1.在命令窗口中输入:simulink(回车)得到如下simulink模块:2.双击打开各模块,选择合适子模块构造控制系统,例如:3.双击各子模块可修改其参数,选择Simulation 菜单下的start 命令运行仿真,在示波器(Scope )中观察结果。