280 likes | 436 Views
5/8 上機課. 用一個圖形將教過的圖形中的三種(一般曲線圖、長條圖、極座標圖、階梯圖、針狀圖)畫在一個圖中,並試著加上註解,讓圖形更完整 . >>subplot(2,2,1); >>plot(x,sin(x)); >>subplot(2,2,2); >> fplot('sin(1/x)', [0.02 0.2]); >>subplot(2,2,3); >> theta=linspace(0, 2*pi); >> r=cos(4*theta); >> polar(theta, r); >>subplot(2,2,4); >> x=1:10;
E N D
5/8 上機課 • 用一個圖形將教過的圖形中的三種(一般曲線圖、長條圖、極座標圖、階梯圖、針狀圖)畫在一個圖中,並試著加上註解,讓圖形更完整
>>subplot(2,2,1); >>plot(x,sin(x)); >>subplot(2,2,2); >> fplot('sin(1/x)', [0.02 0.2]); >>subplot(2,2,3); >> theta=linspace(0, 2*pi); >> r=cos(4*theta); >> polar(theta, r); >>subplot(2,2,4); >> x=1:10; >> y=abs(sin(x)); >> bar(x,y);
今天進度: • 三維空間繪圖 • 矩陣實用
三維曲線 • mesh和surf 是三度空間立體繪圖的基本命令,mesh可畫出立體網狀圖,surf 則可畫出立體曲面圖,兩者產生的圖形都會依高度而有不同顏色。 • 讓我們來看幾個例子,下列命令可畫出由函數形成的立體網狀圖(mesh):
>>x=linspace(-2, 2, 25);% 在x軸上,-2到2間取25點 >>y=linspace(-2, 2, 25);% 在y軸上,-2到2間取25點 >>[xx,yy]=meshgrid(x, y);% xx和yy都是25x25的矩陣 >>zz=xx.*exp(-xx.^2-yy.^2);% 計算函數值,zz也是 >>mesh(xx, yy, zz);% 25x25的矩陣。畫出立體網狀圖 如果想將圖形背景色改為 黑底,在mesh前打上 >>colordef black (改白色為:colordef white)
注意:meshgrid的作用是產生以x及y為基準的格子點,其輸出為xx及yy,分別代表格子點的x座標與y座標。注意:meshgrid的作用是產生以x及y為基準的格子點,其輸出為xx及yy,分別代表格子點的x座標與y座標。 • 注意:xx此時已經是一個25x25的矩陣了,Matlab不知道xx^2為何,所以,若是要將個別每個元素平方,必須如下使用: xx.^2 多一個『.』在xx後
>>x=linspace(-2, 2, 25); % 在x軸上,-2到2間取25點 >>y=linspace(-2, 2, 25); % 在y軸上,-2到2間取25點 >>[xx,yy]=meshgrid(x, y); % xx和yy都是25x25的矩陣 >>zz=xx.*exp(-xx.^2-yy.^2); % 計算函數值 zz >>colordef black; %將背景色改為黑色 >>surf(xx, yy, zz); % 畫出立體曲面圖 • surf與mesh的用法類似
Matlab提供了一個現成的peaks函數,可以產生一個凹凸有致的曲面,包含了三個局部極大點及三個局部極小點,其方程式為: • 要畫出此函數的最快方法就是直接鍵入: >>peaks z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ... - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ... - 1/3*exp(-(x+1).^2 - y.^2)
這就是peaks的原貌,我們可以 對peaks函數取點,再以各種不同方法進行繪圖。meshz可將曲面加上裙擺: >>[x,y,z]=peaks; >>meshz(x,y,z); >>axis([-inf inf -inf inf -inf inf]); axis是將各座標範圍訂定
另外這招叫:waterfall(水流),可以在x方向或y方向產生水流效果: >>[x,y,z]=peaks; >>waterfall(x,y,z); • 若要產生在y方向的水流效果: >>[x,y,z]=peaks; >>waterfall(x',y',z');
meshc同時畫出網狀圖與等高線: >>[x,y,z]=peaks; >>meshc(x,y,z); • 網狀圖 • 等高線 • 如果將meshc改為 surfc會同時畫出 曲面圖與等高線
contour3畫出曲面在三度空間中的等高線: >>contour3(peaks, 20); • 20是等高線的數目,也就是區分的段數 >>contour3(peaks, 40);
contour畫出曲面等高線在XY平面的投影: >>contour(peaks, 20); 同樣地,20代表等高線區分的數目,數目越大會將等高線分得越密
plot3可畫出三度空間中的曲線: >>t=linspace(0,20*pi, 501); >>plot3(t.*sin(t), t.*cos(t), t); x座標為 t.*sin(t) y座標為 t.*cos(t) z座標為 t
plot3亦可畫出兩條三度空間中的曲線: >>t=linspace(0,20*pi, 501); >>plot3(t.*sin(t), t.*cos(t), t, t.*sin(t), t.*cos(t), -t); 前三個座標為第一函數 次三個座標為第二函數
矩陣運算的注意事項 • 矩陣的運算雖與一般純量運算類似,唯一的要求是:相加或相減的矩陣必須具有相同的維度。維度不一致則會產生錯誤訊息,但矩陣與純量可以直接進行加減。 >>A = [1 2 3 2 1] + 5 A = 6 7 8 7 6 >>B = 2*A B = 12 14 16 14 12
矩陣運算的注意事項 • 矩陣的相乘(A*B) 必須確定A的行數(column dimension)必須等於B的列數(row dimension)否則會產生錯誤。 • 矩陣的次方(A^2=A*A) 必須使用在方陣上才有意義。 例如:>>A= [1 2 3 2 1]; >>B=A^2;
矩陣運算的注意事項 • 若想對矩陣內『元素對元素』的運算應當如何? • 例如:A= [ 12 ; 45] ,B= [ 2 ; 3 ] 如果想作運算 [ 12*2 ; 45*3 ],應當如何? • 在運算符號『*』,『^』之前加上一個句號『.』即可,如上例: >>A .* B ans = 24 135 >>A .^2 ans = 144 2025
sum 功能 • sum() 用在向量上,sum(A)為每個元素加總的和 用在矩陣上,sum(A)為每行元素加總而成的向量 • 例如: >>A=[1 2 3; 4 5 6; 7 8 9]; >>sum(A), sum(sum(A)) ans = 12 15 18 ans = 45
矩陣進階實用 • 一個正方矩陣A的反矩陣的定義是A-1,所以此二矩陣相乘不論是AA-1或A-1A,結果皆為單位矩陣I。 • 矩陣如果是奇異(singular)或是條件不足 (ill-conditioned),其反矩陣並不存在。條件不足的矩陣與一組聯立方程組其中的方程式並不獨立有關,而一矩陣的秩(rank) 即是代表矩陣中獨立方程式個數。如果一矩陣的秩數和其矩陣的列數相等,則此矩陣為非奇異且其反矩陣存在。
矩陣進階實用 • 實例 1:反矩陣 >>A=[ 2 1 ; 4 3 ]; >>inv(A) ans = 1.5000 -0.5000 -2.0000 1.0000 >>B=[ 2 1 ; 4 2 ]; >>inv(B) >> inv(A) Warning: Matrix is singular to working precision. ans = Inf Inf Inf Inf
矩陣進階實用 • 實例 2:反矩陣 >>A=[ 1 2; 3 4 ; 5 6 ]; >>inv(A) ??? Error using ==> inv Matrix must be square. 這就是所謂的條件不足(ill-conditioned)的情形,inv 無法用在非方陣的情況。
矩陣進階實用 • 另外兩種方便使用的功能: 求秩(rank)與行列式(det) >>A=[1 3 0; -1 5 2; 1 2 1]; >> rank(A), det(A) ans = 3 ans = 10 三次行列式大家都會算,但是,超過4次的行列式會很難計算,這裡可以用Matlab輕易計算。
特徵值與特徵向量 • 假設 A為一個n階矩陣,而 X 為一個有n列的欄向量,λ為一純量。考慮以下的數學式 AX = λX • 如果X由不為零的元素所組成,其中λ滿足上式稱為矩陣A的特徵值(eigenvalue),而X稱為矩陣A的特徵向量 (eigenvector)。 • 特徵向量代表一個正規正交(orthonormal) 的向量組,所謂的正規正交向量,是指這向量與自身做內積的值為一單位向量;在幾何關係上是指二量相互垂直且此其內積值再做正規化(normalization)。
特徵值與特徵向量 • 超強的特徵值與向量功能 >>A=[0.5 0.25; 0.25 0.5]; >>[Q,d]=eig(A) Q = -0.7071 0.7071 0.7071 0.7071 d = 0.2500 0 0 0.7500
特徵值與特徵向量 [Q,d]=eig(A) 這個功能一舉數得: 1. d的對角線的值為A的特徵值 (即使複數也可以算出) 2. Q的第一行Q(:,1)為d11的特徵向量,Q的第二行Q(:,2)為d22的特徵向量(依此類推) 3. Q的每一行的特徵向量相互垂直,且為正規正交向量(任兩相異行內積為 0,一行與自身做內積的值為 1),即QQT=I
特徵值與特徵向量 • 檢驗一下: >>Q*Q’ %『’』為矩陣的倒置 ans = 1.0000 0 0 1.0000 >>A*Q(:,1), d(1,1)*Q(:,1) ans = -0.1768 0.1768 ans = -0.1768 0.1768