MATLAB_程序設(shè)計與應(yīng)用經(jīng)典教程32047new_第1頁
MATLAB_程序設(shè)計與應(yīng)用經(jīng)典教程32047new_第2頁
MATLAB_程序設(shè)計與應(yīng)用經(jīng)典教程32047new_第3頁
MATLAB_程序設(shè)計與應(yīng)用經(jīng)典教程32047new_第4頁
MATLAB_程序設(shè)計與應(yīng)用經(jīng)典教程32047new_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、MATLAB 程序設(shè)計與應(yīng)用 1.1 基本運算與函數(shù)在MATLAB下進(jìn)行基本數(shù)學(xué)運算,只需將運算式直接打入提示號()之後,并按入Enter鍵即可。例如: (5*2+1.3-0.8)*10/25 ans = 4.2000 MATLAB會將運算結(jié)果直接存入一變量ans,代表MATLAB運算後的答案(Answer),并顯示其數(shù)值于屏幕上。(為簡便起見,在下述各例中,不再印出MATLAB的提示號。) 小提示: 是MATLAB的提示符號(Prompt),但在PC中文視窗系統(tǒng)下,由于編碼方式不同,此提示符號常會消失不見,但這并不會影響到MATLAB的運算結(jié)果。 我們也可將上述運算式的結(jié)果設(shè)定給另一個變量x

2、: x = (5*2+1.3-0.8)*102/25 x = 42 此時MATLAB會直接顯示x的值。由上例可知,MATLAB認(rèn)識所有一般常用到的加(+)、減(-)、乘(*)、除(/)的數(shù)學(xué)運算符號,以及冪次運算()。 小提示: MATLAB將所有變量均存成double的形式,所以不需經(jīng)過變量宣告(Variable declaration)。MATLAB同時也會自動進(jìn)行記憶體的使用和回收,而不必像C語言,必須由使用者一一指定。這些功能使的MATLAB易學(xué)易用,使用者可專心致力于撰寫程序,而不必被軟體枝節(jié)問題所干擾。 若不想讓MATLAB每次都顯示運算結(jié)果,只需在運算式最后加上分號(;)即可,如

3、下例: y = sin(10)*exp(-0.3*42); 若要顯示變量y的值,直接鍵入y即可: y y = -0.0045 在上例中,sin是正弦函數(shù),exp是指數(shù)函數(shù),這些都是MATLAB常用到的數(shù)學(xué)函數(shù)。下表即為MATLAB常用的基本數(shù)學(xué)函數(shù)及三角函數(shù): 小整理:MATLAB常用的基本數(shù)學(xué)函數(shù) abs(x):純量的絕對值或向量的長度 angle(z):復(fù)數(shù)z的相角(Phase angle) sqrt(x):開平方 real(z):復(fù)數(shù)z的實部 imag(z):復(fù)數(shù)z的虛部 conj(z):復(fù)數(shù)z的共軛復(fù)數(shù) round(x):四舍五入至最近整數(shù) fix(x):無論正負(fù),舍去小數(shù)至最近整數(shù)

4、floor(x):地板函數(shù),即舍去正小數(shù)至最近整數(shù) ceil(x):天花板函數(shù),即加入正小數(shù)至最近整數(shù) rat(x):將實數(shù)x化為分?jǐn)?shù)表示 rats(x):將實數(shù)x化為多項分?jǐn)?shù)展開 sign(x):符號函數(shù) (Signum function)。 當(dāng)x0時,sign(x)=1。 rem(x,y):求x除以y的余數(shù) gcd(x,y):整數(shù)x和y的最大公因數(shù) lcm(x,y):整數(shù)x和y的最小公倍數(shù) exp(x):自然指數(shù) pow2(x):2的指數(shù) log(x):以e為底的對數(shù),即自然對數(shù)或 log2(x):以2為底的對數(shù) log10(x):以10為底的對數(shù) 小整理:MATLAB常用的三角函數(shù) si

5、n(x):正弦函數(shù) cos(x):馀弦函數(shù) tan(x):正切函數(shù) asin(x):反正弦函數(shù) acos(x):反馀弦函數(shù) atan(x):反正切函數(shù) atan2(x,y):四象限的反正切函數(shù) sinh(x):超越正弦函數(shù) cosh(x):超越馀弦函數(shù) tanh(x):超越正切函數(shù) asinh(x):反超越正弦函數(shù) acosh(x):反超越馀弦函數(shù) atanh(x):反超越正切函數(shù) 變量也可用來存放向量或矩陣,并進(jìn)行各種運算,如下例的列向量(Row vector)運算:x = 1 3 5 2; y = 2*x+1 y = 3 7 11 5 小提示:變量命名的規(guī)則 1. 第一個字母必須是英文字母

6、 2. 字母間不可留空格 3. 最多只能有19個字母,MATLAB會忽略多于字母 我們可以隨意更改、增加或刪除向量的元素:y(3) = 2 % 更改第三個元素 y = 3 7 2 5 y(6) = 10 % 加入第六個元素 y = 3 7 2 5 0 10 y(4) = % 刪除第四個元素, y = 3 7 2 0 10 在上例中,MATLAB會忽略所有在百分比符號(%)之後的文字,因此百分比之後的文字均可視為程序的注解(Comments)。MATLAB亦可取出向量的一個元素或一部份來做運算: x(2)*3+y(4) % 取出x的第二個元素和y的第四個元素來做運算 ans = 9 y(2:4)

7、-1 % 取出y的第二至第四個元素來做運算 ans = 6 1 -1 在上例中,2:4代表一個由2、3、4組成的向量,同樣的方法可用于產(chǎn)生公差為1的等差數(shù)列: x = 7:16 x = 7 8 9 10 11 12 13 14 15 16 若不希望公差為1,則可將所需公差直接至于4與13之間: x = 7:3:16 % 公差為3的等差數(shù)列 x = 7 10 13 16 事實上,我們可利用linspace來產(chǎn)生任意的等差數(shù)列: x = linspace(4, 10, 6) % 等差數(shù)列:首項為4,末項為10,項數(shù)為6 x = 4.0000 5.2000 6.4000 7.6000 8.8000

8、10.0000 若對MATLAB函數(shù)用法有疑問,可隨時使用help來尋求線上支援(on-line help):help linspace LINSPACE Linearly spaced vector. LINSPACE(x1, x2) generates a row vector of 100 linearly equally spaced points between x1 and x2. LINSPACE(x1, x2, N) generates N points between x1 and x2. See also LOGSPACE, :. 小整理:MATLAB的查詢命令 help:

9、用來查詢已知命令的用法。例如已知inv是用來計算反矩陣,鍵入help inv即可得知有關(guān)inv命令的用法。(鍵入help help則顯示help的用法,請試看看?。?lookfor:用來尋找未知的命令。例如要尋找計算反矩陣的命令,可鍵入lookfor inverse,MATLAB即會列出所有和關(guān)鍵字inverse相關(guān)的指令。找到所需的命令後,即可用help進(jìn)一步找出其用法。(lookfor事實上是對所有在搜尋路徑下的M檔案進(jìn)行關(guān)鍵字對第一注解行的比對,詳見後敘。) 將列向量轉(zhuǎn)置(Transpose)后,即可得到行向量(Column vector): z = x z = 4.0000 5.200

10、0 6.4000 7.6000 8.8000 10.0000 不論是行向量或列向量,我們均可用相同的函數(shù)找出其元素個數(shù)、最大值、最小值等: length(z) % z的元素個數(shù) ans = 6 max(z) % z的最大值 ans = 10 min(z) % z的最小值 ans = 4 小整理:適用于向量的常用函數(shù)有: min(x): 向量x的元素的最小值 max(x): 向量x的元素的最大值 mean(x): 向量x的元素的平均值 median(x): 向量x的元素的中位數(shù) std(x): 向量x的元素的標(biāo)準(zhǔn)差 diff(x): 向量x的相鄰元素的差 sort(x): 對向量x的元素進(jìn)行排序

11、(Sorting) length(x): 向量x的元素個數(shù) norm(x): 向量x的歐氏(Euclidean)長度 sum(x): 向量x的元素總和 prod(x): 向量x的元素總乘積 cumsum(x): 向量x的累計元素總和 cumprod(x): 向量x的累計元素總乘積 dot(x, y): 向量x和y的內(nèi)積 cross(x, y): 向量x和y的外積 (大部份的向量函數(shù)也可適用于矩陣,詳見下述。) 若要輸入矩陣,則必須在每一列結(jié)尾加上分號(;),如下例: A = 1 2 3 4; 5 6 7 8; 9 10 11 12; A A = 1 2 3 4 5 6 7 8 9 10 11

12、12 同樣地,我們可以對矩陣進(jìn)行各種處理:A(2,3) = 5 % 改變位于第二列,第三行的元素值 A = 1 2 3 4 5 6 5 8 9 10 11 12 B = A(2,1:3) % 取出部份矩陣B B = 5 6 5 A = A B % 將B轉(zhuǎn)置後以行向量并入A A = 1 2 3 4 5 5 6 5 8 6 9 10 11 12 5 A(:, 2) = % 刪除第二行(:代表所有列) A = 1 3 4 5 5 5 8 6 9 11 12 5 A = A; 4 3 2 1 % 加入第四列 A = 1 3 4 5 5 5 8 6 9 11 12 5 4 3 2 1 A(1 4, :)

13、 = % 刪除第一和第四列(:代表所有行) A = 5 5 8 6 9 11 12 5 這幾種矩陣處理的方式可以相互疊代運用,產(chǎn)生各種意想不到的效果,就看各位的巧思和創(chuàng)意。 小提示: 在MATLAB的內(nèi)部資料結(jié)構(gòu)中,每一個矩陣都是一個以行為主(Column-oriented)的陣列(Array)因此對于矩陣元素的存取,我們可用一維或二維的索引(Index)來定址。舉例來說,在上述矩陣A中,位于第二列、第三行的元素可寫為A(2,3) (二維索引)或A(6)(一維索引,即將所有直行進(jìn)行堆疊後的第六個元素)。 此外,若要重新安排矩陣的形狀,可用reshape命令: B = reshape(A, 4,

14、 2) % 4是新矩陣的列數(shù),2是新矩陣的行數(shù) B = 5 8 9 12 5 6 11 5 小提示: A(:)就是將矩陣A每一列堆疊起來,成為一個行向量,而這也是MATLAB變量的內(nèi)部儲存方式。以前例而言,reshape(A, 8, 1)和A(:)同樣都會產(chǎn)生一個8x1的矩陣。 MATLAB可以同時執(zhí)行數(shù)個命令,只要以逗號或分號將命令隔開: x = sin(pi/3); y = x2; z = y*10, z = 7.5000 若一個數(shù)學(xué)運算是太長,可用三個句點將其延伸到下一行: z = 10*sin(pi/3)* . sin(pi/3); 若要查看現(xiàn)存于工作空間(Workspace)的變量,

15、可鍵入who: who Your variables are:testfile x 這些是由使用者定義的變量。若要知道這些變量的詳細(xì)資料,可鍵入: whos Name Size Bytes ClassA 2x4 64 double array B 4x2 64 double array ans 1x1 8 double array x 1x1 8 double array y 1x1 8 double array z 1x1 8 double arrayGrand total is 20 elements using 160 bytes 使用clear可以刪除工作空間的變量: clear A

16、A ? Undefined function or variable A. 另外MATLAB有些永久常數(shù)(Permanent constants),雖然在工作空間中看不 到,但使用者可直接取用,例如: pi ans = 3.1416 下表即為MATLAB常用到的永久常數(shù)。 小整理:MATLAB的永久常數(shù) i或j:基本虛數(shù)單位(即) eps:系統(tǒng)的浮點(Floating-point)精確度 inf:無限大, 例如1/0 nan或NaN:非數(shù)值(Not a number),例如0/0 pi:圓周率 p(= 3.1415926.) realmax:系統(tǒng)所能表示的最大數(shù)值 realmin:系統(tǒng)所能表示

17、的最小數(shù)值 nargin: 函數(shù)的輸入引數(shù)個數(shù) nargin: 函數(shù)的輸出引數(shù)個數(shù) 1.2 重復(fù)命令 最簡單的重復(fù)命令是for,其基本形式為: for 變量 = 矩陣; 運算式; end其中變量的值會被依次設(shè)定為矩陣的每一行,來執(zhí)行介于for和end之間的運算式。因此,若無意外情況,運算式執(zhí)行的次數(shù)會等于矩陣的行數(shù)。 舉例來說,下列命令會產(chǎn)生一個長度為6的調(diào)和數(shù)列(Harmonic sequence):x = zeros(1,6); % x是一個16的零矩陣 for i = 1:6, x(i) = 1/i; end 在上例中,矩陣x最初是一個16的零矩陣,在for語句中,變量i的值依次是1到6

18、,因此矩陣x的第i個元素的值依次被設(shè)為1/i。我們可用分?jǐn)?shù)來顯示此數(shù)列: format rat % 使用分?jǐn)?shù)來表示數(shù)值 disp(x) 1 1/2 1/3 1/4 1/5 1/6 for循環(huán)可以是多層的,下例產(chǎn)生一個16的Hilbert矩陣h,其中為于第i列、第j行的元素為: h = zeros(6); for i = 1:6, for j = 1:6, h(i,j) = 1/(i+j-1); end end disp(h) 1 1/2 1/3 1/4 1/5 1/6 1/2 1/3 1/4 1/5 1/6 1/7 1/3 1/4 1/5 1/6 1/7 1/8 1/4 1/5 1/6 1/7

19、 1/8 1/9 1/5 1/6 1/7 1/8 1/9 1/10 1/6 1/7 1/8 1/9 1/10 1/11 小提示:預(yù)先配置矩陣 在上面的例子,我們使用zeros來預(yù)先配置(Allocate)了一個適當(dāng)大小的矩陣。若不預(yù)先配置矩陣,程序仍可執(zhí)行,但此時MATLAB需要動態(tài)地增加(或減?。┚仃嚨拇笮?,因而降低程序的執(zhí)行效率。所以在使用一個矩陣時,若能在事前知道其大小,則最好先使用zeros或ones等命令來預(yù)先配置所需的記憶體(即矩陣)大小。 在下例中,for循環(huán)列出先前產(chǎn)生的Hilbert矩陣的每一行的平方和: for i = h, disp(norm(i)2); % 印出每一行的

20、平方和 end 1299/871 282/551 650/2343 524/2933 559/4431 831/8801 在上例中,每一次i的值就是矩陣h的一行,所以寫出來的命令特別簡潔。 另一個常用到的重復(fù)命令是while循環(huán),其基本形式為: while 條件式; 運算式; end也就是說,只要條件示成立,運算式就會一再被執(zhí)行。例如先前產(chǎn)生調(diào)和數(shù)列的例子,我們可用while圈改寫如下: x = zeros(1,6); % x是一個16的零矩陣 i = 1; while i 0.5, disp(Given random number is greater than 0.5.); end Giv

21、en random number is greater than 0.5. 1.4 資料的儲存與載入 有些計算曠日廢時,那么我們通常希望能將計算所得的儲存在檔案中,以便將來可進(jìn)行其他處理。MATLAB儲存變量的基本命令是save,在不加任何選項(Options)時,save會將變量以二進(jìn)制(Binary)的方式儲存至副檔名為mat的檔案,如下述: l save:將工作空間的所有變量儲存到名為matlab.mat的二進(jìn)制檔案。 l save filename:將工作空間的所有變量儲存到名為filename.mat的二進(jìn)制檔案。 l save filename x y z:將變量x、y、z儲存到名

22、為filename.mat的二進(jìn)制檔案。 以下為使用save命令的一個簡例: who % 列出工作空間的變量 Your variables are:B h j y ans i x z save test B y % 將變量B與y儲存至test.mat dir % 列出現(xiàn)在目錄中的檔案 . 2plotxy.doc fact.m simulink.doc test.m $1basic.doc . 3plotxyz.doc first.doc temp.doc test.mat 1basic.doc book.dot go.m template.doc testfile.dat delete tes

23、t.mat % 刪除test.mat 以二進(jìn)制的方式儲存變量,通常檔案會比較小,而且在載入時速度較快,但是就無法用普通的文書軟體(例如pe2或記事本)看到檔案內(nèi)容。若想看到檔案內(nèi)容,則必須加上-ascii選項,詳見下述: l save filename x -ascii:將變量x以八位數(shù)存到名為filename的ASCII檔案。 l save filename x -ascii -double:將變量x以十六位數(shù)存到名為filename的ASCII檔案。 另一個選項是-tab,可將同一列相鄰的數(shù)目以定位鍵(Tab)隔開。 小提示:二進(jìn)制和ASCII檔案的比較 在save命令使用-ascii選項後,會有下列現(xiàn)象: save命令就不會在檔案名稱後加上mat的副檔名。因此以副檔名mat結(jié)尾的檔案通常是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論