哈尔滨工业大学春matlab结课论文.docx
《哈尔滨工业大学春matlab结课论文.docx》由会员分享,可在线阅读,更多相关《哈尔滨工业大学春matlab结课论文.docx(25页珍藏版)》请在冰豆网上搜索。
哈尔滨工业大学春matlab结课论文
2013年春季学期
MATLAB课程考查题
一、必答题:
1.matlab常见的数据类型有哪些?
各有什么特点?
答:
MATLAB中有15种基本数据类型,常用的数据类型有:
numeric(数值型)(数值型分为整型和浮点型)、char(字符型)、logical(逻辑型)、cell(单元型)、struct(结构);
(1)整型:
MATLAB7.0中的整型数据类型,按照有无符号位可以分为有符号位整数和无符号位整数,而按照数据类型的字节数又可分为8位、16位、32位、64位的整数类型。
不同类型整型的生成函数如下:
int8(x):
有符号8位整型数据生成。
int16(x):
有符号16位整型数据生成。
int32(x):
有符号32位整型数据生成。
int64(x):
有符号64位整型数据生成。
uint8(x):
无符号8位整型数据生成。
uint16(x):
无符号8位整型数据生成。
uint32(x):
无符号8位整型数据生成。
uint64(x):
无符号8位整型数据生成。
(2)浮点型:
MATLAB7.0中浮点型变量包括单精度浮点型和双精度浮点型,分别为32位和64位,使用single()和double()函数定义及转换。
默认状态下在MATLAB中输入的数据即为双精度浮点型。
(3)逻辑类型:
MATLAB7.0中的逻辑类型仅包括两个值:
“0”和“1”,分别代表逻辑“假”和“真”。
逻辑类型主要用于关系和逻辑运算,在使用过程中通过查找、条件语句的逻辑判断,可以判断条件是否为真。
(4)字符与字符串:
字符与字符串运算是各种高级语言不可缺少的部分,Matlab具有强大的字符处理能力。
字符串可以理解为字符的数组,而字符在MATLAB存储空间中又与相应的ASCII码对应。
在MATLAB中,字符串是用单撇号括起来的字符序列。
MATLAB将字符串当作一个行向量,每个元素对应一个字符,其标识方法和数值向量相同。
也可以建立多行字符串矩阵。
字符串是以ASCII码形式存储的。
abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。
相反,char函数可以把ASCII码矩阵转换为字符串矩阵。
(5)cell(单元型):
细胞型数据结构(cell)可以使不同类型和不同维数的数组可以共存,细胞型数组实际上可以认为是一种以任意形式的数组为分量的多维数组。
细胞型数据的定义:
1)直接赋值定义:
细胞型变量在定义时需要使用大括号,元素用逗号隔开
例:
B={1:
4,A,‘abcd’}
2)使用cell函数,预先为细胞型变量定义空间
例:
A=cell(m,n)定义一个空的m行n列的cell类型
(6)struct(结构)型:
结构体数据类型可以把不同数据类型的变量放到同一个变量名下,通过不同“域”的概念对结构体中的不同数据进行赋值、操作。
结构体中的数据存储在相应的“域”中。
结构体类型数据生成的方法主要有命令行直接赋值法和函数法。
命令行直接赋值法是指直接把不同类型的数据赋值给结构体变量不同的域中;函数法是指通过MATLAB中自带的函数struct()创建结构体变量。
下面分别通过这两种方法来创建结构体类型的变量。
1.命令行直接赋值法
通过命令行直接赋值即直接给结构体中的不同域赋值,结构与域之间用点号“.”连接,不同域中可保存不同数据类型的变量。
2.函数法
MATLAB中提供了struct()函数创建结构体,具体用法如下。
s=struct('field1',values1,'field2',values2,...)
结构体的常用操作包括对结构体元素的访问、结构体的显示、结构体的删除。
下面将具体叙述结构体的常用操作。
2.MATLAB中有几种帮助的途径?
答:
(1)help命令:
在命令窗口输入help命令,也是MATLAB寻找在线帮助的一种方便而快捷的方式。
(图示、操作演示)
(2)帮助浏览器:
MATLAB通过选择help可以获得各类帮助信息,通过勾选或删除勾选Desktop菜单中的Help选项可打开或关闭窗口中独立的交互式帮助浏览器。
(3)lookfor命令:
(lookforcommend)可以根据用户提供的完整或不完整的关键词,搜索出一组与之相关的命令或函数。
(图示、操作演示)
(4)模糊查询:
(fuzzyInquiry)用户只须输入命令的前几个字母,然后键入Tab键MATLAB就会列出所有以这个字母开始的命令。
(图示、操作演示)
(5)帮助台:
(doc)帮助台比帮助命令及帮助窗口提供更多的帮助信息。
键入命令helpdesk可进入帮助台,可以利用浏览器的功能浏览帮助信息。
(6)在线帮助页:
(doc)命令doc后加关键字,MATLAB会自动定位到相关页
注意:
lookfor和模糊查询查到的不是详细信息通常还需要在确定了具体函数名称后用help命令显示详细信息。
3.Matlab常见的哪三种程序控制结构及包括的相应的语句?
答:
顺序结构、选择结构、循环结构
(1)顺序结构:
数据的输入-A=input(提示信息,选项);
数据的输出-disp(输出项)
程序的暂停-pause(延迟秒数)
(2)选择结构:
①if语句:
在MATLAB中,if语句有3种格式。
单分支if语句:
if条件语句组end
双分支if语句:
if条件语句组1;else语句组2end
多分支if语句:
if条件1
语句组1
elseif条件2
语句组2
……
elseif条件m
语句组m
else
语句组n
end
②switch语句
switch语句根据表达式的取值不同,分别执行不同的语句,其语句格式为:
switch表达式
case表达式1
语句组1
case表达式2
语句组2
……
case表达式m
语句组m
otherwise
语句组n
end
③try语句
语句格式为:
try
语句组1
catch
语句组2
end
(3)循环结构:
①for语句
for语句的格式为:
for循环变量=表达式1:
表达式2:
表达式3
循环体语句
end
②while语句
while语句的一般格式为:
while(条件)
循环体语句
end
③break语句和continue语句
与循环结构相关的语句还有break语句和continue语句。
4.命令文件与函数文件的主要区别是什么?
答:
(1)命令文件是一系列命令的组合,函数文件的第一行必须用function说明;
(2)命令文件没有输入参数,也不用返回参数,函数文件可以接受输入参数,也可以返回参数;
(3)命令文件处理的变量为工作空间变量,函数文件处理的变量为函数内部的局部变量,也可以处理全局变量。
命令文件
1.多条命令的综合体
2.没有输入、输出变量
3.使用MATLAB基本工作空间
4.没有函数声明行
函数文件
1.常用于扩充MATLAB函数库
2.可以包含输入、输出变量
3.运算中生成的所有变量都存放在函数工作空间
4.包含函数声明行
5.什么是全局变量和局部变量?
答:
全局变量是没有定义存储类型的外部变量,其作用域是从定义点到程序结束,省略了存储类型符,系统将默认为是自动型
局部变量也称为内部变量。
局部变量是在函数内作定义说明的。
其作用域仅限于函数内,离开该函数后再使用这种变量是非法的。
如果一个函数内的变量没有特别声明,那么这个变量只在函数内部使用,即为局部变量,如果两个或多个函数公用一个变量(或者说在子程序中也要用到主程序中的变量,注意不是参数),那么可以用global来将它声明为全局变量。
全局变量的使用可以减少参数传递,合理利用全局变量可以提高程序执行效率。
如果需要用到其他函数的变量,就要利用在主程序与子程序中分别声明全局变量的方式实现变量的传递,否则函数体内使用的都为局部变量。
6.数据插值和曲线拟合区别?
答:
有这样一组数据(Xi,Yi),i=1,2,3,。
。
。
。
。
,寻找Y与X之间的关系Y=F(X),就要根据这组数据求出其近似关系Y=G(X)。
插值与曲线拟合实际上是求这个近似关系的两种方法,不同的是,插值方法求出的插值多项式要求所有的数据点(Xi,Yi)都在曲线上,而拟合求出的插值多项式只要反应数据的基本趋势就可以了,并不要求所有的数据点都在拟合曲线上。
但是,利用插值方法更多的依赖于插值点,比如选择插值点前后N个数值。
。
如果插值点很多,就不好利用插值法了,最好用曲线拟合,这样求出的曲线具有一定的函数关系,只要把要求的数据点代入,就可以得出结果。
7.数值运算与符号运算的区别?
答:
数值运算:
求出具体的数值,不含符号。
(如解方程,求出未知数=1.565656,不是未知数=ab+c)数值计算是MATLAB最基本、最重要的功能,是MATLAB最具代表性的特点。
MATLAB在数值计算过程中以数组和矩阵为基础。
数组是MATLAB运算中的重要数据组织形式。
符号运算:
带有符号变量、表达式的运算称为抽象计算即符号计算,MATLAB借助于MAPLE符号数学特长,建立并发展了强大的符号运算功能。
结果用符号表示。
8.GUI开发环境中提供了哪些方便的工具?
各有什么用途?
答:
①布局编辑器(LayoutEdtor)-------在图形窗口中加入及安排对象。
②几何排列工具(AlignmentTool)-----调整各对象相互之间的几何关系和位置
③属性编辑器(PropertyInspector)-----查询并设置属性值
④对象浏览器(ObjectBrowser)-----用于获得当前MATLAB图形用户界面程序中所有的全部对象信息,对象的类型,同时显示控件的名称和标识,在控件上双击鼠标可以打开该控件的属性编辑器。
⑥菜单编辑器(MenuEditor)-----建立窗口菜单条的菜单和任何构成布局的弹出菜单
9.简述Simulink建立子系统的两种方法及其子系统封装的4个选项
答:
建立子系统有两种方法:
通过Subsystem模块建立子系统和通过已有的模块建立子系统。
两者的区别是:
前者先建立子系统,再为其添加功能模块;后者先选择模块,再建立子系统。
子系统的封装主要就是对这4页参数进行设置:
Icon、Parameters、Initialization和Documentation。
10.分别采用函数fix、floor、ceil和round对A=[-1.95,-1.25,1.45,1.85]取整,并说明这些取整函数的区别。
答:
A=[-1.95,-1.25,1.45,1.85];
B=fix(A)
B=[-1-111]
Fix函数为取截尾取整。
C=floor(A)
C=[-2-211]
Floor函数为取不超过x 的最大整数(高斯取整)。
D=ceil(A)
D=[-1-122]
Ceil函数为取大于x的最小整数。
E=round(A)
E=[-2-112]
Round函数为取四舍五入取整后的整数。
11.求A=[1,2,3;4,5,6;7,8,9]矩阵的秩,迹,特征值和特征向量、范数和方阵的条件数;并求A和a=magic(5)矩阵行列式,逆矩阵和伪逆矩阵,并说明逆矩阵和伪逆矩阵区别。
答:
A的秩:
rank(A);ans=2
A的迹:
trace(A);ans=15
[V,D]=eig(A)
A的特征向量:
V=
-0.2320-0.78580.4082
-0.5253-0.0868-0.8165
-0.81870.61230.4082
A的特征值为D的对角线元素:
D=
16.116800
0-1.11680
A的范数:
norm(A);ans=16.8481(2阶范数)
方阵的条件数:
rcond(A);ans=1.5420e-018
A的矩阵行列式:
det(A);ans=6.6613e-016
a的矩阵行列式:
a=magic(5);det(a);ans=5.0700e+006
A的逆矩阵:
inv(A)
Warning:
Matrixisclosetosingularorbadlyscaled.
Resultsmaybeinaccurate.RCOND=1.541976e-018.
ans=
1.0e+016*
-0.45040.9007-0.4504
0.9007-1.80140.9007
-0.45040.9007-0.4504
A的伪逆矩阵:
pinv(A)
ans=
-0.6389-0.16670.3056
-0.05560.00000.0556
0.52780.1667-0.1944
a的逆矩阵:
inv(a)
ans=
-0.00490.0512-0.03540.00120.0034
0.0431-0.0373-0.00460.01270.0015
-0.03030.00310.00310.00310.0364
0.0047-0.00650.01080.0435-0.0370
0.00280.00500.0415-0.04500.0111
a的伪逆矩阵:
pinv(a)
ans=
-0.00490.0512-0.03540.00120.0034
0.0431-0.0373-0.00460.01270.0015
-0.03030.00310.00310.00310.0364
0.0047-0.00650.01080.0435-0.0370
0.00280.00500.0415-0.04500.0111
逆矩阵和伪逆矩阵的区别:
对于矩阵A,如果存在一个矩阵B,使得AB=BA=E,其中E为与A,B同维数的单位阵,就称A为可逆矩阵(或者称A可逆),并称B是A的逆矩阵,简称逆阵。
(此时的逆称为凯利逆)
矩阵A可逆的充分必要条件是|A|≠0。
伪逆矩阵是逆矩阵的广义形式。
由于奇异矩阵或非方阵的矩阵不存在逆矩阵,但可以用函数pinv(A)求其伪逆矩阵。
基本语法为X=pinv(A),X=pinv(A,tol),其中tol为误差,pinv为pseudo-inverse的缩写:
max(size(A))*norm(A)*eps。
函数返回一个与A的转置矩阵A'同型的矩阵X,并且满足:
AXA=A,XAX=X.此时,称矩阵X为矩阵A的伪逆,也称为广义逆矩阵。
pinv(A)具有inv(A)的部分特性,但不与inv(A)完全等同。
如果A为非奇异方阵,pinv(A)=inv(A),但却会耗费大量的计算时间,相比较而言,inv(A)花费更少的时间。
12.已知:
a=6;A=pascal(4);B=randn(4);求A*B,A.*B,B/A,B./A,B\A,B.\A,A.^a,A^a,并且说明数组和矩阵在上述运算中的区别。
答:
A=pascal(4)
A=
1111
1234
13610
141020
B=randn(4)
B=
-1.06890.3252-0.1022-0.8649
-0.8095-0.7549-0.2414-0.0301
-2.94431.37030.3192-0.1649
1.4384-1.71150.31290.6277
A*B
ans=
-3.3843-0.77100.2884-0.4321
-5.7672-3.91981.62391.0912
-6.7793-10.83304.21724.3328
-4.9821-23.22198.38129.9203
A.*B
ans=
-1.06890.3252-0.1022-0.8649
-0.8095-1.5099-0.7243-0.1202
-2.94434.11091.9152-1.6488
1.4384-6.84613.128612.5541
B/A
ans=
-5.77079.4959-6.28041.4863
0.3558-3.14622.7419-0.7610
-18.557232.8440-23.16375.9327
16.6463-34.149825.8257-6.8838
B./A
ans=
-1.06890.3252-0.1022-0.8649
-0.8095-0.3775-0.0805-0.0075
-2.94430.45680.0532-0.0165
1.4384-0.42790.03130.0314
B\A
ans=
-0.6348-1.6245-2.9494-4.6346
-1.1688-2.9031-5.9575-10.7762
1.76796.363716.299433.0876
-1.0201-0.9924-1.6780-3.3918
B.\A
ans=
-0.93563.0751-9.7807-1.1562
-1.2353-2.6493-12.4251-133.1057
-0.33962.189318.7966-60.6505
0.6952-2.337131.963331.8620
a=6;A.^a
ans=
1111
1647294096
1729466561000000
14096100000064000000
a=6;A^a
ans=
12000894011200913368017222240
4011200134072573052905657564976
91336803052905669516457131078976
1722224057564976131078976247160297
上述运算中涉及到点乘和乘的概念,
(1)点乘表示两个矩阵对应位置元素相乘,所以这两个矩阵应该是尺寸等大的。
例如:
>> a = [1 2 3;2 3 4];
>> b = [1 2 3;2 3 4];
>> a.*b
ans = [1494916]
>> c = [1 2 3;1 2 3;1 2 3];
>> a.*c
?
?
?
Error using ==> times
Matrix dimensions must agree.
这里a无法点乘c,因为这两个不是相同尺寸的矩阵。
(2)而乘*,这个和我们在数学中学到的矩阵相乘是一个意义。
例如:
>>a*c
ans =[6121891827]
“.^”和“^”区别实际上就是点乘与乘的区别。
因为求幂实际上也是乘法;
(矩阵的点除(./)与点乘(.*)类似.)。
然后还有左除(\)和右除(/)的区别:
A*X=B的解为X=A\B(左除)
X*B=A的解为X=A/B(右除)
13.分别采用不循环语句和循环语句For和while计算级数:
S=1+6+62+63+···+633,并且说明循环语句For和while之间的区别。
答:
不用循环语句:
a=0:
1:
33;
b=6;
m=b.^a;
s=sum(m(:
))
>>s=5.7302e+025
For循环:
s=0;
fori=0:
1:
33
s=s+6^i;
end
s
>>s=5.7302e+025
While循环:
s=0;i=0;
while(i<=33)
s=s+6^i;
i=i+1;
end
disp(s)
>>s=5.7302e+025
For循环,执行过程是依次将矩阵的各列元素赋给循环变量,然后执行循环体语句,直至各列元素处理完毕。
而while循环,其执行过程为:
若条件成立,则执行循环体语句,执行后再判断条件是否成立,如果不成立则跳出循环。
14.采用M函数文件编写特殊矩阵函数Hilbter,Hilbter矩阵特点是每个元素
,并且调用matlab中的函数Hilb,进行对比。
答:
Matlab中的函数Hilb如下:
functionH=hilb(n,classname)
%HILBHilbertmatrix.
%HILB(N)istheNbyNmatrixwithelements1/(i+j-1),
%whichisafamousexampleofabadlyconditionedmatrix.
%SeeINVHILBfortheexactinverse.
%
%HILB(N,CLASSNAME)producesamatrixofclassCLASSNAME.
%CLASSNAMEmustbeeither'single'or'double'(thedefault).
%
%ThisisalsoagoodexampleofefficientMATLABprogramming
%stylewhereconventionalFORorDOloopsarereplacedby
%vectorizedstatements.Thisapproachisfaster,butuses
%morestorage.
%
%SeealsoINVHILB.
%Copyright1984-2005TheMathWorks,Inc.
%$Revision:
5.10.4.4$$Date:
2005/11/1814:
14:
30$
ifnargin<2
classname='double';
else%nargin==2
if~strcmpi(classname,'double')&&~strcmpi(classname,'single')
error('MATLAB:
hilb:
notSupportedClass',...
'CLASSNAMEmustbe''double''or''single''.');
end
end
%I,JandEarematriceswhose(i,j)-thelement
%isi,jand1respectively.
J=1:
cast(n,classname);
J=J(ones(n,1),:
);
I=J';
E=ones(n,classname);
H=E./(I+J-1);
调用hilb函数,若n=4时,
hilb(4)
ans=
1.00000.50000.33330.2500
0.50000.33330.25000.2000
0.33330.25000.20000.1667
0.2500