MATLAB期末考试试卷汇总 下载本文

MATLAB期末考试试卷及其参考答案

一、填空题

1、MATLAB常用操作界面包括 、工作空间窗口、、 、内存数组编辑器、M文件 编辑/调试器、帮助导航/浏览器、图形窗口等。

2、MATLAB中Inf或inf表示 、NaN或nan表示 、nargout表示 。 3、MATLAB中逗号主要用作 ;用作输入量与输入量之间的分隔符; 。 4、工作空间浏览器主要用于内存变量的 、 和 。

5、MATLAB实现将全下标转换为单下标的指令为 、据单下标换算出全下标的指令为 。 6、二维数组的标识有 、 、“逻辑1”标识。 二、简答题

1、简述MATLAB历史指令窗的主要作用。 2、简述空数组的功用。

3、简述MATLAB函数的基本结构。 4、简述绘制二维图形的一般步骤。

三、阅读程序并回答问题(每题4分,共28分) 1、写出下列指令运行结果。 A=zeros(2,4); A(:)=1:8; s=[2 3 5]; A(s)

Sa=[10 20 30]' A(s)=Sa

2、写出下列指令运行结果。 A=reshape(1:16,2,8) reshape(A,4,4)

s=[1 3 6 8 9 11 14 16]; A(s)=0

3、写出下列指令运行结果。 A=[1,2;3,4]; B=[-1,-2;2;1]; S=3; A.*B A*B S.*A S*B

4、下面的函数主要完成什么功能? function f=factor(n)

if n<=1

f=1;

else

f=factor(n-1)*n;

end

5、写出下列指令运行结果。 ch=‘ABc123d4e56Fg9’; subch=ch(1:5) revch=ch(end:-1:1) k=find(ch>=‘a’&ch<=‘z’); ch(k)=ch(k)-(‘a’-‘A’);

char(ch)

6、写出下列指令运行结果。 A(1,1)={'this is cell'}; A{1,2}={[1 2 3;4 5 6]}; A{2,1}=[1+2*i];

A{2,2}=A{1,2}{1}+(A{1,2}{1}(1,1)+A{1,2}{1}(2,2)); celldisp(A)

7、下面的程序完成功能是什么? t=0:pi/50:4*pi; y0=exp(-t/3); y=exp(-t/3).*sin(3*t); plot(t,y,'-r',t,y0,':b',t,-y0,':b') xlabel(‘\\bf\\it t’); ylabel(‘\\bf\\it y’); grid on; 四、编程题(32分)

1、1、在同一图上分别用红色实线和绿色虚线绘制y1=sin(x)和y2=cos(x)在区间[0,4*pi]的曲线,并用星号*标出两条曲线的交点以及建立图例。(5分)2、分别在同一图形窗的不同子图绘制y=sin(t)sin(9t)和y=sin(t)sin(9t)及其包络线。(4分) 3、某商场对顾客所购买的商品实行打折销售,标准如下(商品价格用price来表示): price<200 没有折扣 200≤price<500 3%折扣 500≤price<1000 5%折扣 1000≤price<2500 8%折扣 2500≤price<5000 10%折扣

5000≤price 14%折扣

输入所售商品的价格,求其实际销售价格。(5分)

4、编写程序实现f(n)=f(n-1)+f(n-2)(f(1)=1和f(2)=2)函数。(6分) 5、编写一个学生成绩管理的程序(12分)

A.构造一个学生结构,包括学生的学号,姓名,课程名称(限五门),考试成绩和平均值等域;(4分)

B.从键盘上,连续输入N个学生的情况,分别将这些学生的情况填入到相应的域,若域中没有值即为空或0并计算平均成绩写入到平均值域。(4分)

C.根据平均值排序,并输出学生的姓名、学号和平均成绩。(4分) 参考答案

一、填空题(每空1分,20分)

1、MATLAB常用操作界面包括命令窗口、工作空间窗口(浏览器)、 命令历史窗口、当前目录窗口、内存数组编辑器、M文件编辑/调试器、 帮助导航/浏览器、图形窗口等。

2、MATLABInf或inf表示无穷大、NaN或nan表示不是一个数、nargout表示函数输出宗量数目。 3、MATLAB中逗号主要用作要显示计算结果的指令与其后指令的分隔; 用作输入量与输入量之间的分隔符;用作数组元素分隔符号。 4、工作空间浏览器主要用于内存变量的查阅、保存和编辑。

5、MATLAB实现将全下标转换为单下标的指令为Sub2ind、据单下标换算出全 下标的指令为Ind2sub。

6、二维数组的标识有“全下标”标识、“单下标”标识、“逻辑1”标识。 7、在一个元胞数组A中寻访第2行第3列元胞元素用A(2,3);寻访数组第 2行第3列元胞中的内容用A{2,3}。

8、MATLAB中clf用于清除图形窗、clc用于清除指令窗中显示内容、clear 用于清除MATLAB工作空间中保存的变量。

二、简答题(每题5分,共20分)

1. 简述MATLAB历史指令窗的主要作用。

历史指令窗记录着用户在MATLAB指令窗中所输入过的所有指令。历史记录 包括:每次开启MATLAB的时间,每次开启MATLAB后在指令窗中运行过 的所有指令。应用功能有单行或多行指令的复制和运行、生成M文件等。 2、简述空数组的功用。

“空”数组的功用:在没有“空”数组参与的运算时,计算结果中的“空” 可以合理地解释“所得结果的含义”;运用“空”数组对其他非空数组赋值, 可以改变数组的大小,但不能改变数组的维数。 3、简述MATLAB函数的基本结构。

典型M函数文件的结构:函数申明(定义)行(Function declaration line)、 H1行(The first help text line)、在线帮助文本(Help text)区、编写和修改记录、 函数体(Function body)。 4、简述绘制二维图形的一般步骤。

绘制二维图形的一般步骤为:曲线数据准备、选定图形窗及子图位置、调用二维曲线绘图指令、设置轴的范围、坐标分格线、图形注释、图形的精细操作。

三、阅读程序并回答问题(每题4分,共28分) 1、写出下列指令运行结果。 A=zeros(2,4); A(:)=1:8; s=[2 3 5]; A(s)

Sa=[10 20 30]' A(s)=Sa ans = 2 3 5 Sa = 10 20 30 A = 1 20 30 7

10 4 6 8

2、写出下列指令运行结果。 A=reshape(1:16,2,8) A =

1 3 5 7 9 11 13 15 2 4 6 8 10 12 14 16

reshape(A,4,4) ans = 1 5 9 13 2 6 10 14 3 7 11 15 4 8 12 16

s=[1 3 6 8 9 11 14 16]; A(s)=0

A =

0 0 5 7 0 0 13 15 2 4 0 0 10 12 0 0

3、写出下列指令运行结果。 A=[1,2;3,4]; B=[-1,-2;2,1]; S=3; A.*B A*B S.*A S*B ans = -1 -4 6 4 ans = 3 0 5 -2 ans = 3 6 9 12 ans = -3 -6 6 3

4、下面的函数主要完成什么功能? function f=factor(n)

if n<=1 f=1;

else f=factor(n-1)*n;

end

利用函数的递归调用,求n!。

5、写出下列指令运行结果。 ch=‘ABc123d4e56Fg9’; subch=ch(1:5) revch=ch(end:-1:1) k=find(ch>=‘a’&ch<=‘z’); ch(k)=ch(k)-(‘a’-‘A’); char(ch) length(k) subch = ABc12 revch =

9gF65e4d321cBA ans =

ABC123D4E56FG9

6、写出下列指令运行结果。 A(1,1)={'this is cell'}; A{1,2}={[1 2 3;4 5 6]};

A{2,1}=[1+2*i];

A{2,2}=A{1,2}{1}+(A{1,2}{1}(1,1)+A{1,2}{1}(2,2)); celldisp(A) A{1,1} = this is cell A{2,1} = 1.0000 + 2.0000i A{1,2}{1} = 1 2 3 4 5 6 A{2,2} = 7 8 9 10 11 12

7、在同一个图中绘制两个函数,这两个函数分别是: y=e(-t/3) y0=e(-t/3)*sin(3t)

其中y是用红色的细实线,而y0是用兰色的虚线绘制,t的区间是(0:4?),

t的步长为?/50,t轴和y轴分别用斜粗题指示,图中有网格表示。 四、编程题 1、答案

clf

x=0:pi/200:2*pi; y1=sin(x); y2=cos(x);

zz=x(find(abs(y1-y2)<0.005)) z=min(zz)

plot(x,y1,'r-',x,y2,'g-.') hold on

plot(zz,sin(zz),'*') legend('sin','cos')

2、答案

t=(0:pi/100:pi)'; y1=sin(t)*[1,-1]; y2=sin(t).*sin(9*t); t3=pi*(0:9)/9;

y3=sin(t3).*sin(9*t3);subplot(1,2,1) plot(t,y1,'r:',t,y2,'b',t3,y3,'bo') subplot(1,2,2) plot(t,y2,'b') axis([0,pi,-1,1])

3、答案

price=input('请输入商品价格'); switch fix(price/100)

case {0,1} %价格小于200 rate=0;

case {2,3,4} %价格大于等于200但小于500 rate=3/100;

case num2cell(5:9) %价格大于等于500但小于1000 rate=5/100;

case num2cell(10:24) %价格大于等于1000但小于2500 rate=8/100;

case num2cell(25:49) %价格大于等于2500但小于5000 rate=10/100;

otherwise %价格大于等于5000 rate=14/100;

end

price=price*(1-rate) %输出商品实际销售价格

4、答案

function f=fab(n)

if (n==1) f = 1; elseif (n==2) f =2; else

f = fab(n-1) + fab(n-2);

end

5、答案 str1 = ''; str2 = ''; str3= ''; val = cell(5,2) a=zeros(5,1); ave = 0;

student = struct('Name',str1,'No',str2,'Scores',val,'Ave',ave); n = input('please input students number:'); for i=1 : n

str1 = input('Name:'); str2 = input('No.:'); %for k=1:2

% val(k,:) = input('Curriculums and Scores:'); % a(k,1)=val{k,2}; %end

%val(1,:) = input('Curriculum:'); %val(:,2) = input('Scores:');

val = input('please input five Curriculums and Scores:'); for k=1:5 a(k,1)=val{k,2}; end

student(i).Name = str1; student(i).No = str2; student(i).Scores = val; student(i).Ave = mean(a); end

for ii= 1:(length(student)-1)

iptr = ii;

for jj=ii+1 : length(student)

if (student(jj).Ave > student(iptr).Ave) iptr = jj; end end

if ii ~=iptr temp = student(ii); student(ii) =student(iptr); student(iptr) = temp; end end

for ii=1 : length(student) if student(ii).Ave > 80 disp(student(ii).Name); disp(student(ii).Ave); end end

disp(['student name',blanks(6),'student no.',blanks(6),'student average']);disp(' ') for ii=1 : length(student)

disp([student(ii).Name,blanks(20),student(ii).No,blanks(20),num2str(student(ii).Ave)]); end

一、填空题(每空2分,总共30分) 1. 已知A=[0 9 6;1 3 0];B=[1 4 3;1 5 0];写出下列各指令运行的结果。 A & B 的运行结果ans= ; A ./ B 的运行结果ans= 。 2. 产生4阶全0方阵的命令为 zeros(4) ;产生3阶全1方阵的命令为 ones(3) 。 3. A=rand(2,5);b=size(A);c=length(A);则b和c的值分别为 和 [2,5],[5] 。 4. 标点符号 分号 可以使命令行不显示运算结果, 百分号 用来表示该行为注释行。 5. 用if判断语句判断80≥ x >60,在MATLAB中if语言后的判断应写为 if x<=80&x>60 。 6. P, Q分别是个多项式的系数矢量,求P对应的多项式的积分(对应的常数项为K),使用的命令是 polyint(P,K) ;求P/Q的解,商和余数分别保存在k和r,使用的命令是 [k,r]=deconv(P,Q) ; 7. 为了使两个plot的图形在同一个坐标显示,可以使用 hold on 命令进行图形保持;可以使用 grid on 命令为图形添加网格。 8. MATLAB的工作空间中有三个变量v1, v2, v3,写出把它们保存到文件my_data.mat中的指令 save my_data ;写出把my_data.mat文件中的变量读取到MATLAB工作空间内的指令 load my_data 。 二、选择题(每空2分,总共20分) 1.下列哪个变量的定义是不合法的 A (A) abcd-3 (B) xyz_3 (C) abcdef (D) x3yz 2. 下列哪条指令是求矩阵的行列式的值 C (A) inv (B) diag (C) det (D) eig 3. 在循环结构中跳出循环,执行循环后面代码的命令为 B (A) return (B) break (C) continue (D) keyboard 4. 清空Matlab工作空间内所有变量的指令是 C (A) clc (B) cls (C) clear (D) clf 5. 用round函数四舍五入对数组[2.48 6.39 3.93 8.52]取整,结果为 C (A) [2 6 3 8] (B) [2 6 4 8] (C) [2 6 4 9] (D) [3 7 4 9] 6. 已知a=2:2:8, b=2:5,下面的运算表达式中,出错的为 C (A) a'*b (B) a .*b (C) a*b (D) a-b 7. 角度x??304560?,计算其正弦函数的运算为 D (A) SIN(deg2rad(x)) (B) SIN(x) (C) sin(x) (D) sin(deg2rad(x)) 8. 下面的程序执行后array的值为 ( A ) for k=1:10 if k>6 break; else array(k) = k; end end (A) array = [1, 2, 3, 4, 5, 6] (B) array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] (C) array =6 (D) array =10. 9.i=2; a=2i; b=2*i; c=2*sqrt(-1); 程序执行后;a, b, c的值分别是多少? (A)a=4, b=4, c=2.0000i (C) (B)a=4, b=2.0000i, c=2.0000i (C)a=2.0000i, b=4, c=2.0000i (D) a=2.0000i, b=2.0000i, c=2.0000i 10. 求解方程x-4x+12x-9 = 0 的所有解 (A)1.0000, 3.0000, 1.7321, -1.7321 (B)1.0000, 3.0000, 1.7321i, -1.7321i (C)1.0000i, 3.0000i, 1.7321, -1.7321 (D)-3.0000i, 3.0000i, 1.7321, -1.7321 三、写出程序的执行结果或写出给定要求的指令(总共35分) 43 1. 写出执行以下代码后C,D,E的值 (6分) A=[1,2,3;4:6;7:9]; C=[A;[10,11,12]], D=C(1:3,[2 3]) E=C(2,[1 2]) 2. 写出执行以下代码后,MATLAB命令窗口上显示的x矩阵的值 (5分) x=[0,1,0,2,0,3,0,4]; for k=1:8 if x(k)==0 x(k)=k; else x(k)=2*k+1; end end disp(x); 3. 创建符号函数并求解,要求写出步骤和运行结果(7分) 2(1)创建符号函数f=ax+bx+c (2)求f=0的解 4. 求解以下线性方程组,要求写出程序代码和运行结果(5分) 5.绘制函数曲线,要求写出程序代码(12分) (1)在区间[0:2π]均匀的取50个点,构成向量π (2)在同一窗口绘制曲线y1=sin(2*t-0.3); y2=3cos(t+0.5);要求y1曲线为红色点划线,标记点为圆圈;y2为蓝色虚线,标记点为星号 四、使用MATLAB语言进行编程(15分) 打印出所有的水仙花数。所谓“水仙花数”,是指一个三位数,其各位数字立方之和等于该数本身。 2x1- 3x2+ x3+2x4=8 x1+3x2+ x4=6 x1- x2+ x3+8x4=17x1+ x2-2x3+2x4=5 一、填空题 1、 ans = 0 1 1 1 1 0 ans = 0 2.2500 2.0000 1.0000 0.6000 NaN 2、 zeros(4) 3、 [ 2 5 ] 4、 ; ones(3) [ 5 ] % [k,r]= deconv (P,Q) grid on Load my_data 5、 if x<= 80 & x>60 6、 polyint(P,K) 7、 hold on 二、选择题 1、 A 2、 C 3、 B 4、 C 5、 C 6、 C7、 D 8、 A 9、 C 10、 A 三、写出程序的执行结果或写出给定要求的指令 1、 c = 0 + 2.0000i D = 2 3 5 6 8 9 E = 4 5 2、 1 5 3 9 5 13 7 17 3、 >> syms a b c x >> s = a*x^2 + b*x + c; >> solve(s) ans = [ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))] 4、 >> syms a b c x >> syms x1 x2 x3 x4 >> clear >> syms x1 x2 x3 x4 8、 save my_data >> f = 2*x1 + 3*x2 + x3 + 2*x4 -8; >> g = x1 + 3*x2 + x4 - 6; >> h = x1 - x2 + x3 + 8*x4 - 1; >> i = 7*x1 + x2 - 2*x3 + 2*x4 -5; >> [x1,x2,x3,x4] = solve(f,g,h,i) x1 = 13/17 x2 = 320/187 x3 = 212/187 x4 = 19/187 5、 t = linspace(0, 2*pi, 50); plot(t,y1,'r-o' ,t,y2,'b--*'); 四、使用MATLAB语言进行编程 for k = 100:999 end a = fix(k/100); b = rem(fix(k/10),10); c = rem(k,10); if a.^3 + b.^3 + c.^3 == k end fprintf( “%u,\\t\\t”, k ) ;

一、 基本知识填空题(每空1分,共20分) 1.

MATLAB的通用命令中列出内存中的变量目录可用 命令;若对函数功能和用法不熟悉,可用 命令;显示变量、阵列或文本时,可用

命令;清除工作空间中的变量时,可用 命令;保存和恢复工作空间,或者工作空间中的特定变量时,可用 和 命令。 2. 3. 4. 5. 6. 7.

二、选择题(每题4分,共20分) 1.

设A=[2 4 3; 5 3 1; 3 6 7],则sum(A),length(A)和size(A)的结果( ) A. [10 13 11] 9 [3 3] B. [9 9 16] 3 [3 3] C. [9 9 16] 9 [3 3] D. [10 13 11] 3 [3 3] 2.

下列关于脚本文件和函数文件的描述中不正确的是( ) A. 去掉函数文件第一行的定义行可转变成脚本文件; B. 函数文件可以在命令窗口直接运行; C. 脚本文件可以调用函数文件;

D. 函数文件中的第一行必须以function开始; 3.

在Command Window窗口中分别输入下列命令,对应输出结果错误的是( ) A. x=[-3:2] x=[-3 -2 1 0 1 2] B. x=zeros(1,2);x>0 ans=[0 0] C. y=diag(eye(3),2).’ y=[0 0] D. 3-2*rand(1,2) ans=[1.0997 2.5377] 4.

对于矩阵B,统计其中大于A的元素个数,可以使用的语句是( ) A. length(B) - length(find(B<=A)) B. sum(sum(B>A)) C. length(sum(B>A)) D. sum(length(B>A)) 5.

已知str1=’find’, str2=’fund’, str3=’I like you’,有:k1=sum(str1==str2), k2=sum(strrep(str1,’i’,’u’)==str2), k3=findstr(str3,’ke’), 则k1,k2,k3的结果分别为:( )

A. 3, 3, 5 B. 3, 4, 5 C. 4, 3, 5 D. 3, 4, 6

三、程序填空(每空2分,共12分) 1.

编写MATLAB程序,用三阶多项式来拟合数据,在同一图形窗口中绘制拟合前和拟合后两条曲线,并对图形坐标轴进行控制。程序如下:

x=[1, 2, 3, 4, 5];y=[5.1, 6.2, 7.0, 8.2, 9.3]; %采用三阶多项式拟合 x2=1:0.1: 5;

y2= ; %拟合后的曲线 figure(1)

plot(x,y,’o’,x2,y2); %绘制曲线 m1 = max([y, y2]); m2 = min([y, y2]);

; %用axis调制坐标轴,横坐标在[0 6]之间,且完全显示图形 ; %加上标题“多项式曲线拟合” 2.

编写MATLAB程序,对于用户输入的向量或矩阵,计算其平均值: % 提示输入数据并保存到x中,命令行显示“请输入数据”

在MATLAB图形系统中,如果需要给已经绘制好的图形加上栅格线,可以使用 命令,如果需要在指定的坐标位置标注文本时使用的函数为 ,需要绘制多条曲线,保持当前图形窗口可使用 命令。

用MATLAB绘制条形图时可使用 函数,绘制柱状图,用以表示数据值的分布情况时可使用 函数。 MATLAB中用于控制不定次重复循环语句为 ,若在循环执行过程中需要终止该循环时采用的语句为 。 对于MATLAB中的多维阵列,在保持所有元素个数和内容不变的前提下可以使用 函数改变其尺寸和维数;利用 函数可以定义单元阵列。

在MATLAB中,可用内部函数与工具箱函数产生矩阵,其中如果要产生单位阵可用 函数,产生对角阵可用 函数,产生均匀分布的随机阵可用 函数。

在MATLAB中,将含有小数的数值转换成字符串可用 命令,在字符串中查找子字符串可用 命令。

y = reshape(x,1, prod(size(x))); m = ; % 计算均值m

四、(8分) 为解下列线性方程组,请写出MALAB语言程序。

4 x1 +2 x3 +3 x4 = 9 3 x2 +2 x3 + 3x4 = 8 2 x1 + x4 = 10 x3 -2 x2 + 3x4 =7

五、(10分) 利用menu函数输入选择参数len,输入菜单的名称为“select an num”,根据len的取值分别给变量x赋不同的值。当len=1时,x的值为的值为4行3列全0矩阵;当len=2时,x的值为3行4列全为5的矩阵;当len=3时,x的值为5行3列均值为0,方差为1的正态分布的随机矩阵;当len=4时,x的值为字符串“not an array”; 当len为其它值时,则显示“Error”。要求使用switch函数。

六、(15分)某混合信号有2个不同频率的确知信号,加上正态分布的随机噪声构成,噪声功率为4,2个确知信号分别为:

s1?10sin(2?f1n/fs)、s2?5sin(2?f2n/fs),其中信号频率分别为f1?2Hz、f2?5Hz,采样频率为fs?20Hz,采样点

128点,即n=0,1,2,…,127。 编程完成以下内容:

(1) 求出信号的频谱(用到的函数有fft和abs)。

(2) 以图形的方式比较信号波形和信号频谱,要求把图形窗口分成2个子窗口,分别画出:时域信号波形(横坐标为 “Time”,纵坐标为 “amplitude”,标题为 “信号时域与频域波形”)、信号频谱(横坐标为 “frequency(Hz)”,纵坐标为 “frequency spectral”)。

七、(15分)某宿舍有4名同学期末考试的成绩为下表所示:

姓名(name) 课程及成绩 英语(eng) 物理(phy) 数学(math) 计算机(computer)

编程完成以下内容:

(1) 基于表格内容构建结构阵列,结构名为student。

对每名同学成绩按学分加权求出综合测评分。其中eng(英语)、物理(phy)、math(数学)的学分分别为3 4 5 2,综合测评分的计算公式如下:

n1nx??wixi,xi为课程成绩,wi为相应的学分,w??wiwi?1i?1liwei 85 75 78 83 wangjun 83 84 92 87 liuzhi 80 69 77 82 zhanglin 90 75 81 78 ,n为成绩个数。

(2) 基于表格内容构建单元阵列,单元阵列名为student1,单位阵列中每一行保存一个学生的信息,包括学生姓名和学生各门课成绩。通

过访问单元阵列,计算每一个学生的平均分,将平均分作为一个新的域,更新已经建立的单元阵列。 最终得到的单元阵列格式为:

姓名 成绩 平均分 学生1 学生2 学生3 学生4

一、 基本知识填空题(每空1分,共20分)

1、whos help disp clear save load

2、grid on text hold on 3、bar(或barh) hist 4、while(while end) break 5、reshape cell 6、eye diag rand 7、num2str findstr

二、 选择题(每题4分,共20分)

D B C B B

三、 程序填空题(每空2分,共12分)

① p=polyfit(x,y,3) ② y2=polyval(p,x2) ③ axis([0 6 m2 m1])

④ title(‘多项式曲线拟合’)

⑤ x = input(‘请输入数据 \\n’) 或 x = input(‘请输入数据’) ⑤ m = mean(y) 四、(8分)

A=[4 0 2 3; 0 3 2 3; 2 0 0 1; 0 -2 1 3;]; %3分 b=[9 8 10 7]'; %2分 x=A\\b; 或x=inv(A)*b; %3分

另一种答案:

A=[4 0 2 0;0 3 0 -2; 2 2 0 1; 3 3 1 3]; %3分 b=[9 8 10 7]; %2分 x=b/A;或x=b*inv(A); %3分

五、(10分)

len= menu('select a num','1','2','3','4', '5'); %3分

switch len % switch 语句格式写对2分 case 1

y=zeros(4,3); %1分

case 2

y=5.*ones(3,4); %1分

case 3

y=5+randn(5,3); %1分

case 4

y=’not an array’; %1分

otherwise

disp(‘Error’) %1分 end

六、(15分)

f1=2; f2=5; fs=20; n=0:127; %1分 s1=10*sin(2*pi*f1*n/fs); %1分 s2=5*sin(2*pi*f2*n/fs); %1分 noise=2*randn(size(n)); %2分

s=s1+s2+noise; %1分

s_f= fft(s); %1分

m_f=abs(s_f); %1分 或m_f=abs(fft(s)) %2分 f=(0:length(s_f)-1)*fs/length(s_f) 或 f=n*fs/length(n) %2分 figure(1);

subplot(2,1,1); plot(n,s); %1分 title(‘信号时域与频域波形’); %1分 xlabel(‘Time’); ylabel(‘amplitude’); %1分 subplot(2,1,2); plot(f,m_f); %1分 xlabel(‘frequency(Hz)’); ylabel(‘frequency spectral’); %1分

七、(15分)

% 构建结构阵列3分,也可用赋值语句逐个赋值 student=struct('name',{'liwei' 'wangjun' 'liuzhi' 'zhanglin'},...

'eng',{[85 75 78 83], 'phy' [83 84 92 87], 'math' [80 69 77 82], 'computer' [90 75 81 78] }); %加权求平均,%7分

w=[3 4 5 2]; w=w/sum(w);

student_num=length(student); syn_score=zeros(1,student_num); for i=1:student_num

syn_score(i)=student(i).eng*w(1)+student(i).phy*w(2)... +student(i).math*w(3)+student(i).computer*w(4);

end

构建单元阵列 %3分

student1 = {' liwei ', [85 75 78 83]; ' wangjun ', [83 84 92 87]; ' liuzhi ', [80 69 77 82]; 'zhanglin ', [90 75 81 78]}; for i=1: length(student1)

student1{i,3} = mean(student1{i,2}); %更新正确 2分

end

二、 基本知识填空题(每空1分,共20分) 8. 9.

MATLAB的通用命令中若对函数功能和用法不熟悉,可用 命令;显示变量、阵列或文本时,可用 命令;清除工作空间中的变量时,可用 命令;保存和恢复工作空间,或者工作空间中的特定变量时,可用 和 命令。 MATLAB系统提供了两个重要部件: 和 ,它们在系统和用户编程中,占据重要的地位。 产生全1阵可用 函数,产生对角阵可用 函数。

11. 在MATLAB图形系统中,如果需要给已经绘制好的图形加上栅格线,可以使用 命令,如果需要在指定的坐标位置标注

文本时使用的函数为 。

12. 用MATLAB绘制极坐标中的图形时可以使用 函数,绘制条形图时可使用 函数,绘制柱状图,用以表示数据

值的分布情况时可使用 函数。

13. MATLAB中用于控制不定次重复循环语句为 ,若在循环执行过程中需要终止该循环时采用的语句为 。 14. 对于MATLAB中的多维阵列,在保持所有元素个数和内容不变的前提下可以使用 函数改变其尺寸和维数;利用 函

数可以定义单元阵列。

二、选择题(每题4分,共20分) 6.

设A=[1 2 3; 3 4 5; 5 6 7; 7 8 9],则sum(A),length(A)和size(A)的结果( ) A. [16 20 24] 3 [4 3] B. [6 12 18 24] 3 [3 4] C. [6 12 18 24] 4 [4 3] D. [16 20 24] 4 [4 3]

10. 在MATLAB中,可用内部函数与工具箱函数产生矩阵,其中如果要产生单位阵可用 函数,产生全0阵可用 函数,7.

设X=[0:0.5*pi:pi], Y=cos(X)且Z=sin(X),那么Y.*Z, Y*Z’和cat(1,Y,Z)的结果分别为( )

A. [0 0 0] 0 [1 0 -1; 0 1 0] B. [0 0 0] 0 [1 0 -1 0 1 0] C. [0 0 0] [0 1 0; 0 0 0; 0 -1 0] [1 0 -1; 0 1 0] D. [0 1 0; 0 0 0; 0 -1 0] [0 0 0] [1 0 -1 0 1 0] 8.

对于矩阵A,统计其中大于T的元素个数,可以使用的语句是( ) A. length(A) - length(find(A<=T)) B. length(sum(A>T)) C. sum(sum(A>T)) D. sum(length(A>T)) 9.

假设多维阵列A=rand(5,5,4),下面对A进行各种不同的操作,其中错误的是( ) A. sin(A).*cos(A) B. A1(1) = A

C. sum(A)+length(A) D. A1{2} = num2cell(A)

10. 已知str1=’sum’, str2=’sun’, str3=’XiDian 123’,有:k1=sum(str1==str2), k2=sum(strrep(str1,’m’,’n’)==str2), k3=findstr(str3,’an’), 则k1,k2,k3

的结果分别为:( )

A. 2, 2, 5 B. 2, 3, 5 C. 3, 2, 4 D. 2, 3, 4

三、程序填空(每空3分,共15分) 3.

编写MATLAB程序,在同一图形窗口中绘制y1和y2两条曲线,并对图形坐标轴进行控制。程序如下: x = -3:0.1: 3;

y1 = 2*x+5; y2 = x.^2-3*x; plot(x,y1); %绘制曲线y1 ① ; %保持曲线y1 plot(x,y2); %绘制曲线y2

m1 = max([y1, y2]); m2 = min([y1, y2]);

② ; %用axis调制坐标轴,横坐标在[-3 3]之间,且完全显示图形 ③ ; %加入图形注释,横坐标为“时间”,纵坐标为“幅度” 4.

编写MATLAB程序,对于用户输入的向量或矩阵,计算其平均值和方差: ④ ; % 提示输入数据并保存到x中,命令行显示“请输入数据” y = reshape(x,1, prod(size(x))); m = mean(y); % 计算均值m ⑤ ; % 计算方差v

四、(10分) 为解下列线性方程组,请写出MALAB语言程序。

3 x1 + x2 + 5x4 = 2 6 x2 +7 x3 + 3x4 = 4 4 x2 +3 x3 = 7 2x1 - x2 + 2 x3 + 6x4 =8

五、(10分) 利用menu函数和switch函数编写脚本文件。输入选择ch,当ch=1时,产生[-1, 1]之间均匀分布的随机数;ch=2时,产生大小为5x5的对角阵,其中每个元素在[0, 1]之间均匀分布;当ch=3时,产生均值为0,方差为1的正态随机数;当ch=4时,产生均值为5,方差为4的大小为5x5的正态随机矩阵;当ch=5时,直接退出菜单。

六、(10分) 某宿舍有4名同学,3门课程的期末考试成绩如下表所示:

姓名(name) liming wanglei liujun zhangxiao 成绩(score)

要求编程完成以下内容:

(3) 基于表格内容构建结构阵列,结构名为student。通过访问结构阵列,计算每一个学生的平均分,将平均分作为一个新的域,更新已经

建立的结构阵列。

最终得到的结构阵列可表示为 student .name .score .mean

(4) 基于表格内容建立二维单元阵列,单位阵列中每一行保存一个学生的信息。通过访问单元阵列,计算每一个学生的平均分,将平均分

作为一个新的域,更新已经建立的单元阵列。 最终得到的单元阵列格式为:

姓名 成绩 平均分 学生1 学生2 学生3 学生4

七、(15分)某一过程中通过测量得到: t y

编程完成以下内容:

(1) 分别采用三阶和四阶多项式对数据进行拟合;(提示:采用polyfit进行多项式拟合;调用格式为p = polyfit(t,y,n),n为多项式阶数,p为得到的多项式系数)

(2) 比较拟合效果,要求把图形窗口分成两个子窗口,子窗口1绘制出原始测量值和三阶多项式拟合后的曲线,子窗口2绘制出原始测量值和四阶多项式拟合后的曲线;

(3) 根据已知时刻点的测量值,计算两种拟合方法的均方误差(MSE)。

四、 基本知识填空题(每空1分,共20分)

1、help disp clear save load 2、simulink toolboxes 3、eye zeros ones diag 4、grid on text

5、polar bar(或barh) hist 6、while break 7、reshape cell

五、 选择题(每题4分,共20分)

D A C B B

六、 程序填空题(每空3分,共15分)

① hold on

② axis([-3 3 m2 m1])

0 1.0 0.2 1.5 0.4 1.9 0.6 2.1 0.8 2.3 1.0 2.4 2.0 2.6 5.0 -4.0 85 75 78 83 84 92 80 69 77 90 75 81 1n?i为拟合后的估计值。 ?i)2,其中yi为上面表中的原始测量值,yMSE??(yi?yni?1

③ xlabel(‘时间’); ylabel(‘幅度’);

④ x = input(‘请输入数据 \\n’) 或 x = input(‘请输入数据’) ⑤ v = var(y) 或 1/(length(y)-1) * (sum((y-m).^2))

四、(10分)

A=[3 1 0 5; 0 6 7 3; 0 4 3 0; 2 -1 2 6;]; %3分 b=[2 4 7 8]'; %3分

x=A\\b; 或x=inv(A)*b或x=pinv(A)*b; %4分

另一种答案:

A=[3 0 0 2;1 6 4 -1; 0 7 3 2; 5 3 0 6]; %3分 b=[2 4 7 8]; %3分 x=b/A;或x=b*inv(A); %4分

五 (10分)

ch = menu('select a num','1','2','3','4', '5'); %3分

switch ch % switch 语句格式写对2分 case 1

y=2*rand-1; %1分

case 2

y=diag(rand(1,5)); %1分

case 3

y=randn; %1分

case 4

y=5+2*randn(5,5); %1分

case 5

return; %1分

end

六、(10分)

% 构建结构阵列3分,也可用赋值语句逐个赋值

student=struct('name',{'liming','wanglei', 'liujun','zhangxiao'},...

'score',{[85 75 78], [83 84 92], [80 69 77], [90 75 81] }); for i=1: length(student)

student(i).mean = mean(student(i).score); %更新正确 2分 end

% 构建单元阵列3分,也可用赋值语句逐个赋值

student1 = {'liming', [85 75 78]; 'wanglei', [83 84 92]; 'liujun', [80 69 77]; ... 'zhangxiao', [90 75 81]}; for i=1: length(student1)

student1{i,3} = mean(student1{i,2}); %更新正确 2分 end

或者可由struct直接转换到 cell student1 = struct2cell(student); % 4分 student1 = squeeze(student1); %删除单点维 student1 = student1'; % 结果正确 1分

七、(15分)

t = [0 0.2 0.4 0.6 0.8 1.0 2.0 5.0]; y = [1.0 1.5 1.9 2.1 2.3 2.4 2.6 -4.0]; % 1分 p1 = polyfit(t,y,3); % 1分 p2 = polyfit(t,y,4); % 1分 x = [0:0.1:5];

y1 = polyval(p1,x); % 1分 y2 = polyval(p2,x); % 1分

subplot(1,2,1); % subplot 语句格式写对1分

plot(t,y,'o',x,y1); % 也可使用hold on命令,正确画出第一个子图 2分 subplot(1,2,2);

plot(t,y,'o',x,y2); % 正确画出第二个子图 2分

i = int16(1 + t/0.1); % or i=fix(t/0.1)+1;能找到正确的估计值位置 3 分 mse1 = mean((y-y1(i)).^2); % 正确计算均方误差 1分 mse2 = mean((y-y2(i)).^2); % 正确计算均方误差 1分 七、 选择题(每题5分,共30分)

1. 工作空间workspace中有变量a,b,c,按如下步骤进行操作,(1)将变量a存成数据文件adata.mat,(2)清除工作区间所有变量,(3)再将

数据文件调入工作区间,下面( )组命令是正确的:

A save adata a; clear; load adata; B save adata a -ascii; clear; load adata; C save adata; clear all; load adata; D save adata; clear all; load –ascii adata;

2. 在Command Window窗口中分别输入下列命令,对应输出结果正确的是( ) A. j=sqrt(-1) j=-1 B. x=ones(1,2);x>0 ans=1

C. y=diag(eye(2)).’ y=[1 1] D. rand(1,3) ans=[0.9501 1.2311 0.6068]

3. 对应MATLAB提供的绘制平面曲线、离散序列、三维曲线、三维网格曲线、等高线图的函数为( ) A. plot, stem, mesh, plot3, surf B. plot, stem, plot3, mesh, contour C. plot, hist, mesh, plot3, contour D. plot, hist, plot3, meshc, contour

4. 下列对条件语句、分支语句、固定循环次数语句、不定循环次数语句关键字排序正确的是( ) A. if else end; for end; switch case end; while end; B. if else end; switch case end; for end; while end; C. for end; if else end; while end; switch case end; D. while end; for end; switch case end; if else end;

5. 在MATLAB的Editor中输入下列语句:x=[1 3;2 4];y=norm(x(:,2));z=det(x);u=diag(x);v=polyval(u,1);运行后,在 Command Window 中对应y,z,u,v的输出结果为( )

A.5 -2 [1;4] 5 B.5 2 [1;2] 3 C.4 2 [1;2] 3 D.4 -2 [1;4] 5

6. str1='Matlab is a usefull tool';str2=strtok(str1), strnum=length(str2), logvec=strcmpi(str2,'matlab'),k=findstr(str2,'a') 下列对变量str2, strnum,logvec,k值描述正确的是:

A ‘M’ 1 0 [ ] B. ‘Matlab’ 6 0 [2 5] C. ‘M’ 1 1 [ ] D. ‘Matlab’ 6 1 [2 5]

八、 程序填空和改错,改错处用箭头标记(每空5分,共20)

抛物线的方程为

y?ax2?cx,输入c后,绘制该曲线,寻找曲线的最小值和对应的x值。小明编写程序如下:

clc;clear;close all; c=input('c='); a=1;

x=-2:0.1:2; ; y=zeros(1,xnum);

y=a*x^2+c*x;→ %(2)按照函数形式对y赋值 figure;

; xlabel('x');ylabel('y'); [ymin,Imin]=min(y);

xmin=x(ymin);→ %(4)找到最小函数值对应的x值

三、(10分)A=[1 2 3;4 5 6;7 8 9],利用menu函数输入选择参数OprNo,OprNo=1时,将A按列向变为9×1的列矢量 ,记为B; OprNo=2时,将A的前两列的元素对应相加,得到C为3×1的列矢量; OprNo=3时,求A的对角元素之和(提示用trace函数)。 四、(10分)牛顿迭代法是方程寻根的一种方法,考虑

%(3)绘制曲线

% (1)对变量xnum赋为数组x的个数

f(x)?x2?2x?3,方程f(x)?0的牛顿迭代公式为xk?1?xk?f(xk)即

f'(xk)2xk?2xk?3xk?1?xk?,k?0,1,2,...。首先,编牛顿迭代法函数,函数形式如下:

2xk?2function y=NewtonEqu(x)

%函数功能:按牛顿迭代公式定义函数 %输入参数:x,自变量, %输出参数:y,函数值 然后,给定初值x0

五、(15分)某班为进行综合测评,需用MATLAB编程完成以下内容: (5) 构建如下的结构阵列

?0,编写一循环主程序,当|xk?1?xk|?10?4或循环次数大于100时,停止迭代,显示最终的方程根。

(6) 对学生成绩按学分加权求出综合测评分,并从低到高排序

1nwixi,xi为课程成绩,Gym(体育)、Eng(英语)、Math(数学)、物理(Phy)的学分分别为1 2 3 2.5,综合测评分的计算公式如下:x??wi?1wi为相应的学分,w??wii?1n,n为成绩个数。

(7) 按如下方式显示结果:(提示:num2str(x),可将数据x转换成字符串)

Name Score

×× ×× ×× ×× ×× ××

&?10sin(2?六、(15分)下图所示的梯形电路中,若Usf0n/fs),其中Us?10V为电源电压幅值,信号频率f0?2Hz,采样频率为

fs?10Hz,采样点256点,即n=0,1,2,…,255。

编程实现:

& (1) 求Uab&的波形和频谱。提示,用到的函数有fft,subplot (2) 在b点接频谱分析仪观察该点电压频谱,用MATLAB仿真,分图绘制正弦电压Ub建模:此电路中设各节点电压幅值为Ua、Ub 将各支路电流用这些电压来表示

I1?对

UbUs?UaUU?UbUI2?aI3?aI4?bI5?R4?R5R1?R2R7R3R6a

点和

b

点列出节点电流方程:

I1?I2?I3,

I3?I4?I5,将电流表达式代入,可得

?1Us11?1??U?U???abRRR?RRR1?R2712?3?3?1111?Ua?????Ub?0R3RRR?R645??3

九、 选择题(每题5分,共30分) 1、A C B B A D

十、 程序填空和改错(每空5分,共20)

抛物线的方程为clc;clear;close all; c=input('c='); a=1;

?Ua??a11??,可写成矩阵方程A???Ub??a21?Us?a12??Ua???

R?R?12???a22???Ub????0??y?ax2?cx,输入c后,绘制该曲线,寻找曲线的最小值和对应的x值。小明编写程序如下:

x=-2:0.1:2;

xnum=length(x) or xnum=size(x,2); %(1)对变量xnum赋为数组x的个数 y=zeros(1,xnum);

y=a*x^2+c*x;→ y=a*x.^2+c*x; %(2)按照函数形式对y赋值 figure;

plot(x,y) xlabel('x');ylabel('y'); [ymin,Imin]=min(y);

xmin=x(ymin);→ xmin=x(Imin); %(4)找到最小函数值对应的x值 三、

clc;clear;close all; A=[1 2 3;4 5 6;7 8 9];

OprNo=menu('OprSel','1','2','3'); %生成菜单,3分,标题可任意取名 switch OprNo

case 1

B=reshape(A,prod(size(A)),1) %2分 case 2

C=A(:,1)+A(:,2) %2分 case 3

D=trace(A) %2分 otherwise

error('无效操作'); %不作要求 end

四、

function y=NewtonEqu(x)

y=x-(x^2+2*x-3)/(2*x+2); %函数定义,2分

clc;clear;close all; x0=0;

x1=NewtonEqu(x0); err=1e-4 k=1; xrec=[x0 x1];

while and(abs(x1-x0)>err,k<=100) %使用不定循环,4分,条件正确2分 %或者使用固定100次的for循环,满足条件就break退出 x0=x1;

x1=NewtonEqu(x0); %循环条件更新2分, k=k+1;

xrec=[xrec x1]; %记录每次迭代的x不作要求 end k x1

五、

clc;clear;close all;

%也可用if esleif end

%(3)绘制曲线

%构建结构阵列,5分,也可用赋值语句逐个赋值 Student=struct('Name',{'xiaoming' 'xiaohong' 'xiaojun'},...

'Gym',{85 75 95},'Eng',{90 95 80},'Phy',{93 80 85},'Math',{88 90 70}); %加权求平均,并排序,7分 w=[1 2 3 2.5]; w=w/sum(w);

StuNum=length(Student); SynScore=zeros(1,StuNum); for i=1:StuNum

SynScore(i)=Student(i).Gym*w(1)+Student(i).Eng*w(2)... +Student(i).Phy*w(3)+Student(i).Math*w(4); end

[SynScore,I]=sort(SynScore);%从小到大排序 %显示结果,3分

disp(['Name',' ','Score']);%使用sprintf控制格式也可 for i=1:StuNum

disp([Student(I(i)).Name,' ',num2str(SynScore(i))]); end 六、

clc;clear;close all; %输入题设条件,3分 Us=10; f0=2; fs=10; snap_num=256;

R1=2;R2=4;R3=4;R4=4;R5=2;R6=12;R7=12; %构建AU=b矩阵方程,5分 a11=1/R3+1/R7+1/(R1+R2);a12=-1/R3; a21=1/R3;a22=-1/R3-1/(R4+R5)-1/R6; A=[a11 a12;a21 a22]; b=[Us/(R1+R2);0];

%求Uab以及写出Ub正弦电压形式,3分 U=A\\b; Uab=U(1)-U(2); Uab Ub=U(2);

Ub_sin=Ub*sin(2*pi*f0*[0:snap_num-1]/fs);

%作FFT,绘制分图,4分,不要求学生写出时间序列和频率序列 fseq=[0:snap_num-1]*fs/snap_num; subplot(2,1,1);plot([0:snap_num-1],Ub_sin); xlabel('t(s)');ylabel('Uc(V)')

subplot(2,1,2);plot(fseq,abs(fft(Ub_sin))); xlabel('f(Hz)');ylabel('Frequency Magnitude');