5. 数值数组及向量化运算

1. 请读者先运行以下指令

a=0;b=pi;
t1=a:pi/9:pi;
t2=linspace(a,b,10);
T=t1*t2';
F=find(T<0);  

然后,请回答变量a、t1、T、F的维度、规模、长度分别是多少?t1完全等于t2吗?为什么?

2. 对于指令A=reshape(1:18,3,6)产生的数组

A =
     1     4     7    10    13    16
     2     5     8    11    14    17
     3     6     9    12    15    18  

先请你用一条指令,使A数组中取值为2、4、8、16的元素都被重新赋值为NaN。然后,再请你用一条指令,把A数组的第4、5两列元素都被重新赋值为Inf

3. 由指令rng('default'), A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。

4. 在时间区间[0,10]中,绘制$y=1-e^{-0\ldotp 5t} \mathrm{cos}2t$曲线。要求分别采取“标量循环运算法”和“数组运算法”编写两段程序绘图。

5. 已知A=magic(3),B=rand(3),请回答以下问题:

(1)A.*BB.*A的运行结果相同吗?请说出理由。

(2)A*BA.*B的运行结果相同吗?请说出理由。

(3)A*BB*A的运行结果相同吗?请说出理由。

(4)A.\BB./A的运行结果相同吗?请说出理由。

(5)A\BB/A的运行结果相同吗?请说出理由。

(6)A*A\B-BA*(A\B)-B的运行结果相同吗?它们中那个结果的元素都十分接近于0

(7)A\eye(3)eye(3)/A的运行结果相同吗?为什么?

6. 已知矩阵$A=\left\lbrack \begin{array}{cc} 1 & 2\\ 3 & 4 \end{array}\right\rbrack$,

(1)运行指令B1=A.^(0.5), B2=0.5.^A, B3=A^(0.5), B4=0.5^A可以观察到不同运算方法所得结果不同。

(2)请分别写出根据B1, B2, B3, B4恢复原矩阵A的M码。

(3)用指令检验所得的两个恢复矩阵是否相等。

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)请写出绘制相应的“无裂缝”图形的全部指令。(提示:isnan用于判断是否非数;可借助sum求和;realmin是最小正数。)

8. 请分别用“标量循环+条件分支”法和“数组混合运算”法,在$-1.5\leq x \leq 1.5$、$-3\leq y \leq 3$的矩形域内计算以下二元函数。然后,比较两个计算结果中元素的最大相对误差,并使用surf指令绘制函数图形。(提示:数组运算时所需的矩形域内的自变量数组X、Y可使用meshgrid生成。)

\[\begin{split}z(x,y)= \begin{cases} 0.546 e^{-0.75 y^2-3.75x^2+1.5x} & x+y \leq -1 \\ 0.758 e^{-y^2-6x^2} & -1 < x+y \leq 1 \\ 0.546 e^{-0.75 y^2-3.75x^2-1.5x} & x+y >1 \end{cases}\end{split}\]