(完整版)matlabR2012a课后习题答案第三章

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章数值数组及其运算

习题3及解答

1 要求在闭区间]2,0[ 上产生具有10个等距采样点的一维数组。试

用两种不同的指令实现。

〖目的〗

●数值计算中产生自变量采样点的两个常用指令的异同。

〖解答〗

%方法一

t1=linspace(0,2*pi,10)

%方法二

t2=0:2*pi/9:2*pi %要注意采样间距的选择,如这里的2*pi/9.

t1 =

Columns 1 through 7

0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 Columns 8 through 10

4.8869

5.5851

6.2832

t2 =

Columns 1 through 7

0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 Columns 8 through 10

4.8869

5.5851

6.2832

2 由指令rng('default'),A=rand(3,5)生成二维数组A,试求该数组中

所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。

〖目的〗

●数组下标的不同描述:全下标和单下标。

●sub2ind, int2str, disp的使用。

●随机发生器的状态控制:保证随机数的可复现性。

〖解答〗

rng('default')

A=rand(3,5)

[ri,cj]=find(A>0.5);

id=sub2ind(size(A),ri,cj);

ri=ri';cj=cj';

disp(' ')

disp('大于0.5的元素的全下标')

disp(['行号 ',int2str(ri)])

disp(['列号 ',int2str(cj)])

disp(' ')

disp('大于0.5的元素的单下标')

disp(id')

A =

0.8147 0.9134 0.2785 0.9649 0.9572 0.9058 0.6324 0.5469 0.1576 0.4854 0.1270 0.0975 0.9575 0.9706 0.8003

大于0.5的元素的全下标

行号 1 2 1 2 2 3 1 3 1 3 列号 1 1 2 2 3 3 4 4 5 5

大于0.5的元素的单下标

1 2 4 5 8 9 10 12 13 15

3 采用默认全局随机流,写出产生长度为1000的“等概率双位(即

取-1,+1)取值的随机码”程序指令,并给出 -1码的数目。

〖目的〗

● 两种基本随机发生器的使用。

● 关系运算产生逻辑数组——可用于数组的元素的标识和寻访。 ● 逻辑数组的应用。

● 如何判断两个整数数组是否相等。 〖解答〗

(1)运用均匀随机数解题法——解法1

rng default %为以下结果重现而设;产生默认随机流。详见第4.3.2节

A=rand(1,1000); a=2*(A>0.5)-1; Na=sum(a==-1) Na =

512

(2)运用正态随机数解题法——解法2

randn('state',123) B=randn(1,1000); b=2*(B>0)-1; Nb=sum(b==-1) Nb = 462

(3)直接发生法——解法3

c=randsrc(1,1000,[-1,1]); Nc=sum(c==-1) Nc =

482

4 已知矩阵⎥⎦

⎢⎣⎡=4321A ,运行指令B1=A.^(0.5), B2=A^(0.5), 可以观察

到不同运算方法所得结果不同。(1)请分别写出根据B1, B2恢

复原矩阵A 的程序。(2)用指令检验所得的两个恢复矩阵是否相等。

〖目的〗

● 数组运算和矩阵运算的不同。

● 如何判断两个双精度数组是否相等。

●norm指令的应用。

〖解答〗

A=[1,2;3,4];

B1=A.^0.5

B2=A^0.5

A1=B1.*B1;

A2=B2*B2;

norm(A1-A2,'fro') % 求误差矩阵的F-范数,当接近eps量级时,就认为实际相等

B1 =

1.0000 1.4142

1.7321

2.0000

B2 =

0.5537 + 0.4644i 0.8070 - 0.2124i

1.2104 - 0.3186i 1.7641 + 0.1458i

ans =

8.4961e-016

t5.0-

6 先运行clear,format long,rng('default'),A=rand(3,3),然后根据A

写出两个矩阵:一个对角阵B,其相应元素由A的对角元素构成;

另一个矩阵C,其对角元素全为0,而其余元素与对应的A阵元素相同。

〖目的〗

●常用指令diag的使用场合。

〖解答〗

clear,

format long

rng('default')

A=rand(3,3)

B=diag(diag(A))

C=A-B

A =

0.814723686393179 0.913375856139019 0.278498218867048

0.905791937075619 0.632359246225410 0.546881519204984

0.126986816293506 0.097540404999410 0.957506835434298

B =

0.814723686393179 0 0

0 0.632359246225410 0

0 0 0.957506835434298

C =

0 0.913375856139019 0.278498218867048

0.905791937075619 0 0.546881519204984

0.126986816293506 0.097540404999410 0

7 先运行指令x=-3*pi:pi/15:3*pi; y=x; [X,Y]=meshgrid(x,y);

warning off; Z=sin(X).*sin(Y)./X./Y; 产生矩阵Z。(1)请问矩阵Z中有多少个“非数”数据?(2)用指令surf(X,Y,Z); shading interp观察所绘的图形。(3)请写出绘制相应的“无裂缝”图形的全部指令。

〖目的〗

●初步感受三维曲面的绘制方法。

●非数NaN的产生,非数的检测,和对图形的影响。

●sum的应用。

●eps如何克服“被零除”的尴尬。

〖解答〗

x=-3*pi:pi/15:3*pi;

y=x;

[X,Y]=meshgrid(x,y);

warning off

Z=sin(X).*sin(Y)./X./Y;

NumOfNaN=sum(sum(isnan(Z))) %计算“非数”数目

subplot(1,2,1),surf(X,Y,Z),shading interp,title('有缝图')

%产生无缝图

XX=X+(X==0)*eps;

YY=Y+(Y==0)*eps;

ZZ=sin(XX).*sin(YY)./XX./YY;

subplot(1,2,2),surf(XX,YY,ZZ),shading interp,title('无缝图') NumOfNaN =

181

相关文档
最新文档