MATLAB第五章作业 下载本文

第五章作业

1.选择题

(1)if结构的开始是“if”命令,结束是C命令。 A. End if B. end C. End D. else (2)下面的switch结构,正确的是C。 A. >>switch a B. >>switch a C. >>switch a D. >>switch a case a>1 case a=1 case 1 case =1 (3)运行以下命令: >>a=eye(5);

>>for n=a(2:end,:)

则for循环的循环次数是B。 A. 5 B. 4 C. 3 D. 1 (4)运行以下命令,则for循环的循环次数是C。 >>x=0:10; >>for n=x if n==5

continue end end A. 10 B. 5 C. 11 D. 10 (5)运行以下命令则B。 >>a=[1 2 3] >>keyboard K>>a=[1 2 4]; K>>return A. a=[1 2 3] B. a=[1 2 4] C. 命令窗口的提示符为“K>>” D. 出错 (6)关于主函数,以下说法正确的是D。 A. 主函数名必须与文件名相同

B. 主函数的工作空间与子函数的工作空间是嵌套的 C. 主函数中不能定义其他函数

D. 每个函数文件中都必须有主函数

(7)当在命令窗口中输入“sin(a)”时,则对“a”的搜索顺序是D。 A. 是否内部函数→是否变量→是否私有函数

B. 是否内部函数→是否搜索路径中函数→是否私有函数

C. 是否内部函数→是否搜索路径中函数→是否当前路径中函数 D. 是否变量→是否私有函数→是否当前路径中函数

?x2?x?6,x?0且x??3?22.求分段函数y??x?5x?6,0≤x<5且x?2及x?3的值。用if语句实现,分别输出x

?x2?x?1,其他?=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0时的y值。

解:首先编写分段函数的函数m文件: function y=myfun(x)

if x==2||abs(x)==3||x>=5 y=x^2-x-1; elseif x<0 y=x^2+x-6;

else

y=x^2-5*x+6; end

然后计算分段函数的值:

x=[-5.0,-3.0,1.0,2.0,2.5,3.0,5.0]; l=length(x); y=zeros(1,l); for k=1:l

y(k)=myfun(x(k)); end

[x;y]

plot(x,y)

ans =

-5.0000 -3.0000 1.0000 2.0000 2.5000 3.0000 5.0000

14.0000 11.0000 2.0000 1.0000 -0.2500 5.0000 19.0000 20151050-5-5-4-3-2-1012345

此题也可以采用逻辑表达式定义分段函数,做法更简单。编程如下:x=[-5.0,-3.0,1.0,2.0,2.5,3.0,5.0]; y1=(x==2|abs(x)==3|x>=5).*(x.^2-x-1) y2=(x<0&x~=-3).*(x.^2+x-6);

y3=(x>=0&x<5&x~=2&x~=3).*(x.^2-5*x+6); y=y1+y2+y3; [x;y]

y1 =

0 11 0 1 0 5 19 ans =

-5.0000 -3.0000 1.0000 2.0000 2.5000 3.0000 5.0000

14.0000 11.0000 2.0000 1.0000 -0.2500 5.0000 19.0000

当然,本题主要是考查if结构的应用。

3.输入一个百分制成绩,要求输出成绩等级A、B、C、D、E。其中90分~100分为A,80分~89分为B,70分~79分为C,60分~69分为D,60分以下为E。要求:

(1)分别用if语句和switch语句实现。

(2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 解:第一种方法:用if结构实现。编程如下:

x=input('输入一个百分制成绩(0~100):'); if x<0||x>100

error('成绩输入错误!'); elseif x<60

disp('你的成绩为E'); elseif x<70

disp('你的成绩为D'); elseif x<80

disp('你的成绩为C'); elseif x<90

disp('你的成绩为B'); else

disp('你的成绩为A'); end

第二种方法:用switch结构实现。编程如下:

x=input('输入一个百分制成绩(0~100):'); xd=fix(x/10); switch xd

case {0,1,2,3,4,5} disp('你的成绩为E'); case 6

disp('你的成绩为D');

case 7

disp('你的成绩为C'); case 8

disp('你的成绩为B'); case {9,10}

disp('你的成绩为A'); otherwise

error('成绩输入错误!'); end

注:此题建议编写两个M脚本文件,然后在MATLAB命令窗口运行。如果在Notebook中直接运行input指令会产生错误。

6123n果是多少?要求:分别用循环结构和向量运算(使用sum函数)来实现。

解:第一种方法:使用循环结构。编程如下: s=0;

for n=1:100 s=s+1/n^2; end

pai=sqrt(6*s)

pai =

3.1321

4.根据

?2?12?12?12???12,求π的近似值。当n分别取100、1000、10000时,结

s=0;

for n=1:1000 s=s+1/n^2; end

pai=sqrt(6*s)

pai =

3.1406 s=0;

for n=1:10000 s=s+1/n^2; end

pai=sqrt(6*s)

pai =

3.1415

第二种方法:使用向量运算。编程如下: n=1:100;

s=sum(1./n.^2); pai=sqrt(6*s)

pai =

3.1321 n=1:1000;

s=sum(1./n.^2); pai=sqrt(6*s)

pai =

3.1406 n=1:10000;

s=sum(1./n.^2); pai=sqrt(6*s)

pai =

3.1415

5.若两个连续自然数的乘积减1是素数,则称这两个连续自然数是亲密数对。该素数是亲密素数。例如2×3-1=5,由于5是素数,所以2和3是亲密数对,5是亲密素数。求[2,50]区间内: (1)亲密数对的对数。

(2)与上述亲密数对对应的所有亲密素数之和。

提示:在MATLAB中,判断一个正整数是否为素数的函数为isprime(n)。 解:首先编写判断亲密数的函数: function [flag,k]=qms(n) k1=n*(n+1)-1; if isprime(k1) flag=1;

k=[n,n+1,k1]; else

flag=0; k=[];

end

然后计算亲密数对的对数和所有亲密素数的和: clear clc k=[];

for n=2:50

[flag,k1]=qms(n); k=[k;k1]; end k

S=size(k);

disp(['亲密数对的对数为' num2str(S(1))]) SUM=sum(k(:,3));

disp(['所有亲密素数的和为' num2str(SUM)])

k =

2 3 5 3 4 11 4 5 19 5 6 29 6 7 41 8 9 71 9 10 89 10 11 109 11 12 131 13 14 181 15 16 239 16 17 271 19 20 379 20 21 419 21 22 461 24 25 599 26 27 701 28 29 811 30 31 929 31 32 991 35 36 1259 38 39 1481 39 40 1559 41 42 1721 44 45 1979 45 46 2069 46 47 2161 48 49 2351 50 51 2549 亲密数对的对数为29

所有亲密素数的和为23615

6.编写M函数文件,输入参数为t和ω,计算函数y?sin(?t)的值并将变量t和y放在同一矩阵z的两行中,输出参数为z。

解:函数文件为:

function z=mysin(t,w) %MYSIN

%计算不同频率、不同时刻的正弦函数值 %输入参数: % t:时刻,取值可以为标量或向量 % w:频率,取值为标量,缺省为1时可以省略 %输出参数: % z:两行数组,第一行存放不同时刻t值,第二行存放对应的正弦函数值

%调用格式: % z=mysin(t):计算函数y=sin(t)的值 % z=mysin(t,w):计算函数y=sin(w*t)的值

%湖北工业大学左惟炜编写 11-01-20

if nargin<1||nargin>2

error('输入参数个数错误!'); end

switch nargin case 1 w=1; end

y=sin(w*t); z=[t;y];

运行过程如下:

t=0:0.1*pi:2*pi; w=1.5;

z1=mysin(t) z2=mysin(t,w)

z1 =

Columns 1 through 9

0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133

0 0.3090 0.5878 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878

Columns 10 through 18

2.8274 3.1416 3.4558 3.7699 4.0841 4.3982 4.7124 5.0265 5.3407

0.3090 0.0000 -0.3090 -0.5878 -0.8090 -0.9511 -1.0000 -0.9511 -0.8090

Columns 19 through 21

5.6549 5.9690 6.2832 -0.5878 -0.3090 -0.0000 z2 =

Columns 1 through 9

0 0.3142 0.6283 0.9425 1.2566 1.5708 1.8850 2.1991 2.5133

0 0.4540 0.8090 0.9877 0.9511 0.7071 0.3090 -0.1564 -0.5878

Columns 10 through 18

2.8274 3.1416 3.4558 3.7699 4.0841 4.3982 4.7124 5.0265 5.3407

-0.8910 -1.0000 -0.8910 -0.5878 -0.1564 0.3090 0.7071 0.9511 0.9877

Columns 19 through 21

5.6549 5.9690 6.2832 0.8090 0.4540 0.0000

最后说明一下,所有M函数文件都应该在M文件编辑器中编写并与Notebook文档保存在同一个文件夹中才能正常运行。