1、第三章 1. 要求在闭区间上产生具有10个等距采样点的一维数组。试用两种不同的指令实现。 方法一 t1=linspace(0,2*pi,10) t1 = 0 0.6981 1.3963 2.0944 2.7925 3.4907 4.1888 4.8869 5.5851 6.2832 方法二 t2=0:2*pi/9:2*pi 结果与t1相同 2. 由指令rand('state',0),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。 rand('state',0),A
2、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.9501 0.4860 0.4565 0.4447 0.9218 0.2311 0
3、8913 0.0185 0.6154 0.7382 0.6068 0.7621 0.8214 0.7919 0.1763 大于0.5的元素的全下标 行号 1 3 2 3 3 2 3 1 2 列号 1 1 2 2 3 4 4 5 5 大于0.5的元素的单下标 1 3 5 6 9 11 12 13 14 3. 已知矩阵,运行指令B1=A.^(0.5), B2=A^(0.5), 可以观察到不同运算方法所得结果不
4、同。(1)请分别写出根据B1, B2恢复原矩阵A的程序。(2)用指令检验所得的两个恢复矩阵是否相等。 A=[1,2;3,4]; B1=A.^0.5 B2=A^0.5 A1=B1.*B1; A2=B2*B2; norm(A1-A2,'fro') 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 = 1.8505e
5、015 4. 在时间区间 [0,10]中,绘制曲线。要求分别采取“标量循环运算法”和“数组运算法”编写两段程序绘图。 %标量循环运算法 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);
6、 subplot(1,2,2), plot(t,y2), xlabel('t'), ylabel('y2'), grid on 5. 先运行clear,format long,rand('state',1),A=rand(3,3),然后根据A写出两个矩阵:一个对角阵B,其相应元素由A的对角元素构成;另一个矩阵C,其对角元素全为0,而其余元素与对应的A阵元素相同。 clear, format long rand('state',1) A=rand(3,3) B=diag(diag(A)) C=A-B A = 0.952782
7、14965662 0.59815852417219 0.83681960067634 0.70406216677500 0.84074319811307 0.51870305972492 0.95387747359223 0.44281884223513 0.02220977857260 B = 0.95278214965662 0 0 0 0.84074319811307 0
8、 0 0 0.02220977857260 C = 0 0.59815852417219 0.83681960067634 0.70406216677500 0 0.51870305972492 0.95387747359223 0.44281884223513 0 6. 先运行指令x=-3*pi:pi/15:3*pi; y=x; [X,Y]=meshgrid(x,y); warnin
9、g off; Z=sin(X).*sin(Y)./X./Y; 产生矩阵Z。(1)请问矩阵Z中有多少个“非数”数据?(2)用指令surf(X,Y,Z); shading interp观察所绘的图形。(3)请写出绘制相应的“无裂缝”图形的全部指令。 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
10、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 7. 下面有一段程序,企图用来解决如下计算任务:有矩阵,当依次取10, 9, 8, 7, 6, 5, 4, 3, 2, 1时,计算矩阵“各列元素的和”,并把此求和结果存放为矩阵Sa的第k行。例如时,A阵为,此时它各列元素 的和是一个行数组,
11、并把它保存为Sa的第3行。问题:该段程序的计算结果对吗?假如计算结果不正确,请指出错误发生的根源,并改正之。 (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
12、 51 60 69 78 87 10 26 42 58 74 90 106 122 138 154 15 40 65 90 115 140 165 190 215 240 21 57 93 129 165 201 237 273 309 345 28 77 126 175 224 273 322 371 420 469 36 100 164
13、228 292 356 420 484 548 612 45 126 207 288 369 450 531 612 693 774 55 155 255 355 455 555 655 755 855 955 (2)正确性分析 sum对二维数组,求和按列施行;而对一维数组,不管行数组或列数组,总是求那数组所有元素的和。 for k=10:-1:1 A=reshape(1:10*k,k,10); Sa(k,:)=sum(A); if k==1
14、 Sa(k,:)=A; end end Sa Sa = 1 2 3 4 5 6 7 8 9 10 3 7 11 15 19 23 27 31 35 39 6 15 24 33 42 51 60 69 78 87 10 26 42 58 74 90 106 122 138 154 1
15、5 40 65 90 115 140 165 190 215 240 21 57 93 129 165 201 237 273 309 345 28 77 126 175 224 273 322 371 420 469 36 100 164 228 292 356 420 484 548 612 45 126 207 288 369 450 531 612 693 774 55 155 255 355 455 555 655 755 855 955






