2011年全国大学生数学建模竞赛测试试题(A)
时量:180分钟满分:150分
院系:专业:学号:姓名:
一、选择题(2分/题×10题=20分)
1、Matlab程序设计中清除当前工作区的变量x,y的命令是( c )
A.clc x,y
B.clear(x y)
C.clear x y
D.remove(x,y)
2、关于Matlab程序设计当中变量名和函数名的描述,下述说法正确的是( B )
A.都不区分大小写
B.都区分大小写
C.变量名区分,函数名不区分
D. 变量名区分,函数名不区分
3、MA TLAB软件中,把二维矩阵按一维方式寻址时的寻址访问是按(B)优先的。
A.行
B.列
C.对角线
D.左上角
4、关于矩阵上下拼接和左右拼接的方式中,下列描述是正确的是( D )
A.上下拼接的命令为C=[A, B],要求矩阵A, B的列数相同;
B.左右拼接的命令为C=[A; B],要求矩阵A, B的行数相同;
C.上下拼接的命令为C=[A; B],要求矩阵A, B的行数相同;
D.左右拼接的命令为C=[A, B],要求矩阵A, B的行数相同。
5、Matlab命令a=[65 72 85 93 87 79 62 73 66 75 70];find(a>=70 & a<80)得到的结果为(C )
A.[72 79 73 75]
B.[72 79 73 75 70]
C.[2 6 8 10 11]
D.[0 1 0 0 0 1 0 1 0 1 1]
6、矩阵(或向量)的范数是用来衡量矩阵(或向量)的(A)的一个量
A.维数大小
B.元素的值的绝对值大小
C.元素的值的整体差异程度
D.所有元素的和
7、计算非齐次线性方程组AX=b的解可转化为计算矩阵X=A-1b,可以用Matlab的命令(A)实现
A.左除命令x=A\b
B.左除命令x=A/b
C.右除命令x=A\b
D.右除命令x=A/b
8、关于Matlab的矩阵命令与数组命令,下列说法正确的是(b)
A.矩阵乘A*B是指对应位置元素相乘
B.矩阵乘A.*B是指对应位置元素相乘
C.数组乘A.*B是指对应位置元素相乘
D.数组乘A*B是指对应位置元素相乘
9、生成5行4列,并在区间[1:10]内服从均分布的随机矩阵的命令是(d)
A.rand(5,4)*10
B.rand(5,4,1,10)
C.rand(5,4)+10
D.rand(5,4)*9+1
10、关于Matlab的M文件的描述中,以下错误的是( d )
A、Matlab的M 文件有脚本M文件和函数M文件两种;
B、Matlab的函数M文件中要求首行必须以function顶格开头;
C 、Matlab 的函数M 文件中要求文件名与函数名必须相同;
D 、Matlab 的函数M 文件中的常量nargin 和nargout 分别表示函数返回值和参数的个数。
二、填空题(2分/空×25空=50分)
1、二维直角坐标数据..绘图使用Matlab
..
绘图使用Matlab
极坐标...绘图使用Matlab
.......用Matlab
2、三维曲线..
绘图的Matlab 三维曲面
..
绘图的Matlab Z 轴的数据之前,根据坐标向量x , y ,
..矩阵X,Y ...的数据;
3、用符号计算验证三角等式)sin(sin cos cos sin 212121ϕϕϕϕϕϕ-=-的MA TLAB 命令为syms t1 t2;
f=sin(t1-t2);
4、生成符号矩阵⎥⎦
⎤
⎢
⎣⎡=2221
1211
a a a a A 用命令syms a11 a12 a21 a22
....值
.
...... 5、用符号计算求x
x
x 1sin
lim 2
∞
→
用MA TLAB 命令syms x; f=x^2*sin(1/x);
6、生成符号函数x e
x f x
sin )(-=用MA
TLAB 命令syms x; f=exp(-x)*sin(x)
,则计算2
2
dx
f d 用MA TLAB
dx x f ⎰1
)(用MALTAB
7、M 文件有两类:命令文件......和文件名...
有严格要求,它要求关键词
必须处在第一行且顶格书写,文件名...
三、纠错验证题(每小题10分,共20分)
1.找“拔尖数”
对一个行向量a,编程找出其中满足a(i-1)< a(i) >a(i+1)的所有元素的下标i,即该元素既要大于其左边的那个元素又要大于其右边的那个元素(我们称之为“拔尖数”),把满足上述条件的所有元素的下标
..构成一个向量b输出,并返回“拔尖数”的个数k。
(1) 使用for循环,并编程写成一个函数实现。
(共两处错误,10分)
function [b,k]=mybest(a)
k=0; % “拔尖数”的个数
for i=2:length(a) 错误出现改为 i=2:length(a)-1
if a(i)>a(i-1)&a(i)>a(i+1) % 判断是否为“拔尖数”
b(k)=i; 错误出现改为 b(k+1)=i; % 记录并返回下标k=k+1;
end
end
(2) 不使用for循环,用1~3个语句实现,越简洁越好。
(共两处错误,10分)
function [b,k]=mybest(a)
tmp=[0, diff(a); diff(a), 0];错误出现改为 tmp=[0, diff(a);0,diff(a)];
b=find(tmp(1,:)>0|tmp(2,:)>0);
k=length(b);
二、程序设计填空题(每空6分,共60分)
1.矩阵变换
编程实现如下矩阵变换,如矩阵
35124732
29182543
17483526
52271614 A
⎡⎤
⎢⎥
⎢⎥=
⎢⎥
⎢⎥
⎣⎦
,取矩阵右上角部分
........(不包括主对角线),
并将其先后进行水平翻转
....和垂直翻转
....,之后输出
0000
26000
432500
3247120
B
⎡⎤
⎢⎥
⎢⎥
=
⎢⎥
⎢⎥
⎣⎦。
A=input(“A=”);
[r,c]=size(A);
for i=1:r
for j=1: i
A(i,j)= 0 ;
end
end
A=A( end:-1:1 , end:-1:1 );
2.用MATLAB实现冒泡排序:
(1)首先将所有待排序的数字放入工作列表中。
(2)从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将
它与它的下一位交换。
(3)重复(2)号步骤,直至再也不能交换。
要求:生成1×20在1.0.~.5.0.内的随机整数
......,并用冒泡排序的算法,对其按从小到大
....重新排序,并返回
交换的次数
..。
如>>a=[21 45 13 69];
>>[b ,k]=mysort(a)
则返回b=[13 21 45 69], k=2(交换的次数)。
a=round( rand(1,20)*40+10 );
[b,k]=mysort(a);
% mysort.m函数文件:
function [b,k]=mysort(a)
n=length(a); % 向量a的长度
k=0; % 交换次数
for i=n-1:-1:2
for j=1:i
if a(i)>a(i+1)
t=a(i); % 交换
..两元素
a(i)=a(i+1) ;
a(i+1)=t ;
k=k+1; % 交换次数自增
end
end
end
3.二分法求非线性方程的根
先绘制函数6432()2613828f x x x x x x =---++在区间[0, 2]的函数图像,并绘制网格线,利用二分法编程求方程0)(=x f 在4.1=x 附近的根(取初值区间为[0,2],精度取1e-6)。
x=0:0.05:2;
fx=x.^6-2*x.^4-6*x.^3-13*x.^2+8*x+28;
plot (x,fx,’r*-’) % 绘制[0,2]区间内的函数图形 grid on % 绘制网络线
a=0; fa=inf;
b=2; fb= -inf ; while abs(b-a)> 1e-6
m= (a+b)/2 ; % 中点
fm=m^6-2*m^4-6*m^3-13*m^2+8*m+28; % 中点函数值
if sign(fm)==sign(fa) % 中点与左端点函数值同号, 中点取代左端点构成新区间 a=m; fa=fm;
elseif sign(fm)==sign(fb) % 中点与右端点函数值同号, 中点取代右端点构成新区间 b=m; fb=fm; end end
disp(m);。