第3章 数值数组及其运算
习题3及解答
11  要求在闭区间上产生具有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
12  由指令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
13  采用默认全局随机流,写出产生长度为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
14  已知矩阵,运行指令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
15  在时间区间 [0,10]中,绘制曲线。要求分别采取“标量循环运算法”和“数组运算法”编写两段程序绘图。
〖目的〗
加强理解数组运算的机理和应用。
初步使用subplot, plot, xlabel, ylabel等指令绘图。
〖解答〗
%标量循环运算法
t=linspace(0,10,200);
N=length(t);
y1=zeros(size(t));
for k=1:N
    y1(k)=1-exp(-0.5*t(k))*cos(2*t(k));
end
subplot(1,2,1),plot(t,y1),xlabel('t'),ylabel('y1'),grid on
%数组运算法
y2=1-exp(-0.5*t).*cos(2*t);
subplot(1,2,2),plot(t,y2),xlabel('t'),ylabel('y2'),grid on
 
16  先运行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
17  先运行指令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
 
18  下面有一段程序,企图用来解决如下计算任务:有矩阵,当依次取10, 9, 8, 7, 6, 5, 4, 3, 2, 1时,计算矩阵“各列元素的和”,并把此求和结果存放为矩阵Sa的第k行。例如时,A阵为,此时它各列元素 的和是一个行数组,并把它保存为Sa的第3行。问题:该段程序的计算结果对吗?假如计算结果不正确,请指出错误发生的根源,并改正之。
〖目的〗
正确理解sum的工作机理。
reshape的应用。
〖解答〗
1)企图用以下程序完成题目要求。
for k=10:-1:1
    A=reshape(1:10*k,k,10);
    Sa(k,:)=sum(A);
end
Sa
Sa =
    55    55    55    55    55    55    55    55    55    55
    3    7    11    15    19    23    27    31    35    39
    6    15    24    33    42    51    60    69    78    87

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。