MATLAB入門基礎(chǔ)經(jīng)典總結(jié)_第1頁
MATLAB入門基礎(chǔ)經(jīng)典總結(jié)_第2頁
MATLAB入門基礎(chǔ)經(jīng)典總結(jié)_第3頁
MATLAB入門基礎(chǔ)經(jīng)典總結(jié)_第4頁
MATLAB入門基礎(chǔ)經(jīng)典總結(jié)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1MATLAB的基本知識1-1、基本運算與函數(shù)在MATLAB下進行基本數(shù)學(xué)運算,只需將運算式直接打入提示號()之後,并按入Enter鍵即可。例如: (5*2+1.3-0.8)*10/25ans =4.2000MATLAB會將運算結(jié)果直接存入一變數(shù)ans,代表MATLAB運算後的答案(Answer)并顯示其數(shù)值於螢?zāi)簧?。小提示?是MATLAB的提示符號(Prompt),但在PC中文視窗系統(tǒng)下,由於編碼方式不同,此提示符號常會消失不見,但這并不會影響到MATLAB的運算結(jié)果。我們也可將上述運算式的結(jié)果設(shè)定給另一個變數(shù)x:x = (5*2+1.3-0.8)*102/25x = 42此時MATLAB

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

3、:yy =-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ù)floor(x):地板函數(shù),即舍去正小數(shù)至最近整數(shù)ceil(x):天花板函數(shù),即加入正小數(shù)至最近整數(shù)rat(x):將實

4、數(shù)x化為分?jǐn)?shù)表示rats(x):將實數(shù)x化為多項分?jǐn)?shù)展開sign(x):符號函數(shù) (Signum function)。當(dāng)x0時,sign(x)=1。 小整理:MATLAB常用的三角函數(shù)sin(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ù)變數(shù)也可用來存放向量或矩陣,并進行各種運算,如下例的

5、列向量(Row vector)運算:x = 1 3 5 2;y = 2*x+1y = 3 7 11 5小提示:變數(shù)命名的規(guī)則1.第一個字母必須是英文字母 2.字母間不可留空格 3.最多只能有19個字母,MATLAB會忽略多馀字母 我們可以隨意更改、增加或刪除向量的元素:y(3) = 2 % 更改第三個元素y =3 7 2 5y(6) = 10 % 加入第六個元素y = 3 7 2 5 0 10y(4) = % 刪除第四個元素,y = 3 7 2 0 10在上例中,MATLAB會忽略所有在百分比符號(%)之後的文字,因此百分比之後的文字均可視為程式的注解(Comments)。MATLAB亦可取出

6、向量的一個元素或一部份來做運算:x(2)*3+y(4) % 取出x的第二個元素和y的第四個元素來做運算ans = 9y(2:4)-1 % 取出y的第二至第四個元素來做運算ans = 6 1 -1在上例中,2:4代表一個由2、3、4組成的向量若對MATLAB函數(shù)用法有疑問,可隨時使用help來尋求線上支援(on-line help):helplinspace小整理:MATLAB的查詢命令help:用來查詢已知命令的用法。例如已知inv是用來計算反矩陣,鍵入help inv即可得知有關(guān)inv命令的用法。(鍵入help help則顯示help的用法,請試看看?。?lookfor:用來尋找未知的命令。

7、例如要尋找計算反矩陣的命令,可鍵入 lookfor inverse,MATLAB即會列出所有和關(guān)鍵字inverse相關(guān)的指令。找到所需的命令後 ,即可用help進一步找出其用法。(lookfor事實上是對所有在搜尋路徑下的M檔案進行關(guān)鍵字對第一注解行的比對,詳見後敘。)將行向量轉(zhuǎn)置(Transpose)後,即可得到列向量(Column vector):z = xz = 4.0000 5.2000 6.4000 7.6000 8.8000 10.0000不論是行向量或列向量,我們均可用相同的函數(shù)找出其元素個數(shù)、最大值、最小值等:length(z) % z的元素個數(shù)ans = 6max(z) %

8、z的最大值ans = 10min(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的元素進行排序(Sorting)length(x): 向量x的元素個數(shù)norm(x): 向量x的歐氏(Euclidean)長度sum(x): 向量x的元素總和prod(x): 向量x的元素總乘積cumsum(x): 向量x的累計元素總和cumpro

9、d(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 1011 12;A =1 2 345 6 789 10 11 12同樣地,我們可以對矩陣進行各種處理:A(2,3) = 5 % 改變位於第二列,第三行的元素值A(chǔ) =1 2 345 6 589 10 11 12B = A(2,1:3) % 取出部份矩陣BB = 5 6 5A = A B % 將B轉(zhuǎn)置後以列向量并入AA =1 2 34

10、 55 6 58 69 10 11 125A(:, 2) = % 刪除第二行(:代表所有列)A =1 3 455 5 869 11 12 5 A = A; 4 3 2 1 % 加入第四列A =1 3 455 5 869 11 1254 3 21A(1 4, :) = % 刪除第一和第四列(:代表所有行)A =5 5 869 11 125這幾種矩陣處理的方式可以相互疊代運用,產(chǎn)生各種意想不到的效果,就看各位的巧思和創(chuàng)意。小提示:在MATLAB的內(nèi)部資料結(jié)構(gòu)中,每一個矩陣都是一個以行為主(Column-oriented )的陣列(Array)因此對於矩陣元素的存取,我們可用一維或二維的索引(Ind

11、ex)來定址。舉例來說,在上述矩陣A中,位於第二列、第三行的元素可寫為A(2,3) (二維索引)或A(6)(一維索引,即將所有直行進行堆疊後的第六個元素)。此外,若要重新安排矩陣的形狀,可用reshape命令:B = reshape(A, 4, 2) % 4是新矩陣的行數(shù),2是新矩陣的列數(shù)B =5 89 125 6 11 5小提示: A(:)就是將矩陣A每一行堆疊起來,成為一個列向量,而這也是MATLAB變數(shù)的內(nèi)部儲存方式。以前例而言,reshape(A, 8, 1)和A(:)同樣都會產(chǎn)生一個8x1的矩陣。MATLAB可在同時執(zhí)行數(shù)個命令,只要以逗號或分號將命令隔開:x = sin(pi/3)

12、; y = x2; z = y*10,z =7.5000若一個數(shù)學(xué)運算是太長,可用三個句點將其延伸到下一行:z = 10*sin(pi/3)* .sin(pi/3);若要檢視現(xiàn)存於工作空間(Workspace)的變數(shù),可鍵入who:whoYour variables are:testfile x這些是由使用者定義的變數(shù)。若要知道這些變數(shù)的詳細(xì)資料,可鍵入:whosName Size Bytes ClassA 2x4 64 double arrayB 4x2 64 double arrayans 1x1 8 double arrayx 1x1 8 double arrayy 1x1 8 doub

13、le arrayz 1x1 8 double arrayGrand total is 20 elements using 160 bytes使用clear可以刪除工作空間的變數(shù):clear AA? Undefined function or variable A.另外MATLAB有些永久常數(shù)(Permanent constants),雖然在工作空間中看不 到,但使用者可直接取用,例如:pians = 3.1416下表即為MATLAB常用到的永久常數(shù)。小整理:MATLAB的永久常數(shù) i或j:基本虛數(shù)單位eps:系統(tǒng)的浮點(Floating-point)精確度inf:無限大, 例如1/0 nan或

14、NaN:非數(shù)值(Not a number) ,例如0/0pi:圓周率 p(= 3.1415926.)realmax:系統(tǒng)所能表示的最大數(shù)值realmin:系統(tǒng)所能表示的最小數(shù)值nargin: 函數(shù)的輸入引數(shù)個數(shù)nargin: 函數(shù)的輸出引數(shù)個數(shù)1-2、重復(fù)命令 最簡單的重復(fù)命令是for圈(for-loop),其基本形式為:for 變數(shù) = 矩陣;運算式;end其中變數(shù)的值會被依次設(shè)定為矩陣的每一行,來執(zhí)行介於for和end之間的運算式。因此,若無意外情況,運算式執(zhí)行的次數(shù)會等於矩陣的行數(shù)。舉例來說,下列命令會產(chǎn)生一個長度為6的調(diào)和數(shù)列(Harmonic sequence):x = zeros(

15、1,6); % x是一個16的零矩陣for i = 1:6,x(i) = 1/i;end 在上例中,矩陣x最初是一個16的零矩陣,在for圈中,變數(shù)i的值依次是1到6,因此矩陣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/6for圈可以是多層的,下例產(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);endenddisp(h)1 1/2 1/3 1/4 1/

16、5 1/61/2 1/3 1/4 1/5 1/6 1/71/3 1/4 1/5 1/6 1/7 1/81/4 1/5 1/6 1/7 1/8 1/91/5 1/6 1/7 1/8 1/9 1/101/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圈

17、列出先前產(chǎn)生的Hilbert矩陣的每一行的平方和:for i = h,disp(norm(i)2); % 印出每一行的平方和end1299/871282/551650/2343524/2933559/4431831/8801在上例中,每一次i的值就是矩陣h的一行,所以寫出來的命令特別簡潔。令一個常用到的重復(fù)命令是while圈,其基本形式為:while 條件式;運算式;end也就是說,只要條件示成立,運算式就會一再被執(zhí)行。例如先前產(chǎn)生調(diào)和數(shù)列的例子,我們可用while圈改寫如下:x = zeros(1,6); % x是一個16的零矩陣i = 1;while i 0.5,disp(Given ra

18、ndom number is greater than 0.5.);endGiven random number is greater than 0.5.1-4、集合多個命令於一個M檔案若要一次執(zhí)行大量的MATLAB命令,可將這些命令存放於一個副檔名為m的檔案,并在 MATLAB提示號下鍵入此檔案的主檔名即可。此種包含MATLAB命令的檔案都以m為副檔名,因此通稱M檔案(M-files)。例如一個名為test.m的M檔案,包含一連串的MATLAB命令,那麼只要直接鍵入test,即可執(zhí)行其所包含的命令:pwd % 顯示現(xiàn)在的目錄ans =D:MATLAB5bincd c:datamlbook %

19、 進入test.m所在的目錄type test.m % 顯示test.m的內(nèi)容% This is my first test M-file.% Roger Jang, March 3, 1997fprintf(Start of test.m!n);for i = 1:3,fprintf(i = %d - i3 = %dn, i, i3);endfprintf(End of test.m!n);test % 執(zhí)行test.m Start of test.m!i = 1 - i3 = 1i = 2 - i3 = 8i = 3 - i3 = 27End of test.m!小提示:第一注解行(H1

20、help line) test.m的前兩行是注解,可以使程式易於了解與管理。特別要說明的是,第一注解行通常用來簡短說明此M檔案的功能,以便lookfor能以關(guān)鍵字比對的方式來找出此M檔案。舉例來說,test.m的第一注解行包含test這個字,因此如果鍵入lookfor test,MATLAB即可列出所有在第一注解行包含test的M檔案,因而test.m也會被列名在內(nèi)。嚴(yán)格來說,M檔案可再細(xì)分為命令集(Scripts)及函數(shù)(Functions)。前述的test.m即為命令集,其效用和將命令逐一輸入完全一樣,因此若在命令集可以直接使用工作空間的變數(shù),而且在命令集中設(shè)定的變數(shù),也都在工作空間中看得

21、到。函數(shù)則需要用到輸入引數(shù)(Input arguments)和輸出引數(shù)(Output arguments)來傳遞資訊,這就像是C語言的函數(shù),或是FORTRAN語言的副程序(Subroutines)。舉例來說,若要計算一個正整數(shù)的階乘 (Factorial),我們可以寫一個如下的MATLAB函數(shù)并將之存檔於fact.m:function output = fact(n)% FACT Calculate factorial of a given positive integer.output = 1;for i = 1:n,output = output*i;end其中fact是函數(shù)名,n是輸入引

22、數(shù),output是輸出引數(shù),而i則是此函數(shù)用到的暫時變數(shù)。要使用此函數(shù),直接鍵入函數(shù)名及適當(dāng)輸入引數(shù)值即可:y = fact(5)y = 120(當(dāng)然,在執(zhí)行fact之前,你必須先進入fact.m所在的目錄。)在執(zhí)行fact(5)時,MATLAB會跳入一個下層的暫時工作空間(Temperary workspace),將變數(shù)n的值設(shè)定為5,然後進行各項函數(shù)的內(nèi)部運算,所有內(nèi)部運算所產(chǎn)生的變數(shù)(包含輸入引數(shù)n、暫時變數(shù)i,以及輸出引數(shù)output)都存在此暫時工作空間中。運算完畢後,MATLAB會將最後輸出引數(shù)output的值設(shè)定給上層的變數(shù)y,并將清除此暫時工作空間及其所含的所有變數(shù)。換句話說,

23、在呼叫函數(shù)時,你只能經(jīng)由輸入引數(shù)來控制函數(shù)的輸入,經(jīng)由輸出引數(shù)來得到函數(shù)的輸出,但所有的暫時變數(shù)都會隨著函數(shù)的結(jié)束而消失,你并無法得到它們的值。小提示:有關(guān)階乘函數(shù) 前面(及後面)用到的階乘函數(shù)只是純粹用來說明MATLAB的函數(shù)觀念。若實際要計算一個正整數(shù)n的階乘(即n!)時,可直接寫成prod(1:n),或是直接呼叫g(shù)amma函數(shù):gamma(n-1)。MATLAB的函數(shù)也可以是遞式的(Recursive),也就是說,一個函數(shù)可以呼叫它本身。舉例來說,n! = n*(n-1)!,因此前面的階乘函數(shù)可以改成遞式的寫法:function output = fact(n)% FACT Calcul

24、ate factorial of a given positive integerrecursively.if n = 1, % Terminating conditionoutput = 1;return;endoutput = n*fact(n-1);在寫一個遞函數(shù)時,一定要包含結(jié)束條件(Terminating condition),否則此函數(shù)將會一再呼叫自己,永遠(yuǎn)不會停止,直到電腦的記憶體被耗盡為止。以上例而言,n=1即滿足結(jié)束條件,此時我們直接將output設(shè)為1,而不再呼叫此函數(shù)本身。1-5、搜尋路徑在前一節(jié)中,test.m所在的目錄是d:mlbook。如果不先進入這個目錄,MATL

25、AB就找不到你要執(zhí)行的M檔案。如果希望MATLAB不論在何處都能執(zhí)行test.m,那麼就必須將d:mlbook加入MATLAB的搜尋路徑(Search path)上。要檢視MATLAB的搜尋路徑,鍵入path即可:pathMATLABPATHd:matlab5toolboxmatlabgenerald:matlab5toolboxmatlabopsd:matlab5toolboxmatlablangd:matlab5toolboxmatlabelmatd:matlab5toolboxmatlabelfund:matlab5toolboxmatlabspecfund:matlab5toolbox

26、matlabmatfund:matlab5toolboxmatlabdatafund:matlab5toolboxmatlabpolyfund:matlab5toolboxmatlabfunfund:matlab5toolboxmatlabsparfund:matlab5toolboxmatlabgraph2dd:matlab5toolboxmatlabgraph3dd:matlab5toolboxmatlabspecgraphd:matlab5toolboxmatlabgraphicsd:matlab5toolboxmatlabuitoolsd:matlab5toolboxmatlabstr

27、fund:matlab5toolboxmatlabiofund:matlab5toolboxmatlabtimefund:matlab5toolboxmatlabdatatypesd:matlab5toolboxmatlabdded:matlab5toolboxmatlabdemosd:matlab5toolboxtourd:matlab5toolboxsimulinksimulinkd:matlab5toolboxsimulinkblocksd:matlab5toolboxsimulinksimdemosd:matlab5toolboxsimulinkdeed:matlab5toolboxl

28、ocal此搜尋路徑會依已安裝的工具箱(Toolboxes)不同而有所不同。要查詢某一命令是在搜尋路徑的何處,可用which命令:which expod:matlab5toolboxmatlabdemosexpo.m很顯然c:datamlbook并不在MATLAB的搜尋路徑中,因此MATLAB找不到test.m這個M檔案:which testc:datamlbooktest.m要將d:mlbook加入MATLAB的搜尋路徑,還是使用path命令:path(path, c:datamlbook);此時d:mlbook已加入MATLAB搜尋路徑(鍵入path試看看),因此MATLAB已經(jīng)看得到tes

29、t.m:which testc:datamlbooktest.m現(xiàn)在我們就可以直接鍵入test,而不必先進入test.m所在的目錄。小提示:如何在其啟動MATLAB時,自動設(shè)定所需的搜尋路徑? 如果在每一次啟動MATLAB後都要設(shè)定所需的搜尋路徑,將是一件很麻煩的事。有兩種方法,可以使MATLAB啟動後 ,即可載入使用者定義的搜尋路徑:1.MATLAB的預(yù)設(shè)搜尋路徑是定義在matlabrc.m(在c:matlab之下,或是其他安裝MATLAB 的主目錄下),MATLAB每次啟動後,即自動執(zhí)行此檔案。因此你可以直接修改matlabrc.m ,以加入新的目錄於搜尋路徑之中。2.MATLAB在執(zhí)行m

30、atlabrc.m時,同時也會在預(yù)設(shè)搜尋路徑中尋找startup.m,若此檔案存在,則執(zhí)行其所含的命令。因此我們可將所有在MATLAB啟動時必須執(zhí)行的命令(包含更改搜尋路徑的命令),放在此檔案中。每次MATLAB遇到一個命令(例如test)時,其處置程序為:1.將test視為使用者定義的變數(shù)。2.若test不是使用者定義的變數(shù),將其視為永久常數(shù) 。3.若test不是永久常數(shù),檢查其是否為目前工作目錄下的M檔案。4.若不是,則由搜尋路徑尋找是否有test.m的檔案。5.若在搜尋路徑中找不到,則MATLAB會發(fā)出嗶嗶聲并印出錯誤訊息。以下介紹與MATLAB搜尋路徑相關(guān)的各項命令。1-6、資料的儲存

31、與載入有些計算曠日廢時,那麼我們通常希望能將計算所得的儲存在檔案中,以便將來可進行其他處理。MATLAB儲存變數(shù)的基本命令是save,在不加任何選項(Options)時,save會將變數(shù)以二進制(Binary)的方式儲存至副檔名為mat的檔案,如下述:save:將工作空間的所有變數(shù)儲存到名為matlab.mat的二進制檔案。save filename:將工作空間的所有變數(shù)儲存到名為filename.mat的二進制檔案。 save filename x y z :將變數(shù)x、y、z儲存到名為filename.mat的二進制檔案。以下為使用save命令的一個簡例:who % 列出工作空間的變數(shù)You

32、r variables are:B h j yans i x zsave test B y % 將變數(shù)B與y儲存至test.matdir % 列出現(xiàn)在目錄中的檔案. 2plotxy.doc fact.m simulink.doc test.m $1basic.doc. 3plotxyz.doc first.doc temp.doc test.mat1basic.doc book.dotGo.m template.doc testfile.datdelete test.mat % 刪除test.mat以二進制的方式儲存變數(shù),通常檔案會比較小,而且在載入時速度較快,但是就無法用普通的文書軟體(例如

33、pe2或記事本)看到檔案內(nèi)容。若想看到檔案內(nèi)容,則必須加上-ascii選項,詳見下述:save filename x -ascii:將變數(shù)x以八位數(shù)存到名為filename的ASCII檔案。Save filename x -ascii -double:將變數(shù)x以十六位數(shù)存到名為filename的ASCII檔案。另一個選項是-tab,可將同一列相鄰的數(shù)目以定位鍵(Tab)隔開。小提示:二進制和ASCII檔案的比較 在save命令使用-ascii選項後,會有下列現(xiàn)象:save命令就不會在檔案名稱後加上mat的副檔名。因此以副檔名mat結(jié)尾的檔案通常是MATLAB的二進位資料檔。若非有特殊需要,我們

34、應(yīng)該盡量以二進制方式儲存資料。load命令可將檔案載入以取得儲存之變數(shù):load filename:load會尋找名稱為filename.mat的檔案,并以二進制格式載入。若找不到filename.mat,則尋找名稱為filename的檔案,并以ASCII格式載入。load filename-ascii:load會尋找名稱為filename的檔案,并以ASCII格式載入。若以ASCII格式載入,則變數(shù)名稱即為檔案名稱(但不包含副檔名)。若以二進制載入,則可保留原有的變數(shù)名稱,如下例:clear all; % 清除工作空間中的變數(shù)x = 1:10;save testfile.dat x -asc

35、ii % 將x以ASCII格式存至名為testfile.dat的檔案load testfile.dat % 載入testfile.datwho % 列出工作空間中的變數(shù)Your variables are:testfile x注意在上述過程中,由於是以ASCII格式儲存與載入,所以產(chǎn)生了一個與檔案名稱相同的變數(shù)testfile,此變數(shù)的值和原變數(shù)x完全相同。1-7、結(jié)束MATLAB有三種方法可以結(jié)束MATLAB:1.鍵入exit2.鍵入quit3.直接關(guān)閉MATLAB的命令視窗(Command window)2數(shù)值分析21微分diff函數(shù)用以演算一函數(shù)的微分項,相關(guān)的函數(shù)語法有下列4個:dif

36、f(f) 傳回f對預(yù)設(shè)獨立變數(shù)的一次微分值diff(f,t) 傳回f對獨立變數(shù)t的一次微分值diff(f,n) 傳回f對預(yù)設(shè)獨立變數(shù)的n次微分值diff(f,t,n) 傳回f對獨立變數(shù)t的n次微分值 數(shù)值微分函數(shù)也是用diff,因此這個函數(shù)是靠輸入的引數(shù)決定是以數(shù)值或是符號微分,如果引數(shù)為向量則執(zhí)行數(shù)值微分,如果引數(shù)為符號表示式則執(zhí)行符號微分。 先定義下列三個方程式,接著再演算其微分項:S1 = 6*x3-4*x2+b*x-5;S2 = sin(a);S3 = (1 - t3)/(1 + t4);diff(S1)ans=18*x2-8*x+bdiff(S1,2)ans= 36*x-8diff(

37、S1,b)ans= xdiff(S2)ans=cos(a)diff(S3)ans=-3*t2/(1+t4)-4*(1-t3)/(1+t4)2*t3simplify(diff(S3)ans= t2*(-3+t4-4*t)/(1+t4)222積分int函數(shù)用以演算一函數(shù)的積分項, 這個函數(shù)要找出一符號式 F 使得diff(F)=f。如果積分式的解析式(analytical form, closed form) 不存在的話或是MATLAB無法找到,則int 傳回原輸入的符號式。相關(guān)的函數(shù)語法有下列 4個:int(f) 傳回f對預(yù)設(shè)獨立變數(shù)的積分值int(f,t) 傳回f對獨立變數(shù)t的積分值int(f

38、,a,b) 傳回f對預(yù)設(shè)獨立變數(shù)的積分值,積分區(qū)間為a,b,a和b為數(shù)值式int(f,t,a,b) 傳回f對獨立變數(shù)t的積分值,積分區(qū)間為a,b,a和b為數(shù)值式int(f,m,n) 傳回f對預(yù)設(shè)變數(shù)的積分值,積分區(qū)間為m,n,m和n為符號式我們示范幾個例子:S1 = 6*x3-4*x2+b*x-5;S2 = sin(a);S3 = sqrt(x);int(S1)ans= 3/2*x4-4/3*x3+1/2*b*x2-5*xint(S2)ans= -cos(a)int(S3)ans= 2/3*x(3/2)int(S3,a,b)ans= 2/3*b(3/2)- 2/3*a(3/2)int(S3,0

39、.5,0.6)ans= 2/25*15(1/2)-1/6*2(1/2)numeric(int(S3,0.5,0.6) % 使用numeric函數(shù)可以計算積分的數(shù)值ans= 0.074123求解常微分方程式MATLAB解常微分方程式的語法是dsolve(equation,condition),其中equation代表常微分方程式即y=g(x,y),且須以Dy代表一階微分項yD2y代表二階微分項y,condition則為初始條件。假設(shè)有以下三個一階常微分方程式和其初始條件y=3x2, y(2)=0.5y=2.x.cos(y)2, y(0)=0.25y=3y+exp(2x), y(0)=3對應(yīng)上述常

40、微分方程式的符號運算式為:soln_1 = dsolve(Dy =3*x2,y(2)=0.5)ans= x3-7.500000000000000ezplot(soln_1,2,4) % 看看這個函數(shù)的長相soln_2 = dsolve(Dy =2*x*cos(y)2,y(0) = pi/4)ans= atan(x2+1)soln_3 = dsolve(Dy = 3*y +exp(2*x), y(0) = 3)ans= -exp(2*x)+4*exp(3*x)24非線性方程式的實根 要求任一方程式的根有三步驟: 先定義方程式。要注意必須將方程式安排成 f(x)=0 的形態(tài),例如一方程式為sin(

41、x)=3,則該方程式應(yīng)表示為f(x)=sin(x)-3??梢?m-file 定義方程式。 代入適當(dāng)范圍的 x, y(x) 值,將該函數(shù)的分布圖畫出,藉以了解該方程式的長相。 由圖中決定y(x)在何處附近(x0)與 x 軸相交,以fzero的語法fzero(function,x0)即可求出在 x0附近的根,其中 function 是先前已定義的函數(shù)名稱。如果從函數(shù)分布圖看出根不只一個,則須再代入另一個在根附近的 x0,再求出下一個根。 以下分別介紹幾數(shù)個方程式,來說明如何求解它們的根。 例一、方程式為sin(x)=0 我們知道上式的根有 ,求根方式如下: r=fzero(sin,3) % 因為s

42、in(x)是內(nèi)建函數(shù),其名稱為sin,因此無須定義它,選擇 x=3 附近求根r=3.1416 r=fzero(sin,6) % 選擇 x=6 附近求根r = 6.2832 例二、方程式為MATLAB 內(nèi)建函數(shù) humps,我們不須要知道這個方程式的形態(tài)為何,不過我們可以將它劃出來,再找出根的位置。求根方式如下: x=linspace(-2,3); y=humps(x); plot(x,y), grid % 由圖中可看出在0和1附近有二個根 r=fzero(humps,1.2)r = 1.2995例三、方程式為y=x.3-2*x-5 這個方程式其實是個多項式,我們說明除了用 roots 函數(shù)找出

43、它的根外,也可以用這節(jié)介紹的方法求根,注意二者的解法及結(jié)果有所不同。求根方式如下:% m-function, f_1.mfunction y=f_1(x) % 定義 f_1.m 函數(shù)y=x.3-2*x-5; x=linspace(-2,3); y=f_1(x); plot(x,y), grid % 由圖中可看出在2和-1附近有二個根 r=fzero(f_1,2); % 決定在2附近的根r = 2.0946 p=1 0 -2 -5 r=roots(p) % 以求解多項式根方式驗證r =2.0946-1.0473 + 1.1359i -1.0473 - 1.1359i25線性代數(shù)方程(組)求解 我

44、們習(xí)慣將上組方程式以矩陣方式表示如下AX=B其中 A 為等式左邊各方程式的系數(shù)項,X 為欲求解的未知項,B 代表等式右邊之已知項要解上述的聯(lián)立方程式,我們可以利用矩陣左除 做運算,即是 X=AB。 如果將原方程式改寫成 XA=B其中 A 為等式左邊各方程式的系數(shù)項,X 為欲求解的未知項,B 代表等式右邊之已知項 注意上式的 X, B 已改寫成列向量,A其實是前一個方程式中 A 的轉(zhuǎn)置矩陣。上式的 X 可以矩陣右除 / 求解,即是 X=B/A。 若以反矩陣運算求解 AX=B, X=B,即是 X=inv(A)*B,或是改寫成 XA=B, X=B,即是X=B*inv(A)。 我們直接以下面的例子來說

45、明這三個運算的用法: A=3 2-1; -1 3 2; 1 -1 -1; % 將等式的左邊系數(shù)鍵入 B=10 5 -1; % 將等式右邊之已知項鍵入,B要做轉(zhuǎn)置 X=AB % 先以左除運算求解X = % 注意X為行向量-256 C=A*X % 驗算解是否正確C = % C=B105-1 A=A; % 將A先做轉(zhuǎn)置 B=10 5 -1; X=B/A % 以右除運算求解的結(jié)果亦同X = % 注意X為列向量105 -1 X=B*inv(A); % 也可以反矩陣運算求解3.基本xy平面繪圖命令 MATLAB不但擅長於矩陣相關(guān)的數(shù)值運算,也適合用在各種科學(xué)目視表示(Scientificvisualiza

46、tion)。 本節(jié)將介紹MATLAB基本xy平面及xyz空間的各項繪圖命令,包含一維曲線及二維曲面的繪制、列印及存檔。plot是繪制一維曲線的基本函數(shù),但在使用此函數(shù)之前,我們需先定義曲線上每一點的x 及y座標(biāo)。下例可畫出一條正弦曲線:close all;x=linspace(0, 2*pi, 100); % 100個點的x座標(biāo)y=sin(x); % 對應(yīng)的y座標(biāo)plot(x,y);小整理:MATLAB基本繪圖函數(shù)plot: x軸和y軸均為線性刻度(Linear scale)loglog: x軸和y軸均為對數(shù)刻度(Logarithmic scale)semilogx: x軸為對數(shù)刻度,y軸為線

47、性刻度semilogy: x軸為線性刻度,y軸為對數(shù)刻度若要畫出多條曲線,只需將座標(biāo)對依次放入plot函數(shù)即可:plot(x, sin(x), x, cos(x);若要改變顏色,在座標(biāo)對後面加上相關(guān)字串即可:plot(x, sin(x), c, x, cos(x), g);若要同時改變顏色及圖線型態(tài)(Line style),也是在座標(biāo)對後面加上相關(guān)字串即可:plot(x, sin(x), co, x, cos(x), g*);小整理:plot繪圖函數(shù)的叁數(shù) 字元 顏色字元 圖線型態(tài)y 黃色. 點k 黑色o 圓w 白色x xb 藍(lán)色+ +g 綠色* *r 紅色- 實線c 亮青色: 點線m 錳紫色

48、-. 點虛線- 虛線圖形完成後,我們可用axis(xmin,xmax,ymin,ymax)函數(shù)來調(diào)整圖軸的范圍:axis(0, 6, -1.2, 1.2);此外,MATLAB也可對圖形加上各種注解與處理:xlabel(Input Value); % x軸注解ylabel(Function Value); % y軸注解title(Two Trigonometric Functions); % 圖形標(biāo)題legend(y = sin(x),y = cos(x); % 圖形注解grid on; % 顯示格線我們可用subplot來同時畫出數(shù)個小圖形於同一個視窗之中:subplot(2,2,1); pl

49、ot(x, sin(x);subplot(2,2,2); plot(x, cos(x);subplot(2,2,3); plot(x, sinh(x);subplot(2,2,4); plot(x, cosh(x); MATLAB還有其他各種二維繪圖函數(shù),以適合不同的應(yīng)用,詳見下表。小整理:其他各種二維繪圖函數(shù)bar 長條圖errorbar 圖形加上誤差范圍fplot 較精確的函數(shù)圖形polar 極座標(biāo)圖hist 累計圖rose 極座標(biāo)累計圖stairs 階梯圖stem 針狀圖fill 實心圖feather 羽毛圖compass 羅盤圖quiver 向量場圖以下我們針對每個函數(shù)舉例。當(dāng)資料點數(shù)量不多時,長條圖是很適合的表示方式:close all; % 關(guān)閉所有的圖形視窗x=1:10;y=rand(size(x);bar(x,y);如果已知資料的誤差量,就可用errorbar來表示。下例以單位標(biāo)準(zhǔn)差來做資的誤差量:x = linspace(0,2*pi,30);y = sin(x);e = std(y)*ones(size(x);errorbar(x,y,e)對於變化劇烈的函數(shù),可用fplot來進行較精確的繪圖,會對劇烈變化處進行較密集的取樣,如下例:fplot(sin(1/x), 0.02

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論