el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/matlab teaching…  · web...

66
Matlab 是 一體, 一。 MS-Windows 是是 是是是是是是 ,: 是是是是是是 是是是是是是是是是是是是是 ,、,一 Windows 是是是( 是是 MS-Word) 是是是是是 ,一,。 一一。 Matlab 是是 ,。 是是是是是是 Matlab 是 是是 Matlab 是是是是是是是 是是是是是是是是是是是是是是是是是 ,,。 Workspace 是是是是是是是是是是是是 是是 Command Window 是是是是是是 操操操操 ,一, >> 是是是 是是是是 1

Upload: trinhnga

Post on 26-Mar-2018

220 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Matlab 是一個視窗軟體, 意思是說,它在一個圖形操作介面內開啟自己的視窗。 以 MS-Windows 為例,它的視窗如下圖:

讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體 (例如 MS-Word) 長得很像,因此在一般性質的操作上,也是相同的。 毋傭在此一一贅述。 而特別關於 Matlab 的視窗或按鈕操作,我們留待以後遇到的時候再說。

比較特別的是,Matlab 視窗的工作區域被切分為三塊。 這是 Matlab 內定的工作區域呈現方式,可以修改,讀者很容易可以找到修改它的方法。 這三塊區域分別稱作

1

Page 2: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Workspace

顯示目前工作環境內定義的變數

Command Window

我們將它譯為 操作視窗,就如同一個文字操作介面, 有 >>  提示號,在提示號之後輸入指令

Command History

紀錄曾經下過的指令

初學者不需要這麼複雜的工作環境, 可以用滑鼠指著操作視窗的左邊界,待出現特殊圖標的時候, 拖曳左邊界,用來放大操作視窗。

其他關於 Matlab 視窗的操作,都符合常識,所以留給讀者自己去發掘。 下一節開始,我們就在操作視窗內,以鍵盤輸入文字指令來操作 Matlab。

在 UNIX 系統中也有 Matlab 可用。 只是,不同版本的 UNIX 必須安裝不同版本的 Matlab (當然,只有核心的機器碼部份是不同的)。

在中大數學系的 Linux 工作站內,備有一套 Matlab, 具有 2 個「浮動使用權」。意思是說,同一時間可以有兩個人在工作站上使用 Matlab。

當然,您的 UNIX 系統必須有 X 視窗環境,才能享用 Matlab 的製圖功能。 原本 UNIX 版本的 Matlab 是在文字介面中執行, 也就是在一個虛擬終端機內執行。 但是 6.0 版之後的 Matlab, 即使在 UNIX 環境中也會打開一個類似 MS-

2

Page 3: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Windows 內的圖形操作介面, 稱為 desktop 介面。它只有在需要製圖的時候才開啟另一個圖片視窗。 如果您不習慣新的操作介面,可以用matlab -nodesktop

恢復古早的操作方式。如果您根本就不在 X 視窗環境內,應該說matlab -nodisplay

習題

1. 您的系統中的 Matlab 是什麼版本?2. 您的系統中的 Matlab 套裝軟體安裝在哪個資料夾內? 如果在 MS-

Windows 環境中,還要知道它在哪個磁碟槽中?3. 您的 Matlab 工作環境中的提示號是什麼?4. 要退出 Matlab 工作環境,有哪些方法。

Matlab 具備最普通的掌上型計算器 (calculator) 功能。 他可以做基本的四則運算,例如1+1

按下 [Enter] 就執行計算並且顯示答案。

他知道先乘除後加減,例如2*3-4

3

Page 4: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

得到正確的答案 2。他不在乎空格,所以說1 + 2 * 3 - 12

也可以。遇到需要先加減的狀況,可以用一對小括號,例如(1 + 2) * (3 - 12)

得到正確的答案 -27。

計算器當然不能只會計算整數,他也會處理小數。例如以下是一個除法計算1 / 2

得到答案 0.5。但是 Matlab 輸出的格式是 0.5000。再試試看1.23 * 4

或者1.2 * 3.4

習題

1. 阿丹從網路刷卡購買了 PowerDVD 軟體,花費 49.95 美元, 若交易日之台幣與美元之買入匯率是 34.42:1,則他應該付多少台幣給信用卡商行?

2. 阿丹從網路刷卡購買了 PowerDVD 軟體,花費 49.95 美元, 日後收到信用卡帳單,顯示需繳 1750 元台幣, 請問這相當於採計美元兌台幣 1

比多少的匯率?

4

Page 5: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

3. 阿丹從網路刷卡購買了 PowerDVD 軟體,花費 49.95 美元, 交易日的美元兌台幣買入匯率是 1:34.42 但是信用卡公司要求收費台幣 1750 元, 請問信用卡公司收了多少手續費?佔交易金額的百分之多少?

數值計算無可避免的誤差

Matlab 可以正確計算 1/2 或者 1/5,但是1 / 3

計算結果是 0.3333; 我們知道答案應該是 0.3循環,所以 Matlab 的計算節果並不正確。 這是 所有數值計算軟體無法避免的誤差。 因為計算機的空間與人們能夠等待的時間是有限的, 所以所有的數值計算軟體,都 不可能計算小數點下無窮多位, 而必須在某個小數點下的位置切斷。 這就造成了誤差,稱為 四捨五入誤差 (round-off error) 或者 機器誤差 (machine error)。 這些誤差會「累積」,而逐漸造成較大的誤差。

數學的一門分支「數值分析」所討論的課題之一, 就是因為機器的有限性所產生的四捨五入誤差,在整個計算過程當中扮演的角色。

5

Page 6: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

有時候 Matlab 聰明到可以還原具有少量誤差的小數。例如3 * (1/3)

得到答案 1,還有1/3 + 1/3 + 1/3

也得到答案 1。但是,雖然7 * (1/7)

可以得到答案 1,不過1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7

就變成了 1.0000。 這意味著 Matlab 並沒有真的算出來 1,而是非常接近 1 的一個數, 在小數點下第五位四捨五入之後,是 1.0000。

習題

1. 計算 1/9 、 9*(1/9) 和 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9 + 1/9

6

Page 7: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

科學記數法

當 Matlab 要顯示一個不太大或不太小 (指絕對值而言) 的數, 他顯示到小數點下第四位,而將小數點下第五位四捨五入。例如1 / 3

計算結果是 0.3333,那是小數點下第五位捨去的結果。但是1 / 7

計算結果是 0.1429,那是小數點下第五位進位的結果 (1/7 應該是 0.142857循環)。

但是當 Matlab 要顯示很大或很小 (指絕對值而言) 的數, 他就會改用 五位有效數字 的科學記數法:

a0 . a1a2a3a4 * 10K

其中 a0 是介於 1 和 9 之間的一個整數 (它不得為 0), 在它之前還可以有一個負號 (正號省略不寫), 其他的 ai 都是介於 0 和 9 之間的整數 (也就是一個十進制數目字)。 而 K 是一個大約在 -300 與 300 之間的整數。

例如1 - (1/3 + 1/3 + 1/3)

7

Page 8: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

也得到答案 0,而且1 - (7 * (1/7))

也是 0。不過1 - (1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7 + 1/7)

就成了 2.2204e-16,也就是 2.2204 * 10-16

寫成普通的記數符號,就是 0.00000000000000022204

因為科學記數法裡面那個 K 的關係, 使得小數點實際上應該前後移動 (若 K 

是正數,向右移; 若 K 是負數,向左移), 所以我們又稱這樣的數為 浮點數 (floating point numbers)。 相對地,一般寫下小數的方法,因為小數點的位置是固定的, 又稱為 定點數 (fixed point number)。

如果科學記數法只取五位有效數字,就在第六位做四捨五入。 例如在 Matlab

輸入一個常數0.00000123456

他就幫你變成 1.2346e-06;或者31415927

用五位有效數字寫成科學數字,就變成 3.1416e+07。

8

Page 9: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

習題

1. 如果 Matlab 顯示一個數是 1.2346e-03,請問這個數最大可能是多少? 最小可能是多少?

2. 如果 Matlab 顯示一個數是 -1.2345e+03,請問這個數最大可能是多少? 最小可能是多少?

3. 如果 Matlab 顯示一個數是 1.2345e+05,請用定點數符號寫出來。

9

Page 10: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

其他計算器基本功能

除了四則運算與括號之外,Matlab 也具備一般掌上型計算器該有的最基本功能, 這包括計算平方根 (square root),指令是 sqrt( ),例如sqrt(4)

在 sqrt( ) 裡面可以有其他的運算,例如sqrt(1+2)

或者sqrt(1+2*3)

另一個基本功能是絕對值 (absolute value),指令是 abs( ),例如abs(-3)

或者abs(7-3)

或者abs(3-7)

像 sqrt( ) 和 abs( ) 這種功能,在 Matlab 中稱為 函式 (function)。 函式可以和其他常數或函式做計算,例如7 + abs(3-7)

或者sqrt(9) + abs(7-3)

10

Page 11: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

或者sqrt(7) * sqrt(7)

最後這個例子,又顯示了「數值計算無可避免的誤差」。

函式之內還可以有函式,就像數學的「合成函數」一樣。例如sqrt(abs(3-7))

或者abs(sqrt(4) - sqrt(9))

甚至於sqrt(sqrt(16))

最後,計算器都提供「變號」功能,經常稱為 CHS (Change Sign)。 Matlab 直接用 - 號來變號,或者輸入一個負數。例如-1 + 3

或者-abs(3-7) + 3

或者-sqrt(2)

習題

1. 求解 x2 + x - 1 的一個正實根, 寫到小數點下第四位。將計算結果代入多項式驗算你的答案, 它為何不是 0?

11

Page 12: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

2. 求解 -x2 + 4x + 1 的一個正實根, 寫到小數點下第四位。將計算結果代入多項式驗算你的答案, 它為何不是 0?

12

Page 13: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Matlab 是一個工程型計算器---次方

Matlab 其實具備一般工程型計算器該有的基本功能, 這包括任意計算次方、指數與對數函數、三角與反三角函數、雙曲與反雙曲函數。 我們先看看次方。

計算次方的符號就是常用的 ^ 記號 (或許除了 FORTRAN 和 C 以外)。 指數部份可以是任意數,例如2^2

或者2^(-1)

或者2^(1/2)

或者2^(1.25)

如果指數很小,科學記數法就會自動出現,例如2^(-1074)

但是如果指數太小,計算的結果會自動「遜位」 (underflow) 成為 0,例如2^(-1075)

如果指數很大,科學記數法也會自動出現,例如2^1023

13

Page 14: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

但是如果指數太大,計算的結果會「溢位」 (overflow) 成為 Inf, 這就是「無限大」(infinity) 的意思,例如2^1024

順便說另一個有趣的符號:NaN 就是 Not a Number 的意思 (不是個數)。 譬如不小心計算了0/0

就會得到 NaN。

以上其實都不是 Matlab 的特色,而是計算機硬體的設計,不在這裡多說了。 本來這些並非初學者的課題,但是因為許多學生大膽嘗試各種計算 (這是個好習慣,反正電腦不會爆炸,頂多重新開機而已), 很容易就看到這些符號,只好在這裡先介紹。

但是,要執行負數的次方運算,可就要小心了。如果是負數的整數次方, 都還可以理解,例如(-2)^3

或者(-2)^(-3)

都得到我們預期的答案。但是如果做了負數的非整次方, 就會有意想不到的結果,且看下回分曉。

14

Page 15: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

習題

1. 試試看 1/0 答案如何?請解釋是否合理?2. 試試看 Inf + Inf 答案如何?請解釋是否合理?3. 試試看 Inf - Inf 答案如何?請解釋是否合理?4. 試試看 (-4)^(1/2) 答案如何?請解釋是否合理?5. 試試看 (-8)^(1/3) 答案如何?

15

Page 16: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Matlab 認得複數

Matlab 甚至超越了一般工程型計算器該有的基本功能, 以後我們會看到更多超越的功能,現在先看一個:複數。

譬如我們要 Matlab 計算sqrt(-1)

而以為他不會,但是他回答 0 + 1.0000i 好厲害,他會耶。 如果讀者看不懂,那就是您的數學基礎還不夠,請跳過這一節。

Matlab 能夠在計算中自動產生複數,使用者也可以直接輸入複數。譬如1 + 2i

注意,上面的 2 與 i 之間,可以不寫一個 * 號, 寫了也可以。Matlab 的所有運算符號、所有函式,都懂得如何做複數計算。 例如(1+2i) - (1-2i)

或者3* (1+2i)

而此刻 abs( ) 計算的是複數的「長度」,例如abs(3+4i)

根據畢氏定理,我們知道答案的確是 5。

16

Page 17: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

複數的平方根是由「比較係數」法求得, 例如要找 1+2i 的平方根,就計算 (a

+ bi)2 = 1+2i 然後比較係數得到聯立方程式a2 - b2 = 12ab = 2

Matlab 可以代勞,只要說sqrt(1+2i)

就行了。

最後,我們談談(-1)^(1/3)

這是 -1 開三次方根的意思,我們一般會認為答案是 -1,但是 Matlab 說是 0.5000 + 0.8660i。稍加檢查,發現這個數是

它也就是複數平面單位圓上角度為 60 度的點。 而 -1 的三次方根其實是 x3 = -

1 的根, 我們知道三次多項式在複數中必有三個根 (其中一個實根,兩個共軛複根), -1 只是其中一個根,而 Matlab 計算出來的另是一個複根。

讀者如果學習了夠多的數學,將會知道,其實 Matlab 計算出來的根, 才是「數學上喜歡的」一個根。

習題17

Page 18: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

1. 試試看 (1/2 + sqrt(3)/2*i)^2 答案如何?請解釋是否合理?2. 試試看 (1/2 + sqrt(3)/2*i)^3 答案如何?請解釋是否合理?3. 試試看 (1/2 + sqrt(3)/2*i)^4 答案如何?請解釋是否合理?4. 試試看計算 (1/2 + sqrt(3)/2*i)^n ,讓 n 代入 1, 2, 3, 4, ..., 10,請問觀察到什麼現象?能解釋嗎?(教您一個撇步,可以按向上的箭頭, 得到上一步的指令,然後用 [Backspace] 鍵修改次方的數,然後再按 [Enter], 就可以很方便地做實驗了。)

5. 檢查 (-8)^(1/3) 是 (-1)^(1/3) 的幾倍? 能解釋嗎?6. 實驗 abs((-1)^(1/3)) 、 abs((-8)^(1/3)) 、 abs((-27)^(1/3)) 、 觀察到

什麼現象?能解釋嗎?

18

Page 19: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Matlab 是一個工程型計算器---指數與對數

Matlab 其實具備一般工程型計算器該有的基本功能, 這包括任意計算次方、指數與對數函數、三角與反三角函數、雙曲與反雙曲函數。 這裡我們介紹指數與對數。

次方符號 ^ 使得 Matlab 可以計算任何指數函數 ax 的值, 但是科學與工程領域慣用「標準指數函數」,也就是以 e 為底的指數函數 ex ,其中 e 是一個無理數,大約是 2.71828。 Matlab 並不提供 e 這個常數,就像一般工程型計算器一樣,必須以 exp( ) 函式計算。例如exp(1)

就得到常數 e 的近似值,而exp(-1)

得到常數 e-1 的近似值。當然exp(0)

就是 1。

對數函數可以用任何一個正數 a 做底,但是因為換底公式

19

Page 20: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

所以我們其實只需要一種底就夠了。常用的底是 e 、 10 和 2。 以 e 為底的對數稱為自然對數,以 10 為底的對數稱為常用對數。 Matlab 分別提供三個函式 log( ) 、 log10( ) 和 log2( ) 對應上述三種底,例如log(exp(2))

和log10(100)

和log2(4)

的答案都是 2。

利用指數與對數函數,可以計算任何次方:

其實,幾乎所有的數值計算軟體或計算器, 都是用上述公式與指數、對數函數來計算次方的。

Matlab 既然知道複數,他也知道如何計算負數的對數或複數的對數。 但是這項功能可能超出許多讀者的數學知識範圍了。例如log(-1)

得到 0 + 3.1416i 好像是虛數圓周率?然而exp(log(-1))

20

Page 21: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

正確還原到 -1 ,顯然指數函數還可以用複數當作定義域呢!

習題

1. 試試看 exp(3*log(2)) 答案如何?能解釋嗎?2. 試試看 exp(log(-1)/3) 答案如何?能解釋嗎?3. 試試看 exp(log(-1)/3)^3 答案如何?能解釋嗎?

21

Page 22: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Matlab 是一個工程型計算器---三角與反三

角函數

Matlab 其實具備一般工程型計算器該有的基本功能, 這包括任意計算次方、指數與對數函數、三角與反三角函數、雙曲與反雙曲函數。 這裡我們介紹三角與反三角函數。

六個三角函數在 Matlab 中對應的函式是 正弦 sin( ) 餘弦 cos( )

正切 tan( ) 餘切 cot( )

正割 sec( ) 餘割 csc( )

它們的用法並無特殊,就跟 exp( ) 和 sqrt( ) 這些函式一樣。 就如大部分的工程型計算器,三角函數的運算元乃是以弧度來度量,而不是角度。 所以sin(0)

是 0,而sin(3.1416)

是 -7.3464e-06,那幾乎是 0,因為 3.1416 幾乎是圓周率。 讀者亦可實驗22

Page 23: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

cos(3.1416)

看到答案幾乎是 -1。Matlab 並不提供角度量的三角函數, 使用者必須自行轉換。

Matlab 提供一個函式 (而非常數),用來計算圓周率的值。 它就叫做 pi。雖然您下指令pi

仍然得到 3.1416 但是它在機器內部是一個更準確的值,因此sin(pi)

得到 1.2246e-16,更幾乎是正確答案 0 了, 而它之所以不是零,又是「數值計算無可避免的誤差」在作怪。不過cos(pi)

真的是 -1,而sin(pi/2)

真的是 1。

六個反三角函數在 Matlab 中對應的函式是 反正弦 asin( ) 反餘弦 acos( )

反正切 atan( )atan2( )

反餘切 acot( )

反正割 asec( ) 反餘割 acsc( )

它們的用法並無特殊,就跟 log( ) 和 sqrt( ) 這些函式一樣。 也和 log( ) 或 sqrt(

23

Page 24: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

) 一樣,在正常的定義域內, Matlab 會計算如預期的實數答案,而且答案在一般熟知的值域之內。 例如當輸入值介於 -1 與 1 之間時,asin( ) 算出介於 -pi/2 與 pi/2 之間的答案。 但是如果輸入值超出這個範圍,Matlab 的 asin( ) 會算出複數。 這是一般熟悉之反三角函數的推廣,可能超出許多讀者的數學知識範圍, 您只要知道 Matlab 沒做錯,就行了。

例如asin(1)

得到 pi/2 而acos(sqrt(3)/2)

得到 0.5236,也就幾乎是 pi/6,都是可預期的。 讀者亦可實驗asin(2)

看看結果。

反正切函式有兩種,這符合工程師的工作習慣。 一種是 atan( ) 就如大部分數學課本上所述,它取值任意實數, 而計算出來的結果介於 -pi/2 與 pi/2 之間。atan(1)

得到近似 pi/4 的結果,而atan(-10000)

得到近似 -pi/2 的結果。

24

Page 25: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

另一種反正切函式是 atan2( ),它需要兩個輸入值。 若輸入 atan2(y,x) 則 Matlab 計算平面上 (x,y) 點與原點所連之線段和 x 軸的夾角, 或者說是 x + yi

這個複數與實軸的夾角,此夾角以 -pi 到 pi 之間測量。例如atan2(1, 1)

得到 pi/4,而atan2(-1, 1)

因為 (-1,1) 在第四象限所以得到 -pi/4,但atan2(-1, -1)

在第三象限而得到 -(3/4)*pi。

習題

1. 試試看 pi/2 - atan(Inf) 答案如何?能解釋嗎?2. 試試看 pi/2 + atan(-Inf) 答案如何?能解釋嗎?3. 試試看 atan2(1,0) 答案如何?能解釋嗎?

25

Page 26: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Matlab 是一個工程型計算器---雙曲與反雙

曲函數

Matlab 其實具備一般工程型計算器該有的基本功能, 這包括任意計算次方、指數與對數函數、三角與反三角函數、雙曲與反雙曲函數。 這裡我們介紹雙曲與反雙曲函數。

這些函數只在特殊的科學與工程領域才用得著, 因此可能也超出了許多讀者的數學知識範圍。 但是因為大部分工程型計算器都提供這些函數的數值估計, 因此我們在此列舉對應的 Matlab 函式,以資參考。 因為它們的用法並無特別,就不再詳細介紹它們的用法,

26

Page 27: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Hyperbolic sine sinh( ) Inverse hyperbolic sine asinh( )

Hyperbolic cosine cosh( ) Inverse hyperbolic cosine acosh( )

Hyperbolic tangent tanh( ) Inverse hyperbolic tangent atanh( )

Hyperbolic cotangent coth( ) Inverse hyperbolic cotangent acoth( )

Hyperbolic secant sech( ) Inverse hyperbolic secant asech( )

Hyperbolic cosecant csch( ) Inverse hyperbolic cosecant acsch( )

其實,它們的函式名稱都頗符合期望。

習題

Matlab 接受變數

Matlab 比工程型計算器更好,除了因為他會計算複數之外, 還因為他接受變數 (variable)。

簡化來說,Matlab 的變數有兩個屬性:

27

Page 28: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

1. 它的名字2. 它的值

想像變數是一口箱子,在箱子上貼了標籤,表明它的名字, 箱子裡面就放著它的值。 箱子本來不存在,只要您在 Matlab 操作視窗內「呼喚」它的名字, 就像阿拉丁神燈裡面的精靈一樣,呼啦,它忽然就出現了。

譬如您說foo

Matlab 可能回應 Undefined function or variable 'foo', 這就是說 Matlab 沒有一個名叫 foo 的函式,也沒有一口名叫 foo 的箱子。

但是,只要說foo = 5

Matlab 就自動製造了一口名叫 foo 的箱子,並且在箱子裡放了 5。 之後,您可以再說foo

Matlab 就會告訴您,foo 的值是 5。

把一個數值放進箱子的學名叫做 指派 (assign), Matlab 用 = 作為指派符號。用法是

28

Page 29: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

變數名字 = 數值如果變數名字原來不存在,Matlab 就臨時開一口新箱子給您; 如果它原來就存在,Matlab 放進新的數值、舊的便不見了, 就好像新的數值「覆蓋」了舊的數值。 因為箱子裡面的數值很容易改變,所以我們稱它為「變數」。

指派的數值可以是一個常數,例如foo = 2.7183

或者任何計算的結果,例如foo = 2.7183^(-2)

或者foo = exp(i*pi)

變數的顯然用處就是節省打字。 如果某個數值要一用再用,可以利用變數把它存起來,將來再用。 譬如可以說x = 1/7

然後用7*x

來檢查 7x 是不是可以還原為 1? 啊哈,從這個例子我們看到,變數的值可以拿來計算,就好像之前我們使用常數做計算一樣! 那就趕快試試看x + x + x + x + x + x + x

或者1 - (x + x + x + x + x + x + x)

29

Page 30: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

吧!

更好玩的實驗,有如先說x = (-8)^(1/3)

然後再說x^3

看看 Matlab 是不是真的計算了 -8 的三次方根?

或者是t = pi/4, exp(i*t), cos(t) + sin(t)*i

這樣子 Matlab 會連續做三件事:

1. 先把 pi/4 指派給 t2. 然後計算 exp(i*t)

3. 然後計算 cos(t) + sin(t)*i

讀者可以用向上的箭頭將前一個指令取出來,再用左右箭頭、[Backspace]、[Delete] 等鍵修改指令,然後按 [Enter] 再執行。如此這般,您可以依序實驗

t = pi/6, exp(i*t), cos(t) + sin(t)*i t = pi/4, exp(i*t), cos(t) + sin(t)*i t = pi/3, exp(i*t), cos(t) + sin(t)*i t = pi/2, exp(i*t), cos(t) + sin(t)*i t = 2*pi/3, exp(i*t), cos(t) + sin(t)*i t = 3*pi/4, exp(i*t), cos(t) + sin(t)*i t = pi, exp(i*t), cos(t) + sin(t)*i

30

Page 31: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

觀察這些計算的結果,有沒有發現什麼規則呢?

最後,請試試看x = acos(2)

然後驗算(exp(i*x) + exp(-i*x))/2

您還可以做好多實驗: x = acos(0), (exp(i*x) + exp(-i*x))/2 x = acos(0.25), (exp(i*x) + exp(-i*x))/2 x = acos(1), (exp(i*x) + exp(-i*x))/2 x = acos(3.14), (exp(i*x) + exp(-i*x))/2 x = acos(16), (exp(i*x) + exp(-i*x))/2

習題

1. 實驗o t = pi/6, exp(i*t), cos(t) + sin(t)*io t = pi/4, exp(i*t), cos(t) + sin(t)*io t = pi/3, exp(i*t), cos(t) + sin(t)*io t = pi/2, exp(i*t), cos(t) + sin(t)*io t = 2*pi/3, exp(i*t), cos(t) + sin(t)*io t = 3*pi/4, exp(i*t), cos(t) + sin(t)*io t = pi, exp(i*t), cos(t) + sin(t)*i

觀察這些計算的結果,有沒有發現什麼規則呢?

2. 實驗o x = 1, sin(pi*x)/xo x = 0.1, sin(pi*x)/x

31

Page 32: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

o x = 0.01, sin(pi*x)/xo x = 0.001, sin(pi*x)/xo x = 0.0001, sin(pi*x)/x

觀察這些計算的結果,請猜測

(寫出它的數值,到小數點下第四位,並且猜測真正的答案應該是多少。)

3. 實驗o x = 1, (exp(x)-1)/xo x = 0.1, (exp(x)-1)/xo x = 0.01, (exp(x)-1)/xo x = 0.001, (exp(x)-1)/xo x = 0.0001, (exp(x)-1)/x

觀察這些計算的結果,請猜測

(寫出它的數值,到小數點下第四位,並且猜測真正的答案應該是多少。)

32

Page 33: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

變數之指派與計算

前面已經解釋過,在 Matlab 中,等號 = 是「指派」的意思, 不是數學中「相等」的意思。雖然大部分的情況下,指派的作用就像數學中相等的意義, 不過本質上並不相同,因為這個概念至為關鍵,我們願意花三節講義, 來闡述並且讓初學的讀者有時間慢慢熟悉這個概念。

如果想要指派數值給一個變數,而不必看到 Matlab 回應 (echo) 變數的值, 可以在指令結束之後寫一個分號 ; 例如 譬如您說foo = 1/5;

那麼 0.2 就被指派給 foo,但是 Matlab 並沒有回應。 看起來好像 Matlab 沒反應,但是其實他已經做好了。 不信的話,就下指令foo

只寫一個變數名字 (別加分號),Matlab 就會回應那個變數的值。

33

Page 34: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

其實,這是一個簡單的規則:變數如果出現在等號的左邊,就是要被指派的意思; 除此而外,只要在 Matlab 指令的任何地方寫出變數的名字, 就是要取出它的值。而取出來之後,那個數值就可以如同常數般做任何計算。 例如foo * 5

或者1 / foo

都會執行正確的計算。

變數可以放在函式裡面,當作函式的輸入值,例如log(foo)

或者sqrt(foo^2)

都是正確的語法。

既然變數可以拿來計算,那麼計算的結果當然可以指派給另一個變數,例如foo = 1/5;a = foo * log(foo);b = exp(a);b^5

應該得到 0.2。

習題

1. 觀察以下指令,執行之後, z 的值應該是多少?34

Page 35: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

x = sqrt(2);y = 2*x;z = y^2;

2. 觀察以下指令,執行之後, z 的值應該是多少?x = 12;y = x/2;z = y/3;

3. 觀察以下指令,執行之後, z 的值應該是多少?x = pi/2;y = sin(x);z = 4^y;

35

Page 36: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

用 Matlab 熟悉變數置換

初學電腦程式語言的人,通常遇到的第一個概念難關,就是變數的數值置換。 例如我們先說x = 1;

然後說x = 2*x

數學敏感的讀者看到上面那條「等式」,立刻會想:x 勢必等於 0。 其實不是。

因為 = 是當「指派」指令,所以等號的右邊要先做計算, 計算之後的結果是 2,然後再把 2 指派給 x,所以執行之後, x 的值就從 1 變成了 2,這也就是變數的數值置換。 再來,如果現在 x 的數值是 2,執行了x = x + 2

之後 (數學敏感的讀者,直接反應或許是「無解」或「矛盾」),x 的值就換成了 4。

等號的左右兩邊不但可以出現同一個變數,在右邊還可以出現一次以上, 例如x = 4;x = x * sqrt(x)

36

Page 37: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

所有出現在等號右邊的 x 都取出舊的值,也就是 4。 計算得到結果之後,才指派給 x,也就是 8。

變數的置換技巧,可以拿來做許多有趣的計算。例如想要計算

可以轉換成一個數學迭代的程序:

按照數學寫法,我們需要七個變數:x0, x1, x2, x3, x4, x5, x6。 如果運用電腦程式的變數置換技巧,只需要一個變數 x 就夠了,如下:x = 1;x = x + 1/2^1x = x + 1/2^2x = x + 1/2^3x = x + 1/2^4x = x + 1/2^5x = x + 1/2^6

我們可以利用向上箭頭,重複呼叫一樣形式的指令, 每次只要修改一個數字即可重複執行上述計算,並且觀察計算的結果。 我得到的結果是 1.9844。

事實上,我們都知道以下無窮等比級數

37

Page 38: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

的極限是 2,若持續以上的迭代 (每次升高一個次方),一直做下去, 就會一步一步看到收斂的過程。做到 15 次方的時候,看到的數值是 2.0000, 然後即使再繼續做,這數值也不會改變。

再舉一個例子,若 f(x) 是一個可微函數,我們知道牛頓求根算法說的是

<="" div="">

其中 x0 是一個初始猜想,它必須是一個已經「頗靠近」真解的某個數。 而迭代的過程將會產生新變數 x1, x2, x3, ...; 如果運氣不太壞的話, xn 就會越來越

接近 f(x)=0 的一個根, 換句話說,f( xn ) 越來越接近零。

用個實際點的例子,譬如 f(x) = x2 - 2, 那麼我們可以利用牛頓法求他的一個正根,也就是 sqrt(2)。 將 f(x) 和 f'(x) 代入牛頓迭代過程,整理得

我們令 x0 是 1,則迭代x = 1;

x = x/2 + 1/xx = x/2 + 1/xx = x/2 + 1/xx = x/2 + 1/x

就看到答案已經固定在 1.4142 不再改變。38

Page 39: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

習題

1. 計算以下算式 (答案寫出五位有效數字) 

2. 以下極限存在,請寫出 x 的前五位有效數字。

3. 令 f(x) = x2 - 2,舉出一個 x0 使得牛頓迭代法收斂到 -sqrt(2) 這個根。4. 令 f(x) = x2 + 2,舉出一個 x0 使得牛頓迭代法收斂到 sqrt(2)*i 這個根。

5. 令 x 是使得 exp(x) = cos(x)

的最大負數,寫出 x 的前五位有效數字。

39

Page 40: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Matlab 認得矩陣

Matlab 原本就是 Matrix Laboratory (矩陣實驗室) 的縮寫, 所以他會認識矩陣,應該並非意外。我們用A = [1, 2; 3, 4]

指派一個 2x2 方陣給變數 A: A =

1 2

3 4

輸入矩陣時,用 [ 和 ] 夾住兩端,用 , 分開元素,用 ; 分列。 元素可以是任何常數、變數、或計算出來的數值。例如x = pi;B = [pi, exp(1), log(2); sin(x/2), -cos(3*x/4), 1+2^(-2)+3^(-2)]

造成一個 2x3 矩陣,並指派給變數 B。

習題

1. 將以下方陣指派給 S 

1 2 3

4 5 6

7 8 9

2.

40

Page 41: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

3. 將以下方陣指派給 M 

8 1 6

3 5 7

4 9 2

4.

5. 將以下方陣指派給 I 1 0 0

0 1 0

0 0 1

41

Page 42: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

Matlab 是一個超級計算器---以矩陣為物件

一般的計算器或數值計算軟體,都能做加、減、乘這些運算, 通常也都用 + -

* 這些符號代表加、減、乘。 但是這些符號向來只能作用在兩個整數或有理數之間, 鮮少能夠自動作用在兩個複數、甚至矩陣之間。 Matlab 的 + - * 能夠視其兩側的「物件」類別而決定該採取怎樣的步驟來計算, 這叫做「拓展」(overload) 功能。

我們已經見識過 Matlab 的 + - * 能夠拓展到複數上, 現在看看它們也能很自然地拓展到矩陣上。令A = [1, 2; 3, 4];B = [pi, exp(1), log(2); sin(pi/2), -cos(3*pi/4), 1+2^(-2)+3^(-2)];C = [8, 1, 6; 3, 5, 7; 4, 9, 2];I = [1, 0, 0; 0, 1, 0; 0, 0, 1];

42

Page 43: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

則 A, B, C, I 分別代表一個 2x2、2x3、3x3 和 3x3 的矩陣。 1 2

3 4

3.1416 2.7183 0.6931

1.0000 0.7071 1.3611

8 1 6

3 5 7

4 9 2

1 0 0

0 1 0

0 0 1

根據矩陣加、減計算的規則,只有 C 和 I 可以相加減,例如C + I

或者I - C

都是正確語法,而且 Matlab 會得到正確結果。

根據矩陣乘法計算規則,A * B

是可以計算的,得到另一個 2x3 矩陣。但是B * A

就不能計算,Matlab 會提醒您 Inner matrix dimensions must agree. 同理,B * CB * IC * II * C

都可以計算,而且 Matlab 獲得正確的結果。

因為 A + A 應該要能簡寫成 2*A,所以常數 (純量) 乘矩陣的結果, 就是把那個常數乘上矩陣的每個元素。這一個簡單的道理 Matlab 也知道,例如2*A

43

Page 44: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

-3*A(1/4) * AA / 4

都是合法的計算,而且結果正確。

因為 A * A 應該要能簡寫成 A^2,所以 Matlab 能計算方陣的正整數次方,例如A^2C^2I^2

都可以計算。

數學中並無規定純量與矩陣的加、減計算。 Matlab 為了方便起見,拓展純量與矩陣的 + - 意義,使得A + 1

是將 A 的每個元素都加 1,同理1 - A

用 1 減去 A 的每個元素。

讀者隨便實驗一下,就知道 Matlab 其實能算方陣的任意次方 (只要是純量指數)。 我們不打算在此說明,那計算究竟是何意義?

習題

1. 將以下方陣指派給 M,然後計算 2*M 

44

Page 45: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

8 1 6

3 5 7

4 9 2

2.

3. 輸入以下 8x8 方陣,指派給 T,然後計算 T2

4. 2 -28 148 -116 -273 -1302 4186 -43715. -243 -428 1951 -1643 -5384 -24082 80029 -764436. -40 -115 546 -405 -1145 -5180 17025 -171407. 105 209 -967 809 2563 11529 -38201 367818. 236 431 -1965 1627 5268 23562 -78245 751049. 33 64 -288 208 643 2843 -9434 934110. 20 31 -137 112 380 1681 -5608 5340

-8 -23 109 -81 -229 -1036 3405 -3427

11. 令I = [1, 0, 0; 0, 1, 0; 0, 0, 1];

計算I - (I+1)/2 (1 - I)/2

解釋為何結果相同?

45

Page 46: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

向量是特殊的矩陣

直的一行矩陣稱為向量 (vector) 或行向量 (column vector), 橫的一列矩陣稱為序列 (array) 或列向量 (row vector)。 向量、序列、矩陣之間的加、減、乘運算,均悉按照矩陣之加、減、乘規則, 並無特殊。

例如b = [-3; -1; 0; 1]

便指派了一個 4x1 的矩陣,也就是一個四維的向量,給變數 b;而v = [2, 0, 2, 4]

便指派了一個 1x4 的矩陣,也就是一個四維的序列,給變數 v。 若 A 是一個 4x4 方陣,則 A*b 是合法的指令,但 A*v 就不合法。 讀者請嘗試v * b

46

Page 47: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

結果是一個 1x1 方陣,也就是一個純量 (scalar),這便是 v 和 b 的「內積」, 答案是 -2。然而b * v

產生一個 4x4 方陣,如下 -6 0 -6 -12

-2 0 -2 -4

0 0 0 0

2 0 2 4

上述計算都符合標準的線性代數計算規則,也就不必在此詳細解釋了。

習題

1. 令 A=[5 11 5; 7 9 11; 10 2 11] 而 v=[0.6; 2.7; 1.98],計算 A*v,並計算此向量的長 (norm)。

2. 令 A=[5 4 2; 11 10 2; 1 0 2] 而 v=[sqrt(6); sqrt(7); 1],計算 A*v,並計算此向量的長 (norm)。

47

Page 48: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

複數、矩陣與轉置

若 A 是一個實係數矩陣,則 A' 就是它的轉置 (transpose)。 但是如果 A 裡面有複數元素,則 A' 就相當於 Hermitian: 轉置矩陣,並將每個元素取共軛複數 (所以實數部份沒有影響)。 這也包含向量或序列的狀況,例如 x 是一個三維向量 (直的), 則 x' 就是 x 的 Hermitian,成為一個三維序列 (橫的), 而且每個元素取其共軛複數。 如果 c 就是一個複數,那麼 c' 就是 c 的共軛複數。

譬如說 c=3,則 c' 就還是 3。 但是如果 c=complex(1,3),也就是 1+3i, 那 c' 就成了 1-3i。 因此,c*c' 不是 c2 的意思,而是 |c|2。 當然,如果 c 是個實數,那 c2 和 |c|2 是一樣的意思; 不過我們要留意,萬一 c 是複數,那就不同了。

令 x=[x1, x2, x3] 是一個序列, 則根據上述解釋,x*x' 就是|x1|2 + |x2|2 + |x3|2

因此sqrt(x * x')

都是 x 的歐幾里得長度 (Euclidean norm)。 其實它也可以用 norm(x) 取得。

48

Page 49: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

如果只要做轉置而不要取共軛複數,可以說 A.' 或者 x.', 注意那個「點」,這是 Matlab 的「點指令」之一,以後還會再多介紹一些。 當然囉,如果 c 是個純量、不管是實數還是複數,那 c.' 就是 c 它自己, 這個指令用在純量上沒什麼意義。

如果您不喜歡、或是不方便用 ' 算子來做 Hermitian, 可以改用函式 ctranspose()。 例如 ctranspose(A) 的效果和 A' 是一樣的。 同樣地,如果您不喜歡、或是不方便用 .' 算子來做轉置, 可以改用函式 transpose()。 例如 transpose(A) 的效果和 A.' 是一樣的。 要注意,transpose() 就如其名: 它真的只有做轉置,沒有取共軛複數。

習題

1. 令 x=[1, sqrt(2), 3, exp(4), 5] 和 y=[4, 3, 2, sqrt(2), exp(1)],計算 x

和 y 的內積。2. 令 x=[1, -2, 3, complex(1,-1), 5] 和 y=[4, complex(0,3), 2,

complex(1,-1), 1],計算 x 和 y 的內積。3. 令 x=[1, sqrt(-2), 3, complex(1,-1), -2] 計算 x 和它自己的內積。4. 令 x=[1, sqrt(2), 3, exp(4), 5] 計算 x 和它自己的內積。

49

Page 50: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

50

Page 51: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

矩陣除法

若 A 和 B 是維度相同的兩個方陣,而且 B 是可逆方陣,則 B-1 是另一個同維度的方陣。但是因為矩陣乘法並沒有交換律,所以

B-1 A     和 A B-1

一般而言並不相等,所以 Matlab 提供兩種除法符號。 如果在 A 的左邊乘 B-

1,亦即 B-1A,稱為 B 除 A, 運算符號是B \ A

如果在 A 的右邊乘 B-1,亦即 A B-1,稱為 A 除以 B, 運算符號是A / B

凡是按規則可以和 B-1 相乘的矩陣, 都可以根據左乘或右乘而做「除」或「除以」的計算。 例如線性聯立方程式可以寫成 Ax=b 的形式,其中 A 是一個 n 維可逆方陣, b 是一個 n 維向量,則x = A\b

就是前述聯立方程式的一組解。例如以下線性聯立方程式

51

Page 52: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

可以如此求解:令A = [4 6 -1; 5 -8 3; 1 4 1]b = [1 0 0]'x = A\b

得到一組數值解 0.1667 0.0167 -0.2333

得到一組數值解之後,讀者可以驗算試試看,例如計算r = A*x - b

會得到數值很小的向量,這個向量稱為『殘量』(residue)。 理論上殘量應該是零向量,但是因為數值計算無可避免的誤差, 它未必真的是零。

延續前面的例子,殘量就是 1.0e-15 * -0.1110 0 0.0278

這組數字的意思是r(1) = -0.1110 * 10-15

r(2) = 0r(3) = 0.0278 * 10-15

雖然它們都很小,但是 r(1) 和 r(3) 並不是零, 這就是『數值計算無可避免的誤差』所致。 我們經常會計算殘量的向量長度 (norm),例如norm(r)

52

Page 53: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

得到1.1444 * 10-16

通常只要殘量的向量長度在 10-14 以下, 我們就認為數值解還蠻接近真解的。

雖然 Matlab 可以計算 B-1, 但是這個指令有嚴重的缺點,如果讀者養成了使用它的習慣, 那就非常不好,所以我們故意不去強調那個指令。 詳細的原因,請讀者在『數值分析』或『矩陣計算』那一類課程中學習。 反正,簡單地說,請用上述方法求解線性聯立方程式,不要用逆矩陣。

讀者如果胡亂做實驗,就會發現,即使 A 不是可逆方陣, 甚至 A 不是方陣,以下指令x = A\b

也會得到答案。至於這個答案是什麼意思? 也是要請讀者到其他課程去學習,例如線性代數、數值分析、矩陣計算、數學規劃, 甚至統計課程也可能談到。 稍後,在 關於矩陣的基本函式 那一節也會看到一個例子。

習題

1. 求解以下線性聯立方程式

53

Page 54: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

2. 求解以下線性聯立方程式

3. 令 A=[2 -1 -3; 0 -2 1; 1 -3 -2], b=[1; 0; 0], 求解線性方程式 Ax=b,並計算其殘量的向量長度 (norm)

4. 令 A=[0 -1 1; -3 3 0; 2 3 3], b=[-1; 1; 1], 求解線性方程式 Ax=b,並計算其殘量的向量長度 (norm)

5. 令 A=[5 3 1; 3 1 2; 5 0 4],b=[1 2 1], x 是一個 1 乘 3 的序列, 求線性方程式xA = b

之解

6. 令 A=[-1 0 1; 4 3 3; 2 1 2],b=[1 0 1], x 是一個 1 乘 3 的序列, 求線性方程式xA = b

之解

54

Page 55: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

代表矩陣元素的變數

若 A 是一個矩陣,則 A 是一個變數。 Matlab 的精彩之處,是變數可以儲存一個數值,也可以儲存一個矩陣。 而當變數儲存矩陣的時候,它自動衍生 (derive) 出來元素變數、行變數和列變數。 例如A(1,1)

代表 A 的 (1,1) 位置元素,Matlab 會回應它的值。如果要改變它, 只要重新指派即可;例如A(1,1) = 2 * A(1,1)

就是把 a1 1 元素置換成原來元素的兩倍。

此外,A(2,:)

55

Page 56: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

代表 A 的第二列,也同樣可以置換它,例如A(2,:) = -A(2,:)

就是把第二列每個元素都變號。同理可推A(:,3)

代表 A 的第三行,而A(:,3) = A(2,:)'

表示把 A 矩陣之第二列,做共軛複數轉置 (Hermitian) 之後, 置換成第三行 (假設 A 是方陣,所以列和行的維度相同)。

如果 x 代表一個向量或序列,則它的元素變數可以用比較簡單的形式:x(3)

就代表它的第三個元素 x3,而x(3) = x(1) + x(2)

就是把 x3 置換成前兩個元素之和。

Matlab 的足標:不論是向量、序列還是矩陣, 足標都是正整數 (1, 2, 3, ...),這或許是 Matlab 稍微缺乏彈性的地方, 使用者不能自訂足標的範圍。

如果 x 代表一個向量或序列,則x(k:end)

代表 xk, xk+1, ... 一直到 x 的最後一個元素。 當然,如果 k 已經超過最後元素的足標,那就會得不到結果。 同理,如果 A 代表一個矩陣,則A(i, k:end)

56

Page 57: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

代表第 i 列,aik 以及它右邊的整列元素,而A(k:end, j)

代表第 j 行,akj 以及它下邊的整行元素。

習題

1. 令 A=[2 5 4 5; 4 4 2 6; 0 5 5 2; 9 3 7 3], 將 A 的第二列變號。2. 令 A=[2 5 4 5; 4 4 2 6; 0 5 5 2; 9 3 7 3], 將 A 的第三行變號。3. 令 A=[2 5 4 5; 4 4 2 6; 0 5 5 2; 9 3 7 3], 將 A 的第二列之對角線以右

的元素都換成 04. 令 A=[2 5 4 5; 4 4 2 6; 0 5 5 2; 9 3 7 3], 將 A 的第二行之對角線以下

的元素都換成 0

57

Page 58: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

基本列運算

讓我們用三個所謂的「基本列運算」(elementary row operations) 來結束這一篇教材。 所謂基本列運算就是

1. 矩陣的兩列交換。例如交換第一列和第三列tmp = A(1,:);A(1,:) = A(3,:);A(3,:) = tmp

2. 矩陣的某一列乘上一個常數。例如將第一列乘上 -2A(1,:) = (-2)*A(1,:)

3. 矩陣的第 i 列,加上某常數乘上第 j 列,然後置換掉第 i 列。例如將第一列乘上 -2, 加去第二列並且置換它A(2,:) = A(2,:) + (-2)*A(1,:)

58

Page 59: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

這三個運算是以「列交換高斯消去法」 (Gaussian elimination with row

pivoting) 求解線性聯立方程式的基本動作。

例如,考慮以下線性聯立方程式

我們將係數和右端項排列整齊,寫成一個合併矩陣B = [4 6 -1 1 5 -8 3 0 1 4 1 0]

然後執行列交換的「高斯消去法」。

1. 在 B(:,1) 觀察絕對值最大元素,是 b21, 故決定交換第一列和第二列tmp = B(1,:); B(1,:)=B(2,:); B(2,:)=tmp;

交換後的 B 矩陣是 5 -8 3 0 4 6 -1 1 1 4 1 0

2. 將第一列乘上 -4/5 加去第二列B(2,:) = B(2,:) - 4*B(1,:)/5;

得到59

Page 60: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

5.0000 -8.0000 3.0000 0 0 12.4000 -3.4000 1.0000 1.0000 4.0000 1.0000 0

3. 將第一列乘上 -1/5 加去第三列B(3,:) = B(3,:) - B(1,:)/5;

得到新的 B 矩陣 5.0000 -8.0000 3.0000 0 0 12.4000 -3.4000 1.0000 0 5.6000 0.4000 0

4. 觀察 B(2:end,2) 之絕對最大值,發現是 b22 故不需交換。5. 將第二列乘上 -b32/22 加去第三列

B(3,:) = B(3,:) - B(3,2)*B(2,:)/B(2,2);

得到 5.0000 -8.0000 3.0000 0 0 12.4000 -3.4000 1.0000 0 0 1.9355 -0.4516

6. 以上就是對 B 做「列交換高斯消去法」的結果。 以下根據上述結果求解 x1, x2, x3.

7. 則 x3 = b34/b33

x(3) = B(3,4)/B(3,3)

60

Page 61: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

得到 -0.2333

8. 代入前一列,得到 x2 = (b24 - b23*x3)/b22

x(2) = (B(2,4) - B(2,3)*x(3))/B(2,2)

得到 0.0167

9. 再代入前一列,得到 x1 = (b14 - b12*x2 - b13*x3)/b11

x(1) = (B(1,4) - B(1,2)*x(2) - B(1,3)*x(3))/B(1,1)

得到 0.1667

以上得到的數值解,和我們在 矩陣除法 那一節得到的答案一樣。

習題

1. 令 B=[7 5 5 3; 6 7 1 7; 4 1 4 1],對 B 做「列交換高斯消去法」。2. 令 B=[17 11 7 1; 11 8 4 2; 7 4 3 3],對 B 做「列交換高斯消去法」。3. 令 B=[2 1 0 0 1; 1 2 1 0 1; 0 1 2 1 1; 0 0 1 2 1], 對 B 做「列交換高斯消去法」。

61

Page 62: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

關於矩陣的基本函式

之前我們看到 Matlab 是一個超級的工程型計算器, 不僅如此,它還「認得」複數、向量、矩陣。 現在介紹幾種作用在矩陣上的幾種基本的線性代數函式。

隨便輸入一個矩陣A = [1 2 3 4; 5 6 7 8; 4 3 2 1]

這是一個三列、四行的矩陣,簡稱為三乘四矩陣, 我們稱其維度 (dimension)

為 3 x 4。 Matlab 用 size( ) 計算維度,例如size(A)

得到回應 3   4,這就是 A 的維度。

A 的階數 (rank)是指 A 的線性無關的行向量個數, 例如 A 有四個行向量,每個行向量有三個維度

62

Page 63: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

第一行 第二行 第三行 第四行1 2 3 4

5 6 7 8

4 3 2 1

取出 A 的第 k 個行向量的 Matlab 語法是 A(:,k)。 所謂 rank(A) 就是上述那四個向量之中,能夠找到的、最多可能的線性無關向量個數。rank(A)

得到答案 2,表示這四個向量之中,最多只有兩個是線性無關的。 用眼睛觀察,看起來第一行和第二行是無關的。不妨用 Matlab 實驗看看:rank( [1 2; 5 6; 4 3] )

答案是 2,果然它們線性無關。 因此,第三行與前兩行是線性相關的,因此第三行可以寫成前兩行的線性組合。 換句話說,我們可以找到不全是 0 的常數 a1 和 a2, 使得

a1 * (第一行) + a2 * (第二行) = 第三行這是一個三條式子、兩個未知數的線性聯立方程式, 讀者可以試著求解 a1 和 a2, 但是這一個例子不難觀察到答案:a1 = -1 而 a2 = 2, 亦即

2 * (第二行) - (第一行) = 第三行不妨用 Matlab 做個實驗:2*A(:,2) - A(:,1)

同理,A 的第四行也和前兩行是線性相關的,因此第四行可以寫成前兩行的線性組合。 換句話說,必定存在不全是 0 的常數 x1 和 x2, 使得

63

Page 64: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

x1 * (第一行) + x2 * (第二行) = 第四行這相當於要求解以下線性聯立方程式

x1 + 2 x2  =  4

5 x1 + 6 x2  =  8

4 x1 + 3 x2  =  1

我們可以用 Matlab 的矩陣、向量除法來求解:[1 2; 5 6; 4 3] \ [4; 8; 1]

得到答案-2.0000 3.0000

因此 x1 = -2 而 x2 = 3,讀者不妨再用 Matlab 驗算-2 * A(:,1) + 3 * A(:,2)

看看結果是不是 A 的第四行?

根據線性代數理論,A 和 A' 的階數是一樣的。 換句話說,A 的列向量之中也只有 2 個線性無關向量。亦即

第一列 第二列 第三列1 5 4

2 6 3

3 7 2

4 8 1

應該頗明顯可見前兩列是線性無關的,可以叫 Matlab 驗證:rank( [1 2 3 4; 5 6 7 8] )

而第三列與前兩列線性相關。因此第三列可以寫成前兩列的線性組合。 換句

64

Page 65: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

話說,可以找到不全是 0 的常數 x1 和 x2, 使得x1 * (第一列) + x2 * (第二列) = 第三列

這一次相當於要求解x1 + 5 x2  =  4

2 x1 + 6 x2  =  3

3 x1 + 7 x2  =  2

4 x1 + 8 x2  =  1

還是可以委託 Matlab 執行[1 5; 2 6; 3 7; 4 8] \ [4; 3; 2; 1]

得到答案-2.2500 1.2500

請讀者自行驗證。

如果 B 是一個方陣,則可以計算它的行列式。例如B = [1 2 3; 4 5 6; 7 8 9]

則 size(B) 是 3   3,它是個三乘三矩陣, 又稱為三階方陣。但是我們發現 rank(B) 是 2,所以 B 是「不滿階」的方陣, 因此它不可逆。由det(B)

計算得知 B 的行列式是 0,再度驗證它不可逆。

最後我們介紹 trace,就是矩陣之對角線和的意思。例如trace(B)

就是 1+5+9 也就是 15。即使不是方陣也可以有對角線和,例如65

Page 66: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

trace(A)

就是 1+6+2 也就是 9。不管是不是方陣,一個矩陣的「對角線」元素就是 A(1,1), A(2,2), A(3,3), ... 這些元素。

習題

1. 令M = [1 2 3 4; 5 6 7 8; 4 3 2 1]

則 M 的階數是 2,請寫出 M 的第一行如何成為倒數兩行的線性組合?

2. 令M = [1 2 3; 4 5 6; 7 8 9]

則 M 的階數是 2,請寫出 M 的第三行如何成為前兩行的線性組合?

3. 令M = [1 2 3; 4 5 6; 7 8 9]

則 M 的階數是 2,請寫出 M 的第一行如何成為後兩行的線性組合?

4. 做一些實驗,猜想對任意一個方陣 A,det(A) 和 det(A') 是否相等?5. 做一些實驗,猜想對任意兩個方陣 A 和 B,det(A*B) 和 det(A)*det(B)

是否相等?

66

Page 67: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

6. 做一些實驗,猜想對任意兩個方陣 A 和 B,det(A+B) 和 det(A)+det(B)

是否相等?7. 做一些實驗,猜想對任意一個矩陣 A,trace(A) 和 trace(A') 是否相等?8. 做一些實驗,猜想對任意兩個方陣 A 和 B,trace(A*B) 和

trace(A)*trace(B) 是否相等?9. 做一些實驗,猜想對任意兩個方陣 A 和 B,trace(A+B) 和 trace(A)

+trace(B) 是否相等?10.令 x=[2 1 6 7], y=[2 4 1 3], z=[0 1 1 2], 請問 x, y, z 三個序列是否線

性無關?11. 令 x=[25 31 9 36], y=[46 46 24 39], z=[29 47 3 69], 請問 x, y, z 三

個序列是否線性無關?12.若已知 x=[8 18 26]', y=[18 53 56]' 和 z=[26 56 85]' 三個向量線性相

關,亦即存在純量 a 和 b 使得a*x + b*y = z

求解 a 和 b

13.若已知 x=[3 8 -53]', y=[5 2 59]' 和 z=[4 7 -23]' 三個向量線性相關,亦即存在純量 a 和 b 使得a*x + b*y = z

67

Page 68: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

求解 a 和 b

關於向量的基本函式

其實向量 (vector) 是一種特殊的矩陣:亦即 n 乘 1 的矩陣。 向量都是「直」的,又特別稱為行向量 (column vector)。 轉置的向量,也就是「橫」的,稱為序列 (array) 或列向量 (row vector), 它們是 1 乘 n 的矩陣。 以後除非特別需要,我們說向量的時候也都包含序列。

例如令v = [-2 -1 0 1 2]'

則 v 是一個五維向量。 用在矩陣上的函式,通常也都可以用在向量上,例如size(v)

得到 5   1。而 rank(v) 也得到正確的答案: 1; 凡是非零的向量本身都是線性

68

Page 69: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

無關,所以階數是 1。

但是 det(v) 不能做,因為 v 不是方陣。 奇怪的是 trace(v) 也不能做,先不要管它吧。

Matlab 還是有針對向量的專門函式,這一節介紹關於線性代數的幾個函式, 下一節介紹關於描述統計的幾個函式。

首先,向量的歐幾里得長度 (Euclidean norm) 是其元素的絕對值平方和開根號:norm(v)

得到答案 3.1623,也就是sqrt( abs(v(1))^2 + abs(v(2))^2 + abs(v(3))^2 + abs(v(4))^2 + abs(v(5))^2 )

在上述例子,也就是 sqrt(10) 的意思。 讀者或許認為,既然已經平方,幹麼還要先做絕對值? 那是為了顧慮 v 的元素可能有複數。 如果 c 是個複數,那麼 c^2 和 abs(c)^2 就不一樣了。

如果已經知道 v 是一個向量,那麼可以用length(v)

來計算它的維度。 非常注意:length 是指向量的維度,不是長度; 長度要用 norm(v) 來計算。

69

Page 70: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

事實上,length( ) 是取得 size( ) 回應的兩個維度當中比較大的那一個數。 所以如果 A 是一個 3 乘 4 的矩陣,則 length(A) 將會是 4。

最後,我們學習一個做內積 (inner product, 又稱為 dot product) 的指令dot(v,v)

不管 v 和 w 是直還是橫,只要它們是維度相等的兩個向量, dot(v,w) 就能做計算。而如果 v 和 w 都是行向量,則

dot(v,w) = v' * w

因此sqrt(dot(v,v)) = norm(v)

習題

1. 不管 A 是矩陣還是向量,請問 length(A) 和 length(A') 是否相等? 為什麼?

2. 輸入一些複數值的向量 v,實驗看看 dot(v,v) 有沒有可能出現負數? 為什麼?

70

Page 71: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

將向量視為數據的描述統計

對於向量,Matlab 除了提供基本的線性代數函式之外, 還提供基本的描述統計函式。

例如若 v 是一個向量,而其元素代表 Alice 在計概課的小考成績。v = [8 7 0 5 5 10 4]'

數據的筆數 (共有幾筆資料) 就是 v 的維度,亦即length(v)

在這個例子裡,是 7。

平均值 (mean value) 是mean(v)

也就是 (v(1) + v(2) + ... + v(7))/7,大約是 5.5714。 中位數 (median) 是71

Page 72: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

median(v)

也就是 5。把 v 的數據從小排到大:sort(v)

也就是 0, 4, 5, 5, 7, 8, 10。 所謂中位數就是數據排序之後,位於「中間」的那個數。 在以上例子中,也就是排序後的第四個元素:5。 sort 一定是從小排到大。如果要從大排到小怎麼辦?以後再說。

標準差 (standard deviation) 是std(v)

定義為

其中 n 就是 length(v),而 就是 mean(v)。 分母是 n-1 也許與讀者在基礎統計課程中所學不同, 這個公式假設原數據是從常態分佈的母群體中抽選出來, 然後根據這些數據來估計母群之標準差,稱為「不偏估計」。 各位應該會在比較專業的統計課程中學習這個道理。

v 當中的最大值 (maximal value) 是max(v)

最小值 (minimal value) 是min(v)

72

Page 73: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

若 v 和 w 是兩個維度相同的向量,假設 v 和 w 不平行。 則 v 和 w 的頂端,再加上原點,就是三個點。 在任何空間中,三個不共線點總是決定一個平面。 在 v 和 w (以及原點) 決定的那個平面上,v 和 w 有一個夾角 。 簡化一點來說,這個角的餘弦 (cosine)   就是這兩組數據 v 和 w 的相關係數。 當 v 和 w 越「相關」,代表夾角 越小,因此相關係數越接近 1。如果 v 和 w 越「無關」,代表夾角 越接近 90 度,因此相關係數越接近 0。 如果 v 和 w

越「逆相關」,代表夾角 越接近 180 度,因此相關係數越接近 -1。 根據所謂的「餘弦等式」,得知

其中分子是內積,而分母是 v 和 w 的長度之積。 因此可以利用 Matlab 來計算 v 和 w 的「相關係數」。

例如若 v 如上述,而w = [9 6 2 4 5 8 5]'

則 v 與 w 的相關係數是dot(v,w) / (norm(v) * norm(w))

0.9787,這是非常相關的兩組數據。 我們可以用acos(0.9787)

算出 大約是 0.2068。不過這是弧度量。 如果想要轉換成角度,因為73

Page 74: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

所以用0.2068 * 180 / pi

得知夾角大約是 12 度。

習題

1. 令 v = [8 7 0 5 5 10 4] 是某甲的成績記錄,而 w = [7 6 3 8 7 9 5] 是某乙的成績記錄。 計算兩者分別的平均和聯合的平均。

2. 令 v = [8 7 0 5 5 10 4] 是某甲的成績記錄,而 w = [7 6 3 8 7 9 5] 是某乙的成績記錄。 計算這兩份成績的相關係數。

3. 令 v = [8 7 0 5 5 10 4] 是某甲的成績記錄,而 w = [0 4 2 7 2 8 5] 是某乙的成績記錄。 計算這兩個向量的夾角,以角度表示。

4. 取得 [虛擬成績表格] 中的矩陣 A,計算 A 的最後一行數據之總和。5. 取得 [虛擬成績表格] 中的矩陣 A,計算 A 的最後一行數據之平均值。6. 取得 [虛擬成績表格] 中的矩陣 A,計算 A 的最後一行數據之中位數。7. 取得 [虛擬成績表格] 中的矩陣 A,寫出 A 的最後一行數據中,排序第七小的數值。

74

Page 75: el.fotech.edu.twel.fotech.edu.tw/localuser/k1200/web1/MATLAB teaching…  · Web view讀者可以辨識,其外框和功能表、工具列,都與一般的 Windows 視窗軟體

75