matlab考试题答案2007年
MATLAB语言2007年笔试考试答案
一、选择题(每题5分,共30分)
1、A C B B A D
二、程序填空和改错(每空5分,共20)
抛物线的方程为2
=+,输入c后,绘制该曲线,寻找曲线的最小值
y ax cx
和对应的x值。小明编写程序如下:
clc;clear;close all;
c=input('c=');
a=1;
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) %(3)绘制曲线
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 %也可用if esleif end
第2页共4页
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;
%构建结构阵列,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;
第4页共4页%输入题设条件,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');