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.答: