《MATLAB仿真技术》实验指导书2016附问题详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验项目及学时安排
实验一 MATLAB环境的熟悉与基本运算 2学时实验二 MATLAB数值计算实验 2学时实验三 MATLAB数组应用实验 2学时实验四 MATLAB符号计算实验 2学时实验五 MATLAB的图形绘制实验 2学时实验六 MATLAB的程序设计实验 2学时实验七 MATLAB工具箱Simulink的应用实验 2学时实验八 MATLAB图形用户接口GUI的应用实验 2学时实验一 MATLAB环境的熟悉与基本运算
一、实验目的
1.熟悉MATLAB开发环境
2.掌握矩阵、变量、表达式的各种基本运算
二、实验基本知识
1.熟悉MATLAB环境:
MATLAB桌面和命令窗口、命令历史窗口、帮助信息浏览器、工作空间浏览器、文件和搜索路径浏览器。
2.掌握MATLAB常用命令
3.MATLAB变量与运算符
变量命名规则如下:
(1)变量名可以由英语字母、数字和下划线组成
(2)变量名应以英文字母开头
(3)长度不大于31个
(4)区分大小写
MATLAB中设置了一些特殊的变量与常量,列于下表。
MATLAB运算符,通过下面几个表来说明MATLAB的各种常用运算符
4.MATLAB的一维、二维数组的寻访
表6 子数组访问与赋值常用的相关指令格式
5.MATLAB的基本运算
表7 两种运算指令形式和实质涵的异同表
6.MATLAB的常用函数
表8 标准数组生成函数
表9 数组操作函数
三、实验容
1、学习使用help命令,例如在命令窗口输入help eye,然后根据帮助说
明,学习使用指令eye(其它不会用的指令,依照此方法类推)
2、学习使用clc、clear,观察command window、command history和
workspace等窗口的变化结果。
3、初步程序的编写练习,新建M-file,保存(自己设定文件名,例如
exerc1、exerc2、 exerc3……),学习使用MATLAB的基本运算符、数组寻访指令、标准数组生成函数和数组操作函数。
注意:每一次M-file的修改后,都要存盘。
(1) help rand,然后随机生成一个2×6的数组,观察并记录command window、command history和workspace等窗口的变化
结果。
(2)学习使用clc、clear,了解其功能和作用。
(3)输入C=1:2:20,则C(i)表示什么?其中i=1,2,3, (10)
(4)输入A=[7 1 5;2 5 6;3 1 5],B=[1 1 1; 2 2 2; 3 3 3],在命令窗口中执行下列表达式,记录其结果:
A(2, 3) A(:,2) A(3,:) A(:,1:2:3) A(:,3).*B(:,2) A(:,3)*B(2,:) A*B A.*B A^2 A.^2 B/A B./A
(5)二维数组的创建和寻访,创建一个二维数组(4×8)A,查询数组A第2行、第3列的元素,查询数组A第2行的所有元素,查询
数组A第6列的所有元素。
(6)两种运算指令形式和实质涵的比较。
设有3个二维数组A
2×4,B
2×
4,C
2×2
,写出所有由2个数组参与的合法的数组运算和矩阵指令。
A+B; A-B C*A, C*B A/B A.*B A.+B
A.-B A./B A.^B…A\B
(7)学习使用表8列的常用函数(通过help方法)
(8)学习使用表9数组操作函数。
(9)用reshape指令生成下列矩阵,并取出方框的数组元素。
实验二 MATLAB数值计算实验
•实验目的
1、了解伴随矩阵、稀疏矩阵、魔方矩阵、对角矩阵等各种矩阵的创建,掌握矩阵的基本运算
2、掌握矩阵的数组运算
3、掌握多项式的基本运算
4、会求解代数方程
•实验基本知识
1、创建矩阵的方法:直接输入法、用MATLAB函数创建矩阵
2、矩阵运算:矩阵加、减(+,-)运算
矩阵乘()运算
矩阵乘方
inv ——矩阵求逆
det ——行列式的值
eig ——矩阵的特征值
diag ——对角矩阵
’——矩阵转置
sqrt ——矩阵开方
3、矩阵的数组运算:
数组加减(.+,.-):对应元素相加减
数组乘():a,b两数组必须有相同的行和列,两数组相应元素相乘
数组除(./,.\):a./b=b.\a —都是b的元素被a的对应元素除(a
除以b)
a.\b=
b./a —都是a的元素被b的对应元素除(b除以a)
数组乘方(.^):元素对元素的幂
数组点积(点乘):维数相同的两个向量的点乘,其结果是一个标量
数组叉积:就是一个过两个相交向量的交点且垂直于两个向量所在平面的向量
数组混合积:先叉乘后点乘
4、多项式运算
poly ——产生特征多项式系数向量
roots ——求多项式的根
p=poly2str(c,‘x’)(以习惯方式显示多项式)
conv,convs——多项式乘运算
deconv——多项式除运算
多项式微分
polyder(p): 求p的微分
polyder(a,b): 求多项式a,b乘积的微分
[p,q]=polyder(a,b): 求多项式a,b商的微分
5、代数方程组求解
1).恰定方程组的解
方程ax=b(a为非奇异)两种求解方法: x=inv(a)b —采用求逆运算解方程
x=a\b —采用左除运算解方程2)超定方程组的解
方程 ax=b ,m<n时此时不存在唯一解。
x=(a' a)-1 a ' b ——求逆法
3)欠定方程组的解
MATLAB可求出两个解:用除法求的解x是具有最多零元素的解是具有最小长度或数的解,这个解是基于伪逆pinv求得的。
6、复数运算:复数的实虚部、模和幅角计算
real_z=real(z)
image_z=imag(z)
magnitude_z=abs(z)
angle_z_radian=angle(z) %弧度单位
angle_z_degree=angle(z)*180/pi %度数单位
三、实验容
1、生成一个3行3列的随机矩阵,并逆时针旋转90°,左右翻转,上下翻转。
2、已知a=[1 2 3],b=[4 5 6],求a.\b和a./b
3、数组和矩阵有何不同?
数组中的元素可以是字符等,矩阵中的只能是数,这是二者最直观的区别。
从外观形状和数据结构上看,二维数组和数学中的矩阵没有区别。
但是矩阵作为一种变换或映射算子的体现,矩阵运算有着明确而严格的数学规则。
而数组运算是Matlab软件所定义的规则,其目的是为了数据管理方便、操作简单、指令形式自然和执行计算的有效。
虽然数组运算尚缺乏严谨的数学推理,而且数组运算仍在完善和成熟中,但是它的作用和影响正随着matlab的发展而扩大。
4、已知a=[1 2 3;4 5 6;7 8 0],求其特征多项式并求其根。
5、求解方程 1)
2)
6、用两种方法创建符号矩阵,A =[ a, 2*b]
[3*a, 0]
7、对符号方程f = ax2+bx+c 求解 1)对x求解;2)对a求解。
8、求解微分方程。
实验三 MATLAB数组应用实验
•实验目的
1、掌握字符串数组、单元数组创建及显示、结构数组创建及访问
2、掌握符号表达式的微分和积分运算
•实验基本知识
•字符串数组相关命令
•直接输入法---用单引号或者大括号+单引号
•disp(S)法---S是字符串,作用是显示出S的文本
•char(S)法---S是字符串,作用是显示出S的文本
•input(out,in)法---显示出字符串out的文本并等待终端的输入,in 可缺省
•在字符串中用两个单引号来表示一个单引号
•findstr(S1,S2)---在较长字符串里查找较短字符串所在的位置并返回位置值
•str2mat()---字符串转换成矩阵
•str2num()、num2str()---字符串与数值互相转换
•单元数组相关命令
•直接创建法---使用大括号{ }、对细胞元素直接赋值
•cell(m,n)---创建一个m*n的空细胞矩阵(所有行的细胞数必须相同)•celldisp()---逐个显示cell中的每个元素值
•cellplot(C)---用彩色的图形来显示单元型变量C的结构形式
•结构数组相关命令
•直接输入法---使用“.”将结构变量名和元素名连接
格式:struct_name(record#).field_name = data
•S = struct(‘field1’,V1,’field2’,V2,…)---field为各成员变量名,V为对应的各成员变量的容
•S = rmfield(S,fields)---将结构数组S中的fields项删除,仍用数组名S表示
•结构体名称.数组名称---在结构数组中调用元素项
• C = strcuct2cell(S)、S = cell2struct(C)---结构数组与单元数组的转换
•map容器
•mapobj = containers.Map({‘key1’,’key2’,…},{‘val1’,’val2’,…})---创建map对象
•keys()、values()---查看map对象
•existingmapobj(newkeysname) = newvalue --- 在一个map对象中添加新元素
•remove(mapname,’keyname’) --- 从一个map对象中删除keys/values对
三、实验容
•创建一个名为S、容为“matlab programming for engineers.”的字符串,并查找字符串S中字母为“g”出现的位置以及出现的次数。
•
•
•创建大小为2╳2的单元数组,其元素分别为:字符串(‘Sun Yang’,‘Liu Wen’)、字符串数组(char(‘2012001’,’2012002’))、数值矩阵((85 89 90;80 87 88))和细胞数组(’Maths’,’Maths’,’Matlab’)。
•
•
•创建一个数组名为student的结构数组,其容如下表所示:ID Name Age Sex Score 3001zhao20F90
3002wang21M86
3003yang18F88
3004liu19F80
实验四 MATLAB符号计算实验•实验目的
1、掌握创建符号表达式和矩阵的方法
2、掌握符号表达式的微分和积分运算
•实验基本知识
1、符号矩阵的创建
1)用matlab函数sym创建矩阵(symbolic 的缩写)
命令格式:A=sym('[ ]')
2)用字符串直接创建矩阵
2、符号矩阵的修改
直接修改:可用、键找到所要修改的矩阵,直接修改
3、符号矩阵与数值矩阵的转换
将数值矩阵转化为符号矩阵,函数调用格式:double(A)
将符号矩阵转化为数值矩阵,函数调用格式: numeric(A)
4、符号微积分与积分变换
diff(f) —对缺省变量求微分
diff(f,v) —对指定变量v求微分
diff(f,v,n) —对指定变量v求n阶微分
int(f) —对f表达式的缺省变量求积分
int(f,v) —对f表达式的v变量求积分
int(f,v,a,b) —对f表达式的v变量在(a,b)区间求定积分
5、符号代数方程求解
solve(f) ——求一个方程的解
solve(f1,f2, …fn) ——求n个方程的解
6、符号微分方程求解指令:dsolve
命令格式:dsolve(f,g): f ——微分方程,可多至12个微分方程的求解;
g为初始条件,默认自变量为 'x',可任意指定
自变量't', 'u'等,微分方程的各阶导数项以大
写字母D表示
三、实验容
1、用符号方法求下列极限
1)
2)
2、用符号方法求下列积分
1)
2)
实验五 MATLAB的图形绘制实验
一、实验目的
1、学习MATLAB二维、三维图形绘制的基本方法;
2、熟悉和了解MATLAB图形绘制程序编辑的基本指令;
3、熟悉掌握利用MATLAB图形编辑窗口编辑和修改图形界面,并添加图形的各种标注;
4、掌握clf、plot、plot3、subplot、hold、figure、gtext、mesh、surf、cylinder、sphere、polar、bar、hist、pie、area、fill、scatter、stairs、stem、contour等的指令格式和语法。
二、实验基本知识
1、plot(x,y)------绘制由x,y所确定的曲线;
2、多组变量绘图:plot(x1, y1, 选项1, x2, y2, 选项2, ……);
3、双Y轴绘图:plotyy()函数;
4、图形窗口的分割;
5、图形编辑窗口的使用。
三、实验容
(1)绘制下列函数二维图形。
y=k*cos(t),t∈[0,2π],k∈[0.4,1],分布以plot(t,y)、plot(t)、plot(y)、plot(y,t)产生图形并记录观察其不同。
(2)绘制连续调制波形Y=sin(t)sin(9t) 及其包络线。
(参考)
(3)绘制向量x=[1 3 0.5 2.5 2]的饼形图,并把3对应的部分分离出来。
(4)绘制参数方程x=t,y=sin(t),z=cos(t)在t=[0 7]区间的三维曲线。
(5)用hold on命令在同一个窗口绘制曲线y=sin(t),y1=sin(t+0.25),y2=sin(t+0.5),其中t∈[0 10]。
(参考)
(6)使用sphere()函数产生球面坐标,绘制网线图和表面图。
实验六 MATLAB的程序设计实验
一、实验目的
1、熟悉MATLAB程序编辑与设计环境
2、掌握各种编程语句语法规则及程序设计方法
3、函数文件的编写和设计
4、了解和熟悉跨空间变量传递和赋值
二、实验基本知识
1、程序流程控制语句
for循环结构
语法:for i=初值:增量:终值
语句1;
……;
语句n;
end
说明:1.i=初值:终值,则增量为1。
2.初值、增量、终值可正可负,可以是整数,也可以是小数,
只须符合数学逻辑。
while 循环结构
语法:while 逻辑表达式
循环体语句
end
说明:1、whiIe结构依据逻辑表达式的值判断是否执行循环体语勾。
若表达式的值为真,执行循环体语句一次、在反复执行时,每次都要
进行判断。
若表达式的值为假,则程序执行end之后的语句。
2、为了避免因逻辑上的失误,而陷入死循环,建议在循环体语句
的适当位置加break语句、以便程序能正常执行。
(执行循环体
的次数不确定;每一次执行循环体后,一定会改变while后面所
跟关系式的值)
3、while循环也可以嵌套、其结构如下:
while逻辑表达式1
循环体语句1
while逻辑表达式2
循环体语句2
end
循环体语句3
end
if-else-end分支结构
if 表达式 1
语句1
else if 表达式 2(可选)
语句2
else(可选)
语句3
end
end
说明:1.if结构是一个条件分支语句,若满足表达式的条件,则往下执行;
若不满足,则跳出if结构。
2.else if表达式2与else为可选项,这两条语句可依据具体情况取舍。
3.注意:每一个if都对应一个end,即有几个if,记就应有几个end。
switch-case结构
语法:switch表达式
case常量表达式1
语句组1
case常量表达式2
语句组2
……
otherwise
语句组n
end
说明: 1.switch后面的表达式可以是任何类型,如数字、字符串等。
2.当表达式的值与case后面常量表达式的值相等时,就执行这个case后面的语句组如果所有的常量表达式的值都与这个表达
式的值不相等时,则执行otherwise后的执行语句。
程序流程控制指令:
break、return、pause
2、函数文件的结构和编写方法
函数只能在函数体对变量进行操作,也就是只能访问函数本身工作空间中的变量。
M函数文件的结构
(1)函数定义行(function)
(2) H1行(函数帮助文本的第一行)
(3)函数帮助文本
(4)函数体
(5)注释
函数文件编写后,保存时,其文件名必须与函数名相同。
注意:函数名不要与MATLAB自身的函数命令相同。
三、实验容:
1、用for循环语句实现求1~100的和。
2、用循环语句实现编写一个求n阶乘的函数文件。
3、已知一维数组A=[2,4,5,8,10],B=[4,6,9,3,4],用for循环语句实现。
求和函数可用sum()。
.
实验七 MATLAB工具箱Simulink的应用实验
一、实验目的:
1、熟悉SIMULINK 工作环境及特点
2、掌握线性系统仿真常用基本模块的用法
3、掌握SIMULINK 的建模与仿真方法
二、实验基本知识:
1、了解SIMULINK模块库中各子模块基本功能
2、SIMULINK 的建模与仿真方法
(1)打开模块库,找出相应的模块。
鼠标左键点击相应模块,拖拽到模型窗口中即可。
(2)创建子系统:当模型大而复杂时,可创建子系统。
(3)设置仿真控制参数。
三、实验容
1、建立实现y=sin2tsin3t的Simulink模型,并进行仿真分析,相应的输入输
出曲线在示波器上显示。
2、根据下列要求和图,完成以下任务:
(1)在Simulink集成环境下建立模型,在给定信号作用点处输入单位给定
阶跃响应信号,0.3秒后在扰动信号点输入单位阶跃响应信号,并绘制
相应的响应曲线。
(2)计算仿真结果的超调量、上升时间、峰值时间、稳态误差。
超调量:mp=(1.2072-0.99)/0.99 上升时间:ts= 1.1222 峰值时间:tp=1.2797 稳态误差:ess=1-0.99=0.01
实验八 MATLAB图形用户接口GUI的应用实验
•实验目的
1、掌握GUIDE界面环境、GUI的创建过程、GUI的菜单设计和对话框设计•实验基本知识
详细参见书本P278页的第11章。
三、实验容
•设计一个GUI界面“huatu”,其界面布局如下图所示,包括显示“正弦函数”、“余弦函数”、“拟合系数”、“拟合图”字样的四个按钮;1个“编辑文本框”(使用enable属性)来显示“拟合系数”;3个坐标轴,分别用来显示“正弦函数”、“余弦函数”、“拟合图”对应的图形。