




已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
MATLAB教程網(wǎng)收集整理 WWW.MATLAB.NET.CNMATLAB教程之MATLAB簡(jiǎn)介 WWW.MATLAB.NET.CN1. MATLAB的概況MATLAB是矩陣實(shí)驗(yàn)室(MatrixLaboratory)之意。除具備卓越的數(shù)值計(jì)算能力外,它還提供了專業(yè)水平的符號(hào)計(jì)算,文字處理,可視化建模仿真和實(shí)時(shí)控制等功能。MATLAB的基本數(shù)據(jù)單位是矩陣,它的指令表達(dá)式與數(shù)學(xué),工程中常用的形式十分相似,故用MATLAB來解算問題要比用C,FORTRAN等語言完相同的事情簡(jiǎn)捷得多.當(dāng)前流行的MATLAB 5.3/Simulink 3.0包括擁有數(shù)百個(gè)內(nèi)部函數(shù)的主包和三十幾種工具包(Toolbox).工具包又可以分為功能性工具包和學(xué)科工具包.功能工具包用來擴(kuò)充MATLAB的符號(hào)計(jì)算,可視化建模仿真,文字處理及實(shí)時(shí)控制等功能.學(xué)科工具包是專業(yè)性比較強(qiáng)的工具包,控制工具包,信號(hào)處理工具包,通信工具包等都屬于此類.開放性使MATLAB廣受用戶歡迎.除內(nèi)部函數(shù)外,所有MATLAB主包文件和各種工具包都是可讀可修改的文件,用戶通過對(duì)源程序的修改或加入自己編寫程序構(gòu)造新的專用工具包.2. MATLAB產(chǎn)生的歷史背景在70年代中期,Cleve Moler博士和其同事在美國(guó)國(guó)家科學(xué)基金的資助下開發(fā)了調(diào)用EISPACK和LINPACK的FORTRAN子程序庫(kù).EISPACK是特征值求解的FOETRAN程序庫(kù),LINPACK是解線性方程的程序庫(kù).在當(dāng)時(shí),這兩個(gè)程序庫(kù)代表矩陣運(yùn)算的最高水平.到70年代后期,身為美國(guó)New Mexico大學(xué)計(jì)算機(jī)系系主任的Cleve Moler,在給學(xué)生講授線性代數(shù)課程時(shí),想教學(xué)生使用EISPACK和LINPACK程序庫(kù),但他發(fā)現(xiàn)學(xué)生用FORTRAN編寫接口程序很費(fèi)時(shí)間,于是他開始自己動(dòng)手,利用業(yè)余時(shí)間為學(xué)生編寫EISPACK和LINPACK的接口程序.Cleve Moler給這個(gè)接口程序取名為MATLAB,該名為矩陣(matrix)和實(shí)驗(yàn)室(labotatory)兩個(gè)英文單詞的前三個(gè)字母的組合.在以后的數(shù)年里,MATLAB在多所大學(xué)里作為教學(xué)輔助軟件使用,并作為面向大眾的免費(fèi)軟件廣為流傳.1983年春天,Cleve Moler到Standford大學(xué)講學(xué),MATLAB深深地吸引了工程師John Little.John Little敏銳地覺察到MATLAB在工程領(lǐng)域的廣闊前景.同年,他和Cleve Moler,Steve Bangert一起,用C語言開發(fā)了第二代專業(yè)版.這一代的MATLAB語言同時(shí)具備了數(shù)值計(jì)算和數(shù)據(jù)圖示化的功能.1984年,Cleve Moler和John Little成立了Math Works公司,正式把MATLAB推向市場(chǎng),并繼續(xù)進(jìn)行MATLAB的研究和開發(fā).在當(dāng)今30多個(gè)數(shù)學(xué)類科技應(yīng)用軟件中,就軟件數(shù)學(xué)處理的原始內(nèi)核而言,可分為兩大類.一類是數(shù)值計(jì)算型軟件,如MATLAB,Xmath,Gauss等,這類軟件長(zhǎng)于數(shù)值計(jì)算,對(duì)處理大批數(shù)據(jù)效率高;另一類是數(shù)學(xué)分析型軟件,Mathematica,Maple等,這類軟件以符號(hào)計(jì)算見長(zhǎng),能給出解析解和任意精確解,其缺點(diǎn)是處理大量數(shù)據(jù)時(shí)效率較低.MathWorks公司順應(yīng)多功能需求之潮流,在其卓越數(shù)值計(jì)算和圖示能力的基礎(chǔ)上,又率先在專業(yè)水平上開拓了其符號(hào)計(jì)算,文字處理,可視化建模和實(shí)時(shí)控制能力,開發(fā)了適合多學(xué)科,多部門要求的新一代科技應(yīng)用軟件MATLAB.經(jīng)過多年的國(guó)際競(jìng)爭(zhēng),MATLAB以經(jīng)占據(jù)了數(shù)值軟件市場(chǎng)的主導(dǎo)地位.在MATLAB進(jìn)入市場(chǎng)前,國(guó)際上的許多軟件包都是直接以FORTRANC語言等編程語言開發(fā)的。這種軟件的缺點(diǎn)是使用面窄,接口簡(jiǎn)陋,程序結(jié)構(gòu)不開放以及沒有標(biāo)準(zhǔn)的基庫(kù),很難適應(yīng)各學(xué)科的最新發(fā)展,因而很難推廣。MATLAB的出現(xiàn),為各國(guó)科學(xué)家開發(fā)學(xué)科軟件提供了新的基礎(chǔ)。在MATLAB問世不久的80年代中期,原先控制領(lǐng)域里的一些軟件包紛紛被淘汰或在MATLAB上重建。MathWorks公司1993年推出了MATLAB 4。0版,1995年推出4。2C版(for win3。X)1997年推出5。0版。1999年推出5。3版。MATLAB 5。X較MATLAB 4。X無論是界面還是內(nèi)容都有長(zhǎng)足的進(jìn)展,其幫助信息采用超文本格式和PDF格式,在Netscape 3。0或IE 4。0及以上版本,Acrobat Reader中可以方便地瀏覽。時(shí)至今日,經(jīng)過MathWorks公司的不斷完善,MATLAB已經(jīng)發(fā)展成為適合多學(xué)科,多種工作平臺(tái)的功能強(qiáng)大大大型軟件。在國(guó)外,MATLAB已經(jīng)經(jīng)受了多年考驗(yàn)。在歐美等高校,MATLAB已經(jīng)成為線性代數(shù),自動(dòng)控制理論,數(shù)理統(tǒng)計(jì),數(shù)字信號(hào)處理,時(shí)間序列分析,動(dòng)態(tài)系統(tǒng)仿真等高級(jí)課程的基本教學(xué)工具;成為攻讀學(xué)位的大學(xué)生,碩士生,博士生必須掌握的基本技能。在設(shè)計(jì)研究單位和工業(yè)部門,MATLAB被廣泛用于科學(xué)研究和解決各種具體問題。在國(guó)內(nèi),特別是工程界,MATLAB一定會(huì)盛行起來。可以說,無論你從事工程方面的哪個(gè)學(xué)科,都能在MATLAB里找到合適的功能。2MATLAB的語言特點(diǎn)一種語言之所以能如此迅速地普及,顯示出如此旺盛的生命力,是由于它有著不同于其他語言的特點(diǎn),正如同F(xiàn)ORTRAN和C等高級(jí)語言使人們擺脫了需要直接對(duì)計(jì)算機(jī)硬件資源進(jìn)行操作一樣,被稱作為第四代計(jì)算機(jī)語言的MATLAB,利用其豐富的函數(shù)資源,使編程人員從繁瑣的程序代碼中解放出來。MATLAB最突出的特點(diǎn)就是簡(jiǎn)潔。MATLAB用更直觀的,符合人們思維習(xí)慣的代碼,代替了C和FORTRAN語言的冗長(zhǎng)代碼。MATLAB給用戶帶來的是最直觀,最簡(jiǎn)潔的程序開發(fā)環(huán)境。以下簡(jiǎn)單介紹一下MATLAB的主要特點(diǎn)。1)。語言簡(jiǎn)潔緊湊,使用方便靈活,庫(kù)函數(shù)極其豐富。MATLAB程序書寫形式自由,利用起豐富的庫(kù)函數(shù)避開繁雜的子程序編程任務(wù),壓縮了一切不必要的編程工作。由于庫(kù)函數(shù)都由本領(lǐng)域的專家編寫,用戶不必?fù)?dān)心函數(shù)的可靠性??梢哉f,用MATLAB進(jìn)行科技開發(fā)是站在專家的肩膀上。具有FORTRAN和C等高級(jí)語言知識(shí)的讀者可能已經(jīng)注意到,如果用FORTRAN或C語言去編寫程序,尤其當(dāng)涉及矩陣運(yùn)算和畫圖時(shí),編程會(huì)很麻煩。例如,如果用戶想求解一個(gè)線性代數(shù)方程,就得編寫一個(gè)程序塊讀入數(shù)據(jù),然后再使用一種求解線性方程的算法(例如追趕法)編寫一個(gè)程序塊來求解方程,最后再輸出計(jì)算結(jié)果。在求解過程中,最麻煩的要算第二部分。解線性方程的麻煩在于要對(duì)矩陣的元素作循環(huán),選擇穩(wěn)定的算法以及代碼的調(diào)試動(dòng)不容易。即使有部分源代碼,用戶也會(huì)感到麻煩,且不能保證運(yùn)算的穩(wěn)定性。解線性方程的程序用FORTRAN和C這樣的高級(jí)語言編寫,至少需要四百多行,調(diào)試這種幾百行的計(jì)算程序可以說很困難。以下用MATLAB編寫以上兩個(gè)小程序的具體過程。MATLAB求解下列方程,并求解矩陣A的特征值。Ax=b,其中:A= 32 13 45 67 23 79 85 12 43 23 54 65 98 34 71 35b= 1 2 3 4解為:x=Ab;設(shè)A的特征值組成的向量e,e=eig(A)??梢?,MATLAB的程序極其簡(jiǎn)短。更為難能可貴的是,MATLAB甚至具有一定的智能水平,比如上面的解方程,MATLAB會(huì)根據(jù)矩陣的特性選擇方程的求解方法,所以用戶根本不用懷疑MATLAB的準(zhǔn)確性。2)運(yùn)算符豐富。由于MATLAB是用C語言編寫的,MATLAB提供了和C語言幾乎一樣多的運(yùn)算符,靈活使用MATLAB的運(yùn)算符將使程序變得極為簡(jiǎn)短。3)MATLAB既具有結(jié)構(gòu)化的控制語句(如for循環(huán),while循環(huán),break語句和if語句),又有面向?qū)ο缶幊痰奶匦浴?)程序限制不嚴(yán)格,程序設(shè)計(jì)自由度大。例如,在MATLAB里,用戶無需對(duì)矩陣預(yù)定義就可使用。5)程序的可移植性很好,基本上不做修改就可以在各種型號(hào)的計(jì)算機(jī)和操作系統(tǒng)上運(yùn)行。6)MATLAB的圖形功能強(qiáng)大。在FORTRAN和C語言里,繪圖都很不容易,但在MATLAB里,數(shù)據(jù)的可視化非常簡(jiǎn)單。MATLAB還具有較強(qiáng)的編輯圖形界面的能力。7)MATLAB的缺點(diǎn)是,它和其他高級(jí)程序相比,程序的執(zhí)行速度較慢。由于MATLAB的程序不用編譯等預(yù)處理,也不生成可執(zhí)行文件,程序?yàn)榻忉寛?zhí)行,所以速度較慢。8)功能強(qiáng)大的工具箱是MATLAB的另一特色。MATLAB包含兩個(gè)部分:核心部分和各種可選的工具箱。核心部分中有數(shù)百個(gè)核心內(nèi)部函數(shù)。其工具箱又分為兩類:功能性工具箱和學(xué)科性工具箱。功能性工具箱主要用來擴(kuò)充其符號(hào)計(jì)算功能,圖示建模仿真功能,文字處理功能以及與硬件實(shí)時(shí)交互功能。功能性工具箱用于多種學(xué)科。而學(xué)科性工具箱是專業(yè)性比較強(qiáng)的,如control,toolbox,signl proceessing toolbox,commumnication toolbox等。這些工具箱都是由該領(lǐng)域內(nèi)學(xué)術(shù)水平很高的專家編寫的,所以用戶無需編寫自己學(xué)科范圍內(nèi)的基礎(chǔ)程序,而直接進(jìn)行高,精,尖的研究。9)源程序的開放性。開放性也許是MATLAB最受人們歡迎的特點(diǎn)。除內(nèi)部函數(shù)以外,所有MATLAB的核心文件和工具箱文件都是可讀可改的源文件,用戶可通過對(duì)源文件的修改以及加入自己的文件構(gòu)成新的工具箱。MATLAB入門教程1MATLAB的基本知識(shí)1-1、基本運(yùn)算與函數(shù) 在MATLAB下進(jìn)行基本數(shù)學(xué)運(yùn)算,只需將運(yùn)算式直接打入提示號(hào)()之後,并按入Enter鍵即可。例如: (5*2+1.3-0.8)*10/25 ans =4.2000 MATLAB會(huì)將運(yùn)算結(jié)果直接存入一變數(shù)ans,代表MATLAB運(yùn)算後的答案(Answer)并顯示其數(shù)值於螢?zāi)簧?。小提示?是MATLAB的提示符號(hào)(Prompt),但在PC中文視窗系統(tǒng)下,由於編碼方式不同,此提示符號(hào)常會(huì)消失不見,但這并不會(huì)影響到MATLAB的運(yùn)算結(jié)果。 我們也可將上述運(yùn)算式的結(jié)果設(shè)定給另一個(gè)變數(shù)x: x = (5*2+1.3-0.8)*102/25 x = 42 此時(shí)MATLAB會(huì)直接顯示x的值。由上例可知,MATLAB認(rèn)識(shí)所有一般常用到的加(+)、減(-)、乘(*)、除(/)的數(shù)學(xué)運(yùn)算符號(hào),以及冪次運(yùn)算()。 小提示: MATLAB將所有變數(shù)均存成double的形式,所以不需經(jīng)過變數(shù)宣告(Variable declaration)。MATLAB同時(shí)也會(huì)自動(dòng)進(jìn)行記憶體的使用和回收,而不必像C語言,必須由使用者一一指定.這些功能使的MATLAB易學(xué)易用,使用者可專心致力於撰寫程式,而不必被軟體枝節(jié)問題所干擾。 若不想讓MATLAB每次都顯示運(yùn)算結(jié)果,只需在運(yùn)算式最後加上分號(hào)(;)即可,如下例: y = sin(10)*exp(-0.3*42); 若要顯示變數(shù)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):純量的絕對(duì)值或向量的長(zhǎng)度 angle(z):復(fù) 數(shù)z的相角(Phase angle) sqrt(x):開平方 real(z):復(fù)數(shù)z的實(shí)部 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):將實(shí)數(shù)x化為分?jǐn)?shù)表示 rats(x):將實(shí)數(shù)x化為多項(xiàng)分?jǐn)?shù)展開 sign(x):符號(hào)函數(shù) (Signum function)。 當(dāng)x0時(shí),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ù)也可用來存放向量或矩陣,并進(jìn)行各種運(yùn)算,如下例的列向量(Row vector)運(yùn)算: x = 1 3 5 2; y = 2*x+1 y = 3 7 11 5 小提示:變數(shù)命名的規(guī)則 1.第一個(gè)字母必須是英文字母 2.字母間不可留空格 3.最多只能有19個(gè)字母,MATLAB會(huì)忽略多馀字母 我們可以隨意更改、增加或刪除向量的元素: y(3) = 2 % 更改第三個(gè)元素 y =3 7 2 5 y(6) = 10 % 加入第六個(gè)元素 y = 3 7 2 5 0 10 y(4) = % 刪除第四個(gè)元素, y = 3 7 2 0 10 在上例中,MATLAB會(huì)忽略所有在百分比符號(hào)(%)之後的文字,因此百分比之後的文字均可視為程式的注解(Comments)。MATLAB亦可取出向量的一個(gè)元素或一部份來做運(yùn)算: x(2)*3+y(4) % 取出x的第二個(gè)元素和y的第四個(gè)元素來做運(yùn)算 ans = 9 y(2:4)-1 % 取出y的第二至第四個(gè)元素來做運(yùn)算 ans = 6 1 -1 在上例中,2:4代表一個(gè)由2、3、4組成的向量 若對(duì)MATLAB函數(shù)用法有疑問,可隨時(shí)使用help來尋求線上支援(on-line help):help linspace 小整理:MATLAB的查詢命令 help:用來查詢已知命令的用法。例如已知inv是用來計(jì)算反矩陣,鍵入help inv即可得知有關(guān)inv命令的用法。(鍵入help help則顯示help的用法,請(qǐng)?jiān)嚳纯矗。?lookfor:用來尋找未知的命令。例如要尋找計(jì)算反矩陣的命令,可鍵入 lookfor inverse,MATLAB即會(huì)列出所有和關(guān)鍵字inverse相關(guān)的指令。找到所需的命令後 ,即可用help進(jìn)一步找出其用法。(lookfor事實(shí)上是對(duì)所有在搜尋路徑下的M檔案進(jìn)行關(guān)鍵字對(duì)第一注解行的比對(duì),詳見後敘。) 將列向量轉(zhuǎn)置(Transpose)後,即可得到行向量(Column vector): z = x z = 4.0000 5.2000 6.4000 7.6000 8.8000 10.0000 不論是行向量或列向量,我們均可用相同的函數(shù)找出其元素個(gè)數(shù)、最大值、最小值等: length(z) % z的元素個(gè)數(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): 對(duì)向量x的元素進(jìn)行排序(Sorting) length(x): 向量x的元素個(gè)數(shù) norm(x): 向量x的歐氏(Euclidean)長(zhǎng)度 sum(x): 向量x的元素總和 prod(x): 向量x的元素總乘積 cumsum(x): 向量x的累計(jì)元素總和 cumprod(x): 向量x的累計(jì)元素總乘積 dot(x, y): 向量x和y的內(nèi) 積 cross(x, y): 向量x和y的外積 (大部份的向量函數(shù)也可適用於矩陣,詳見下述。) 若要輸入矩陣,則必須在每一列結(jié)尾加上分號(hào)(;),如下例: A = 1 2 3 4; 5 6 7 8; 9 10 11 12; A = 1 2 3 4 5 6 7 8 9 10 11 12 同樣地,我們可以對(duì)矩陣進(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, :) = % 刪除第一和第四列(:代表所有行) A = 5 5 8 6 9 11 12 5 這幾種矩陣處理的方式可以相互疊代運(yùn)用,產(chǎn)生各種意想不到的效果,就看各位的巧思和創(chuàng)意。 小提示:在MATLAB的內(nèi)部資料結(jié)構(gòu)中,每一個(gè)矩陣都是一個(gè)以行為主(Column-oriented )的陣列(Array)因此對(duì)於矩陣元素的存取,我們可用一維或二維的索引(Index)來定址。舉例來說,在上述矩陣A中,位於第二列、第三行的元素可寫為A(2,3) (二維索引)或A(6)(一維索引,即將所有直行進(jìn)行堆疊後的第六個(gè)元素)。 此外,若要重新安排矩陣的形狀,可用reshape命令: B = reshape(A, 4, 2) % 4是新矩陣的列數(shù),2是新矩陣的行數(shù) B = 5 8 9 12 5 6 11 5 小提示: A(:)就是將矩陣A每一列堆疊起來,成為一個(gè)行向量,而這也是MATLAB變數(shù)的內(nèi)部?jī)?chǔ)存方式。以前例而言,reshape(A, 8, 1)和A(:)同樣都會(huì)產(chǎn)生一個(gè)8x1的矩陣。 MATLAB可在同時(shí)執(zhí)行數(shù)個(gè)命令,只要以逗號(hào)或分號(hào)將命令隔開: x = sin(pi/3); y = x2; z = y*10,z = 7.5000 若一個(gè)數(shù)學(xué)運(yùn)算是太長(zhǎng),可用三個(gè)句點(diǎn)將其延伸到下一行: z = 10*sin(pi/3)* . sin(pi/3); 若要檢視現(xiàn)存於工作空間(Workspace)的變數(shù),可鍵入who: who Your variables are: testfile x 這些是由使用者定義的變數(shù)。若要知道這些變數(shù)的詳細(xì)資料,可鍵入: whos Name Size Bytes Class A 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 array Grand total is 20 elements using 160 bytes 使用clear可以刪除工作空間的變數(shù): clear A A ? Undefined function or variable A. 另外MATLAB有些永久常數(shù)(Permanent constants),雖然在工作空間中看不 到,但使用者可直接取用,例如: pi ans = 3.1416 下表即為MATLAB常用到的永久常數(shù)。 小整理:MATLAB的永久常數(shù) i或j:基本虛數(shù)單位eps:系統(tǒng)的浮點(diǎn)(Floating-point)精確度 inf:無限大, 例如1/0 nan或NaN:非數(shù)值(Not a number) ,例如0/0 pi:圓周率 p(= 3.1415926.) realmax:系統(tǒng)所能表示的最大數(shù)值 realmin:系統(tǒng)所能表示的最小數(shù)值 nargin: 函數(shù)的輸入引數(shù)個(gè)數(shù) nargin: 函數(shù)的輸出引數(shù)個(gè)數(shù) 1-2、重復(fù)命令 最簡(jiǎn)單的重復(fù)命令是for圈(for-loop),其基本形式為: for 變數(shù) = 矩陣; 運(yùn)算式; end 其中變數(shù)的值會(huì)被依次設(shè)定為矩陣的每一行,來執(zhí)行介於for和end之間的運(yùn)算式。因此,若無意外情況,運(yùn)算式執(zhí)行的次數(shù)會(huì)等於矩陣的行數(shù)。 舉例來說,下列命令會(huì)產(chǎn)生一個(gè)長(zhǎng)度為6的調(diào)和數(shù)列(Harmonic sequence): x = zeros(1,6); % x是一個(gè)16的零矩陣 for i = 1:6, x(i) = 1/i; end 在上例中,矩陣x最初是一個(gè)16的零矩陣,在for圈中,變數(shù)i的值依次是1到6,因此矩陣x的第i個(gè)元素的值依次被設(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圈可以是多層的,下例產(chǎn)生一個(gè)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 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)了一個(gè)適當(dāng)大小的矩陣。若不預(yù)先配置矩陣,程式仍可執(zhí)行,但此時(shí)MATLAB需要?jiǎng)討B(tài)地增加(或減?。┚仃嚨拇笮?,因而降低程式的執(zhí)行效率。所以在使用一個(gè)矩陣時(shí),若能在事前知道其大小,則最好先使用zeros或ones等命令來預(yù)先配置所需的記憶體(即矩陣)大小。 在下例中,for圈列出先前產(chǎn)生的Hilbert矩陣的每一行的平方和: for i = h, disp(norm(i)2); % 印出每一行的平方和 end 1299/871 282/551 650/2343 524/2933 559/4431 831/8801 在上例中,每一次i的值就是矩陣h的一行,所以寫出來的命令特別簡(jiǎn)潔。 令一個(gè)常用到的重復(fù)命令是while圈,其基本形式為: while 條件式; 運(yùn)算式; end 也就是說,只要條件示成立,運(yùn)算式就會(huì)一再被執(zhí)行。例如先前產(chǎn)生調(diào)和數(shù)列的例子,我們可用while圈改寫如下: x = zeros(1,6); % x是一個(gè)16的零矩陣 i = 1; while i 0.5, disp(Given random number is greater than 0.5.); end Given random number is greater than 0.5. 1-4、集合多個(gè)命令於一個(gè)M檔案 若要一次執(zhí)行大量的MATLAB命令,可將這些命令存放於一個(gè)副檔名為m的檔案,并在 MATLAB提示號(hào)下鍵入此檔案的主檔名即可。此種包含MATLAB命令的檔案都以m為副檔名,因此通稱M檔案(M-files)。例如一個(gè)名為test.m的M檔案,包含一連串的MATLAB命令,那麼只要直接鍵入test,即可執(zhí)行其所包含的命令: pwd % 顯示現(xiàn)在的目錄 ans = D:MATLAB5bin cd c:datamlbook % 進(jìn)入test.m所在的目錄 type test.m % 顯示test.m的內(nèi)容 % This is my first test M-file. % Roger Jang, March 3, 1997 fprintf(Start of test.m!n); for i = 1:3, fprintf(i = %d - i3 = %dn, i, i3); end fprintf(End of test.m!n); test % 執(zhí)行test.m Start of test.m! i = 1 - i3 = 1 i = 2 - i3 = 8 i = 3 - i3 = 27 End of test.m! 小提示:第一注解行(H1 help line) test.m的前兩行是注解,可以使程式易於了解與管理。特別要說明的是,第一注解行通常用來簡(jiǎn)短說明此M檔案的功能,以便lookfor能以關(guān)鍵字比對(duì)的方式來找出此M檔案。舉例來說,test.m的第一注解行包含test這個(gè)字,因此如果鍵入lookfor test,MATLAB即可列出所有在第一注解行包含test的M檔案,因而test.m也會(huì)被列名在內(nèi)。 嚴(yán)格來說,M檔案可再細(xì)分為命令集(Scripts)及函數(shù)(Functions)。前述的test.m即為命令集,其效用和將命令逐一輸入完全一樣,因此若在命令集可以直接使用工作空間的變數(shù),而且在命令集中設(shè)定的變數(shù),也都在工作空間中看得到。函數(shù)則需要用到輸入引數(shù)(Input arguments)和輸出引數(shù)(Output arguments)來傳遞資訊,這就像是C語言的函數(shù),或是FORTRAN語言的副程序(Subroutines)。舉例來說,若要計(jì)算一個(gè)正整數(shù)的階乘 (Factorial),我們可以寫一個(gè)如下的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ù),直接鍵入函數(shù)名及適當(dāng)輸入引數(shù)值即可: y = fact(5) y = 120 (當(dāng)然,在執(zhí)行fact之前,你必須先進(jìn)入fact.m所在的目錄。)在執(zhí)行fact(5)時(shí), MATLAB會(huì)跳入一個(gè)下層的暫時(shí)工作空間(Temperary workspace),將變數(shù)n的值設(shè)定為5,然後進(jìn)行各項(xiàng)函數(shù)的內(nèi)部運(yùn)算,所有內(nèi)部運(yùn)算所產(chǎn)生的變數(shù)(包含輸入引數(shù)n、暫時(shí)變數(shù)i,以及輸出引數(shù)output)都存在此暫時(shí)工作空間中。運(yùn)算完畢後,MATLAB會(huì)將最後輸出引數(shù)output的值設(shè)定給上層的變數(shù)y,并將清除此暫時(shí)工作空間及其所含的所有變數(shù)。換句話說,在呼叫函數(shù)時(shí),你只能經(jīng)由輸入引數(shù)來控制函數(shù)的輸入,經(jīng)由輸出引數(shù)來得到函數(shù)的輸出,但所有的暫時(shí)變數(shù)都會(huì)隨著函數(shù)的結(jié)束而消失,你并無法得到它們的值。 小提示:有關(guān)階乘函數(shù) 前面(及後面)用到的階乘函數(shù)只是純粹用來說明MATLAB的函數(shù)觀念。若實(shí)際要計(jì)算一個(gè)正整數(shù)n的階乘(即n!)時(shí),可直接寫成prod(1:n),或是直接呼叫g(shù)amma函數(shù):gamma(n-1)。 MATLAB的函數(shù)也可以是遞式的(Recursive),也就是說,一個(gè)函數(shù)可以呼叫它本身。 舉例來說,n! = n*(n-1)!,因此前面的階乘函數(shù)可以改成遞式的寫法: function output = fact(n) % FACT Calculate factorial of a given positive integer recursively. if n = 1, % Terminating condition output = 1; return; end output = n*fact(n-1); 在寫一個(gè)遞函數(shù)時(shí),一定要包含結(jié)束條件(Terminating condition),否則此函數(shù)將會(huì)一再呼叫自己,永遠(yuǎn)不會(huì)停止,直到電腦的記憶體被耗盡為止。以上例而言,n=1即滿足結(jié)束條件,此時(shí)我們直接將output設(shè)為1,而不再呼叫此函數(shù)本身。 1-5、搜尋路徑 在前一節(jié)中,test.m所在的目錄是d:mlbook。如果不先進(jìn)入這個(gè)目錄,MATLAB就找不到你要執(zhí)行的M檔案。如果希望MATLAB不論在何處都能執(zhí)行test.m,那麼就必須將d:mlbook加入MATLAB的搜尋路徑(Search path)上。要檢視MATLAB的搜尋路徑,鍵入path即可: path MATLABPATH d:matlab5toolboxmatlabgeneral d:matlab5toolboxmatlabops d:matlab5toolboxmatlablang d:matlab5toolboxmatlabelmat d:matlab5toolboxmatlabelfun d:matlab5toolboxmatlabspecfun d:matlab5toolboxmatlabmatfun d:matlab5toolboxmatlabdatafun d:matlab5toolboxmatlabpolyfun d:matlab5toolboxmatlabfunfun d:matlab5toolboxmatlabsparfun d:matlab5toolboxmatlabgraph2d d:matlab5toolboxmatlabgraph3d d:matlab5toolboxmatlabspecgraph d:matlab5toolboxmatlabgraphics d:matlab5toolboxmatlabuitools d:matlab5toolboxmatlabstrfun d:matlab5toolboxmatlabiofun d:matlab5toolboxmatlabtimefun d:matlab5toolboxmatlabdatatypes d:matlab5toolboxmatlabdde d:matlab5toolboxmatlabdemos d:matlab5toolboxtour d:matlab5toolboxsimulinksimulink d:matlab5toolboxsimulinkblocks d:matlab5toolboxsimulinksimdemos d:matlab5toolboxsimulinkdee d:matlab5toolboxlocal 此搜尋路徑會(huì)依已安裝的工具箱(Toolboxes)不同而有所不同。要查詢某一命令是在搜尋路徑的何處,可用which命令: which expo d:matlab5toolboxmatlabdemosexpo.m 很顯然c:datamlbook并不在MATLAB的搜尋路徑中,因此MATLAB找不到test.m這個(gè)M檔案: which test c:datamlbooktest.m 要將d:mlbook加入MATLAB的搜尋路徑,還是使用path命令: path(path, c:datamlbook); 此時(shí)d:mlbook已加入MATLAB搜尋路徑(鍵入path試看看),因此MATLAB已經(jīng)看得到 test.m: which test c:datamlbooktest.m 現(xiàn)在我們就可以直接鍵入test,而不必先進(jìn)入test.m所在的目錄。 小提示:如何在其啟動(dòng)MATLAB時(shí),自動(dòng)設(shè)定所需的搜尋路徑? 如果在每一次啟動(dòng)MATLAB後都要設(shè)定所需的搜尋路徑,將是一件很麻煩的事。有兩種方法,可以使MATLAB啟動(dòng)後 ,即可載入使用者定義的搜尋路徑: 1.MATLAB的預(yù)設(shè)搜尋路徑是定義在matlabrc.m(在c:matlab之下,或是其他安裝MATLAB 的主目錄下),MATLAB每次啟動(dòng)後,即自動(dòng)執(zhí)行此檔案。因此你可以直接修改matlabrc.m ,以加入新的目錄於搜尋路徑之中。 2.MATLAB在執(zhí)行matlabrc.m時(shí),同時(shí)也會(huì)在預(yù)設(shè)搜尋路徑中尋找startup.m,若此檔案存在,則執(zhí)行其所含的命令。因此我們可將所有在MATLAB啟動(dòng)時(shí)必須執(zhí)行的命令(包含更改搜尋路徑的命令),放在此檔案中。 每次MATLAB遇到一個(gè)命令(例如test)時(shí),其處置程序?yàn)椋?1.將test視為使用者定義的變數(shù)。 2.若test不是使用者定義的變數(shù),將其視為永久常數(shù) 。 3.若test不是永久常數(shù),檢查其是否為目前工作目錄下的M檔案。 4.若不是,則由搜尋路徑尋找是否有test.m的檔案。 5.若在搜尋路徑中找不到,則MATLAB會(huì)發(fā)出嗶嗶聲并印出錯(cuò)誤訊息。 以下介紹與MATLAB搜尋路徑相關(guān)的各項(xiàng)命令。 1-6、資料的儲(chǔ)存與載入 有些計(jì)算曠日廢時(shí),那麼我們通常希望能將計(jì)算所得的儲(chǔ)存在檔案中,以便將來可進(jìn)行其他處理。MATLAB儲(chǔ)存變數(shù)的基本命令是save,在不加任何選項(xiàng)(Options)時(shí),save會(huì)將變數(shù)以二進(jìn)制(Binary)的方式儲(chǔ)存至副檔名為mat的檔案,如下述: save:將工作空間的所有變數(shù)儲(chǔ)存到名為matlab.mat的二進(jìn)制檔案。 save filename:將工作空間的所有變數(shù)儲(chǔ)存到名為filename.mat的二進(jìn)制檔案。 save filename x y z :將變數(shù)x、y、z儲(chǔ)存到名為filename.mat的二進(jìn)制檔案。 以下為使用save命令的一個(gè)簡(jiǎn)例: who % 列出工作空間的變數(shù) Your variables are: B h j y ans i x z save test B y % 將變數(shù)B與y儲(chǔ)存至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 test.mat % 刪除test.mat 以二進(jìn)制的方式儲(chǔ)存變數(shù),通常檔案會(huì)比較小,而且在載入時(shí)速度較快,但是就無法用普通的文書軟體(例如pe2或記事本)看到檔案內(nèi)容。若想看到檔案內(nèi)容,則必須加上-ascii選項(xiàng),詳見下述: save filename x -ascii:將變數(shù)x以八位數(shù)存到名為filename的ASCII檔案。Save filename x -ascii -double:將變數(shù)x以十六位數(shù)存到名為filename的ASCII檔案。 另一個(gè)選項(xiàng)是-tab,可將同一列相鄰的數(shù)目以定位鍵(Tab)隔開。 小提示:二進(jìn)制和ASCII檔案的比較 在save命令使用-ascii選項(xiàng)後,會(huì)有下列現(xiàn)象:save命令就不會(huì)在檔案名稱後加上mat的副檔名。因此以副檔名mat結(jié)尾的檔案通常是MATLAB的二進(jìn)位資料檔。 若非有特殊需要,我們應(yīng)該盡量以二進(jìn)制方式儲(chǔ)存資料。 load命令可將檔案載入以取得儲(chǔ)存之變數(shù): load filename:load會(huì)尋找名稱為filename.mat的檔案,并以二進(jìn)制格式載入。若找不到filename.mat,則尋找名稱為filename的檔案,并以ASCII格式載入。load filename -ascii:load會(huì)尋找名稱為filename的檔案,并以ASCII格式載入。 若以ASCII格式載入,則變數(shù)名稱即為檔案名稱(但不包含副檔名)。若以二進(jìn)制載入,則可保留原有的變數(shù)名稱,如下例: clear all; % 清除工作空間中的變數(shù) x = 1:10; save testfile.dat x -ascii % 將x以ASCII格式存至名為testfile.dat的檔案 load testfile.dat % 載入testfile.dat who % 列出工作空間中的變數(shù) Your variables are: testfile x 注意在上述過程中,由於是以ASCII格式儲(chǔ)存與載入,所以產(chǎn)生了一個(gè)與檔案名稱相同的變數(shù)testfile,此變數(shù)的值和原變數(shù)x完全相同。 1-7、結(jié)束MATLAB 有三種方法可以結(jié)束MATLAB: 1.鍵入exit 2.鍵入quit 3.直接關(guān)閉MATLAB的命令視窗(Command window)數(shù)值函數(shù) Nexpr表達(dá)式的機(jī)器精度近似值 Nexpr, n 表達(dá)式的n位近似值,n為任意正整數(shù) NSolvelhs=rhs, var 求方程數(shù)值解 NSolveeqn, var, n 求方程數(shù)值解,結(jié)果精度到n位 NDSolveeqns, y, x, xmin, xmax微分方程數(shù)值解 NDSolveeqns, y1,y2,., x, xmin, xmax 微分方程組數(shù)值解 FindRootlhs=rhs, x,x0 以x0為初值,尋找方程數(shù)值解 FindRootlhs=rhs, x, xstart, xmin, xmax NSumf, i,imin,imax,di 數(shù)值求和,di為步長(zhǎng) NSumf, i,imin,imax,di, j,.,. 多維函數(shù)求和 NProductf, i, imin, imax, di函數(shù)求積
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 泵類銷售員崗位面試問題及答案
- 保安隊(duì)長(zhǎng)崗位面試問題及答案
- 自動(dòng)化測(cè)試工程師崗位面試問題及答案
- 游戲數(shù)值策劃師崗位面試問題及答案
- 浙江省麗水市四校聯(lián)考2025屆高二下化學(xué)期末達(dá)標(biāo)檢測(cè)試題含解析
- 安徽師范大學(xué)附中2025屆高二下化學(xué)期末達(dá)標(biāo)檢測(cè)試題含解析
- 2025屆山西省同煤一中聯(lián)盟校高一下化學(xué)期末聯(lián)考試題含解析
- 2025屆浙江寧波市北侖區(qū)高二化學(xué)第二學(xué)期期末達(dá)標(biāo)檢測(cè)模擬試題含解析
- 公用澡堂制度管理辦法
- 幼兒園戶外活動(dòng)管理:現(xiàn)狀與對(duì)策探討
- 棧橋?qū)m?xiàng)施工方案
- 高三英語一輪復(fù)習(xí)人教版(2019)必修第一至三冊(cè)一詞多義和熟詞生義清單
- 高溫作業(yè)引發(fā)的電氣事故
- 肝癌疑難病例護(hù)理討論
- 旅游規(guī)劃與國(guó)土空間開發(fā)
- 檔案整理及數(shù)字化服務(wù)方案
- 土力學(xué)與地基基礎(chǔ)(課件)
- 全國(guó)居民身份證前6位查詢電子檔
- 公司變更登記(備案)申請(qǐng)書
- 2023年醫(yī)技類-超聲醫(yī)學(xué)(副高)考試歷年真題集錦附答案
- 《經(jīng)濟(jì)學(xué)基礎(chǔ)》課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論