matlab经典习题及解答 下载本文

第1章 MATLAB概论

1.1 与其他计算机语言相比较,MATLAB语言突出的特点是什么?

MATLAB具有功能强大、使用方便、输入简捷、库函数丰富、开放性强等特点。 1.2 MATLAB系统由那些部分组成?

MATLAB系统主要由开发环境、MATLAB数学函数库、MATLAB语言、图形功能和应用程序接口五个部分组成。 1.3 安装MATLAB时,在选择组件窗口中哪些部分必须勾选,没有勾选的部分以后如何补安装?

在安装MATLAB时,安装内容由选择组件窗口中个复选框是否被勾选来决定,可以根据自己的需要选择安装内容,但基本平台(即MATLAB选项)必须安装。第一次安装没有选择的内容在补安装时只需按照安装的过程进行,只是在选择组件时只勾选要补装的组件或工具箱即可。

1.4 MATLAB操作桌面有几个窗口?如何使某个窗口脱离桌面成为独立窗口?又如何将脱离出去的窗口重新放置到桌面上?

在MATLAB操作桌面上有五个窗口,在每个窗口的右上角有两个小按钮,一个是关闭窗口的Close按钮,一个是可以使窗口成为独立窗口的Undock按钮,点击Undock按钮就可以使该窗口脱离桌面成为独立窗口,在独立窗口的view菜单中选择Dock ??菜单项就可以将独立的窗口重新防止的桌面上。

1.5 如何启动M文件编辑/调试器?

在操作桌面上选择“建立新文件”或“打开文件”操作时,M文件编辑/调试器将被启动。在命令窗口中键入edit命令时也可以启动M文件编辑/调试器。

1.6 存储在工作空间中的数组能编辑吗?如何操作?

存储在工作空间的数组可以通过数组编辑器进行编辑:在工作空间浏览器中双击要编辑的数组名打开数组编辑器,再选中要修改的数据单元,输入修改内容即可。

1.7 命令历史窗口除了可以观察前面键入的命令外,还有什么用途?

命令历史窗口除了用于查询以前键入的命令外,还可以直接执行命令历史窗口中选定的内容、将选定的内容拷贝到剪贴板中、将选定内容直接拷贝到M文件中。

1.8 如何设置当前目录和搜索路径,在当前目录上的文件和在搜索路径上的文件有什么区别?

当前目录可以在当前目录浏览器窗口左上方的输入栏中设置,搜索路径可以通过选择操作桌面的file菜单中的Set Path菜单项来完成。在没有特别说明的情况下,只有当前目录和搜索路径上的函数和文件能够被MATLAB运行和调用,如果在当前目录上有与搜索路径上相同文件名的文件时则优先执行当前目录上的文件,如果没有特别说明,数据文件将存储在当前目录上。

1.9 在MATLAB中有几种获得帮助的途径? 在MATLAB中有多种获得帮助的途径:

(1)帮助浏览器:选择view菜单中的Help菜单项或选择Help菜单中的MATLAB Help菜单项可以打开帮助浏览器; (2)help命令:在命令窗口键入“help” 命令可以列出帮助主题,键入“help 函数名”可以得到指定函数的在线帮助信息;

(3)lookfor命令:在命令窗口键入“lookfor 关键词”可以搜索出一系列与给定关键词相关的命令和函数 (4)模糊查询:输入命令的前几个字母,然后按Tab键,就可以列出所有以这几个字母开始的命令和函数。 注意:lookfor和模糊查询查到的不是详细信息,通常还需要在确定了具体函数名称后用help命令显示详细信息。

第2章 MATLAB矩阵运算基础

2.1 在MATLAB中如何建立矩阵?>> a=[5 7 3;4 9 1]

2.2 有几种建立矩阵的方法?各有什么优点? 可以用四种方法建立矩阵:

①直接输入法,如a=[2 5 7 3],优点是输入方法方便简捷;

②通过M文件建立矩阵,该方法适用于建立尺寸较大的矩阵,并且易于修改; ③由函数建立,如y=sin(x),可以由MATLAB的内部函数建立一些特殊矩阵; ④通过数据文件建立,该方法可以调用由其他软件产生数据。

?573??,并将其赋予变量a?

?491?

2.3 在进行算术运算时,数组运算和矩阵运算各有什么要求?

进行数组运算的两个数组必须有相同的尺寸。进行矩阵运算的两个矩阵必须满足矩阵运算规则,如矩阵a与b相乘(a*b)时必须满足a的列数等于b的行数。

2.4 数组运算和矩阵运算的运算符有什么区别?

在加、减运算时数组运算与矩阵运算的运算符相同,乘、除和乘方运算时,在矩阵运算的运算符前加一个点即为数组运算,如a*b为矩阵乘,a.*b为数组乘。

?535??242?????2.5 计算矩阵?374?与?679?之和。

??798????836??>> a=[5 3 5;3 7 4;7 9 8]; >> b=[2 4 2;6 7 9;8 3 6]; >> a+b ans =

7 7 7 9 14 13 15 12 14

2.6 求x???4?8i3?5i2?7i1?4i7?5i??的共轭转置。

3?2i7?6i9?4i3?9i4?4i??>> x=[4+8i 3+5i 2-7i 1+4i 7-5i;3+2i 7-6i 9+4i 3-9i 4+4i]; >> x’ ans =

4.0000 - 8.0000i 3.0000 - 2.0000i 3.0000 - 5.0000i 7.0000 + 6.0000i 2.0000 + 7.0000i 9.0000 - 4.0000i 1.0000 - 4.0000i 3.0000 + 9.0000i 7.0000 + 5.0000i 4.0000 - 4.0000i

2.7 计算a???693??241?b?与??468?的数组乘积。

275????>> a=[6 9 3;2 7 5]; >> b=[2 4 1;4 6 8]; >> a.*b ans =

12 36 3 8 42 40

2.8 “左除”与“右除”有什么区别?

在通常情况下,左除x=a\\b是a*x=b的解,右除x=b/a是x*a=b的解,一般情况下,a\\b?b/a。

?492??37?????2.9 对于AX?B,如果A??764?,B??26?,求解X。

???357???28??>> A=[4 9 2;7 6 4;3 5 7];

>> B=[37 26 28]’; >> X=A\\B X = -0.5118 4.0427 1.3318

?123???2.10 已知:a??456?,分别计算a的数组平方和矩阵平方,并观察其结果。

??789??>> a=[1 2 3;4 5 6;7 8 9]; >> a.^2 ans =

1 4 9 16 25 36 49 64 81 >> a^2 ans =

30 36 42 66 81 96 102 126 150

2.11 a???125??8?74?b?,??362?,观察a与b之间的六种关系运算的结果。

?36?4???>> a=[1 2 3;4 5 6]; >> b=[8 –7 4;3 6 2]; >> a>b ans =

0 1 0 1 0 1 >> a>=b ans =

0 1 0 1 0 1 >> a

1 0 1 0 1 0 >> a<=b ans =

1 0 1 0 1 0 >> a==b ans =

0 0 0

0 0 0 >> a~=b ans =

1 1 1 1 1 1

2.12 a??50.2

2.13 在sin(x)运算中,x是角度还是弧度?

在sin(x)运算中,x是弧度,MATLAB规定所有的三角函数运算都是按弧度进行运算。

2.14 角度x??304560?,求x的正弦、余弦、正切和余切。 >> x=[30 45 60]; >> x1=x/180*pi; >> sin(x1) ans =

0.5000 0.7071 0.8660 >> cos(x1) ans =

0.8660 0.7071 0.5000 >> tan(x1) ans =

0.5774 1.0000 1.7321 >> cot(x1) ans =

1.7321 1.0000 0.5774

2.15 用四舍五入的方法将数组[2.4568 6.3982 3.9375 8.5042]取整。 >> b=[2.4568 6.3982 3.9375 8.5042]; >> round(b) ans =

2 6 4 9

0?8?0.7?,在进行逻辑运算时,a相当于什么样的逻辑量。

相当于a=[1 1 0 1 1]。

?912???2.16 矩阵a??563?,分别对a进行特征值分解、奇异值分解、LU分解、QR分解及Chollesky 分解。

??827??>> [v,d]=eig(a,b) v =

-0.4330 -0.2543 -0.1744 -0.5657 0.9660 -0.6091 -0.7018 0.0472 0.7736 d =

13.5482 0 0 0 4.8303 0

0 0 3.6216 >> a=[9 1 2;5 6 3;8 2 7]; >> [u,s,v]=svd(a) u =

-0.5601 0.5320 -0.6350 -0.4762 -0.8340 -0.2788 -0.6779 0.1462 0.7204 s =

15.5234 0 0 0 4.5648 0 0 0 3.3446 v =

-0.8275 0.3917 -0.4023 -0.3075 -0.9156 -0.2592 -0.4699 -0.0907 0.8781 >> [l,u]=lu(a) l =

1.0000 0 0 0.5556 1.0000 0 0.8889 0.2041 1.0000 u =

9.0000 1.0000 2.0000 0 5.4444 1.8889 0 0 4.8367 >> [q,r]=qr(a) q =

-0.6903 0.3969 -0.6050 -0.3835 -0.9097 -0.1592 -0.6136 0.1221 0.7801 r =

-13.0384 -4.2183 -6.8260 0 -4.8172 -1.0807 0 0 3.7733 >> c=chol(a) c =

3.0000 0.3333 0.6667 0 2.4267 1.1447 0 0 2.2903

2.17 将矩阵a???42??71??59?、b??和c?????组合成两个新矩阵: 758362??????(1)组合成一个4?3的矩阵,第一列为按列顺序排列的a矩阵元素,第二列为按列顺序排列的b矩阵元素,第三列为按列顺序排列的c矩阵元素,即

?4?5 ??2??775?86?? 19??32?2778135692?

(2)按照a、b、c的列顺序组合成一个行矢量,即 ?45 >> a=[4 2;5 7]; >> b=[7 1;8 3]; >> c=[5 9;6 2]; % (1)

>> d=[a(:) b(:) c(:)] d =

4 7 5 5 8 6 2 1 9 7 3 2 % (2)

>> e=[a(:);b(:);c(:)]' e =

4 5 2 7 7 8 1 3 5 6 9 2 或利用(1)中产生的d >> e=reshape(d,1,12) ans =

4 5 2 7 7 8 1 3 5 6 9 2

第3章 数值计算基础

3.1 将(x-6)(x-3)(x-8)展开为系数多项式的形式。 >> a=[6 3 8]; >> pa=poly(a); >> ppa=poly2sym(pa) ppa =

x^3-17*x^2+90*x-144

3.2 求解多项式x3

-7x2+2x+40=0的根。

>> r=[1 -7 2 40]; >> p=roots(r); -0.2151 0.4459 0.7949 0.2707

3.3 求解在x=8时多项式(x-1)(x-2) (x-3)(x-4)的值。 >> p=poly([1 2 3 4]); >> polyvalm(p,8) ans = 840

3.4 计算多项式乘法(x+2x+2)(x+5x+4)。 >> c=conv([1 2 2],[1 5 4]) c =

1 7 16 18 8

3.5 计算多项式除法(3x+13x+6x+8)/(x+4)。 >> d=deconv([3 13 6 8],[1 4]) d =

3 1 2

3.6 对下式进行部分分式展开:

3

2

2

2

3x4?2x3?5x2?4x?6x5?3x4?4x3?2x2?7x?2

>> a=[1 3 4 2 7 2]; >> b=[3 2 5 4 6]; >> [r,s,k]=residue(b,a) r =

1.1274 + 1.1513i 1.1274 - 1.1513i -0.0232 - 0.0722i -0.0232 + 0.0722i 0.7916 s =

-1.7680 + 1.2673i -1.7680 - 1.2673i 0.4176 + 1.1130i 0.4176 - 1.1130i -0.2991 k = []

4323.7 计算多项式4x?12x?14x?5x?9的微分和积分。

>> p=[4 –12 –14 5]; >> pder=polyder(p); >> pders=poly2sym(pder) >> pint=polyint(p); >> pints=poly2sym(pint) pders =

12*x^2-24*x-14 pints =

x^4-4*x^3-7*x^2+5*x

?290??13?????3.8 解方程组?3411?x??6?。

???226???6?? >> a=[2 9 0;3 4 11;2 2 6]; >> b=[13 6 6]'; >> x=a\\b x = 7.4000 -0.2000 -1.4000

3.9 求欠定方程组??2474??8?x???的最小范数解。 ??9356??5? >> a=[2 4 7 4;9 3 5 6]; >> b=[8 5]'; >> x=pinv(a)*b x = -0.2151 0.4459 0.7949 0.2707

3.10 有一组测量数据如下表所示,数据具有y=x的变化趋势,用最小二乘法求解y。

x y

>> x=[1 1.5 2 2.5 3 3.5 4 4.5 5]'

>> y=[-1.4 2.7 3 5.9 8.4 12.2 16.6 18.8 26.2]' >> e=[ones(size(x)) x.^2] >> c=e\\y

>> x1=[1:0.1:5]';

>> y1=[ones(size(x1)),x1.^2]*c; >> plot(x,y,'ro',x1,y1,'k')

1 -1.4 1.5 2.7 2 3 2.5 5.9 3 8.4 3.5 12.2 4 16.6 4.5 18.8 5 26.2 2

?42?6???3.11 矩阵a??754?,计算a的行列式和逆矩阵。

??349?? >> a=[4 2 -6;7 5 4 ;3 4 9]; >> ad=det(a) >> ai=inv(a) ad = -64 ai =

-0.4531 0.6562 -0.5937 0.7969 -0.8437 0.9062 -0.2031 0.1562 -0.0937

3.12 y=sin(x),x从0到2?,?x=0.02?,求y的最大值、最小值、均值和标准差。 >> x=0:0.02*pi:2*pi; >> y=sin(x); >> ymax=max(y) >> ymin=min(y) >> ymean=mean(y) >> ystd=std(y) ymax = 1 ymin = -1 ymean = 2.2995e-017 ystd = 0.7071

3.13 x??12345?,y??2 >> x=[1 2 3 4 5]; >> y=[2 4 6 8 10]; >> cx=cov(x) >> cy=cov(y) >> cxy=cov(x,y) cx = 2.5000 cy = 10 cxy =

2.5000 5.0000 5.0000 10.0000

3.14 参照例3-20的方法,计算表达式z?10x3?y5e?x46810?,计算x的协方差、y的协方差、x与y的互协方差。

??2?y2的梯度并绘图。

>> v = -2:0.2:2; >> [x,y] = meshgrid(v);

>> z=10*(x.^3-y.^5).*exp(-x.^2-y.^2); >> [px,py] = gradient(z,.2,.2); >> contour(x,y,z) >> hold on

>> quiver(x,y,px,py) >> hold off

3.15 有一正弦衰减数据y=sin(x).*exp(-x/10),其中x=0:pi/5:4*pi,用三次样条法进行插值。 >> x0=0:pi/5:4*pi; >> y0=sin(x0).*exp(-x0/10); >> x=0:pi/20:4*pi; >> y=spline(x0,y0,x); >> plot(x0,y0,'or',x,y,'b')

第4章 符号数学基础

4.1 创建符号变量有几种方法?

MATLAB提供了两种创建符号变量和表达式的函数:sym和syms。

sym用于创建一个符号变量或表达式,用法如x=sym(‘x’) 及 f=sym(‘x+y+z’),syms用于创建多个符号变量,用法如syms x y z。

f=sym(‘x+y+z’) 相当于 syms x y z f= x+y+z

4.2 下面三种表示方法有什么不同的含义? (1)f=3*x^2+5*x+2 (2)f='3*x^2+5*x+2' (3)x=sym('x') f=3*x^2+5*x+2 (1)f=3*x^2+5*x+2

表示在给定x时,将3*x^2+5*x+2的数值运算结果赋值给变量f,如果没有给定x则指示错误信息。 (2)f='3*x^2+5*x+2'

表示将字符串'3*x^2+5*x+2'赋值给字符变量f,没有任何计算含义,因此也不对字符串中的内容做任何分析。 (3)x=sym('x') f=3*x^2+5*x+2

表示x是一个符号变量,因此算式f=3*x^2+5*x+2就具有了符号函数的意义,f也自然成为符号变量了。

4.3 用符号函数法求解方程at+b*t+c=0。 >> r=solve('a*t^2+b*t+c=0','t') r =

[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]

4.4 用符号计算验证三角等式:

sin(?1)cos(?2)-cos(?1)sin(?2) =sin(?1-?2) >> syms phi1 phi2;

>> y=simple(sin(phi1)*cos(phi2)-cos(phi1)*sin(phi2)) y =

sin(phi1-phi2)

4.5 求矩阵A??2

?a11?a21a12?的行列式值、逆和特征根。 a22?? >> syms a11 a12 a21 a22; >> A=[a11,a12;a21,a22]

>> AD=det(A) % 行列式 >> AI=inv(A) % 逆 >> AE=eig(A) % 特征值 A = [ a11, a12] [ a21, a22] AD =

a11*a22-a12*a21 AI =

[ -a22/(-a11*a22+a12*a21), a12/(-a11*a22+a12*a21)] [ a21/(-a11*a22+a12*a21), -a11/(-a11*a22+a12*a21)] AE =

[ 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)]

4324.6 因式分解:x?5x?5x?5x?6

>> syms x;

>> f=x^4-5*x^3+5*x^2+5*x-6; >> factor(f) ans =

(x-1)*(x-2)*(x-3)*(x+1)

?a4.7 f???ax?e1?x?,用符号微分求df/dx。

?log(x)sin(x)?x2 >> syms a x;

>> f=[a, x^2, 1/x; exp(a*x), log(x), sin(x)]; >> df=diff(f) df =

[ 0, 2*x, -1/x^2] [ a*exp(a*x), 1/x, cos(x)]

??ax2?by?c?04.8 求代数方程组?关于x,y的解。

??x?y?0 >> S=solve('a*x^2+b*y+c=0','b*x+c=0','x','y'); >> disp('S.x=') , disp(S.x) >> disp('S.y=') , disp(S.y) S.x= -c/b S.y=

-c*(a*c+b^2)/b^3

4.9 符号函数绘图法绘制函数x=sin(3t)cos(t),y=sin(3t)sin(t)的图形,t的变化范围为[0,2?]。 >> syms t

>> ezplot(sin(3*t)*cos(t),sin(3*t)*sin(t),[0,pi])

4.10 绘制极坐标下sin(3*t)*cos(t)的图形。

>> syms t

>> ezpolar(sin(3*t)*cos(t))

第5章 基本图形处理功能

5.1 绘制曲线y?x3?x?1,x的取值范围为[-5,5]。 >> x=-5:0.2:5; >> y=x.^3+x+1; >> plot(x,y)

5.2 有一组测量数据满足y?e-at,t的变化范围为0~10,用不同的线型和标记点画出a=0.1、a=0.2和a=0.5三种情况下的曲线。

>> t=0:0.5:10; >> y1=exp(-0.1*t); >> y2=exp(-0.2*t); >> y3=exp(-0.5*t);

>> plot(t,y1,'-ob',t,y2,':*r',t,y3,'-.^g')

5.3 在5.1题结果图中添加标题y?e-at,并用箭头线标识出各曲线a的取值。 >> title('\\ity\\rm=e^{-\\itat}')

>> title('\\ity\\rm=e^{-\\itat}','FontSize',12)

>> text(t(6),y1(6),'\\leftarrow\\ita\\rm=0.1','FontSize',11) >> text(t(6),y2(6),'\\leftarrow\\ita\\rm=0.2','FontSize',11) >> text(t(6),y3(6),'\\leftarrow\\ita\\rm=0.5','FontSize',11)

5.4 在5.1题结果图中添加标题y?e-at和图例框。 >> title('\\ity\\rm=e^{-\\itat}','FontSize',12) >> legend('a=0.1','a=0.2','a=0.5')

5.5表中列出了4个观测点的6次测量数据,将数据绘制成为分组形式和堆叠形式的条形图。

观测点1 观测点2 观测点3 观测点4 >> bar(y)

第1次 3 6 9 6 第2次 6 7 7 4 第3次 7 3 2 3 第4次 4 2 5 2 第5次 2 4 8 7 第6次 8 7 4 4 >> y=[3 6 9 6;6 7 7 4;7 3 2 3;4 2 5 2;2 4 8 7;8 7 4 4];

>> bar(y,’stack’)

5.6 x= [66 49 71 56 38],绘制饼图,并将第五个切块分离出来。 >> x=[66 49 71 56 38]; >> L=[0 0 0 0 1]; >> pie(x,L)

5.7 z?xe?x2?y2,当x和y的取值范围均为-2到2时,用建立子窗口的方法在同一个图形窗口中绘制出三维线图、网

线图、表面图和带渲染效果的表面图。

>> [x,y]=meshgrid([-2:.2:2]); >> z=x.*exp(-x.^2-y.^2); >> mesh(x,y,z)

>> subplot(2,2,1), plot3(x,y,z) >> title('plot3 (x,y,z)') >> subplot(2,2,2), mesh(x,y,z) >> title('mesh (x,y,z)') >> subplot(2,2,3), surf(x,y,z) >> title('surf (x,y,z)')

>> subplot(2,2,4), surf(x,y,z), shading interp >> title('surf (x,y,z), shading interp')

5.8 绘制peaks函数的表面图,用colormap函数改变预置的色图,观察色彩的分布情况。 >> surf(peaks(30));

>> colormap(hot)

>> colormap(cool)

>> colormap(lines)

5.9 用sphere函数产生球表面坐标,绘制不通明网线图、透明网线图、表面图和带剪孔的表面图。 >> [x,y,z]=sphere(30); >> mesh(x,y,z)

>> mesh(x,y,z),hidden off

>> surf(x,y,z)

>> z(18:30,1:5)=NaN*ones(13,5); >> surf(x,y,z)

5.10 将5.9题中的带剪孔的球形表面图的坐标改变为正方形,以使球面看起来是圆的而不是椭圆的,然后关闭坐标轴的

显示。

axis square axis off

第6章 高级图形处理功能

6.1 轴对象是使用的最多的图形对象之一,那么轴对象是哪个对象的子对象,又是那些对象的父对象? 轴对象是图形窗口对象的子对象,是图像、灯光、线、块、矩形、表面、字的父对象。

6.2 什么是图形句柄?图形句柄有什么用途?

图形句柄是每个图形对象从产生时起就被赋予的一个唯一的标识。利用图形句柄既可以操纵一个已经存在的图形对象的属性,也可以在建立图形对象时指定属性的值,特别是对指定对象句柄的操作不会影响同时存在的其他对象,这是非常有用的。

6.3 如何设置和获取指定句柄对象的属性值?一图形窗口对象的句柄为h,先查询该窗口对象可以设置的各种属性,再将窗口的灰色背景设置为白色背景。

(1)利用set(句柄,‘属性名称’,属性值)语句可以设置指定对象的属性,get(句柄,‘属性名称’)语句可以获得指定对象的属性。

(2)>> set(h)

Alphamap

BackingStore: [ {on} | off ]

CloseRequestFcn: string -or- function handle -or- cell array Color Colormap CurrentAxes CurrentCharacter CurrentObject

??

从列出的属性内容可以看到,设置背景颜色的属性名为Color,因此

>> set(h,’color’,’w’) 即可将图形窗口的背景色改为白色。

6.4 已知三维图形视角的缺省值是方位角为-37.5°,仰角为30°,将观察点顺时针旋转20?角的命令是什么? >> view(-57.5,30)

6.5画一双峰曲面(peaks)图,加灯光light,改变光源的位置观察图形的变化。 >> surf(peaks)

>> shading interp >> lighting phong

>> light('Position',[-3 -2 1]);

>> light('Position',[-1 0 1]);

6.6 在双峰曲面上改变不同的光照模式,观察效果。 >> surf(peaks) >> shading interp

>> light('Position',[-3 -2 1]); >> lighting flat

>> lighting gouraud

>> lighting phong

>> lighting none

6.7 用subplot语句在一个图形窗口上开多个大小不等的子窗口进行绘图并添加注释,见图。

>> subplot('position',[0.1,0.15,0.3,0.65])

>> hist(randn(1,1000),20); >> xlabel('直方图')

>> subplot('position',[0.45,0.52,0.25,0.28]) >> [xp,yp,zp]=peaks; >> contour(xp,yp,zp,15,'k') >> hold on

>> pcolor(xp,yp,zp) >> shading interp >> hold off >> axis off

>> text(-1.2,-4,'伪彩色图')

>> subplot('position',[0.72,0.5,0.25,0.3]) >> sphere(25);

>> axis equal,axis([-0.75,0.75,-0.75,0.75,-0.75,0.75]) >> light('Position',[1 3 2]); >> light('Position',[-3 -1 3]); >> material shiny >> axis off

>> text(-0.8,-0.7,-1,'三维图')

>> subplot('position',[0.45,0.15,0.5,0.25]) >> t=0:pi/15:pi;

>> y=sin(4*t).*sin(t)/2;

>> plot(t,y,'-bs','LineWidth',2,... %设置线型 'MarkerEdgeColor','k',... %设置标记点边缘颜色 'MarkerFaceColor','y',... %设置标记点填充颜色 'MarkerSize',5) >> axis([0,3.14,-0.5,0.5]) >> xlabel('带标记点的线图')

>> subplot('position',[0.1,0.9,0.8,0.1]) >> text(0.25,0.2,'多窗口绘图示例',...

>> 'fontsize',25,'fontname','隶书','color','b') >> axis off

6.8 用[c,hc]=contour(peaks(30))语句绘制双峰曲面的等高线图,通过控制图形句柄的方法将第四条等高线加粗为2磅,将第六条等高线表示为虚线,在第十条等高线上加星号标记

>> [c,hc]=contour(peaks(30)); >> set(hc(4),'linewidth',2)

>> set(hc(6),'edgecolor',[1,0.8,0],'linestyle',':') >> set(hc(10),'marker','*')

6.9 做一个花瓶,如图示。(提示:做一个旋转体表面,调入一幅图像对该表面进行彩绘,即用图像的色图索引作为表面体的色图索引)

>> t=(0:20)/20; >> r=sin(2*pi*t)+2;

>> [x,y,z]=cylinder(r,40); % 产生旋转体表面的三维数据 >> cx=imread('flowers.tif'); % 读取名为flowers.tif的图象文件

>> [c,map]=rgb2ind(cx,256); % 真彩色图转换为索引图(若读入的是索引图,不需转换) >> c1=double(c)+1; % 把unit8编址图象数据变换为双精度格式 >> surface(x,y,z,'Cdata',flipud(c1),'FaceColor','texturemap',... 'EdgeColor','none','CDataMapping','direct','Ambient',... 0.6,'diffuse',0.8,'speculars',0.9) %通过属性设置,进行彩绘。 >> colormap(map) % 使用图象的色图 >> view(-50,10) >> axis off

6.10 用图形窗口功能在图形窗口中的任意位置产生多个大小不等的子窗口,与6.7题结果进行比较。 提示:

(1)使用figure 命令创建一个新的图形窗口;

(2)在图形窗口的Insert菜单中选择Axes项,鼠标指针由箭头变为十字,按下鼠标左键在图形窗口的任意位置拖曳创建一个坐标轴对象;

(3)重复2创建其他坐标轴对象。

6.11 利用图形窗口的曲线拟合工具,选择不同的拟合方法对给定的数据y=[9,18,21,19,22,25,20,14,12,0]进行曲线拟合,观察不同的拟合效果。

提示:

(1)使用plot函数绘图;

(2)在图形窗口的Tools菜单中选择Basic Fitting项,打开曲线拟合工具; (3)选择合适的拟合方法。

第7章 GUI程序设计

7.1 GUI开发环境中提供了哪些方便的工具?各有什么用途? 在GUI开发环境中提供了下列五个方便的工具:

(1)布局编辑器(Layout Editor)—在图形窗口中创建及布置图形对象 (2)几何排列工具(Alignment Tool)—调整各对象之间的相互几何关系和位置 (3)属性编辑器(Property Inspector)—查询并设置对象的属性值

(4)对象浏览器(Object Browser)—获得当前MATLAB窗口中图形对象句柄的分级排列 (5)菜单编辑器(Menu Editor)—建立和编辑主菜单和图形对象的鼠标右键菜单

7.2 做一个带按钮的界面,当按动按钮时,在计算机声卡中播放一段音乐。(提示,找一个.wav文件,简单起见可以在windows目录下找一个文件,将其放在当前工作目录下或搜索路径上,当按动“开始”按钮时调入该文件并播放,发声功能由sound函数完成,具体用法请查阅帮助信息)

提示:

(1)先建立一个静态文本对象作为界面的标题“简单声音播放器” (2)建立一个按钮对象用于启动播放器,callback函数中的内容为

[y,f,b]=wavread('loff'); % 读入声音文件loff.wav sound(y,f,b) % 由声卡播放声音

(3)再建立一个用于关闭界面的按钮对象,callback函数中的内容为 close(gcbf)

7.3 做一个滑条(滚动条)界面,图形窗口标题设置为GUI Demo: Slider,并关闭图形窗口的菜单条。功能:通过移动中间的滑块选择不同的取值并显示在数字框中,如果在数字框中输入指定范围内的数字,滑块将移动到相应的位置,见下图。

提示:

(1)在figure的属性浏览器中设置Name为GUI Demo: Slider

(2)先建立一个滑条对象,在属性浏览器中设置Max为50,Min为-50; (3)在滑条的两端各放置一个静态文本用于显示最大值和最小值; (4)滑条对象的callback函数中的内容为: val=get(handles.slider1,'value');

set(handles.edit1,'string',num2str(val));

(5)在滑条上方放置一个文本框,用于显示滑块的位置所指示的数值,也可以在文本框中直接输入数值,callback函数中的内容为:

str=get(handles.edit1,'string');

set(handles.slider1,'value',str2num(str));

7.4 用单选框做一个如图所示的界面,通过选择不同的单选框来决定使用不同的色彩图。

(1)建立坐标轴对象,用于显示图形;

(2)建立建立五个单选框,用于选择不同的色图; (3)callback函数的内容为:

function varargout = radiobutton1_Callback(h, eventdata, handles, varargin) set(handles.radiobutton1,'value',1) set(handles.radiobutton2,'value',0) set(handles.radiobutton3,'value',0) set(handles.radiobutton4,'value',0)

set(handles.radiobutton5,'value',0) colormap(jet)

% -------------------------------------------------------------------- function varargout = radiobutton2_Callback(h, eventdata, handles, varargin) set(handles.radiobutton1,'value',0) set(handles.radiobutton2,'value',1) set(handles.radiobutton3,'value',0) set(handles.radiobutton4,'value',0) set(handles.radiobutton5,'value',0) colormap(hsv)

% -------------------------------------------------------------------- function varargout = radiobutton3_Callback(h, eventdata, handles, varargin) set(handles.radiobutton1,'value',0) set(handles.radiobutton2,'value',0) set(handles.radiobutton3,'value',1) set(handles.radiobutton4,'value',0) set(handles.radiobutton5,'value',0) colormap(hot)

% -------------------------------------------------------------------- function varargout = radiobutton4_Callback(h, eventdata, handles, varargin) set(handles.radiobutton1,'value',0) set(handles.radiobutton2,'value',0) set(handles.radiobutton3,'value',0) set(handles.radiobutton4,'value',1) set(handles.radiobutton5,'value',0) colormap(pink)

% -------------------------------------------------------------------- function varargout = radiobutton5_Callback(h, eventdata, handles, varargin) set(handles.radiobutton1,'value',0) set(handles.radiobutton2,'value',0) set(handles.radiobutton3,'value',0) set(handles.radiobutton4,'value',0) set(handles.radiobutton5,'value',1) colormap(copper)

7.5 制作一个曲面光照效果的演示界面,如图所示,三个弹出式菜单分别用于选择曲面形式、色彩图、光照模式和反射模式,三个滚动条用于确定光源的位置,一个按钮用于退出演示。

提示:

(1)建立一个静态文本,用于显示界面的标题:光照效果演示; (2)建立坐标轴对象,用于显示图形;

(3)建立四个下拉菜单,分别用于选择绘图表面的形状、色图、光照模式和反射模式,每个下拉菜单的上方都有一个静态文本用于说明菜单的作用;

(4)在一个frame上建立三个滑条用于确定光源的位置,并在frame上方加一说明; (5)建立一个按钮用于退出演示; (6)callback函数的内容为:

function varargout = pushbutton1_Callback(h, eventdata, handles, varargin) delete(handles.figure1)

% -------------------------------------------------------------------- function varargout = popupmenu1_Callback(h, eventdata, handles, varargin) val=get(h,'value'); switch val case 1

surf(peaks); case 2

sphere(30); case 3 membrane case 4

[x,y]=meshgrid(-4:.1:4); r=sqrt(x.^2+y.^2)+eps; z=sinc(r); surf(x,y,z) case 5

[x,y]=meshgrid([-1.5:.3:1.5],[-1:0.2:1]); z=sqrt(4-x.^2/9-y.^2/4); surf(x,y,z); case 6

t=0:pi/12:3*pi;

r=abs(exp(-t/4).*sin(t)); [x,y,z]=cylinder(r,30);

surf(x,y,z); end

shading interp

light('Position',[-3 -2 1]); axis off

% -------------------------------------------------------------------- function varargout = radiobutton1_Callback(h, eventdata, handles, varargin) set(h,'value',1)

set(handles.radiobutton2,'value',0) set(handles.radiobutton3,'value',0) set(handles.radiobutton4,'value',0)

lighting flat

% -------------------------------------------------------------------- function varargout = radiobutton2_Callback(h, eventdata, handles, varargin) set(h,'value',1)

set(handles.radiobutton1,'value',0) set(handles.radiobutton3,'value',0) set(handles.radiobutton4,'value',0)

lighting gouraud

% -------------------------------------------------------------------- function varargout = radiobutton3_Callback(h, eventdata, handles, varargin) set(h,'value',1)

set(handles.radiobutton1,'value',0) set(handles.radiobutton2,'value',0) set(handles.radiobutton4,'value',0)

lighting phong

% -------------------------------------------------------------------- function varargout = radiobutton4_Callback(h, eventdata, handles, varargin) set(h,'value',1)

set(handles.radiobutton1,'value',0) set(handles.radiobutton3,'value',0) set(handles.radiobutton3,'value',0)

lighting none

% -------------------------------------------------------------------- function varargout = popupmenu2_Callback(h, eventdata, handles, varargin) val=get(h,'value'); switch val

case 1

colormap(jet) case 2

colormap(hot) case 3

colormap(cool) case 4

colormap(copper) case 5

colormap(pink) case 6

colormap(spring) case 7

colormap(summer) case 8

colormap(autumn) case 9

colormap(winter) end

% -------------------------------------------------------------------- function varargout = popupmenu3_Callback(h, eventdata, handles, varargin) val=get(h,'value'); switch val case 1

lighting flat case 2

lighting gouraud case 3

lighting phong case 4

lighting none end

% -------------------------------------------------------------------- function varargout = popupmenu4_Callback(h, eventdata, handles, varargin) val=get(h,'value'); switch val case 1

material shiny case 2

material dull case 3

material metal case 4

material default

end

% -------------------------------------------------------------------- function varargout = slider1_Callback(h, eventdata, handles, varargin) val=get(h,'value');

set(handles.edit1,'string',num2str(val));

lx==val; ly=get(handles.slider2,'value'); ly=get(handles.slider3,'value'); light('Position',[x y z]);

% -------------------------------------------------------------------- function varargout = edit1_Callback(h, eventdata, handles, varargin) str=get(h,'string');

set(handles.slider1,'value',str2num(str));

lx==str2num(str); ly=get(handles.slider2,'value'); ly=get(handles.slider3,'value'); light('Position',[x y z]);

% -------------------------------------------------------------------- function varargout = slider2_Callback(h, eventdata, handles, varargin) val=get(h,'value');

set(handles.edit2,'string',num2str(val));

lx=get(handles.slider1,'value'); lx==val; ly=get(handles.slider3,'value'); light('Position',[x y z]);

% -------------------------------------------------------------------- function varargout = edit2_Callback(h, eventdata, handles, varargin) str=get(h,'string');

set(handles.slider2,'value',str2num(str));

% -------------------------------------------------------------------- function varargout = slider3_Callback(h, eventdata, handles, varargin) val=get(h,'value');

set(handles.edit3,'string',num2str(val));

% -------------------------------------------------------------------- function varargout = edit3_Callback(h, eventdata, handles, varargin) str=get(h,'string');

set(handles.slider3,'value',str2num(str));

7.6 创建一个用于绘图参数选择的菜单对象Plot Option,其中包含三个选项LineStyle、Marker和Color,每个选项下面又包含若干的子项分别可以进行选择图线的类型、标记点的类型和颜色。

提示:

(1)打开菜单编辑器,建立第一级菜单项Plot Option;

(2)在Plot Option菜单项下面建立第二级子菜单项LineStyle、Marker和Color; (3)在第二级菜单项下面分别建立第三级子菜单项。

7.7 建立三个输入窗口的输入对话框,如图所示。

输入命令或程序:

prompt={'输入姓名','输入年龄','输入职业'}; title='信息登记'; lines=[1 1 1]';

def={'张平','3','教师'};

answer=inputdlg(prompt,title,lines,def);

第8章 M文件编程

8.1 命令文件与函数文件的主要区别是什么?

(1)命令文件是一系列命令的组合,函数文件的第一行必须用function说明;

(2)命令文件没有输入参数,也不用返回参数,函数文件可以接受输入参数,也可以返回参数;

(3)命令文件处理的变量为工作空间变量,函数文件处理的变量为函数内部的局部变量,也可以处理全局变量。

8.2 如何定义全局变量?

用关键字global可以把一个变量定义为全局变量,在M文件中定义全局变量时,如果在当前工作空间已经存在了相同的变量,系统将会给出警告,说明由于将该变量定义为全局变量,可能会使变量的值发生改变,为避免发生这种情况,应该在使用变量前先将其定义为全局变量。

8.3 如果x是一个结构型数组,如何观察其中的内容?

结果数组用于存储一组相关的数据元素(域),这些元素可以是不同类型、不同尺寸的,结构数组不能用数组编辑器观察和修改其中的元素。对于明为x的结构型数组,可以直接键入x以观察其中所包含的域名及内容,也可以键入x.域名观察指定域名的内容,例如

>>x x =

name: 'line' color: 'red'

data: [1 2.7000 3 5.9000 8.4000 12.2000 16.6000 18.8000 26.2000] >> x.color ans = red

8.4 if语句有几种表现形式? (1)if 表达式 语句体 end (2)if 表达式 语句体1 else 语句体2

end (3)if 表达式1 语句体1 elseif 表达式2 语句体2 end (4)if 表达式1 语句体1 elseif 表达式2 语句体2 else 语句体3 end

8.5 说明break语句和return语句的用法。

break语句用于终止for循环和while循环的执行。如果遇到break语句,则退出循环体,继续执行循环体外的下一行语句。在嵌套循环中,break只存在于最内层的循环中。

return语句用于终止当前的命令序列,并返回到调用的函数或键盘,也用于终止keyboad方式,在MATLAB中,被调用的函数运行结束后会自动返回调用函数,使用return语句时将return插入被调用函数的某一位置,根据某种条件迫使被调用函数提前结束并返回调用函数。

8.6 有一周期为4?的正弦波上叠加了方差为0.1的正态分布的随机噪声的信号,用循环结构编制一个三点线性滑动平均的程序。(提示:①用0.1*randn(1,n)产生方差为0.1的正态分布的随机噪声;②三点线性滑动平均就是依次取每三个相邻数的平均值作为新的数据,如x1(2)=(x(1)+x(2)+x(3))/3,x1(3)=( x(2)+x(3)+x(4))/3??)

t=0:pi/50:4*pi; n=length(t);

y=sin(t)+0.1*randn(1,n); ya(1)=y(1); for i=2:n-1

ya(i)=sum(y(i-1:i+1))/3; end ya(n)=y(n);

plot(t,y,'c',t,ya,'r','linewidth',2)

8.7 编制一个解数论问题的函数文件:取任意整数,若是偶数,则用2除,否则乘3加1,重复此过程,直到整数变为1。

function c=collatz(n)

% collatz

% Classic “3n+1” Ploblem from number theory c=n;

while n>1

if rem(n,2)==0 n=n/2; else

n=3*n+1; end

c=[c n]; end

8.8 有一组学生的考试成绩(见表),根据规定,成绩在100分时为满分,成绩在90~99之间时为优秀,成绩在80~89分之间时为良好,成绩在60~79分之间为及格,成绩在60分以下时为不及格,编制一个根据成绩划分等级的程序。

学生姓名 成 绩

Name=['王','张','刘','李','陈','杨','于','黄','郭','赵']; Marks=[72,83,56,94,100,88,96,68,54,65];

% 划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及格(<60)。 n=length(Marks); for i=1:n a{i}=89+i; b{i}=79+i; c{i}=69+i; d{i}=59+i; end; c=[d,c];

% 根据学生的分数,求出相应的等级。 for i=1:n

switch Marks(i) case 100

%得分为100时

Rank(i,:)=' 满分'; case a Rank(i,:)=' 优秀'; case b case c otherwise end end

% 将学生姓名,得分,级等信息打印出来。 disp(' ')

disp(['学生姓名 ',' 得分 ',' 等级']);

%得分在80~89之间

Rank(i,:)=' 良好';

%得分在60~79之间 %得分低于60。

Rank(i,:)=' 及格'; Rank(i,:)='不及格';

%得分在90~99之间

王 72 张 83 刘 56 李 94 陈 100 杨 88 于 96 黄 68 郭 54 赵 65

disp('--------------------------') for i=1:10;

disp([' ',Name(i),' ',num2str(Marks(i)),' end

学生姓名 得分 等级

----------------------------------------- 王 72 及格 张 83 刘 56 李 94

良好 不及格 优秀

',Rank(i,:)]);

陈 100 满分 杨 88 良好 于 96 优秀 黄 68 及格 郭 54 赵 65

8.9 编写一段程序,能够把输入的摄氏温度转化成华氏温度,也能把华氏温度转换成摄氏温度。

k=input('选择转换方式(1--摄氏转换为华氏,2--华氏转换为摄氏):'); if k~=1 & k~=2

disp('请指定转换方式') break end

tin=input('输入待转变的温度(允许输入数组):'); if k==1

tout=tin*9/5+32; % 摄氏转换为华氏 k1=2; elseif k==2

tout=(tin-32)*5/9; % 华氏转换为摄氏 k1=1; end

str=[' ?C';' ?F'];

disp(['转换前的温度', ' ', '转换后的温度'])

disp([' ',num2str(tin),str(k,:), ' ', num2str(tout),str(k1,:)])

8.10 keyboard命令的作用是什么?当在函数中使用keyboard命令时,是否可以在工作空间浏览器中观察和修改函数中的局部变量?退出keyboard状态的命令是什么?编一个函数文件,在其中设置keyboard,观察变量情况。

当运行中的程序遇到keyboard命令时会暂时停止运行,将控制权交给键盘,这时命令窗口的提示符变为K>>,可以在命令窗口或工作空间浏览器中观察和修改变量内容,如果keyboard命令设置在函数中,则可以观察和修改函数中的局部变量,检查或修改完成后,键入return命令,退出keyboard状态,控制权交还给系统,程序将继续运行。

第9章 Simulink基础

9.1 什么是Simulink ?

Simulink是一个用来对动态系统进行建模、仿真和分析的软件包,它支持连续的、离散的或二者混合的线性和非线性系

不及格 及格

统,也支持具有多种采样速率的多速率系统。

9.2 如何进行下列操作: (1)翻转模块

(2)给模型窗口加标题 (3)指定仿真时间

(4)设置示波器的显示刻度 (1)翻转模块

翻转:将鼠标指针指向要翻转的模块并按下鼠标右键,在弹出的菜单中选择Format栏中的Flip Block项,模块将翻转180°,每选择一次模块都将翻转180°,该操作也可以在菜单栏中的Format菜单中进行。

(2)给模型窗口加标题

在模型窗口的上方双击鼠标左键,会出现的一个文本输入框,输入文字并通过Format菜单中的选项改变字体的颜色和大小,就可以做出一个好看的标题。(在模型窗口的任意地方都可以通过双击鼠标左键后输入文字为模型窗口添加说明)

(3)指定仿真时间

选择Simulation菜单打开参数设置对话框,在Solver页面中第一项Simulation time中通过输入开始时间和结束时间来确定仿真时间。

(4)设置示波器的显示刻度

双击示波器模块弹出示波器显示窗口,在坐标轴区域内的任意位置单击鼠标右键,在弹出的菜单中选择Axes properties?菜单项弹出示波器坐标轴属性对话框,可以设置Y轴显示的范围。

9.3 有传递函数如下的控制系统,用Simulink建立系统模型,并对系统的阶跃响应进行仿真。 G(s)?1s?4s?82

9.4 建立一个简单模型,用信号发生器产生一个幅度为2V、频率为0.5Hz的正弦波,并叠加一个0.1V的噪声信号,将叠加后的信号显示在示波器上并传送到工作空间。

9.5 建立一个简单模型,产生一组常数(1×5),再将该常数与其5倍的结果合成一个二维数组,用数字显示器显示出来。

9.6 建立一个模拟系统,将摄氏温度转换为华氏温度(Tf = 9/5Tc+32)。

9.7 建立二阶系统G(S)?的响应。

?nS?2??nS22??n的脉冲响应模型,设ωn=10Hz,观察当0<ζ<1、ζ=0、ζ=1及ζ>1时系统

9.8 皮球以15米/秒的速度从10米高的地方落下,建立显示球弹跳轨迹的模型。