# 5. 数值数组及向量化运算 1. 请读者先运行以下指令 ```matlab 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)`产生的数组 ```matlab 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.*B`和`B.*A`的运行结果相同吗?请说出理由。 (2)`A*B`和`A.*B`的运行结果相同吗?请说出理由。 (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`的运行结果相同吗?为什么? 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生成。) ```math 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} ```