习题2-数值数组及向量化运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

习题2

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吗为什么

1)产生数据

a=0;b=pi;

t1=a:pi/9:pi;

t2=linspace(a,b,10);

T=t1*t2';

F=find(T<0);

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)

数组 a t1 T F

维度数 2 2 2 2

规模 1 1 1 10 1 1 0 0

长度 1 10 1 0

3)判断数组相等

P=t1==t2 %对不同浮点计算方法获得的数进行比较的本指令,不推荐使用

E=max(abs(t1-t2))

P =

1 1 1 1 1 1 0 1 1

1

E =

可见2个数组中的元素不完全相等。应记住:这种现象在数值计算中常常会遇到;并且,若想检验同一个量的不同方法、途径算得的结果,应尽量不用“==”符判断,而应借助“两个量间的(相对)误差水平是否小于某个容差”进行判断。比如

pp=abs(t1-t2)<1e-14

pp =

1 1 1 1 1 1 1 1 1

1

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。

1)产生数组A

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

2)利用单序号实现对2、4、8、16的元素的重新赋值

A([2,4,8,16])=NaN %这些位置元素的重赋值不可能采用“全下标”一次性实现

A =

1 NaN 7 10 13 NaN

NaN 5 NaN 11 14 17

3 6 9 12 15 18

3)利用全下标和冒号对第4、5列元素进行重赋值

A(:,[4,5])=Inf

A =

1 NaN 7 Inf Inf NaN

NaN 5 NaN Inf Inf 17

3 6 9 Inf Inf 18

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

rng('default')

A=rand(3,5)

A =

2)寻找数值大于的所有元素的全下标

[ri,cj]=find(A>;

disp(' ')

disp('大于的元素的全下标')

disp(['行号',int2str(ri')])

disp(['列号',int2str(cj')])

大于的元素的全下标

行号 1 2 1 2 2 3 1 3 1 3

列号 1 1 2 2 3 3 4 4 5 5

3)寻找数值大于的所有元素的单序号

id=find(A>;

disp(' ')

disp('大于的元素的单序号')

disp(id')

大于的元素的单序号

1 2 4 5 8 9 10 12 13 15 4.已知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 的运行结果相同吗为什么

(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.^, B2=.^A, B3=A^, B4=^A 可以观察到不同运算方法所得结果不同。(2)请分别写出根据B1, B2, B3, B4恢复原矩阵A 的M 码。

1)生成四个指数运算结果

A=[1,2;3,4];

B1=A.^

B2=.^A %等式两边进行若进行对数操作,可得

B3=A^

B4=^A %等式两边进行若进行矩阵对数操作,可得

B1 =

B2 =

B3 =

+ -

- +

相关文档
最新文档