MATLAB 7 在工程上的應用
第 5 章
進階繪圖以及模型建立
圖5.1–1 典型 xy 圖形的專有名詞。
畫出正確圖形的必備條件
下列的清單描述了任何圖形的基本特色:
1.
每一個軸都必須加上所畫出的量的名稱標籤以及其單 位!如果需要同時畫出兩個或者兩個以上不同單位的 量(例如同時畫出速度以及距離對時間的圖形),如 果空間足夠的話要指明軸標籤的單位,或者指明在圖 例中,否則就是標記每一條曲線。2.
每一個軸都要具有等間隔距離的刻度標記,並且距離 適中,不可以太稀疏也不可以太緊密,間隔距離應該 是便於解讀以及內插的,例如應使用0.1、0.2等等,而 不要使用0.13、0.26等等。(接下頁)
畫出正確圖形的必備條件(承上頁)
3.
如果你要畫出超過一組的資料或者曲線,則在每一條 曲線旁加上標籤或者使用圖例來區分。4.
如果你準備許多相似種類的圖形,或者軸標籤並沒有 辦法傳遞足夠的訊息時,記得要使用標題來輔助。5.
如果你要畫出量測得到的資料,則以符號標記每一筆 資料,使用的符號可以為圈圈、方塊、或者十字(在 同一組資料中使用相同的符號標記每一個資料點)。如果具有非常多的資料點,則使用點符號來標記。
(接下頁)
畫出正確圖形的必備條件(承上頁)
6. 有時候資料符號以線條相連接可以幫助閱讀者具象 化 這些資料,尤其是只具有少數資料點的時候。然 而,以線條連接資料點時,尤其是以實線連結的時候,
可能表示對於資料點之間的值有某種程度的認知,因 此必須要小心地處理以避免導致誤解。
7. 如果你要畫出由計算某一函數所得的點(相對於量 測所得到的資料),不要使用符號來畫出每一個點。
你應該做的是,確定產生足夠多的點並且將這些點以 實線相連接。
下列的MATLAB對話會畫出在區間 0 x 52 之內的y = 0.4 (1.8x)^0.5 的圖形,其中 y 表示火箭發射後的高度,並 且 x 是水平的距離(沿著試驗飛行方向的距離),單位為 英哩。
>>x = [0:0.1:52];
>>y = 0.4*sqrt(1.8*x);
>>plot(x,y)
>>xlabel(’Distance (miles)’)
>>ylabel(’Height (miles)’)
>>title(’Rocket Height as a Function of Downrange Distance’)
所得到的圖形顯示於下一張投影片中。
圖5.1–2
MATLAB中的自動調整比例大小功能會自動選取刻度標
記間隔距離。接下來圖形會顯示於圖形視窗中。你可以使用下列幾 種方式得到一份實體拷貝。
1. 使用選單系統。在圖形視窗中點選File選單中的Print
選項。電腦會提示如果要繼續列印程序則回答OK。2. 在命令列中輸入print。此指令會將目前的圖形直接輸
出至印表機。3. 將此圖形儲存於一個檔案中以供將來列印,或者匯入
到其他的應用程式中,例如文字處理器程式。你需要 正確地知道你所使用的檔案的圖形檔案格式。參考本 節中有關Exporting Figures的章節內容。當你完成繪圖時,點選圖形視窗中的File選單中的
Close選項來關閉圖形視窗。
我們注意到在視窗系統中使用Alt-Tab鍵的組合會讓 你回到命令視窗中而不關閉圖形視窗。
如果你並沒有關閉該視窗,在執行新的plot指令時不 會重新跳出一個新的圖形視窗。只是原本圖形視窗中 的內容會被更新。
grid以及axis指令
1. grid指令會在對應於刻度標籤的刻度標記上顯示出格線。
輸入grid on則會添加格線;而輸入grid off則會停止顯 示格線。當單獨使用的時候,grid會切換此功能開啟或 者關閉,但是你應該要使用grid on以及grid off來確保 你的使用方式是正確的。
2. 你可以使用axis指令來改寫MATLAB對於軸界限範圍 的自動選擇。
3. 基本的語法為: axis([xmin xmax ymin ymax])。
4. 此指令設定你所指定的值為x軸以及y軸的最大值以及 最小值。我們注意到,不同於陣列的使用方式,此指 令並不需要以逗號將這些值分隔開。
更多相關資料請查詢課本第5-8~5-9頁
Page 265
---
>>x = [0:0.1:52];
>>y = 0.4*sqrt(1.8*x);
>>plot(x,y)
>>xlabel('Distance (miles)')
>>ylabel('Height (miles)')
>>title('Rocket Height as a Function of Downrange Distance') 指令:
plot(x,y)
xlabel(‘$$$’) ylabel(‘$$$’) title(‘$$$’)
圖5.1–3 axis以及grid指令的效果。
測試瞭解問題
T5.1-1 The session is
x = [0:0.1:35];
y = 0.4*sqrt(1.8*x);
plot(x,y),xlabel(‘Distance (miles)’), ...
ylabel(‘Height (miles)’),axis([0 35 0 3.5]),...
title(‘Rocket Height as a Function of Downrange Distance’)
T5.1-2 The session is
x = [0:0.01:2*pi];
f = ‘tan(cos(x))-sin(tan(x))’;
fplot(f,[0 2*pi])
[x,y] = fplot(f,[0 2*pi]);
size(x)
畫出多項式
要在區間–6 x 6之內畫出多項式3x5 + 2x4 – 100x3 + 2x2 – 7x + 90,且間隔距離為0.01,則需要輸入
>>x = [-6:0.01:6];
>>p = [3,2,-100,2,-7,90];
>>plot(x,polyval(p,x)),xlabel(’x’),ylabel(’p’)
更多相關資料請查詢課本第5-12頁
-6 -4 -2 0 2 4 6 -3000
-2000 -1000 0 1000 2000 3000 4000 5000
x
p
儲存圖形
要儲存成能夠接下來被其他MATLAB對話開啟的格式,則 要將此圖形檔案儲存成副檔名為 .fig的檔案名稱。
要達成這個目的,點選圖形視窗File選單中的Save選項,或 者點選工具列上的Save按鈕(磁片圖示的那個按鈕)。
如果這是你第一次儲存這個檔案,則會出現Save as對話框。
確定你所儲存的格式為MATLAB圖形(*.fig)。指定你所想要 的檔案名稱於此檔案,按下OK。你也可以使用saveas指令。
1. 點選File選單中的Export Setup選項。這個對話會提供你指
定輸出檔案的選項,例如圖形的大小、字型、線條的寬窄 以及樣式,以及輸出的格式。2. 點選Export Setup對話框中的Export選項。接下來會出現
一個標準的Save As對話框。3. 在Save As種類選單中格式的清單選取所需要的格式。在此
選擇匯出檔案的格式,並且將此檔案加入標準檔案名稱的 副檔名。4. 輸入你想要給定此檔案的檔案名稱,不需要鍵入副檔名。
5. 接下來按下Save。
更多相關資料請查詢課本第5-14頁
匯出圖形
如果你欲將圖形儲存成能夠被其他的應用程式開啟的格式
,例如標準的圖形檔案格式,如TIFF或者EPS,則進行下列 的步驟。
1. 點選Edit選單中的Copy Options選項。則接下來會
出現Preferences對話框的Copying Options頁。2. 填滿Copying Options頁中的欄位,並且按下OK。
3. 點選Edit選單中的Copy File選項。
在視窗系統中,你可以將圖形拷貝至剪貼簿並且將之貼 上於其他的應用程式中。
子圖形
你可以使用subplot指令在同一張圖形上得到許多比較小的
「子圖形」。語法為subplot(m,n,p)。此指令會將圖形視窗 切割為如同陣列般的直角方框,具有m列以及n行。而變數 p則是告訴MATLAB將跟在subplot指令後面的plot指令的輸 出結果放置到第p個方框。
例如,subplot(3,2,5)會建立一個具有六個方框的陣列,縱 深是三個方框,橫跨為兩個方框,並且將下一個圖形顯示 於第五個方框之中(即是左下角的那一方框)。
下列的腳本檔所建立的圖形如圖5.2–1所示,此圖形畫出 了在0 x 5之間函數y = e-1.2x sin(10x + 5)以及在-6
x
6 之間函數y = |x3 - 100|的圖形。x = [0:0.01:5];
y = exp(-1.2*x).*sin(10*x+5);
subplot(1,2,1)
plot(x,y),axis([0 5 -1 1]) x = [-6:0.01:6];
y = abs(x.^3-100);
subplot(1,2,2)
plot(x,y),axis([-6 6 0 350])
圖形顯示於下一張投影片中。
圖5.2–1 Subplot指令的應用。
subplot(1,2,1) subplot(1,2,2)
測試瞭解問題
T5.2-1 The session is
t = [0:0.01:8];v = [-8:0.01:8];
z = exp(-.5*t).*cos(20*t-6);
u = 6*log10(v.^2+20);
subplot(2,1,1)
plot(t,z),xlabel(‘t’),ylabel(‘z’)
subplot(2,1,2)
plot(v,u),xlabel(‘v’),ylabel(‘u’)
subplot(2,1,1)
subplot(2,1,2)
數據標記以及線條種類
要畫出向量y對向量x的圖形並且將每一點以數據標記來 標示,則要標記所要使用的符號以單引號在plot函數中 包圍起來。
表5.2-1顯示了一些可使用的數據標記符號。
若是要使用星號(*)標記資料點以及用點線連接這些數據 標記的y對於x的圖形,則必須要畫出這些數據兩次,方 式是輸入plot(x, y,’*’,x, y,’:’)。
要畫出使用綠色星號(*)標記資料點以及用紅色虛線連接 這些數據標記的y對於x的圖形,則必須要畫出這些資料 兩次,方式是輸入plot(x, y,’g*’,x, y,’r--’)。
圖5.2–3 以星號標記並且以點線連接的資料圖形。
表5.2–1 數據標記、線條種類形式,以及顏色的說明符。
圖5.2–2 使用數據標記。
更多相關資料請查詢課本第5-16~5-17頁
將曲線與資料加上標籤
legend指令會自動取得圖形中每一組資料的線條種類形式,
並且在圖例框中緊鄰你所選取的文字字串旁顯示線條種類 型式的樣本。下列的腳本檔所產生的圖形如圖5.2–4所示。
x = [0:0.01:2];
y = sinh(x);
z = tanh(x);
plot(x,y,x,z,’--’),xlabel(’x’), ...
ylabel(’Hyperbolic Sine and Tangent’), ...
legend(’sinh(x)’,’tanh(x)’)
圖5.2–4 legend指令的應用。
x = [0:0.01:1];
y = tan(x);
z = sec(x);
plot(x,y,x,z),xlabel('x'), ...
ylabel('Tangent and Secant'),gtext('tan(x)'), ...
text(0.3,1.2,'sec(x)')
圖5.2–5 gtext以及text指令的應用。
圖5.2–6 電源供應器以及負載的電路表示法。
柯希赫夫定律:
V
1+i
1R1+V
2= 0
v_2=[0:0.01:20];
i_11=.16*(exp(0.12*v_2)-1);
i_12=-(1/30)*v_2+0.5;
plot(v_2,i_11,v_2,i_12),grid,xlabel('v_2 (volts)'),...
ylabel('i_1 (amperes)'),axis([0 20 0 1]),...
gtext('Load Line'),gtext('Device Curve')
指令:
gtext(‘$$$$$$’)
圖5.2–7 範例5.2-1中load line(負載線)以及device line(元件曲 線)的圖形。
x = [-1:0.01:1];
y1 = 3+exp(-x).*sin(6*x);
y2 = 4+exp(-x).*cos(6*x);
plot((0.1+0.9i).^[0:0.01:10]),hold,plot(y1,y2), ...
gtext('y2 versus y1'),gtext('Imag(z) versus Real(z)')
圖5.2–8 hold指令的應用。
測試瞭解問題
T5.2-2 The session is
x = [0:5];y1 = [11,13,8,7,5,9];
y2 = [2,4,5,3,2,4];
plot(x,y1,’*’,x,y2,’+’,x,y1,x,y2, ‘—’),...
xlabel(‘x’),ylabel(‘y1, y2’),...
legend(‘y1’,’y2’)
T5.2-3 The session is
x = [0:0.01:2];
y1 = cosh(x);y2 = 0.5*exp(x);
plot(x,y1,x,y2,’– ‘),xlabel(‘x’),ylabel(‘y’ ),...
legend(‘cosh(x)’,’0.5exp(x)’)
測試瞭解問題
T5.2-4 The session is
x = [0:0.01:2];
y1 = sinh(x);y2 = 0.5*exp(x);
plot(x,y1,x,y2),xlabel(‘x’),ylabel(‘y’),...
gtext(‘sinh(x)’),gtext(‘0.5exp(x)’)
T5.2-5 The session is
x = [0:0.01:1];
y1 = sin(x);y2 = x-x.^3/3;
plot(x,y1),gtext(‘sin(x)’),hold,plot(x,y2),xlabel (‘x’), ylabel(‘y’),...
gtext(‘x-x^3/3’)
改進圖形的提示
下列的動作並不是必須的,但是能夠改進圖形的外觀:
1. 如果可能的話
,由零開始你的圖形比例。這個技巧可以 防止你的圖形上的任何變形給予量值大小錯誤的印象。2. 使用合理的刻度標記間隔距離。例如,如果量是月份,則
使用12等分的間隔距離,因為1/10年這樣的間隔距離並不 是一個好的辨識刻度。將刻度標記的間隔距離調整變小 有時候是很有用的,但不可以太過靠近。例如,如果一 筆表示範圍為24個月內的資料,48個刻度就太過於緊密,並且是不必要的。
(接下頁)
改進圖形的提示(承上頁)
3. 減少畫出的資料中零的數目。例如,適當地使用百萬元當
作單位,而不要使用元當作單位,因為每一個數字後面 都有六個零。4. 在開始繪圖之前,先求出對應到每一個軸的最大值以及最
小值。接下來設定軸的界限範圍能夠包含整個資料範圍 以及少許額外的量使得我們能夠方便選取使用的刻度標 記間隔距離。例如,如果在x軸上的資料範圍由1.2到9.6,則我們會採 取一個適當的界限範圍,選擇為0到10。並且這樣子的選 擇能夠讓你使用刻度間隔距離為1或者2。
(接下頁)
改進圖形的提示(承上頁)
5. 當同一張圖形中繪製了許多條相互交會的曲線時,對於每 一條曲線使用不同種類形式的線條;例如,使用實線、虛 線,以及這兩種線條的組合以及符號。如果使用黑白的列 印方式以及圖片拷貝時,要小心使用顏色來區分圖形。
6. 不要在同一張圖形上放入過多的曲線,特別是當兩條曲線 非常接近的時候,或者是某一條曲線交會另一條曲線很多 次的時候。
7. 當想要比較超過一張以上的圖形的資訊,記得對每一張圖 形都使用相同的比例大小、界限範圍以及刻度間隔距離。
圖5.3–1 直線比例圖形無法正確地顯示很大的範圍內的變化。
圖5.3–2 對數比例圖形能夠正確地顯示很大的範圍內的變化。
對數圖形
當要使用對數比例的時候,請切記下列的重要事項:
1. 你沒有辦法在對數比例圖形上畫出負數,因為負數的對
數並非定義成一個實數。2. 你也不能夠在對數比例圖形上畫出0,因為log
10 0 = ln 0 = -。你需選取一個適當小的數字當作圖形界限範圍的下 界。3. 對數比例圖形上的刻度標記標籤就是實際上原本的值;
而不是這些數字的對數的值。例如,圖5.3-2中x值的範 圍是由10-1 = 0.1 到 102 = 100。
(接下頁)
對數圖形(承上頁)
4. 在對數比例上的等間隔距離表示乘以同一個常數(相對
於直線比例的圖形上等間隔距離加上一個常數)。例如,所有差異為10倍的數字在對數比例的圖形中是等 距離的。即是說,0.3與3之間的距離和30到300之間的距 離相同。這樣的差距我們稱之為一個decade或者循環。
圖5.3-2顯示的圖形涵蓋三個x的decade(由0.1到100)而 在y上所涵蓋的範圍是四個decade,因此我們稱這個圖形 是一個四乘三循環圖形。
5. 在一個decade中的格線以及刻度標記並不是等間隔距離的。
如果8條格線或者刻度標記出現在一個decade中,則對應 的是此decade中第一條格線或者刻度標記的2、3、4、…、
8、9倍。
1. 使用loglog(x,y)指令使得兩個軸都是對數比例。
2. 使用semilogx(x,y)指令使得x 軸是對數比例,而y軸則
是直線比例。3. 使用semilogy(x,y)指令使得y 軸是對數比例,而x 軸則
是直線比例。MATLAB具有三個指令可以產生對數比例的圖形。而哪一 個指令是適用的,則是依照哪一個軸具有對數比例而定。
指令:
loglog(x,y) semilogx(x,y) semilogy(x,y)
指令
bar(x,y)
plotyy(x1,y1,x2,y2)
polar(theta,r,’type’)
stairs(x,y) stem(x,y)
敘述
產生y對x的長條圖。
產生具有兩個y軸的圖形,y1的圖 形在左邊而y2的圖形在右邊。
根據極座標theta以及r產生極座標 圖,其中線條種類形式、數據標 記,以及顏色可以在字串type中 指定。
產生y對x的梯狀圖。
產生y對x的管狀圖。
表 5.3–1 特殊圖形指令。
>>x = [1,1.5,2,2.5,3,3.5,4];
>>y1 = [4,3.16,2.67,2.34,2.1,1.92,1.78];
>>y2 = [8.83,7.02,5.57,4.43,3.52,2.8,2.22];
>>subplot(2,2,1)
>>plot(x,y1,x,y1,'o',x,y2,x,y2,'x'),xlabel('x'),ylabel('y') ...
axis([1 4 0 10])
>>subplot(2,2,2)
>>semilogy(x,y1,x,y1,'o',x,y2,x,y2,'x'),xlabel('x'),ylabel('y')
>>subplot(2,2,3)
>>semilogx(x,y1,x,y1,'o',x,y2,x,y2,'x'),xlabel('x'),ylabel('y')
>>subplot(2,2,4)
>>loglog(x,y1,x,y1,'o',x,y2,x,y2,'x'),xlabel('x'),ylabel('y'), ...
axis([1 4 1 10])
圖5.3–3 以四種類型的圖形繪製兩組資料。
圖5.3–4 對數圖形的應用:RC電路。
Ex5.3-1低通濾波器的頻率響應圖形
RC = 0.1;
s = [1:100]*i;
M = abs(1./(RC*s+1));
loglog(imag(s),M),grid,xlabel('Frequency(rad/s)'),...
ylabel('Output/Input Ratio'),...
title('Frequency Response of a Low-Pass RC Circuit (RC = 0.1 s)')
圖5.3–5 低通濾波器的頻率響應圖形。
Set(gca,’XTick’,[xmin:dx:xmax], ’YTick’,[ymin:dy:ymax]) gca: get current axes
Set(gca,’XTicklabel’,[‘text’])
>>x = [0:0.01:2];
>>y =0.25*x.^2;
>>plot(x,y),set(gca,'XTick',[0:0.2:2],'YTick',[0:0.1:1]), ...
xlabel('x'),ylabel('y')
>>x = [1:6];
>>y = [13,5,7,14,10,12];
>>plot(x,y,'o',x,y), ...
set(gca,'XTicklabel',['Jan';'Feb';'Mar':'Apr':'May':'Jun']),...
set(gca,'XTick',[1:6]),axis([1 6 0 15]),xlabel('Month'), ...
ylabel('Monthly Sales ($1000)'), ...
title('Printer Sales for January to June, 1997')
圖5.3–6 使用set指令控制刻度標記標籤的範例。
測試瞭解問題
T5.3-1 The session is
x = [0:0.01:1.5];
y1 = 2*x.^(-.5);y2 = 10.^(1-x);
subplot(2,2,1)
plot(x,y1,x,y2,’– ‘),gtext(‘Power’),...
gtext(‘Exponential’),xlabel(‘x’), ylabel(‘y’)
subplot(2,2,2)
semilogy(x,y1,x,y2,’– ‘),gtext(‘Power’),...
gtext(‘Exponential’),xlabel(‘x’), ylabel(‘y’)
subplot(2,2,3)
loglog(x,y1,x,y2,’– ‘),xlabel(‘x’),ylabel(‘y’ ),...
axis([.01 1.5 0.1 20]),gtext(‘Power’),gtext(‘Exponential’)
圖5.3–8 冪函數y = 2x -0.5以及指數函數y = 101-x。
測試瞭解問題
T5.3-2 The session is
x = [-1:0.01:1];
y =8*x.^3;
plot(x,y),set(gca,’XTick’,[-1:0.25:1],’YTick’,[-8:2:8]),...
xlabel(‘x’),ylabel(‘y’),title(‘y = 8x^3’)
T5.3-3 The session is
theta = [0:0.01:4*pi];
r = 2*theta;
polar(theta,r),title(‘Spiral of Archimedes, r = 2*theta’)
MATLAB中的互動式繪圖
這個介面在下列的情況中具有某些優點:
• 當你需要建立非常多不同種類的圖形的時候
• 當你需要建立具有非常多組資料的圖形的時候、
• 當你欲加入例如矩形或者橢圓形的註釋的時候
• 當你欲更改例如刻度間隔距離、字型的厚體、斜體以及顏 色這些特性的時候
更多相關資料請查詢課本第5-33頁
MATLAB的互動式繪圖環境是一組用來完成以下目標的 工具:
• 建立不同種類的圖形
• 直接選取工作區中的變數畫出圖形
• 建立以及編輯子圖形
• 加入例如直線、箭頭、矩形,以及橢圓形的註解
• 編輯例如顏色、線條寬度、字型這些圖形物件的特性
圖5.4–1 顯示具有圖形工具列的圖形視窗。
圖5.4–2 顯示具有圖形工具列以及圖形編輯工具列的圖形視窗。
圖形調色盤:使用此控制面板建立以及安排子圖形,並 且用來檢視以及畫出工作空間變數,並且加入註解。
圖形瀏覽器:使用此控制面板來選取並且控制圖形中的 軸或者圖形物件的能見度,以及加入繪圖的資料。
特性編輯器:使用此控制面板設定選取物件的基本特性,
並且透過特性檢查器存取所有的特性。
對於一個給定的圖形,繪圖工具介面包含了下列三個控 制面板。
圖5.4–3 開啟圖形工具的圖形視窗。
使用線性、冪次以及指數函數來描述資料
每一個函數若是以下列指定的軸畫出來都會是一條直線。
1. 線性函數y = mx + b。
2. 冪函數y = bx
m以重對數軸畫出。3. 指數函數y = b(10)
mx或者其等效的形式為y = bemx以軸為 對數的半對數(semilog)軸畫出。更多相關資料請查詢課本第5-40~5-41頁
函數發現的步驟
1. 檢查接近原點的資料。指數函數永遠不會通過原點
(除非是b = 0這樣的例子,這是一個無意義的例子)。
(參考我們以b = 1所得到冪函數的例子,繪於圖5.5–
1。)
線性函數在b = 0的情況之下會通過原點。而冪函數在
m > 0的情況之下才會通過原點。(參考我們以b = 1所
得到冪函數的例子,繪於圖5.5–2中。)(接下頁)
圖5.5–1 指數函數的例子。
圖5.5–2 指數函數的例子。
2. 使用直線比例畫出資料。如果得到了直線,則表示此資料
可以使用線性函數來表示,此時工作完成。若不是這種 狀況,在x = 0處具有資料,則a. 如果y(0) = 0,嘗試使用冪函數。
b. 如果y(0) 0,嘗試指數函數。
如果在x = 0沒有給定資料,則進行步驟3。
函數發現的步驟 (承上頁)
(接下頁)
3. 如果你懷疑可以使用冪函數來描述,則在重對數比例的圖
上畫出資料點。在重對數圖上冪函數會形成一條直線。如果你懷疑可以使用指數函數,則使用半對數比例圖畫 出資料。指數函數只有在半對數圖上才會是一條直線。
4. 在函數發現的應用中,我們只使用重對數或者半對數圖來
辨認函數形式,但沒有辦法求得係數b以及m。原因是因 為在對數比例的圖形上很難進行內插。函數發現的步驟 (承上頁)
指令
p = polyfit(x,y,n)
敘述
以n 次多項式配適,使用x 以及 y所 描述的資料,其中 x 是自變數。傳 回的向量 p 具有長度 n + 1,所包含 的元素是多項式的係數,並且以降 冪排列。
表5.5–1 polyfit函數。
使用polyfit函數配適資料的方程式
語法: p = polyfit(x,y,n)
其中 x 以及 y 包含了資料, n 是所想要配適出的多項 式的階數,以及 p 是多項式的係數向量。
線性函數: y = mx + b。在此情況下,多項式w = p1
z+
p
2中的變數w以及z是原本的資料變數x 以及 y,並且我 們可以藉由輸入p= polyfit(x,y,1)來求出能夠配適這些資 料的線性函數。向量p中的第一個元素p1會是m,並且 第二個元素p2為b。冪函數: y = bxm。在此情況下
log10
y = m log
10x + log
10b
對應到的形式為w = p
1z + p
2其中多項式變數w以及z對應到原本的資料變數x 以及 y的方 式是w = log10
y以及z = log
10x。因此我們可以求出配適這些資
料的冪函數,方法是輸入p = polyfit(log10(x),log10(y),1)
向量 p中的第一個元素p1會是m,並且第二個元素p2為log10
b。
我們使用 b = 10p2求出b。
指數函數: y = b(10)mx。在此情況下 log10
y = mx + log
10b
對應到的形式為w = p
1z + p
2其中多項式變數w以及z對應到原本的資料變數x 以及 y的方式 是w = log10
y以及z = x。因此我們可以求出配適這些資料的指
數函數,方法是輸入p = polyfit(x, log10(y),1)
向量p中的第一個元素p1會是m,並且第二個元素p2為log10
b。
我們使用 b = 10p2求出b。
更多相關資料請查詢課本第5-43~5-44頁
圖5.5–3 用來測量力與懸臂樑偏離量的實驗。
% Enter the data.
deflection = [0,0.09,0.18,0.28,0.37,0.46,0.55,0.65,0.74];
force = [0:100:800];
%
% Plot the data on rectilinear scales.
subplot(2,1,1)
plot(force,deflection,'o'), ...
xlabel('Applied Force (lb)'),ylabel('Deflection (in.)'),...
axis([0 800 0 0.8])
%
% Fit a straight line to the data.
p = polyfit(force,deflection,1);
k = 1/p(1)
% Plot the fitted line and the data.
f = [0:2:800];
x = f/k;
subplot(2,1,2)
plot(f,x,force,deflection,'o'),...
xlabel('Applied Force (lb)'),ylabel('Deflection (in.)'),...
axis([0 800 0 0.8])
0 100 200 300 400 500 600 700 800 0
0.2 0.4 0.6 0.8
Applied Force (lb)
Deflection (in.)
0 100 200 300 400 500 600 700 800
0 0.2 0.4 0.6 0.8
Applied Force (lb)
Deflection (in.)
圖5.5–4 懸臂樑範例的圖形。
動態溫度temperature dynamics
% Enter the data.
time = [0,620,2266,3482];
temp = [145,130,103,90];
%Subtract the room temperature.
temp = temp - 68;
% Plot the data on rectilinear scales.
subplot(2,2,1)
plot(time,temp,time,temp,'o'),xlabel('Time (sec)'),...
ylabel('Relative Temperature (deg F)')
%
Time t (sec) Temperature T (oF)
0 145
620 130
2266 103
3482 90
% Plot the data on semilog scales.
subplot(2,2,2)
semilogy(time,temp,time,temp,'o'),xlabel('Time (sec)'),...
ylabel('Relative Temperature (deg F)')
% Fit a straight line to the transformed data.
p = polyfit(time,log10(temp),1);
m = p(1)
b = 10^p(2)
% Compute the time to reach 120 degrees.
t_120 = (log10(120-68)-log10(b))/m
% Show the derived curve and estimated point on semilog scales.
t = [0:10:4000];
T = 68+b*10.^(m*t);
subplot(2,2,3)
semilogy(t,T-68,time,temp,'o',t_120,120-68,'+'),
xlabel('Time (sec)'),...
ylabel('Relative Temperature (deg F)')
%
% Show the derived curve and estimated point on rectilinear scales.
subplot(2,2,4)
plot(t,T,time,temp+68,'o',t_120,120,'+'),xlabel('Time (sec)'),...
ylabel('Temperature (deg F)')
圖5.5–5 冷卻中的咖啡的溫度,對於不同類型的軸所畫出的圖形。
圖5.5–6 用來驗證托里切利原理(Torricelli’s principle)。
% Data for the problem.
cups = [6,9,12,15];
meas_times = [9,8,7,6];
meas_flow = 1./meas_times;
%
% Fit a straight line to the transformed data.
p =
polyfit(log10(cups),log10(meas_
flow),1);
coeffs = [p(1),10^p(2)];
m = coeffs(1)
b = coeffs(2)
%
% Plot the data and the fitted line on a loglog plot to see
% how well the line fits the data.
x = [6:0.01:40];
y = b*x.^m;
subplot(2,1,1)
loglog(x,y,cups,meas_flow,'o'),gr id,xlabel('Volume (cups)'),...
ylabel('Flow Rate
(cups/sec)'),axis([5 15 0.1 0.3])
% Plot the fill time curve extrapolated to 36 cups.
subplot(2,1,2)
plot(x,1./y,cups,meas_times,'o'), grid,xlabel('Volume(cups)'),...
ylabel('Fill Time per Cup (sec)'),axis([5 36 0 10])
%
% Compute the fill time for V = 36 cups.
V = 36;
f_36 = b*V^m
圖5.5–7 流率以及咖啡壺充滿一杯的時間。
以下僅供參考!!
p =
polyfit(x,y,n)
以n次多項式配適使用向量x以及y所 描述的資料,其中x是自變數。傳回 的列向量p具有長度n+1,所包含的 元素是多項式的係數,並且以降冪 排列。
polyfit 函數是根據最小平方法而來。其語法為
請參考課本第5-54頁,表 5.6–1。
圖5.6–3 使用一次到四次多項式做迴歸的圖形。
圖5.6–4 一個五次多項式通過所有六個資料點的例子,其中點和 點之間具有大的偏移量。
評估配適曲線品質的好壞:
我們標記 y 值到平均 y 之間的差異量的平方和為 S,
我們可以由下列公式計算
(yt – y )2
m
i1
S
此公式可以用來計算另一個此曲線配適的好壞程度的指標,
即是判定係數,又稱做 r平方值。其定義如下
(5.6–3)
J
r
2 1 S
S的值表示此資料對於平均的散佈情形,並且J 的值表
示此模型無法說明資料散佈情形的程度。因此 J / S是一個此模型無法說明的分數變化量的指標。
對於一個完美的配適, J 0 並且 r 2 1。因此 r 2越接 近1,則表示配適越好。而r 2最大為1。
J 的值可能會大於S,所以r
2可能會是負值。然而,若 是出現這種情況,表示這是一個很不好的模型並且不 應該使用。一個簡易的法則是,一個好的配適至少要能夠說明 99%的資料變化量。這個值對應到r 2 0.99。
圖5.6–5 係數正確度對於六次多項式的效果。上方的圖顯示了具 有14位小數正確度的效果。而下方的圖顯示了只有8位小數正確度 的效果。
更多相關資料請查詢課本第 5-58~5-59頁
1. 當 x 的值範圍太小的時候,可以將 x 的資料減去 x 最小的值或者平均值。
2. 當 x 的值範圍太大的時候,將 x 的值除以最大值或者 平均值。
更多相關資料請查詢課本第5-61~5-62頁
調整資料的比例
在計算係數時因為計算誤差所造成的影響可以藉由適當 地調整x值的比例來減輕。
你可以在使用polyfit之前調整你的資料的比例。常用 的調整比例方法為
圖5.6–6 使用兩個三次多項式來配適資料。
圖5.6–7 四種模型的殘差圖形。
更多相關資料請查詢課本第5-63~5-64頁
圖5.6–8 一階模型以及二階模型配適的比較。
更多相關資料請查詢課本第5-66~5-68頁
基本配適介面
MATLAB透過基本配適介面支援曲線配適。使用這個介面,
你可以在容易使用的環境之下很快地進行基本曲線配適任 務。此介面是特別設計以能夠讓你達成:
• 以三次樣條,或者使用多項式來配適資料,可以使用的多 項式高達10次。
• 對於同一組給定資料同時畫出許多配適圖形。
• 畫出殘差。
• 檢查配適的數值結果。
• 對配適進行內插以及外插。
• 使用數值配適的結果以及殘差的範數註解圖形。
• 將配適以及計算所得的結果儲存於MATLAB工作區之中。
圖5.7–1 基本配適介面。
圖5.7–2 由基本配適介面所產生的圖形。
更多相關資料請查詢課本第5-68~5-71頁
三維線條圖
三維空間中的線條可以用plot3函數畫出來。下列的對話 會產生一個三維的曲線,如圖5.8–1。
>>t = [0:pi/50:10*pi];
>>plot3(exp(-0.05*t).*sin(t),...
exp(-0.05*t).*cos(t),t),...
xlabel(’x’),ylabel(’y’),zlabel(’z’),grid
圖5.8–1 使用plot3函數所畫出的x e0.05t
sin t, y e
0.05tcos t, z t 的曲線。
更多相關資料請查詢課本第 5-71~5-72頁
表面圖
下列的對話顯示了如何產生函數z xe[(xy2)2y2]在區間2 x
2 ,以及2 y 2之內,且間隔距離為0.1的表面圖。此圖形顯 示在圖5.8–2中。
>>[X,Y] = meshgrid(-2:0.1:2);
>>Z = X.*exp(-((X-Y.^2).^2+Y.^2));
>>mesh(X,Y,Z),xlabel(’x’),ylabel(’y’),zlabel(’z’)
圖5.8–2 以mesh函數所建立的z xe[(xy2)2y2]的表面圖。
更多相關資料請查詢課本第5-72~5-73頁
等高線圖
下列的對話會產生顯示在圖5.8–2中的函數表面圖的等高 線圖;即是畫出函數z xe[(xy2)2y2]在區間2 x 2 , 以及2 y 2之內且間隔距離為0.1的等高線圖。此圖形 顯示在圖5.8–3中。
>>[X,Y] = meshgrid(-2:0.1:2);
>>Z = X.*exp(-((X- Y.^2).^2+Y.^2));
>>contour(X,Y,Z),xlabel(’x’),ylabel(’y’)
圖5.8–3 由contour函數所建立, z xe[(xy2)2y2] 表面之等高線 圖。
更多相關資料請查詢課本第5-74頁
函數
contour(x,y,z) mesh(x,y,z) meshc(x,y,z) meshz(x,y,z) surf(x,y,z) surfc(x,y,z)
[X,Y] = meshgrid(x,y) [X,Y] = meshgrid(x) waterfall(x,y,z)
敘述
建立等高線圖。
建立三維網狀表面圖。
與mesh指令相同,但是在表面圖底下畫出等高線圖。
與mesh指令相同,但是在表面圖底下畫出鉛直參考線。
建立有深淺不同色調的三維網狀表面圖。
與surf指令相同,但是在表面圖底下畫出等高線圖。
根據向量 x 與 y 建立矩陣X以及Y定義出直角格子。
與[X,Y] = meshgrid(x,x)指令相同。
與mesh指令相同,但是往同一個方向畫出網狀線。
表 5.8–1 三維圖形函數
圖5.8–4 z xe(x2y2)的表面圖,分別以mesh函數以及其變形的形 式畫出:meshc、meshz,以及waterfall。a) mesh、b)
meshc
、c) meshz以及d) waterfall。下列的投影片包含課本中本章節的圖片以 及習題問題。
圖 P27
圖 P28
圖 P56