1习题21.请读者先运行以下指令a=0;b=pi;t1=a:pi/9:pi;t2=linspace(a,b,10);T=t1*t2';F=find(T0);然后,请回答变量a、t1、T、F的维度、规模、长度分别是多少?t1完全等于t2吗?为什么?1)产生数据a=0;b=pi;t1=a:pi/9:pi;t2=linspace(a,b,10);T=t1*t2';F=find(T0);2)罗列各变量的特征Na=ndims(a);Nt1=ndims(t1);NT=ndims(T);NF=ndims(F);Sa=size(a);St1=size(t1);ST=size(T);SF=size(F);La=length(a);Lt1=length(t1);LT=length(T);LF=length(F);fprintf('数组%7s%8s%8s%8s\n','a','t1','T','F')fprintf('维度数%5d%8d%8d%8d\n',Na,Nt1,NT,NF)fprintf('规模%5d%3d%5d%3d%5d%3d%5d%3d\n',Sa,St1,ST,SF)fprintf('长度%7d%8d%8d%8d\n',La,Lt1,LT,LF)数组at1TF维度数2222规模111101100长度110103)判断数组相等P=t1==t2%对不同浮点计算方法获得的数进行比较的本指令,不推荐使用E=max(abs(t1-t2))P=21111110111E=4.4409e-16可见2个数组中的元素不完全相等。应记住:这种现象在数值计算中常常会遇到;并且,若想检验同一个量的不同方法、途径算得的结果,应尽量不用“==”符判断,而应借助“两个量间的(相对)误差水平是否小于某个容差”进行判断。比如pp=abs(t1-t2)1e-14pp=11111111112.对于指令A=reshape(1:18,3,6)产生的数组A=147101316258111417369121518先请你用一条指令,使A数组中取值为2、4、8、16的元素都被重新赋值为NaN。然后,再请你用一条指令,把A数组的第4、5两列元素都被重新赋值为Inf。1)产生数组AA=reshape(1:18,3,6)A=1471013162581114173691215182)利用单序号实现对2、4、8、16的元素的重新赋值A([2,4,8,16])=NaN%这些位置元素的重赋值不可能采用“全下标”一次性实现A=1NaN71013NaNNaN5NaN1114173691215183)利用全下标和冒号对第4、5列元素进行重赋值A(:,[4,5])=InfA=1NaN7InfInfNaN3NaN5NaNInfInf17369InfInf183.由指令rng('default'),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。1)产生试验数组rng('default')A=rand(3,5)A=0.81470.91340.27850.96490.95720.90580.63240.54690.15760.48540.12700.09750.95750.97060.80032)寻找数值大于0.5的所有元素的全下标[ri,cj]=find(A0.5);disp('')disp('大于0.5的元素的全下标')disp(['行号',int2str(ri')])disp(['列号',int2str(cj')])大于0.5的元素的全下标行号1212231313列号11223344553)寻找数值大于0.5的所有元素的单序号id=find(A0.5);disp('')disp('大于0.5的元素的单序号')disp(id')大于0.5的元素的单序号124589101213154.已知A=magic(3),B=rand(3),请回答以下问题:(1)A.*B和B.*A的运行结果相同吗?请说出理由。(2)A*B和A.*B的运行结果相同吗?请说出理由。4(3)A*B和B*A的运行结果相同吗?请说出理由。(4)A.\B和B./A的运行结果相同吗?请说出理由。(5)A\B和B/A的运行结果相同吗?请说出理由。(6)A*A\B-B和A*(A\B)-B的运行结果相同吗?它们中那个结果的元素都十分接近于0?(7)A\eye(3)和eye(3)/A的运行结果相同吗?为什么?(1)相同。数组对应元素间相乘运算,服从交换律。(2)不同。前者是矩阵乘积,后者是数组对应元素的乘积。(3)不同。矩阵乘运算不服从交换律。(4)相同。因为在两个指令中,数组A始终是“除数组”,而B是“被除数组”。(5)一般不同。前者是B左除A,后者是B右除A。(6)后者结果接近于全0元素阵。A*(A\B)-B相当于A*(inv(A)*B)-B,所以几乎为0阵。(7)相同。实际上得到的就是A的逆阵。5.已知矩阵4321A,(1)运行指令B1=A.^(0.5),B2=0.5.^A,B3=A^(0.5),B4=0.5^A可以观察到不同运算方法所得结果不同。(2)请分别写出根据B1,B2,B3,B4恢复原矩阵A的M码。1)生成四个指数运算结果A=[1,2;3,4];B1=A.^0.5B2=0.5.^A%等式两边进行若进行对数操作,可得B3=A^0.5B4=0.5^A%等式两边进行若进行矩阵对数操作,可得B1=1.00001.41421.73212.0000B2=0.50000.25000.12500.0625B3=0.5537+0.4644i0.8070-0.2124i1.2104-0.3186i1.7641+0.1458iB4=0.9910-0.44225-0.66340.32762)逆运算A1=B1.^2A2=log(B2)/log(0.5)A3=B3^2A4=logm(B4)/logm(0.5)A1=1.00002.00003.00004.0000A2=1234A3=1.0000+0.0000i2.0000+0.0000i3.0000-0.0000i4.0000+0.0000iA4=1.00002.00003.00004.00006.先运行指令x=-3*pi:pi/15:3*pi;y=x;[X,Y]=meshgrid(x,y);warningoff;Z=sin(X).*sin(Y)./X./Y;产生矩阵Z。(1)请问矩阵Z中有多少个“非数”数据?(2)用指令surf(X,Y,Z);shadinginterp观察所绘的图形。(3)请写出绘制相应的“无裂缝”图形的全部指令。(提示:isnan用于判断是否非数;可借助sum求和;realmin是最小正数。)〖解答〗x=-3*pi:pi/15:3*pi;y=x;[X,Y]=meshgrid(x,y);warningoffZ=sin(X).*sin(Y)./X./Y;NumOfNaN=sum(sum(isnan(Z)))%计算“非数”数目%NumOfNaN2=length(find(isnan(Z)==1))subplot(1,2,1),surf(X,Y,Z),shadinginterp,title('有缝图')%产生无缝图XX=X+(X==0)*realmin;6YY=Y+(Y==0)*realmin;%realmin返回指定浮点数类型所能表示的最小值ZZ=sin(XX).*sin(YY)./XX./YY;subplot(1,2,2),surf(XX,YY,ZZ),shadinginterp,title('无缝图')NumOfNaN=1817.在时间区间[0,10]中,绘制teyt2cos15.0曲线。要求分别采取“非向量化编程”和“向量化编程”编写两段程序绘图。〖解答〗%标量循环运算法t=linspace(0,10,200);N=length(t);y1=zeros(size(t));fork=1:Ny1(k)=1-exp(-0.5*t(k))*cos(2*t(k));endsubplot(1,2,1),plot(t,y1),xlabel('t'),ylabel('y1'),gridon%数组运算法y2=1-exp(-0.5*t).*cos(2*t);subplot(1,2,2),plot(t,y2),xlabel('t'),ylabel('y2'),gridon7051000.511.5ty1051000.511.5ty2