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吗?为什么?
答:
a | t1 | T | F | |
---|---|---|---|---|
ndims | 2 | 2 | 2 | 2 |
size | 1*1 | 1*10 | 1*1 | 0*0 |
length | 1 | 10 | 1 | 0 |
通过下面代码可知t1不完全等于t2,因为matlab数值计算会出现误差,误差不断积累,当它超过eps时,就会影响实际结果
>>t1==t2
ans =
1*10 logical 数组
1 1 1 1 1 1 0 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。
答:
3.由指令rng(‘default’),A=rand(3,5)生成二维数组A,试求该数组中所有大于0.5的元素的位置,分别求出它们的“全下标”和“单下标”。
>>rng('default'),A=rand(3,5);
>>L=find(A<0.5)
L=
3
6
7
11
14
>>[r,c]=ind2sub(size(A),L);
>>[r,c]
ans =
3 1
3 2
1 3
2 4
2 5
4.在时间区间 [0,10]中,绘制曲线。要求分别采取“标量循环运算法”和“数组运算法”编写两段程序绘图。
标量循环运算法:
i=1;
x=0:0.1:10;
for j=0:0.1:10
y(i)=1-exp(-0.5*j)*cos(2*j);
i=i+1;
end
plot(x,y)
数组运算法:
x=0:0.1:10;
y=1-exp(-0.5*x).*cos(2*x);
plot(x,y)
1.已知A=magic(3),B=rand(3),请回答以下问题:
(1)A.*B和B.*A的运行结果相同吗?请说出理由。
>>A=magic(3);B=rand(3);
答:相等,两个同维矩阵对应元素相乘,有乘法的交换律可知一定相等。
(2)AB和A.B的运行结果相同吗?请说出理由。
答:不相等,**是矩阵运算,.**是数组运算。
(3)AB和BA的运行结果相同吗?请说出理由。
答:不相等,矩阵乘法不具有交换律。
(4)A.\B和B./A的运行结果相同吗?请说出理由。
答:.\和./分别是数组的左除和右除,两个式子的数学含义是相同的。
(5)A\B和B/A的运行结果相同吗?请说出理由。
答:不相等,矩阵的乘法不满足交换律,一个相当于左乘A的逆,一个相当右乘A的逆。
(6)AA\B-B和A(A\B)-B的运行结果相同吗?它们中那个结果的元素都十分接近于0?
答:不相等
A*(A\B)-B的元素更接近于0
(7)A\eye(3)和eye(3)/A的运行结果相同吗?为什么?
答:部分不相等,由于数值计算计算方法的不同会产生误差,导致两者不相等。
6.已知矩阵,A=[1 2;3 4](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=-3pi:pi/15:3pi; 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.答: