《(完整版)matlab经典习题及解答.doc》由会员分享,可在线阅读,更多相关《(完整版)matlab经典习题及解答.doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第1章 MATLAB概论1.1 与其他计算机语言相比较,MATLAB语言突出的特点是什么?MATLAB具有功能强大、使用方便、输入简捷、库函数丰富、开放性强等特点。1.2 MATLAB系统由那些部分组成?MATLAB系统主要由开发环境、MATLAB数学函数库、MATLAB语言、图形功能和应用程序接口五个部分组成。1.4 MATLAB操作桌面有几个窗口?如何使某个窗口脱离桌面成为独立窗口?又如何将脱离出去的窗口重新放置到桌面上?在MATLAB操作桌面上有五个窗口,在每个窗口的右上角有两个小按钮,一个是关闭窗口的Close按钮,一个是可以使窗口成为独立窗口的Undock按钮,点击Undock按钮就
2、可以使该窗口脱离桌面成为独立窗口,在独立窗口的view菜单中选择Dock 菜单项就可以将独立的窗口重新防止的桌面上。1.5 如何启动M文件编辑/调试器?在操作桌面上选择“建立新文件”或“打开文件”操作时,M文件编辑/调试器将被启动。在命令窗口中键入edit命令时也可以启动M文件编辑/调试器。1.6 存储在工作空间中的数组能编辑吗?如何操作?存储在工作空间的数组可以通过数组编辑器进行编辑:在工作空间浏览器中双击要编辑的数组名打开数组编辑器,再选中要修改的数据单元,输入修改内容即可。1.7 命令历史窗口除了可以观察前面键入的命令外,还有什么用途?命令历史窗口除了用于查询以前键入的命令外,还可以直接
3、执行命令历史窗口中选定的内容、将选定的内容拷贝到剪贴板中、将选定内容直接拷贝到M文件中。1.8 如何设置当前目录和搜索路径,在当前目录上的文件和在搜索路径上的文件有什么区别?当前目录可以在当前目录浏览器窗口左上方的输入栏中设置,搜索路径可以通过选择操作桌面的file菜单中的Set Path菜单项来完成。在没有特别说明的情况下,只有当前目录和搜索路径上的函数和文件能够被MATLAB运行和调用,如果在当前目录上有与搜索路径上相同文件名的文件时则优先执行当前目录上的文件,如果没有特别说明,数据文件将存储在当前目录上。1.9 在MATLAB中有几种获得帮助的途径?在MATLAB中有多种获得帮助的途径:
4、(1)帮助浏览器:选择view菜单中的Help菜单项或选择Help菜单中的MATLAB Help菜单项可以打开帮助浏览器;(2)help命令:在命令窗口键入“help” 命令可以列出帮助主题,键入“help 函数名”可以得到指定函数的在线帮助信息;(3)lookfor命令:在命令窗口键入“lookfor 关键词”可以搜索出一系列与给定关键词相关的命令和函数(4)模糊查询:输入命令的前几个字母,然后按Tab键,就可以列出所有以这几个字母开始的命令和函数。注意:lookfor和模糊查询查到的不是详细信息,通常还需要在确定了具体函数名称后用help命令显示详细信息。第2章 MATLAB矩阵运算基础2
5、.1 在MATLAB中如何建立矩阵,并将其赋予变量a?>> a=5 7 3;4 9 12.2 有几种建立矩阵的方法?各有什么优点?可以用四种方法建立矩阵:直接输入法,如a=2 5 7 3,优点是输入方法方便简捷;通过M文件建立矩阵,该方法适用于建立尺寸较大的矩阵,并且易于修改;由函数建立,如y=sin(x),可以由MATLAB的内部函数建立一些特殊矩阵;通过数据文件建立,该方法可以调用由其他软件产生数据。2.3 在进行算术运算时,数组运算和矩阵运算各有什么要求?进行数组运算的两个数组必须有相同的尺寸。进行矩阵运算的两个矩阵必须满足矩阵运算规则,如矩阵a与b相乘(a*b)时必须满足a
6、的列数等于b的行数。2.4 数组运算和矩阵运算的运算符有什么区别?在加、减运算时数组运算与矩阵运算的运算符相同,乘、除和乘方运算时,在矩阵运算的运算符前加一个点即为数组运算,如a*b为矩阵乘,a.*b为数组乘。2.5 计算矩阵与之和。>> a=5 3 5;3 7 4;7 9 8;>> b=2 4 2;6 7 9;8 3 6;>> a+bans = 7 7 7 9 14 13 15 12 142.6 求的共轭转置。>> x=4+8i 3+5i 2-7i 1+4i 7-5i;3+2i 7-6i 9+4i 3-9i 4+4i; >> xan
7、s = 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.0000i2.7 计算与的数组乘积。>> a=6 9 3;2 7 5;>> b=2 4 1;4 6 8;>> a.*bans = 12 36 3 8 42 402.8 “左除”与“右除”有什么区别?在通常情况下,左除x=ab是a
8、*x=b的解,右除x=b/a是x*a=b的解,一般情况下,ab¹b/a。2.9 对于,如果,求解X。>> A=4 9 2;7 6 4;3 5 7;>> B=37 26 28;>> X=ABX = -0.5118 4.0427 1.33182.10 已知:,分别计算a的数组平方和矩阵平方,并观察其结果。>> a=1 2 3;4 5 6;7 8 9;>> a.2ans = 1 4 9 16 25 36 49 64 81>> a2ans = 30 36 42 66 81 96 102 126 1502.11 ,观察a与
9、b之间的六种关系运算的结果。>> a=1 2 3;4 5 6;>> b=8 7 4;3 6 2;>> a>bans = 0 1 0 1 0 1>> a>=bans = 0 1 0 1 0 1>> a<bans = 1 0 1 0 1 0>> a<=bans = 1 0 1 0 1 0>> a=bans = 0 0 0 0 0 0>> a=bans = 1 1 1 1 1 12.12 ,在进行逻辑运算时,a相当于什么样的逻辑量。相当于a=1 1 0 1 1。2.13 在sin(
10、x)运算中,x是角度还是弧度?在sin(x)运算中,x是弧度,MATLAB规定所有的三角函数运算都是按弧度进行运算。2.14 角度,求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.57742.15 用四舍五入
11、的方法将数组2.4568 6.3982 3.9375 8.5042取整。>> b=2.4568 6.3982 3.9375 8.5042;>> round(b)ans = 2 6 4 92.16 矩阵,分别对a进行特征值分解、奇异值分解、LU分解、QR分解及Chollesky 分解。>> v,d=eig(a,b)v = -0.4330 -0.2543 -0.1744 -0.5657 0.9660 -0.6091 -0.7018 0.0472 0.7736d = 13.5482 0 0 0 4.8303 0 0 0 3.6216>> a=9 1 2
12、;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.7204s = 15.5234 0 0 0 4.5648 0 0 0 3.3446v = -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.0000u = 9.0000 1.00
13、00 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.7801r = -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.29032.17 将矩阵、和组合成两个新矩阵:(1)组合成一个4´3的矩阵,第一列为按列顺序排
14、列的a矩阵元素,第二列为按列顺序排列的b矩阵元素,第三列为按列顺序排列的c矩阵元素,即 (2)按照a、b、c的列顺序组合成一个行矢量,即 >> 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
15、 2 7 7 8 1 3 5 6 9 2第3章 数值计算基础3.2 求解多项式x3-7x2+2x+40=0的根。 >> r=1 -7 2 40; >> p=roots(r); -0.2151 0.4459 0.7949 0.27073.4 计算多项式乘法(x2+2x+2)(x2+5x+4)。 >> c=conv(1 2 2,1 5 4) c = 1 7 16 18 83.5 计算多项式除法(3x3+13x2+6x+8)/(x+4)。 >> d=deconv(3 13 6 8,1 4) d = 3 1 23.7 计算多项式的微分和积分。 >&
16、gt; p=4 12 14 5; >> pder=polyder(p); >> pders=poly2sym(pder) >> pint=polyint(p); >> pints=poly2sym(pint) pders = 12*x2-24*x-14 pints = x4-4*x3-7*x2+5*x3.8 解方程组。 >> a=2 9 0;3 4 11;2 2 6; >> b=13 6 6' >> x=ab x = 7.4000 -0.2000 -1.40003.11 矩阵,计算a的行列式和逆矩阵。
17、>> 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.09373.12 y=sin(x),x从0到2p,Dx=0.02p,求y的最大值、最小值、均值和标准差。 >> x=0:0.02*pi:2*pi; >> y=sin(x); >> ymax=max(y) >> ymin=min(y) >> yme
18、an=mean(y) >> ystd=std(y) ymax = 1 ymin = -1 ymean = 2.2995e-017 ystd = 0.70713.13 ,计算x的协方差、y的协方差、x与y的互协方差。 >> 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.00003.15 有一正弦衰减数据y=sin(x).*exp(
19、-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)
20、,syms用于创建多个符号变量,用法如syms x y z。 f=sym(x+y+z)相当于 syms x y z f= x+y+z4.2 下面三种表示方法有什么不同的含义?(1)f=3*x2+5*x+2(2)f='3*x2+5*x+2'(3)x=sym('x') f=3*x2+5*x+2(1)f=3*x2+5*x+2表示在给定x时,将3*x2+5*x+2的数值运算结果赋值给变量f,如果没有给定x则指示错误信息。(2)f='3*x2+5*x+2'表示将字符串'3*x2+5*x+2'赋值给字符变量f,没有任何计算含义,因此也不对字符
21、串中的内容做任何分析。(3)x=sym('x') f=3*x2+5*x+2表示x是一个符号变量,因此算式f=3*x2+5*x+2就具有了符号函数的意义,f也自然成为符号变量了。4.3 用符号函数法求解方程at2+b*t+c=0。 >> r=solve('a*t2+b*t+c=0','t') r = 1/2/a*(-b+(b2-4*a*c)(1/2) 1/2/a*(-b-(b2-4*a*c)(1/2)4.5 求矩阵的行列式值、逆和特征根。 >> syms a11 a12 a21 a22; >> A=a11,a12
22、;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*(a112-2*a11*a22+a222+4*a12*a21)(1/2) 1/2*a11+1/2*
23、a22-1/2*(a112-2*a11*a22+a222+4*a12*a21)(1/2)4.6 因式分解: >> syms x; >> f=x4-5*x3+5*x2+5*x-6; >> factor(f) ans = (x-1)*(x-2)*(x-3)*(x+1)4.7 ,用符号微分求df/dx。 >> syms a x; >> f=a, x2, 1/x; exp(a*x), log(x), sin(x); >> df=diff(f) df = 0, 2*x, -1/x2 a*exp(a*x), 1/x, cos(x)第5
24、章 基本图形处理功能5.1 绘制曲线,x的取值范围为-5,5。 >> x=-5:0.2:5; >> y=x.3+x+1; >> plot(x,y)5.2 有一组测量数据满足,t的变化范围为010,用不同的线型和标记点画出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
25、9;,t,y3,'-.g')5.3 在5.1题结果图中添加标题,并用箭头线标识出各曲线a的取值。 >> title('ityrm=e-itat') >> title('ityrm=e-itat','FontSize',12) >> text(t(6),y1(6),'leftarrowitarm=0.1','FontSize',11) >> text(t(6),y2(6),'leftarrowitarm=0.2','FontSiz
26、e',11) >> text(t(6),y3(6),'leftarrowitarm=0.5','FontSize',11)5.4 在5.1题结果图中添加标题和图例框。 >> title('ityrm=e-itat','FontSize',12) >> legend('a=0.1','a=0.2','a=0.5')5.5表中列出了4个观测点的6次测量数据,将数据绘制成为分组形式和堆叠形式的条形图。第1次第2次第3次第4次第5次第6次观测点13
27、67428观测点2673247观测点3972584观测点4643274>> 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)>> 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 ,当x和y的取值范围均为-2到2时,用建立子窗口的方法在同一个图形窗口中绘制出三维线图、网线图、表面图和带渲染效果的表面
28、图。 >> 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
29、 (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函数产生球表面坐标,绘制不通明网线图、透明网线图、
30、表面图和带剪孔的表面图。 >> 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章 M文件编程6.1 命令文件与函数文件的主要区别是什么?(1)命令文件是一系列命令的组合,
31、函数文件的第一行必须用function说明;(2)命令文件没有输入参数,也不用返回参数,函数文件可以接受输入参数,也可以返回参数;(3)命令文件处理的变量为工作空间变量,函数文件处理的变量为函数内部的局部变量,也可以处理全局变量。6.2 如何定义全局变量?用关键字global可以把一个变量定义为全局变量,在M文件中定义全局变量时,如果在当前工作空间已经存在了相同的变量,系统将会给出警告,说明由于将该变量定义为全局变量,可能会使变量的值发生改变,为避免发生这种情况,应该在使用变量前先将其定义为全局变量。6.4 if语句有几种表现形式?(1)if 表达式 语句体 end(2)if 表达式 语句体1
32、 else 语句体2 end(3)if 表达式1 语句体1 elseif 表达式2 语句体2 end(4)if 表达式1 语句体1 elseif 表达式2 语句体2 else 语句体3 end6.5 说明break语句和return语句的用法。break语句用于终止for循环和while循环的执行。如果遇到break语句,则退出循环体,继续执行循环体外的下一行语句。在嵌套循环中,break只存在于最内层的循环中。return语句用于终止当前的命令序列,并返回到调用的函数或键盘,也用于终止keyboad方式,在MATLAB中,被调用的函数运行结束后会自动返回调用函数,使用return语句时将re
33、turn插入被调用函数的某一位置,根据某种条件迫使被调用函数提前结束并返回调用函数。6.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; end6.8 有一组学生的考试成绩(见表),根据规定,成绩在100分时为满分,成绩在9099之间时为优秀,成绩在8089分
34、之间时为良好,成绩在6079分之间为及格,成绩在60分以下时为不及格,编制一个根据成绩划分等级的程序。学生姓名王张刘李陈杨于黄郭赵成 绩728356941008896685465 Name='王','张','刘','李','陈','杨','于','黄','郭','赵' Marks=72,83,56,94,100,88,96,68,54,65; % 划分区域:满分(100),优秀(90-99),良好(80-89),及格(60-79),不及
35、格(<60)。 n=length(Marks); for i=1:n ai=89+i; bi=79+i; ci=69+i; di=59+i; end; c=d,c; % 根据学生的分数,求出相应的等级。 for i=1:n switch Marks(i) case 100 %得分为100时 Rank(i,:)=' 满分' case a %得分在9099之间 Rank(i,:)=' 优秀' case b %得分在8089之间 Rank(i,:)=' 良好' case c %得分在6079之间 Rank(i,:)=' 及格' o
36、therwise %得分低于60。 Rank(i,:)='不及格' end end % 将学生姓名,得分,级等信息打印出来。 disp(' ') disp('学生姓名 ',' 得分 ',' 等级'); disp('-') for i=1:10; disp(' ',Name(i),' ',num2str(Marks(i),' ',Rank(i,:); end 学生姓名 得分 等级 - 王 72 及格 张 83 良好 刘 56 不及格 李 94 优秀 陈
37、100 满分 杨 88 良好 于 96 优秀 黄 68 及格 郭 54 不及格 赵 65 及格6.10 keyboard命令的作用是什么?当在函数中使用keyboard命令时,是否可以在工作空间浏览器中观察和修改函数中的局部变量?退出keyboard状态的命令是什么?编一个函数文件,在其中设置keyboard,观察变量情况。当运行中的程序遇到keyboard命令时会暂时停止运行,将控制权交给键盘,这时命令窗口的提示符变为K>>,可以在命令窗口或工作空间浏览器中观察和修改变量内容,如果keyboard命令设置在函数中,则可以观察和修改函数中的局部变量,检查或修改完成后,键入retur
38、n命令,退出keyboard状态,控制权交还给系统,程序将继续运行。书上第四章习题4.1function X1,X2=matlab401(a,b,c)d=b2-4*a*c;if d>0 X1=(-b+sqrt(d)/(2*a); X2=(-b-sqrt(d)/(2*a);elseif d=0 X1=(-b)/(2*a); X2=X1;else r=(-b)/(2*a); k=(sqrt(abs(d)/(2*a); X1=r+k*i; X2=r-k*i;enddisp(X1,X2) 测试数据(1)>>matlab401(1,2,1) %两个相等的实根(2)>>mat
39、lab401(1,-1,-2) %两个不等的实根(3)>>matlab401(1,4,6.25) %两个不等的虚根4.2function fenS=matlab402(n)fenZ=zeros(1,n);fenM=ones(1,n);fenZ(1)=2;fenZ(2)=3;fenM(1)=1;fenM(2)=2;fenSum=fenZ(1)/fenM(1)+fenZ(2)/fenM(2);for i=3:n fenZ(i)=fenZ(i-1)+fenZ(i-2); fenM(i)=fenM(i-1)+fenM(i-2); fenS(i)=fenZ(i)/fenM(i); fenSu
40、m=fenSum+fenS(i);enddisp(fenSum)测试数据(1)>>matlab402(3) %前3项的和(2)>>matlab402(15) %前15项的和4.3clear;clc;close all;funy=zeros(1,601);i=1;for x=-3:0.01:3 if (x>-1)&(x<=-3) y=(-x.2-4*x-3)/2; funy(i)=y; i=i+1; elseif (x>=-1)&(x<1) y=-x.2+1; funy(i)=y; i=i+1; else y=(-x.2+4*x-3
41、)/2; funy(i)=y; i=i+1; end endx=-3:0.01:3;plot(x,funy,'r*-')运行>>matlab4034.4clear;clc;close all;A=-4 -2 0 2 4;-3 -1 1 3 5;B=abs(A);C=find(B>3);%ÕÒ³öAÖоø¶ÔÖµ´óÓÚ3µÄÔªËØË
42、;ùÔÚµÄλÖÃD=;%´æ·ÅAÖоø¶ÔÖµ´óÓÚ3µÄÔªËØfor i=1:length(C) D(length(D)+1)=A(C(i);enddisp(C)disp(D)运行>>matlab404结果C=1 9 10 D=-4 4 54.5clear;clc;close all;jc=1;i=1;while jc<1000 i=i+1; jc=jc*i; endn=i-1 运行>>matlab405结果n=64.6function matlab406(m,n)% ÕÒ³ö¡¾m,n¡¿·¶Î§ÄÚ²»Äܱ»3Õû³ýµÄÊý²