MATLAB+中的常用操作符.doc_第1頁
MATLAB+中的常用操作符.doc_第2頁
MATLAB+中的常用操作符.doc_第3頁
MATLAB+中的常用操作符.doc_第4頁
MATLAB+中的常用操作符.doc_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

MATLAB 中的常用操作符其實這些是MATLAB 幫助文件中的內(nèi)容,可以利用help 命令知道的。Arithmetic operators.plusPlus +uplusUnary plus +minusMinusuminusUnary minusmtimesMatrix multiply *timesArray multiply .*mpowerMatrix power powerArray power .mldivideBackslash or left matrix divide mrdivideSlash or right matrix divide /ldivideLeft array divide .rdivideRight array divide ./kronKronecker tensor product kronRelational operators.eqEqual =neNot equal =ltLess than leLess than or equal =Logical operators.Shortcircuit logical AND &Shortcircuit logical OR |and Element wise logical AND &or Element wise logical OR |notLogical NOT xorLogical EXCLUSIVE ORanyTrue if any element of vector is nonzeroallTrue if all elements of vector are nonzeroSpecial characters.colonColon :parenParentheses and subscripting ( )parenBrackets parenBraces and subscripting punctFunction handle creation punctDecimal point .punctStructure field access .punctParent directory .punctContinuation .punctSeparator ,punctSemicolon ;punctComment %punctInvoke operating system command !punctAssignment =punctQuote transposeTranspose .ctransposeComplex conjugate transpose horzcatHorizontal concatenation ,vertcatVertical concatenation ;subsasgnSubscripted assignment ( ), ,.subsrefSubscripted reference ( ), ,.subsindexSubscript indexBitwise operators.bitand Bit wise AND.bitcmpComplement bits.bitor Bit wise OR.bitmaxMaximum floati ng point integer.bitxor Bit wise XOR.bitsetSet bit.bitgetGet bit.bitshift Bit wise shift.Set operators.unionSet union.uniqueSet ersectSet intersection.setdiffSet difference.setxorSet exclusive or.ismemberTrue for set memberMATLAB 程式設(shè)計與應(yīng)用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 的提示號。)=小提示:是MATLAB 的提示符號(Prompt),但在PC 中文視窗系統(tǒng)下,由於編碼方式不同,此提示符號常會消失不見,但這并不會影響到MATLAB 的運算結(jié)果。=我們也可將上述運算式的結(jié)果設(shè)定給另一個變數(shù)x:x = (5*2+1.3-0.8)*102/25x =42此時MATLAB 會直接顯示x 的值。由上例可知,MATLAB 認識所有一般常用到的加(+)、減(-)、乘(*)、除(/)的數(shù)學(xué)運算符號,以及冪次運算 ()。小提示:MATLAB 將所有變數(shù)均存成double 的形式,所以不需經(jīng)過變數(shù)宣告(Variable declaration)。MATLAB 同時也會自動進行記憶體的使用和回收,而不必像C 語言,必須由使用者一一指定。這些功能使的MATLAB 易學(xué)易用,使用者可專心致力於撰寫程式,而不必被軟體枝節(jié)問題所干擾。 若不想讓MATLAB 每次都顯示運算結(jié)果,只需在運算式最後加上分號(;)即可,如下例:y = sin(10)*exp(-0.3*42);若要顯示變數(shù)y 的值,直接鍵入y 即可: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):無論正負,舍去小數(shù)至最近整數(shù)floor(x):地板函數(shù),即舍去正小數(shù)至最近整數(shù)ceil(x):天花板函數(shù),即加入正小數(shù)至最近整數(shù)rat(x):將實數(shù)x 化為分數(shù)表示rats(x):將實數(shù)x 化為多項分數(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ù)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ù)也可用來存放向量或矩陣,并進行各種運算,如下例的列向量(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 亦可取出向量的一個元素或一部份來做運算:x(2)*3+y(4) % 取出x 的第二個元素和y 的第四個元素來做運算ans =9y(2:4)-1 % 取出y 的第二至第四個元素來做運算ans =6 1 -1在上例中,2:4 代表一個由2、3、4 組成的向量,同樣的方法可用於產(chǎn)生公差為1 的等差數(shù)列:x = 7:16x =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ù)為6x =4.0000 5.2000 6.4000 7.6000 8.8000 10.0000若對MATLAB 函數(shù)用法有疑問,可隨時使用help 來尋求線上支援(on-linehelp):help linspaceLINSPACE Linearly spaced vector.LINSPACE(x1, x2) generates a row vector of 100 linearlyequally spaced points between x1 and x2.LINSPACE(x1, x2, N) generates N points between x1 and x2.equally spaced points between x1 and x2.LINSPACE(x1, x2, N) generates N points between x1 and x2.See also LOGSPACE, :.=小整理:MATLAB 的查詢命令help:用來查詢已知命令的用法。例如已知inv 是用來計算反矩陣,鍵入 help inv 即可得知有關(guān)inv 命令的用法。(鍵入help help 則顯示help 的用法,請試看看?。﹍ookfor:用來尋找未知的命令。例如要尋找計算反矩陣的命令,可鍵入lookfor inverse,MATLAB 即會列出所有和關(guān)鍵字inverse 相關(guān)的指令。找到所需的命令後,即可用help 進一步找出其用法。(lookfor 事實上是對所有在搜尋路徑下的M 檔案進行關(guān)鍵字對第一注解行的比對,詳見後敘。)=Matlab 入門教程-基本運算與函數(shù)(二)將列向量轉(zhuǎn)置(Transpose)後,即可得到行向量(Column vector):z = xz =4.00005.20006.40007.60008.800010.0000不論是行向量或列向量,我們均可用相同的函數(shù)找出其元素個數(shù)、最大值、最小值等:length(z) % z 的元素個數(shù)ans =6max(z) % 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 的累計元素總和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;AA =1 2 3 45 6 7 89 10 11 12同樣地,我們可以對矩陣進行各種處理:A(2,3) = 5 % 改變位於第二列,第三行的元素值A(chǔ) =1 2 3 45 6 5 89 10 11 12B = A(2,1:3) % 取出部份矩陣BB =5 6 5A = A B % 將B 轉(zhuǎn)置後以行向量并入AA =1 2 3 4 55 6 5 8 69 10 11 12 5A(:, 2) = % 刪除第二行(:代表所有列)A =1 3 4 55 5 8 69 11 12 5A = A; 4 3 2 1 % 加入第四列A =1 3 4 55 5 8 69 11 12 54 3 2 1A(1 4, :) = % 刪除第一和第四列(:代表所有行)A =5 5 8 69 11 12 5這幾種矩陣處理的方式可以相互疊代運用,產(chǎn)生各種意想不到的效果,就看各位的巧思和創(chuàng)意。小提示:在MATLAB 的內(nèi)部資料結(jié)構(gòu)中,每一個矩陣都是一個以行為主(Column-oriented)的陣列(Array)因此對於矩陣元素的存取,我們可用一維或二維的索引(Index)來定址。舉例來說,在上述矩陣A 中,位於第二列、第三行的元素可寫為A(2,3)(二維索引)或A(6)(一維索引,即將所有直行進行堆疊後的第六個元素)。此外,若要重新安排矩陣的形狀,可用reshape 命令:B = reshape(A, 4, 2) % 4 是新矩陣的列數(shù),2 是新矩陣的行數(shù)B =5 89 125 611 5小提示:A(:)就是將矩陣A 每一列堆疊起來,成為一個行向量,而這也是MATLAB 變數(shù)的內(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)的變數(shù),可鍵入who:whoYour variables are:testfile x這些是由使用者定義的變數(shù)。若要知道這些變數(shù)的詳細資料,可鍵入:whosName Size Bytes ClassA 2x4 64 double arrayB 4x2 64 double arrayans 1x1 8 double arrayx 1x1 8 double arrayy 1x1 8 double 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/0nan 或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ù)=Matlab 入門教程-流程控制1-2、重復(fù)命令最簡單的重復(fù)命令是for n圈(for-loop),其基本形式為:for 變數(shù) = 矩陣;運算式;end其中變數(shù)的值會被依次設(shè)定為矩陣的每一行,來執(zhí)行介於for 和end 之間的運算式。因此,若無意外情況,運算式執(zhí)行的次數(shù)會等於矩陣的行數(shù)。舉例來說,下列命令會產(chǎn)生一個長度為6 的調(diào)和數(shù)列(Harmonicsequence):x = zeros(1,6); % x 是一個16 的零矩陣for i = 1:6,x(i) = 1/i;end在上例中,矩陣x 最初是一個16 的零矩陣,在for n圈中,變數(shù)i 的值依次是1 到6,因此矩陣x 的第i 個元素的值依次被設(shè)為1/i。我們可用分數(shù)來顯示此數(shù)列:format rat % 使用分數(shù)來表示數(shù)值disp(x)1 1/2 1/3 1/4 1/5 1/6for 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);endenddisp(h)1 1/2 1/3 1/4 1/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 n圈列出先前產(chǎn)生的Hilbert 矩陣的每一行的平方和:for i = h,disp(norm(i)2); % 印出每一行的平方和end1299/871282/551_650/2343524/2933559/4431831/8801在上例中,每一次i 的值就是矩陣h 的一行,所以寫出來的命令特別簡潔。令一個常用到的重復(fù)命令是while n圈,其基本形式為:while 條件式;運算式;end也就是說,只要條件示成立,運算式就會一再被執(zhí)行。例如先前產(chǎn)生調(diào)和數(shù)列的例子,我們可用while n圈改寫如下:x = zeros(1,6); % x 是一個16 的零矩陣i = 1;while i 0.5,disp(Given random 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 % 進入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.mStart of test.m!i = 1 - i3 = 1i = 2 - i3 = 8i = 3 - i3 = 27End of test.m!小提示:第一注解行(H1 help line)test.m 的前兩行是注解,可以使程式易於了解與管理。特別要說明的是,第一注解行通常用來簡短說明此M 檔案的功能,以便lookfor 能以關(guān)鍵字比對的方式來找出此M 檔案。舉例來說,test.m 的第一注解行包含test 這個字,因此如果鍵入lookfortest,MATLAB 即可列出所有在第一注解行包含test 的M 檔案,因而test.m也會被列名在內(nèi)。嚴格來說,M 檔案可再細分為命令集(Scripts)及函數(shù)(Functions)。前述的test.m 即為命令集,其效用和將命令逐一輸入完全一樣,因此若在命令集可以直接使用工作空間的變數(shù),而且在命令集中設(shè)定的變數(shù),也都在工作空間中看得到。函數(shù)則需要用到輸入引數(shù)(Inputarguments)和輸出引數(shù)(Outputarguments)來傳遞資訊,這就像是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 是輸入引數(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 會跳入一個下層的暫時工作空間(Temperaryworkspace),將變數(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ù)。換句話說,在呼叫函數(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ù)也可以是遞n式的(Recursive),也就是說,一個函數(shù)可以呼叫它本身。舉例來說,n! =n*(n-1)!,因此前面的階乘函數(shù)可以改成遞n式的寫法:function output = fact(n)% FACT Calculate factorial of a given positive integerrecursively.if n = 1, % Terminating conditionoutput = 1;return;endoutput = n*fact(n-1);在寫一個遞n函數(shù)時,一定要包含結(jié)束條件(Terminatingcondition),否則此函數(shù)將會一再呼叫自己,永遠不會停止,直到電腦的記憶體被耗盡為止。以上例而言,n=1 即滿足結(jié)束條件,此時我們直接將output 設(shè)為1,而不再呼叫此函數(shù)本身。發(fā)信人: alphazhao (子羽 & 三笑), 信區(qū): Modelling標(biāo) 題: Matlab 入門 (3)發(fā)信站: 武漢白云黃鶴站 (Fri Dec 10 14:41:49 1999), 站內(nèi)信件發(fā)信人: Mars (混沌分形周期三), 信區(qū): MATH標(biāo) 題: Matlab 入門教程-流程控制發(fā)信站: 一網(wǎng)深情 (Sun Nov 29 17:35:36 1998), 轉(zhuǎn)信1-2、重復(fù)命令最簡單的重復(fù)命令是for n圈(for-loop),其基本形式為:for 變數(shù) = 矩陣;運算式;end其中變數(shù)的值會被依次設(shè)定為矩陣的每一行,來執(zhí)行介於for 和end 之間的運算式。因此,若無意外情況,運算式執(zhí)行的次數(shù)會等於矩陣的行數(shù)。舉例來說,下列命令會產(chǎn)生一個長度為6 的調(diào)和數(shù)列(Harmonicsequence):x = zeros(1,6); % x 是一個16 的零矩陣for i = 1:6,x(i) = 1/i;end在上例中,矩陣x 最初是一個16 的零矩陣,在for n圈中,變數(shù)i 的值依次是_1 到6,因此矩陣x 的第i 個元素的值依次被設(shè)為1/i。我們可用分數(shù)來顯示此數(shù)列:format rat % 使用分數(shù)來表示數(shù)值disp(x)1 1/2 1/3 1/4 1/5 1/6for 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);endenddisp(h)1 1/2 1/3 1/4 1/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 n圈列出先前產(chǎn)生的Hilbert 矩陣的每一行的平方和:for i = h,disp(norm(i)2); % 印出每一行的平方和end1299/871282/551650/2343524/2933559/4431831/8801在上例中,每一次i 的值就是矩陣h 的一行,所以寫出來的命令特別簡潔。令一個常用到的重復(fù)命令是while n圈,其基本形式為:while 條件式;運算式;end也就是說,只要條件示成立,運算式就會一再被執(zhí)行。例如先前產(chǎn)生調(diào)和數(shù)列的例子,我們可用while n圈改寫如下:x = zeros(1,6); % x 是一個16 的零矩陣i = 1;while i 0.5,disp(Given random 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 % 進入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.mStart of test.m!i = 1 - i3 = 1i = 2 - i3 = 8i = 3 - i3 = 27End of test.m!小提示:第一注解行(H1 help line)test.m 的前兩行是注解,可以使程式易於了解與管理。特別要說明的是,第一注解行通常用來簡短說明此M 檔案的功能,以便lookfor 能以關(guān)鍵字比對的方式來找出此M 檔案。舉例來說,test.m 的第一注解行包含test 這個字,因此如果鍵入lookfortest,MATLAB 即可列出所有在第一注解行包含test 的M 檔案,因而test.m也會被列名在內(nèi)。嚴格來說,M 檔案可再細分為命令集(Scripts)及函數(shù)(Functions)。前述的test.m 即為命令集,其效用和將命令逐一輸入完全一樣,因此若在命令集可以直接使用工作空間的變數(shù),而且在命令集中設(shè)定的變數(shù),也都在工作空間中看得到。函數(shù)則需要用到輸入引數(shù)(Inputarguments)和輸出引數(shù)(Outputarguments)來傳遞資訊,這就像是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 是輸入引數(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 會跳入一個下層的暫時工作空間(Temperaryworkspace),將變數(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ù)。換句話說,在呼叫函數(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ù)也可以是遞n式的(Recursive),也就是說,一個函數(shù)可以呼叫它本身。舉例來說,n! =n*(n-1)!,因此前面的階乘函數(shù)可以改成遞n式的寫法:function output = fact(n)% FACT Calculate factorial of a given positive integerrecursively._if n = 1, % Terminating conditionoutput = 1;return;endoutput = n*fact(n-1);在寫一個遞n函數(shù)時,一定要包含結(jié)束條件(Terminatingcondition),否則此函數(shù)將會一再呼叫自己,永遠不會停止,直到電腦的記憶體被耗盡為止。以上例而言,n=1 即滿足結(jié)束條件,此時我們直接將output 設(shè)為1,而不再呼叫此函數(shù)本身。Matlab 入門教程-環(huán)境設(shè)置1-5、搜尋路徑在前一節(jié)中,test.m 所在的目錄是d:mlbook。如果不先進入這個目錄,MATLAB 就找不到你要執(zhí)行的M 檔案。如果希望MATLAB 不論在何處都能執(zhí)行test.m,那麼就必須將d:mlbook 加入MATLAB 的搜尋路徑(Searchpath)上。要檢視MATLAB 的搜尋路徑,鍵入path 即可:pathMATLABPATHd:matlab5toolboxmatlabgenerald:matlab5toolboxmatlabopsd:matlab5toolboxmatlablangd:matlab5toolboxmatlabelmatd:matlab5toolboxmatlabelfund:matlab5toolboxmatlabspecfund:matlab5toolboxmatlabmatfund:matlab5toolboxmatlabdatafund:matlab5toolboxmatlabpolyfund:matlab5toolboxmatlabfunfund:matlab5toolboxmatlabsparfund:matlab5toolboxmatlabgraph2dd:matlab5toolboxmatlabgraph3dd:matlab5toolboxmatlabspecgraphd:matlab5toolboxmatlabgraphicsd:matlab5toolboxmatlabuitoolsd:matlab5toolboxmatlabstrfund:matlab5toolboxmatlabiofund:matlab5toolboxmatlabtimefund:matlab5toolboxmatlabdatatypesd:matlab5toolboxmatlabdded:matlab5toolboxmatlabdemosd:matlab5toolboxtourd:matlab5toolboxsimulinksimulinkd:matlab5toolboxsimulinkblocksd:matlab5toolboxsimulinksimdemosd:matlab5toolboxsimulinkdeed:matlab5toolboxlocal此搜尋路徑會依已安裝的工具箱(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)看得到test.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,以加入新的目錄於搜尋路徑之中。1.MATLAB 在執(zhí)行matlabrc.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、資料的儲存與載入有些計算曠日廢時,那麼我們通常希望能將計算所得的儲存在檔案中,以便將來可進行其他處理。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 % 列出工作空間的

溫馨提示

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

評論

0/150

提交評論