基本特色
執行MATLAB會在你的電腦螢幕上產生一個或多個視窗。這些視窗中其中有一個標題是MATLAB,它被稱作是MATLAB desktop。此視窗是MATLAB中最主要的圖形使用者介面。在MATLAB視窗中,有一個視窗稱作是Command windows。這裡是你和MATLAB互動的主要地方。Prompt >>在Command window中顯示,並且當Command window在運作時,在prompt的右方會有一個閃爍的指標出現。這個指標和MATLAB prompt代表MATLAB正在等待執行數學的運算。
2.1 簡易數學
就如同計算機一般,MATLAB可以作基本的數學運算。考慮以下簡單的例子:瑪莉到辦公室文具用品店以買了4個橡皮擦,每個25分;6個記事本,每個52分;2個膠帶,每個99分。請問瑪莉買了幾個東西且花了多少錢?用計算機來解這個問題,你會輸入
4+6+2=12 items
4*25+6*52+2*99=610 cents
在MATLAB裡,這個問題可以用好幾個方法來解。第一個,可以用上頭所說的使用計算機的方式來解:
>> 4+6+2
ans =
12
>> 4*25+6*52+2*99
ans =
610
注意到MATLAB並不在乎空格space的大小,且乘法的優先權高於加法。再注意到MATLAB在二次運算都稱結果為ans,是answer的簡稱。
解決上述問題的另一個方法是將資訊儲存在MATLAB variables裡:
「略」
在此我們建立了三個MATLAB變數,eraser, pads和tape來儲存每件物品的個數。在輸入每行敘述之後,除了tape的那行之外,MATLAB都顯示了結果。在行末的分號告訴MATLAB計算這一行但不要顯示其結果。最後,我們告訴MATLAB將購買的物品數叫做是items而全部所需付出的金錢為cost。在每一個步驟中,MATLAB記憶了過去的資訊。因為MATLAB記憶了這些事,讓我們求每件物品的平均花費為:
>> average_cost = cost/items
average_cost =
50.833
因為 average cost是二個字,而MATLAB中的變數必須是一個字,故使用底線來建立一個新變數average_cost。
除了加法和乘法之外,MATLAB提供了以下的基本算術運算子:
| 運算子 | 符號 | 例子 |
| 加法 | + | 3 + 22 |
| 減法 | - | 54.4 – 16.5 |
| 乘法 | * | 3.14 * 6 |
| 除法 | / | 19.54 /7 或7\19.54 |
| 次方 | ^ | 2^8 |
這些運算在一已知表示式中的子的計算次序為一般的優先次序法則,我們統整如下:
式子被由左到右地計算,其中次方(指數)有最高的優先次序,接著是乘法和除法,它們有相同的優先次序,再緊接著是加法和減法,它們也有相同的優先次序。而括弧可以被用來改變這些順序,且以上的法則可以被套用到一堆的括弧中,此時優先次序則由最內的括弧到最外的括弧。
2.2 MATLAB的workspace (工作區)
當你在Command window中工作時,MATLAB會記憶你所輸入的每行指令和你建立的每個變數的值。這些指令和變數是常駐於MATLAB workspace或Base workspace中,並且只要你需要隨時都可以被取用。舉例說明,為了檢查tape變數的值,你所需要做的就是在提示符號之後輸入它的名字來詢問MATLAB:
>>tape
tape =
2
如果你無法記住變數的名字,你可以輸入MATLAB指令 who來要求MATLAB列出它所知道的變數名稱:
[略]
注意到MATLAB並不會告訴你變數的值;它僅僅給予你它們的名稱。若要求變數的值,你必須在MATLAB提示符號之後輸入變數名稱。
要回復前幾步的指令,MATLAB使用鍵盤上的方向箭頭(Cursor)鍵。例如按↑鍵一次,則叫回最近一次在提示符號之後的指令。重覆按下↑鍵則可回到更前頭的指令,每多按一次則回復到更前一步的指令。相似地,按下↓則捲動到後一項指令。按下→或←鍵則在MATLAB提示符號之後的指令上移動一格,因此也允許這項指令被編輯,這樣的方式就好像你在使用文字處理軟體編輯文字一樣。其它標準的編輯按鍵諸如Delete或是Backspace, Home和End則和一般情形無異。Tab鍵對於讓變數名稱變完整非常有用。一旦一項捲動過的指令是可行的,則無論方向箭頭在command window的何處,按下Return鍵會告訴MATLAB要執行指令了。最後,或許也是最有用的Escape鍵可以消去目前在提示符號上的指令。對於你們之中熟悉EMACS編輯器的那些人,MATLAB也接受一般EMACS編輯控制字元序列,例如Control-U來消除目前的指令。
2.3 關於變數
如同其它的程式語言,MATLAB對於變數也有其規定。之前已經注意到變數名稱必須是一個不包含空格的字。更精確地說,MATLAB變數命名原則如下:
變數命名原則 註解和範例
變數名稱是case-sensitive Cost, cost, CoSt和COST是完全不一樣的MATLAB變數
變數名稱可以包含至多31個字元。任何字元只要超過第31個則會被忽略 Howaboutthisvariablename
變數名稱必須始於英文字母,緊隨著任何數目的字母、數字或底線。標點符號字元不被允許因為在MATLAB中,它們大多有特殊定義 How_about_this_variable_name
X51483
a_b_c_d_e
對於以上的命名原則有一些特例。MATLAB有一些名字是不能用來當作變數的。這些名字形成了MATLAB的keyword(關鍵字)或是reserved word list(保留字列表)。
保留字列表
For end if while function return elseif case otherwise switch continue else try catch global persistent break
如果你將保留字當作是變數的話,MATLAB會呈報錯誤。不過,你可以使用相似於保留字的字,比如將一個字母或數個字母大寫。
此外,就如同你的計算機中儲存了像 這種常數,MATLAB也有一些特殊的變數:
| 特殊變數 | 描述 |
| ans | 結果的預設變數名稱 |
| beep | 使電腦發出嗶嗶聲 |
| pi | 圓周率 |
| eps | 使得加上1會大於1的最小數目 |
| inf | 代表無窮,例如1/0 |
| NaN (or)nan | 代表 Not-a-Number,例如0/0 |
| i (or) j | 代表虛數 |
| nargin | 函式的輸入引數個數 |
| nargout | 函式的輸出引數個數 |
| realmin | 最小可用的正實數 |
| realmax | 最大可用的正實數 |
| bitmax | 最大可用的正整數 |
| varargin | 輸入引數 |
| vararout | 輸出引數 |
如果你重覆使用一個像在之前例子中tape的變數,或者是指定一個值到以上所說的特殊變數,則它之前的值會被覆寫且遺失。不過,任何其它的計算式則不會改變先前原有的值。考慮以下的例子:
>>erasers=4;
>>pads=6;
>>tape=2;
>>items=erasers+pads+tape
items =
12
>>erasers=6
erasers =
6
>>items
items =
12
在此,再次使用第一個範例,我們求出Mary購買的物品件數。然後,我們將橡皮擦erasers的數目改變為6,覆寫了它先前的值4。這麼做之後,items的值還是沒變。不像一般的試算表程式,MATLAB並不會根據erasers的新值重新計算items的值。每當MATLAB計算時,它使用的變數值是它在指令執行的那個時點所知的值。在上例中,如果你希望重新計算item的數目、總花費和平均花費,則需要重新叫用適當的MATLAB指令並且要求MATLAB再次計算它們。
上述的特殊變數也遵守此原則,除了特殊變數的特定值是可以被復原的。當你啟動MATLAB,特殊變數就具有預設值了;當你改變它們的值,原有的特定值會遺失。要恢復它們的預設值,你所需要做的就是clear覆寫的值。舉例來說:
>> pi
ans =
3.1416
>> pi=1.23e-4
pi =
1.2300e-004
>> clear pi
>> pi
ans =
3.1416
這說明了pi 具有特定值.1416精確到第五位小數點,它被1.23e-4這個值覆寫,然後,在使用clear來清除之後,它又回復了其原有預設值。
2.4 註解、標點符號和中斷執行
如同我們之前所見到的,在指令之後加上一個分號會抑制印出計算好的結果。這個特性在抑制中間計算的結果時特別有用。舉例來說:
>>erasers
erasers =
6
>>items = erasers+pads+tape;
>>cost = erasers*25+pads*52+tape*99;
>>average_cost=cost/items
average_cost=
47.143
顯示出當瑪莉購買了6個eraser而非原來的4個時,每個item的平均花費(average_cost)。中間運算的結果值items和cost並沒有被印出來,因為在定義它們的指令之後有加上分號。
除了分號之外,MATLAB還使用了其它的標點符號。在百分比符號(%)之後的所有文字都會被認為是註解,例如:
>> tape=2 % number of rolls of tapes purchased
變數tape的值被設為2,MATLAB忽略了百分比符號之後的文字。
數個指令可以被放置於同一行如果它們由逗號或分號分隔,例如:
>> erasers=6,pads=6;tape=2
erasers =
6
tape =
2
逗號告訴MATLAB要顯示出結果;分號則抑制MATLAB顯示結果。
有時表示式或指令可能太長,以致於必須寫到另外一行以方便表示。在MATLAB中,連續的陳述式以三個連續的英文句點來表示,例如:
>> average_cost = cost / items %command as done earlier
average_cost =
47.143
>> average_cost = cost / … %command as done earlier
items
average_cost =
47.143
>> average_cost = cost … %command as done earlier
/items
average_cost =
47.143
>> average_cost = cost /it … %command as done earlier
ems
??? average_cost =cost / items
Missing operator, comma, or semi-colon
或是出現
??? ems
|
Error: Missing operator, comma, or semicolon.
(在此,不同版本的錯誤訊息可能不同)
如上所示,如果連續的三個句號出現在變數名稱和數學運算子之間的話,陳述示是有作用的,但是三個句號不能出現在變數名稱的中間。也就是說,變數名稱不能被分成二行。此外,因為註解會被忽略,所以它們也不能是連續的,例如:
>> % Comments cannot be continued...
>> either
??? Undefined function or variable 'either'.
在這個例子當中,在註解中的 … 是註解的一部份而不會由MATLAB來加以處理。
最後,MATLAB的處理可以藉由按下Control-C(同時按下Ctrl和C鍵)在任何時候被中斷。
2.5複數 COMPLEX NUMBERS
MATLAB最強大的特性之一就是:它不需要特別的處理就能加以運算複數。
複數在MATLB中以數種方式構成。舉例來說明複數:
>> c1=1-2i %附加的 i 表示虛數
c1 =
1.0000 - 2.0000i
>> c1=1-2j %j 也是一樣代表虛數
c1 =
1.0000 - 2.0000i
>> c2=3*(2-sqrt(-1)*3)
c2 =
6.0000 - 9.0000i
>> c3=sqrt(-2)
c3 =
0 + 1.4142i
>> c4=6+sin(.5)*i
c4 =
6.0000 + 0.4794i
>> c5=6+sin(.5)*j
c5 =
6.0000 + 0.4794i
在最後的二個例子中,MATLAB的預設值i=j= 被用來構成虛部。在此例中,乘i或j需要有乘號,因為在MATLAB中sin(.5) i或是in(.5) j是沒有意義的。以上頭最前二個例子來說明,在等號右方的數值部份以字元i或j來終止才有用,而在等號右方的表示式以字元i或j來終止就沒有作用了。
一些程式語言需要對複數作特殊的處理。在MATLAB中,並不需要特殊的處理。複數上的數學運算已經和實數一樣了:
>> c6=(c1+c2)/c3 %利用上方例子的數據
c6 =
-7.7782 - 4.9497i
>> c6r=real(c6)
c6r =
-7.7782
>> c6i=imag(c6)
c6i =
-4.9497
>> check_it_out = i^2 %sqrt(-1) 的平方必須是 -1!
check_it_out =
-1
一般來說,複數上的運算結果應該還是會是複數。不過從上頭的最後一個例子可以看出:MATLAB聰明得可以捨去結果中為零的虛部。此外,上頭也說明了函式real和imag可以分別取出複數的實部和虛部。
我們考慮以Euler (聽起來像oiler)identity 來作為複數的最後一個算術例,Euler identity將複數polar form和rectangle form = a+bj的關係建立,其中polar form的參數有大小強度M和角度 ,而給定的角度的型式是 。其中它們的關係為 , , , 。
在MATLAB裡,極座標與直角座標的轉換是利用real, imag, abs 和angle函式來達成。
>> c1
c1 =
1.0000 - 2.0000i
>> mag_c1=abs(c1) %magnitude(強度大小)
mag_c1 =
2.2361
>> angle_c1=angle(c1) %angle in radians(以弳度表示)
angle_c1 =
-1.1071
>> deg_c1=angle_c1*180 / pi %angle in degrees(以角度表示)
deg_c1 =
-63.4349
>> real_c1=real(c1) %實部
real_c1 =
1
>> imag_c1=imag(c1) %虛部
imag_c1 =
-2
MATLAB函式abs根據你給它的資料是什麼,會計算出複數強度的大小或是實數的絕對值。同樣的,函式angle會以弳度為單位來計算出複數的角度。MATLAB並不使用角度來作為三角運算的單位。
2.6 浮點算術運算
幾乎所有在MATLAB裡的數值都是以雙精度表示,在內部則是以二元(以二為底)表示法。二元表示法是電腦最常用的表示法,對於共同數值處理也是最自然的型式。這種表示法使得不是所有的數字都能被精確地被表示,它們能表示的值有限。且對於加法來說,能表示的值被認為更有限。
最大正數可以表示如下:
>> format long %告訴MATLAB顯示更大的精度
>> realmax
ans =
1.797693134862316e+308
最小正數可以表示如下:
>> realmin
ans =
2.225073858507201e-308
加1之後會產生大於手的最小數字以雙精度表示是:
>> eps
ans =
2.220446049250313e-016
有限精度限制的結果有時會有點怪。舉例來說,加法並非精確的累加。
>> 0.42-0.5+0.08
ans =
-1.387778780781446e-017
>> 0.08-0.5+0.42
ans =
0
>> 0.08+0.42-0.5
ans =
0
以上三個例子的結果都應該為0,但是它們都不是。在每個例子中所執行的算術運算都是由左至右。發生此種情形的原因是因為並非所有的數字都用雙精度來表示。事實上,只冇05有精確的表示。當數字不能精準地被表示,它們會儘可能近似地較精準-導致計算結果中不可避免的誤差。最重要的是,這些誤差非常小或在現今電腦中不會被用到。實際上,這些雙精度計算問題大都在MATLAB計算二個值是否相等時發生。顯然地,以MATLAB計算的話0.42-0.5+0.08並不等於0.08-0.5+0.42,即使用我們的大腦來計算,我們知道此二式確實相等。
有限精度算術運算的第二個影響在函式的估計時會顯示。除了不總是能夠精準地表示出函式的引數之外,大多數的函式本身也不能精確地被表示,舉例來說,
>> sin(0)
ans =
0
>> sin(pi)
ans =
1.224646799147353e-016
在此二個結果都應該是0,不過 卻不是。注意,有趣的是在此的誤差和之前例子的誤差都小於eps。
最後,MATLAB也使用雙精度浮點數來表示整數。用這種表示法,所有的整數直到上限都可以被精確地表示。上限值為:
>> bitmax
ans =
9.007199254740991e+015
這個值也就是 。
2.7 數學函式
下表中列出了MATLAB支援的一般函式。這些函式大多數都和它們的數學寫法相同:
>> x=sqrt(2)/2
x =
0.7071
>> y=asin(x)
y =
0.7854
>> y_deg=y*180/pi
y_deg =
45.0000
這些指令找到sin函數值為的 的角度。再次注意到MATLAB使用的是弳度。另一個例子如下:
>> y=sqrt(3^2+4^2) %3-4-5直角三角形的邊長關係
y =
5
>> y=rem(23,4) %餘數函式,23/4的餘數為3
y =
3
>> x=2.6, y1=fix(x), y2=floor(x), y3=ceil(x), y4=round(x)
x =
2.6000
y1 =
2
y2 =
2
y3 =
3
y4 =
3
| 三角函式 | 函式意義 |
| acos | Inverse cosine (反正弦函式) |
| acosh | Inverse hyperbolic cosine |
| acot | Inverse cotangent |
| acoth | Inverse hyperbolic cotangen |
| acsc | Inverse cosecant |
| acsch | Inverse hyperbolic |
| asec | Inverse secant |
| asech | Inverse hyperbolic secant |
| asin | Inverse sine |
| asinh | Inverse hyperbolic sine |
| atan | Inverse tangent |
| atan2 | Four quadrant inverse tangent |
| atanh | Inverse hyperbolic tangent |
| cos | Cosine |
| cosh | Hyperbolic cosine |
| cot | Cotangent |
| coth | Hyperbolic cotangent |
| csc | Cosecant |
| csch | Hyperbolic cosecant |
| sec | Secant |
| sech | Hyperbolic secant |
| sin | Sine |
| sinh | Hyperbolic sine |
| tan | Tangent |
| tanh | Hyperbolic tangent |
| 指數函式 | 函式描述 |
| ^ | Power |
| Exp | 指數 |
| Log | 自然對數 |
| Log10 | 以10為底的對數 |
| Log2 | 以2為底的對數 |
| Pow2 | 以2為底的乘冪 |
| Sqrt | 根號開方 |
| Nextpow2 | Next higher power of 2 |
| 複數函式 | 函式描述 |
| Abs | 絕對值 |
| Angle | Phase angle |
| Conj | 複數共軛 |
| Imag | 虛部 |
| Real | 實部 |
| Unwrap | Unwrap phase angle |
| Isreal | 如果是實數則為真 |
| Cplxpair | Sort numbers into complex conjugate pairs |
| Complex | 從實部和虛部形成複數 |
| 四捨五入和餘數函式 函式描述 | |
| Fix | Round to zero |
| Floor | Round toward negative infinity |
| Ceil | Round toward positive infinity |
| Round | Round toward nearest integer |
| Mod | Modulus or signed remainder |
| Rem | Remainder after division |
| sign | Signum function |
| 座標轉換函式 | 函式描述 |
| Cart2sph | 苗卡兒座標到球座標 |
| Cartpol | Cartesian ot cylindrical or polar |
| Pol2cart | Cylindrical or polar to Cartesian |
| Sph2cart | Spherical to Cartesian |
| 數學理論相關函式 | 函式描述 |
| Factor | Prime factors |
| Isprime | True for prime numbers |
| Primes | Generate list of prime numbers |
| Gcd | 最大公因數 |
| Lcm | 最小公倍數 |
| Rat | Rational approximation |
| Rats | Rational output |
| Perms | 所有可能的組合 |
| nchoosek | N個元素一次取K個的所有組合數 |
| 特殊函式 | 函式描述 |
| Airy | Airy function |
| Besselj | Bessel function of the first kind |
| Bessely | Bessel function of the second kind |
| Besselh | Bessel function of the third kind |
| Besseli | Modified Bessel function of the first kind |
| Besselk | Modified Bessel function of the second kind |
| Beta | Beta函式 |
| Betainc | Incomplete beta function |
| Betaln | Logarithm of beta function |
| Ellipj | Jacobi elliptic function |
| Ellipke | Complete elliptic integral |
| Erf | Error function |
| Erfc | Complementary error function |
| Erfcx | Scaled complementary error function |
| Erfinv | Inverse error function |
| Expint | Exponential error function |
| Gamma | Gamma函式 |
| Gammainc | Incomplete gamma function |
| Gammaln | Logarithm of gamma function |
| Legendre | Associated Legendre function |
| Cross | 向量外積 |
| dot | 向量內積 |























