MATLAB軟件基礎知識講義_第1頁
MATLAB軟件基礎知識講義_第2頁
MATLAB軟件基礎知識講義_第3頁
MATLAB軟件基礎知識講義_第4頁
MATLAB軟件基礎知識講義_第5頁
已閱讀5頁,還剩81頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

MATLAB軟件基礎§1MATLAB概述MATLAB是MATrixLABoratory(“矩陣實驗室”)的縮寫,是由美國MathWorks公司開發(fā)的集數值計算、符號計算和圖形可視化三大基本功能于一體的,功能強大、操作簡單的語言。是國際公認的優(yōu)秀數學應用軟件之一。20世紀80年代初期,CleveMoler與JohnLittle等利用C語言開發(fā)了新一代的MATLAB語言,此時的MATLAB語言已同時具備了數值計算功能和簡單的圖形處理功能。1984年,CleveMoler與JohnLittle等正式成立了Mathworks公司,把MATLAB語言推向市場,并開始了對MATLAB工具箱等的開發(fā)設計。1993年,Mathworks公司推出了基于個人計算機的MATLAB4.0版本,到了1997年又推出了MATLAB5.X版本(Release11),并在2000年又推出了最新的MATLAB6版本(Release12)?,F(xiàn)在,MATLAB已經發(fā)展成為適合多學科的大型軟件,在世界各高校,MATLAB已經成為線性代數、數值分析、數理統(tǒng)計、優(yōu)化方法、自動控制、數字信號處理、動態(tài)系統(tǒng)仿真等高級課程的基本教學工具。特別是最近幾年,MATLAB在我國大學生數學建模競賽中的應用,為參賽者在有限的時間內準確、有效的解決問題提供了有力的保證。概括地講,整個MATLAB系統(tǒng)由兩部分組成,即MATLAB內核及輔助工具箱,兩者的調用構成了MATLAB的強大功能。MATLAB語言以數組為基本數據單位,包括控制流語句、函數、數據結構、輸入輸出及面向對象等特點的高級語言,它具有以下主要特點:1)運算符和庫函數極其豐富,語言簡潔,編程效率高,MATLAB除了提供和C語言一樣的運算符號外,還提供廣泛的矩陣和向量運算符。利用其運算符號和庫函數可使其程序相當簡短,兩三行語句就可實現(xiàn)幾十行甚至幾百行C或FORTRAN的程序功能。2)既具有結構化的控制語句(如for循環(huán)、while循環(huán)、break語句、if語句和switch語句),又有面向對象的編程特性。3)圖形功能強大。它既包括對二維和三維數據可視化、圖像處理、動畫制作等高層次的繪圖命令,也包括可以修改圖形及編制完整圖形界面的、低層次的繪圖命令。4)功能強大的工具箱。工具箱可分為兩類:功能性工具箱和學科性工具箱。功能性工具箱主要用來擴充其符號計算功能、圖示建模仿真功能、文字處理功能以及與硬件實時交互的功能。而學科性工具箱是專業(yè)性比較強的,如優(yōu)化工具箱、統(tǒng)計工具箱、控制工具箱、小波工具箱、圖象處理工具箱、通信工具箱等。5)易于擴充。除內部函數外,所有MATLAB的核心文件和工具箱文件都是可讀可改的源文件,用戶可修改源文件和加入自己的文件,它們可以與庫函數一樣被調用?!?MATLAB的安裝與啟動2.1MATLAB的安裝要用MATLAB6,首先必須在計算機上安裝MATLAB6應用軟件,隨著軟件功能的不斷完善,MATLAB對計算機系統(tǒng)配置的要求越來越高。下面給出安裝和運行MATLAB6所需要的計算機系統(tǒng)配置?!鬗ATLAB6對硬件的要求CPU要求:PentiumII、PentiumIII、AMDAthlon或者更高;光驅:8倍速以上;內存:至少64MB,但推薦128MB以上;硬盤:視安裝方式不同要求不統(tǒng)一,但至少留1GB用于安裝(安裝后未必有1GB);顯卡:8位;◆MATLAB6對軟件的要求Windows95、Window98、WindowsNT或Windows2000;Word97或word2000等,用于使用MATLABNotebook;AdobeAcrobatReader用于閱讀MATLAB的PDF的幫助信息。MATLAB6的安裝和其它應用軟件類似,可按照安裝向導進行安裝,這里不再贅述。2.2MATLAB的啟動和退出與常規(guī)的應用軟件相同,MATLAB的啟動也有多種方式,首先常用的方法就是雙擊桌面的MATLAB圖標,也可以在開始菜單的程序選項中選擇MATLAB組件中的快捷方式,當然也可以在MATLAB的安裝路徑的子目錄中選擇可執(zhí)行文件“MATLAB.exe”。啟動MATLAB后,將打開一個MATLAB的歡迎界面,隨后打開MATLAB的桌面系統(tǒng)(Desktop)如圖2-1所示。圖2-1MATLAB的桌面系統(tǒng)§3MATLAB的開發(fā)環(huán)境MATLAB的開發(fā)環(huán)境就是在使用MATLAB的過程中可激活的,并且為用戶使用提供支持的集成系統(tǒng)。這里介紹幾個比較重要的如:桌面平臺系統(tǒng)、幫助系統(tǒng)和數據交換系統(tǒng)。3.1MATLAB桌面平臺桌面平臺是各桌面組件的展示平臺,默認設置情況下的桌面平臺包括6個窗口,具體如下:3.1.1MATLAB主窗口MATLAB6比早期版本增加了一個主窗口。該窗口不能進行任何計算任務的操作,只用來進行一些整體的環(huán)境參數的設置。3.1.2命令窗口(CommandWindow)命令窗口是對MATLAB進行操作的主要載體,默認的情況下,啟動MATLAB時就會打開命令窗口,顯示形式如圖1-1所示。一般來說,MATLAB的所有函數和命令都可以在命令窗口中執(zhí)行。在MATLAB命令窗口中,命令的實現(xiàn)不僅可以由菜單操作來實現(xiàn),也可以由命令行操作來執(zhí)行,下面就詳細介紹MALTAB命令行操作。實際上,掌握MALAB命令行操作是走入MATLAB世界的第一步,命令行操作實現(xiàn)了對程序設計而言簡單而又重要的人機交互,通過對命令行操作,避免了編程序的麻煩,體現(xiàn)了MATLAB所特有的靈活性。例如:%在命令窗口中輸入sin(pi/5),然后單擊回車鍵,則會得到該表達式的值sin(pi/5)ans=0.5878由例可以看出,為求得表達式的值,只需按照MALAB語言規(guī)則將表達式輸入即可,結果會自動返回,而不必像其他的程序設計語言那樣,編制冗長的程序來執(zhí)行。當需要處理相當繁瑣的計算時,可能在一行之內無法寫完表達式,可以換行表示,此時需要使用續(xù)行符“……”否則MATLAB將只計算一行的值,而不理會該行是否已輸入完畢。例如:sin(1/9*pi)+sin(2/9*pi)+sin(3/9*pi)+……sin(4/9*pi)+sin(5/9*pi)+sin(6/9*pi)+……sin(7/9*pi)+sin(8/9*pi)+sin(9/9*pi)+……ans=5.6713使用續(xù)行符之后MATLAB會自動將前一行保留而不加以計算,并與下一行銜接,等待完整輸入后再計算整個輸入的結果。在MATLAB命令行操作中,有一些鍵盤按鍵可以提供特殊而方便的編輯操作。比如:“↑”可用于調出前一個命令行,“↓”可調出后一個命令行,避免了重新輸入的麻煩。當然下面即將講到的歷史窗口也具有此功能。3.1.3歷史窗口(CommandHistory)歷史命令窗口是MATLAB6新增添的一個用戶界面窗口,默認設置下歷史命令窗口會保留自安裝時起所有命令的歷史記錄,并標明使用時間,以方便使用者的查詢。而且雙擊某一行命令,即在命令窗口中執(zhí)行該命令。3.1.4發(fā)行說明書窗口(LaunchPad)發(fā)行說明書窗口是MATLAB6所特有的,用來說明用戶所擁有的Mathworks公司產品的工具包、演示以及幫助信息。當選中該窗口中的某個組件之后,可以打開相應的窗口工具包。3.1.5當前目錄窗口(CurrentDirectory)在當前目錄窗口中可顯示或改變當前目錄,還可以顯示當前目錄下的文件,包括文件名、文件類型、最后修改時間以及該文件的說明信息等并提供搜索功能。3.1.6工作空間管理窗口(Workspace)工作空間管理窗口是MATLAB的重要組成部分。在工作空間管理窗口中將顯示所有目前保存在內存中的MATLAB變量的變量名、數據結構、字節(jié)數以及類型,而不同的變量類型分別對應不同的變量名圖標。3.2MATLAB幫助系統(tǒng)完善的幫助系統(tǒng)是任何應用軟件必要的組成部分。MATLAB提供了相當豐富的幫助信息,同時也提供了獲得幫助的方法。首先,可以通過桌面平臺的【Help】菜單來獲得幫助,也可以通過工具欄的幫助選項獲得幫助。此外,MATLAB也提供了在命令窗口中的獲得幫助的多種方法,在命令窗口中獲得MATLAB幫助的命令及說明列于表3-1中。其調用格式為:命令+指定參數表3-1命令說明doc在幫助瀏覽器中顯示指定函數的參考信息help在命令窗口中顯示M文件幫助helpbrowser打開幫助瀏覽器,無參數helpwin打開幫助瀏覽器,并且見初始界面置于MATLAB函數的M文件幫助信息lookfor在命令窗口中顯示具有指定參數特征函數的M文件幫助web顯示指定的網絡頁面,默認為MATLAB幫助瀏覽器例如:>>helpsinSINSineSIN(X)isthesineoftheelementsofXOverloadedmethodsHelpsym/sin.m另外也可以通過在組件平臺中調用演示模型(demo)來獲得特殊幫助。3.3數據交換系統(tǒng)MATLAB提供了多種方法將數據從磁盤或剪貼板中讀入MATLAB工作空間。具體的讀寫方法可依據用戶的喜好以及數據的類型來選擇。這里主要介紹文本數據的讀入。對于文本數據(ASCII)而言,最簡單的讀入方法就是通過MATLAB的數據輸入向導(ImportWizard),也可以通過MATLAB函數實現(xiàn)數據讀入。例如,對于文本文件test.txt:students’scoresEnglishChineseMathmaticsWang9998100Li988970Zhang809097Zhao776587下面通過上述兩種方法將該文件數據讀入MATLAB工作空間,先介紹MATLAB數據交換系統(tǒng)對文本數據的識別。此時文件的前幾行(此處為“students’scores”)將被識別為文件頭,文件頭可以為一行或幾行,也可以識別出數據的列頭(此處為:“English”、“Chinese”、和“Mathmatics”)和行頭(此處為“wang”、“l(fā)i”、“zhang”和“zhao”),其余的為可分斷數據(此處為“99”、“98”、和“100”等)。首先是通過數據輸入向導編輯器讀入數據,通過桌面平臺上的【File】菜單中的【ImportData】選項打開輸入向導編輯器,按向導提示進行操作完成整個文本數據的輸入,則用戶可以在MATLAB開發(fā)環(huán)境中使用該文本數據。例如:>>whosNameSizeBytesClassData4396doublearrayGrandtotalis12elementsusing96bytes>>DataData=981008970809097776587“whos”用于顯示當前MATLAB工作空間的變量,而在命令窗口中輸入data后,將顯示該數據。在命令窗口或M文件中調用相應的函數也可以實現(xiàn)數據的讀入。例如:>>[a,b,c,d]=textread(‘text.txt’,‘%s%s%s%s’,‘headlines’,2)(讀者可親自上機看結果)§4MATLAB數值計算功能MATLAB強大的數值計算功能使其在諸多數學計算軟件中傲視群雄,是MATLAB軟件的基礎。本節(jié)將簡要介紹MATLAB的數據類型、矩陣的建立及運算。4.1MATLAB數據類型MATLAB的數據類型主要包括:數字、字符串、矩陣、單元型數據及結構型數據等,限于篇幅我們將重點介紹其中幾個常用類型。4.1.1變量與常量變量是任何程序設計語言的基本要素之一,MATLAB語言當然也不例外。與常規(guī)的程序設計語言不同的MATLAB并不要求事先對所使用的變量進行聲明,也不需要指定變量類型,MATLAB語言會自動依據所賦予變量的值或對變量所進行的操作來識別變量的類型。在賦值過程中如果賦值變量已存在時,MATLAB語言將使用新值代替舊值,并以新值類型代替舊值類型。在MATLAB語言中變量的命名應遵循如下規(guī)則:(1)變量名區(qū)分大小寫。(2)變量名長度不超31位,第31個字符之后的字符將被MATLAB語言所忽略。(3)變量名以字母開頭,可以是字母、數字、下劃線組成,但不能使用標點。與其他的程序設計語言相同,在MATLAB語言中也存在變量作用域的問題。在未加特殊說明的情況下,MATLAB語言將所識別的一切變量視為局部變量,即僅在其使用的M文件內有效。若要將變量定義為全局變量,則應當對變量進行說明,即在該變量前加關鍵字global。一般來說全局變量均用大寫的英文字符表示。MATLAB語言本身也具有一些預定義的變量,這些特殊的變量稱為常量。表4-1給出了MATLAB語言中經常使用的一些常量值。表4-1常量表示數值pi圓周率eps浮點運算的相對精度inf正無窮大NaN表示不定值realmax最大的浮點數i,j虛數單位在MATLAB語言中,定義變量時應避免與常量名重復,以防改變這些常量的值,如果已改變了某外常量的值,可以通過“clear+常量名”命令恢復該常量的初始設定值(當然,也可通過重新啟動MATLAB系統(tǒng)來恢復這些常量值)。4.1.2數字變量的運算及顯示格式MALAB是以矩陣為基本運算單元的,而構成數值矩陣的基本單元是數字。為了更好地學習和掌握矩陣的運算,首先對數字的基本知識作簡單的介紹。對于簡單的數字運算,可以直接在命令窗口中以平常慣用的形式輸入,如計算2和3的乘積再加1時,可以直接輸入:>>1+2*3ans=7這里“ans”是指當前的計算結果,若計算時用戶沒有對表達式設定變量,系統(tǒng)就自動賦當前結果給“ans”變量。用戶也可以輸入:>>a=1+2*3a=7此時系統(tǒng)就把計算結果賦給指定的變量a了。MATLAB語言中數值有多種顯示形式,在缺省情況下,若數據為整數,則就以整數表示;若數據為實數,則以保留小數點后4位的精度近似表示。MATLAB語言提供了10種數據顯示格式,常用的有下述幾種格式:short小數點后4位(系統(tǒng)默認值)long小數點后14位shorte5位指數形式longe15位指數形式MATLAB語言還提供了復數的表達和運算功能。在MATLAB語言中,復數的基本單位表示為i或j。在表達簡單數數值時虛部的數值與i、j之間可以不使用乘號,但是如果是表達式,則必須使用乘號以識別虛部符號。4.1.3字符串字符和字符串運算是各種高級語言必不可少的部分,MATLAB中的字符串是其進行符號運算表達式的基本構成單元。在MATLAB中,字符串和字符數組基本上是等價的;所有的字符串都用單引號進行輸入或賦值(當然也可以用函數char來生成)。字符串的每個字符(包括空格)都是字符數組的一個元素。例如:>>s=’matrixlaboratory’;s=matrixlaboratory>>size(s)%size查看數組的維數ans=117另外,由于MATLAB對字符串的操作與C語言幾乎完全相同這里不在贅述。4.2矩陣及其運算矩陣是MATLAB數據存儲的基本單元,而矩陣的運算是MATLAB語言的核心,在MATLAB語言系統(tǒng)中幾乎一切運算均是以對矩陣的操作為基礎的。下面重點介紹矩陣的生成、矩陣的基本運算和矩陣的數組運算。4.2.1矩陣的生成直接輸入法從鍵盤上直接輸入矩陣是最方便、最常用的創(chuàng)建數值矩陣的方法,尤其適合較小的簡單矩陣。在用此方法創(chuàng)建矩陣時,應當注意以下幾點:輸入矩陣時要以“[]”為其標識符號,矩陣的所有元素必須都在括號內。矩陣同行元素之間由空格或逗號分隔,行與行之間用分號或回車鍵分隔。矩陣大小不需要預先定義。矩陣元素可以是運算表達式。若“[]”中無元素表示空矩陣。另外,在MATLAB語言中冒號的作用是最為豐富的。首先,可以用冒號來定義行向量。例如:>>a=1:0.5:4a=Columns1through711.522.533.54其次,通過使用冒號,可以截取指定矩陣中的部分。例如:>>A=[123;456;789]A=123456789>>B=A(1:2,:)B=123456通過上例可以看到B是由矩陣A的1到2行和相應的所有列的元素構成的一個新的矩陣。在這里,冒號代替了矩陣A的所有列。2.外部文件讀入法MATLAB語言也允許用戶調用在MATLAB環(huán)境之外定義的矩陣??梢岳萌我獾奈谋揪庉嬈骶庉嬎褂玫木仃嚕仃囋刂g以特定分斷符分開,并按行列布置。讀入矩陣的一種方法可參考3.3節(jié)數據交換系統(tǒng)。另外也可以利用load函數,其調用方法為:Load+文件名[參數]Load函數將會從文件名所指定的文件中讀取數據,并將輸入的數據賦給以文件名命名的變量,如果不給定文件名,則將自動認為matlab.mat文件為操作對象,如果該文件在MATLAB搜索路徑中不存在時,系統(tǒng)將會報錯。例如:事先在記事本中建立文件:111(并以data1.txt保存)123136在MATLAB命令窗口中輸入:>>loaddata1.txt>>data1data1=1111231363.特殊矩陣的生成對于一些比較特殊的矩陣(單位陣、矩陣中含1或0較多),由于其具有特殊的結構,MATLAB提供了一些函數用于生成這些矩陣。常用的有下面幾個:zeros(m)生成m階全0矩陣eye(m)生成m階單位矩陣ones(m)生成m階全1矩陣rand(m)生成m階均勻分布的隨機陣randn(m)生成m階正態(tài)分布的隨機矩陣4.2.2矩陣的基本數學運算矩陣的基本數學運算包括矩陣的四則運算、與常數的運算、逆運算、行列式運算、秩運算、特征值運算等基本函數運算,這里進行簡單介紹。1.四則運算矩陣的加、減、乘運算符分別為“+,—,*”,用法與數字運算幾乎相同,但計算時要滿足其數學要求(如:同型矩陣才可以加、減)。在MATLAB中矩陣的除法有兩種形式:左除“\”和右除“/”。在傳統(tǒng)的MATLAB算法中,右除是先計算矩陣的逆再相乘,而左除則不需要計算逆矩陣直接進行除運算。通常右除要快一點,但左除可避免被除矩陣的奇異性所帶來的麻煩。在MATLAB6中兩者的區(qū)別不太大。2.與常數的運算常數與矩陣的運算即是同該矩陣的每一元素進行運算。但需注意進行數除時,常數通常只能做除數。3.基本函數運算矩陣的函數運算是矩陣運算中最實用的部分,常用的主要有以下幾個:det(a)求矩陣a的行列式eig(a)求矩陣a的特征值inv(a)或a^(-1)求矩陣a的逆矩陣rank(a)求矩陣a的秩trace(a)求矩陣a的跡(對角線元素之和)例如:>>a=[21–3–1;3107;-124–2;10–15];>>a1=det(a);>>a2=det(inv(a));>>a1*a2ans=1注意:命令行后加“;”表示該命令執(zhí)行但不顯示執(zhí)行結果。4.2.2矩陣的數組運算我們在進行工程計算時常常遇到矩陣對應元素之間的運算。這種運算不同于前面講的數學運算,為有所區(qū)別,我們稱之為數組運算。1.基本數學運算數組的加、減與矩陣的加、減運算完全相同。而乘除法運算有相當大的區(qū)別,數組的乘除法是指兩同維數組對應元素之間的乘除法,它們的運算符為“.*”和“./”或“.\”。前面講過常數與矩陣的除法運算中常數只能做除數。在數組運算中有了“對應關系”的規(guī)定,數組與常數之間的除法運算沒有任何限制。另外,矩陣的數組運算中還有冪運算(運算符為.^)、指數運算(exp)、對數運算(log)、和開方運算(sqrt)等。有了“對應元素”的規(guī)定,數組的運算實質上就是針對數組內部的每個元素進行的。例如:>>a=[21-3-1;3107;-124-2;10-15];>>a^3ans=32-28-1013499-12-151239-14993851-17-98139>>a.^3ans=81-27-12710343-1864-810-1125由上例可見矩陣的冪運算與數組的冪運算有很大的區(qū)別。2.邏輯關系運算邏輯運算是MATLAB中數組運算所特有的一種運算形式,也是幾乎所有的高級語言普遍適用的一種運算。它們的具體符號、功能及用法見表4-2。表4-2符號運算符功能函數名==等于eq~=不等于ne<小于lt>大于gt<=小于等于le>=大于等于ge&邏輯與and|邏輯或or~邏輯非not說明:●在關系比較中,若比較的雙方為同維數組,則比較的結果也是同維數組。它的元素值由0和1組成。當比較雙方對應位置上的元素值滿足比較關系時,它的對應值為1,否則為0。●當比較的雙方中一方為常數,另一方為一數組,則比較的結果與數組同維。●在算術運算、比較運算和邏輯與、或、非運算中,它們的優(yōu)先級關系先后為:比較運算、算術運算、邏輯與或非運算。例如:>>a=[123;456;789];>>x=5;>>y=ones(3)*5;>>xa=x<=axa=000011111>>b=[010;101;001];>>ab=a&bab=010101001§5MATLAB圖形功能MATLAB有很強的圖形功能,可以方便地實現(xiàn)數據的視覺化。強大的計算功能與圖形功能相結合為MATLAB在科學技術和教學方面的應用提供了更加廣闊的天地。下面著重介紹二維圖形的畫法,對三維圖形只作簡單敘述。5.1二維圖形的繪制5.1.1基本形式二維圖形的繪制是MATLAB語言圖形處理的基礎,MATLAB最常用的畫二維圖形的命令是plot,看兩個簡單的例子:>>y=[00.580.700.950.830.25];>>plot(y)生成的圖形見圖5-1,是以序號為橫坐標、數組y的數值為縱坐標畫出的折線。>>x=linspace(0,2*pi,30);%生成一組線性等距的數值>>y=sin(x);>>plot(x,y)生成的圖形見圖5-2,是上30個點連成的光滑的正弦曲線。圖5-1圖5-25.1.2多重線在同一個畫面上可以畫許多條曲線,只需多給出幾個數組,例如>>x=0:pi/15:2*pi;>>y1=sin(x);>>y2=cos(x);>>plot(x,y1,x,y2)則可以畫出圖5-3。多重線的另一種畫法是利用hold命令。在已經畫好的圖形上,若設置holdon,MATLA將把新的plot命令產生的圖形畫在原來的圖形上。而命令holdoff將結束這個過程。例如:>>x=linspace(0,2*pi,30);y=sin(x);plot(x,y)先畫好圖5-2,然后用下述命令增加cos(x)的圖形,也可得到圖5-3。>>holdon>>z=cos(x);plot(x,z)>>holdoff圖5-3圖5-45.1.3線型和顏色MATLAB對曲線的線型和顏色有許多選擇,標注的方法是在每一對數組后加一個字符串參數,說明如下:線型線方式:-實線:點線-.虛點線--波折線。線型點方式:.圓點+加號*星號xx形o小圓顏色:y黃;r紅;g綠;b藍;w白;k黑;m紫;c青.以下面的例子說明用法:>>x=0:pi/15:2*pi;>>y1=sin(x);y2=cos(x);>>plot(x,y1,’b:+’,x,y2,’g-.*’)可得圖形5-4。5.1.4網格和標記在一個圖形上可以加網格、標題、x軸標記、y軸標記,用下列命令完成這些工作。>>x=linspace(0,2*pi,30);y=sin(x);z=cos(x);>>plot(x,y,x,z)>>grid>>xlabel(‘IndependentVariableX’)>>ylabel(‘DependentVariablesYandZ’)>>title(‘SineandCosineCurves’)它們產生圖5-5:圖5-5也可以在圖形的任何位置加上一個字符串,如用:>>text(2.5,0.7,’sinx’)表示在坐標x=2.5,y=0.7處加上字符串sinx。更方便的是用鼠標來確定字符串的位置,方法是輸入命令:>>gtext(‘sinx’)在圖形窗口十字線的交點是字符串的位置,用鼠標點一下就可以將字符串放在那里。5.1.5坐標系的控制在缺省情況下MATLAB自動選擇圖形的橫、縱坐標的比例,如果你對這個比例不滿意,可以用axis命令控制,常用的有:axis([xminxmaxyminymax])[]中分別給出x軸和y軸的最大值、最小值axisequal或axis(‘equal’)x軸和y軸的單位長度相同axissquare或axis(‘square’)圖框呈方形axisoff或axis(‘off’)清除坐標刻度還有axisautoaxisimageaxisxyaxisijaxisnormalaxisonaxis(axis)用法可參考在線幫助系統(tǒng)。5.1.6多幅圖形可以在同一個畫面上建立幾個坐標系,用subplot(m,n,p)命令;把一個畫面分成m×n個圖形區(qū)域,p代表當前的區(qū)域號,在每個區(qū)域中分別畫一個圖,如>>x=linspace(0,2*pi,30);y=sin(x);z=cos(x);>>u=2*sin(x).*cos(x);v=sin(x)./cos(x);>>subplot(2,2,1),plot(x,y),axis([02*pi–11]),title(‘sin(x)’)>>subplot(2,2,2),plot(x,z),axis([02*pi–11]),title(‘cos(x)’)>>subplot(2,2,3),plot(x,u),axis([02*pi–11]),title(‘2sin(x)cos(x)’)>>subplot(2,2,4),plot(x,v),axis([02*pi–2020]),title(‘sin(x)/cos(x)’)共得到4幅圖形,見圖5-6.圖5-65.2三維圖形限于篇幅這里只對幾種常用的命令通過例子作簡單介紹.5.2.1帶網格的曲面例作曲面z=f(x,y)的圖形用以下程序實現(xiàn):>>x=-7.5:0.5;7.5;>>y=x;>>[X,Y]=meshgrid(x,y);(3維圖形的X,Y數組)>>R=sqrt(X.^2+Y.^2)+eps;(加eps是防止出現(xiàn)0/0)>>Z=sin(R)./R;>>mesh(X,Y,Z)(3維網格表面)畫出的圖形如圖5-7.mesh命令也可以改為surf,只是圖形效果有所不同,讀者可以上機查看結果。圖5-7圖5-85.2.2空間曲線例作螺旋線x=sint,y=cost,z=t用以下程序實現(xiàn):>>t=0:pi/50:10*pi;>>plot3(sin(t),cos(t),t)(空間曲線作圖函數,用法類似于plot)畫出的圖形如圖5-85.2.3等高線用contour或contour3畫曲面的等高線,如對圖5-7的曲面,在上面的程序后接contour(X,Y,Z,10)即可得到10條等高線。5.2.4其它較有用的是給三維圖形指定觀察點的命令view(azi,ele),azi是方位角,ele是仰角.缺省時azi=ele=.5.3圖形的輸出在數學建模中,往往需要將產生的圖形輸出到Word文檔中。通??刹捎孟率龇椒ǎ菏紫?,在MATLAB圖形窗口中選擇【File】菜單中的【Export】選項,將打開圖形輸出對話框,在該對話框中可以把圖形以emf、bmp、jpg、pgm等格式保存。然后,再打開相應的文檔,并在該文檔中選擇【插入】菜單中的【圖片】選項插入相應的圖片即可。§6程序設計MATLAB作為一種高級語言,它不僅可以如前幾節(jié)所介紹的那樣,以一種人機交互式的命令行的方式工作,還可以像BASIC、FORTRAN、C等其他高級計算機語言一樣進行控制流的程序設計,即編制一種以.m為擴展名的MATLAB程序(簡稱M文件)。而且,由于MATLAB本身的一些特點,M文件的編制同上述幾種高級語言比較起來,有許多無法比擬的優(yōu)點。6.1M文件所謂M文件就是由MATLAB語言編寫的可在MATLAB語言環(huán)境下運行程序源代碼文件。由于商用的MATLAB軟件是用C語言編寫而成。因此,M文件的語法與C語言十分相似。對廣大參加建模競賽且學過C語言的同學來說,M文件的編寫是相當容易的。M文件可以分為腳本文件(Script)和函數文件(Function)兩種。M文件不僅可以在MATLAB的程序編輯器中編寫,也可以在其他的文本編輯器中編寫,并以“m”為擴展名加以存儲。6.1.1腳本文件腳本類似于DOS下的批處理文件,不需要在其中輸入參數,也不需要給出輸出變量來接受處理結果,腳本僅是若干命令或函數的集合,用于執(zhí)行特定的功能。腳本的操作對象為MATLAB工作空間內的變量,并且在腳本執(zhí)行結束后,腳本中對變量的一切操作均會被保留。在MATLAB語言中也可以在腳本內部定義變量,并且該變量將會自動地被加入到當前的MATLAB工作空間中,并可以為其他的腳本或函數引用,直到MATLAB被關閉或采用一定的命令將其刪除。例如:%命令窗口中定義矩陣a,ba=pascal(3)a=111123136b=magic(3)b=816357492%在編輯器中編寫下述命令a=a+bb=a-ba=a-b在編輯器中編輯完上例的腳本文件后,保存至文件scripts—example中,然后在工作窗口中調用該腳本文件,scripts—example>>aa=816357492>>bb=111123136其中矩陣a、b均是在工作空間中已定義完畢的,腳本運行時直接使用該變量,并對其進行操作,然后在命令窗口中調用該腳本,可以看到變量a、b已經進行了相互交換。6.1.2函數文件MATLAB語言中,相對于腳本文件而言,函數文件是較為復雜的。函數需要給定輸入參數,并能夠對輸入變量進行若干操作,實現(xiàn)特定的功能,最后給出一定的輸出結果或圖形等,其操作對象為函數的輸入變量和函數內的局部變量等。MATLAB語言的函數文件包含如下5個部分。函數題頭:指函數的定義行,是函數語句的第一行,在該行中將定義函數名、輸入變量列表及輸出變量列表等。HI行:指函數幫助文本的第一行,為該函數文件的幫助主題,當使用lookfor命令時,可以查看到該行信息。幫助信息:這部分提供了函數的完整的幫助信息,包括HI之后至第一個可執(zhí)行行或空行為止的所有注釋語句,通過MATLAB語言的幫助系統(tǒng)查看函數的幫助信息時,將顯示該部分。函數體;指函數代碼段,也是函數的主體部分。注釋部分:指對函數體中各語句的解釋和說明文本,注釋語句是以%引導的。例如:function[output,output2]=function—example(input1,input2)%函數題頭%Thisisfunctiontoexchangetwomatrices%HI行%input1,input2areinputvariables%幫助信息%output1,output2areoutputvariables%幫助信息output1=input2;%函數體output2=input1;%函數體%Theendofthisexamplefunction[a,b]=function---example(a,b)a=816357492b=111123136可以看到通過使用函數可以和上一節(jié)中的示例一樣同等矩陣a、b進行了相互交換。在該函數題頭中,“function”為MATLAB語言中函數的標示符,而function---example為函數名,input1、input2為輸入變量,而output1、output2為輸出變量,實際調用過程中,可以用有意義的變量替代使用。題頭的定義是有一定的格式要求的,輸出變量是由中括號標識的,而輸入變量是由小括號標識的,各變量間用逗號間隔,應該注意到,函數的輸入變量引用的只是該變量的值而非其他值,所以函數內部對輸入變量的操作不會帶回到工作空間中。函數題頭下的第一行注釋語句為HI行,可以通過lookfor命令查看;函數的幫助信息可以通過help命令查看。函數體是函數的主體部分,也是實現(xiàn)編程目的的核心所在,它包括所有可執(zhí)行的一切MATLAB語言代碼。在函數體中“%”后的部分為注釋語句,注釋語句主要是對程序代碼進行說明解釋,使程序易于理解,也有利于程序的維護。MATLAB語言中將一行內百分號后所有文本均視為注釋部分,在程序的執(zhí)行過程中不被解釋,并且百分號出現(xiàn)的位置也沒有明確的規(guī)定,可以是一行的首位,這樣,整行文本均為注釋語句,也可以是在行中的某個位置,這樣其后所有文本將被視為注釋語句,這也展示了MATLAB語言在編程中的靈活性。盡管在上文中介紹了函數文件的5個組成部分,但是并不是所有的函數文件都需要全部的這5個部分,實際上,5部分中只有函數題頭是一個函數文件所必需的,而其他的4個部分均可省略。當然,如果沒有函數體則為一空函數,不能產生任何作用。在MATLAB語言中,存儲M文件時文件名應當與文件內主函數名相一致,這是因為在調用M文件時,系統(tǒng)查詢的相應的文件而不是函數名,如果兩者不一致,則或者打不開目的文件,或者打開的是其他文件。鑒于這種查詢文件的方式與以往程序設計語言不同,在其他的語言系統(tǒng)中,函數的調用都是指對函數名本身的,所以,建議在存儲M文件時,應將文件名與主函數名統(tǒng)一起來,以便于理解和使用。6.2函數變量及變量作用域在MATLAB語言的函數中,變量主要有輸入變量、輸出變量及函數內所使用的變量。輸入變量相當于函數入口數據,是一個函數操作的主要對象。某種程度上講,函數的作用就是對輸入變量進行加工以實現(xiàn)一定的功能。如前節(jié)所述,函數的輸入變量為形式參數,即只傳遞變量的值而不傳遞變量的地址,函數對輸入變量的一切操作和修改如果不依靠輸出變量傳出的話,將不會影響工作空間中該變量的值。MATLAB語言提供了函數nargin和函數varargin來控制輸入變量的個數,以實現(xiàn)不定個數參數輸入的操作。函數對于函數變量而言,還應當指出的是其作用域的問題。在MATLAB語言中,函數內定義的變量均被視為局部變量,即不加載到工作空間中,如果希望使用全局變量,則應當使用命令global定義,而且在任何使用該全局變量的函數中都應加以定義。在命令窗口中也不例外。例如:%這里一個全局變量的示例function[num1,num2,num3]=text(varargin)globalfirstlevelsecondlevel%定義全局變量num1=0;num2=0;num3=0;list=zeros(nargin);fori=1:narginlist(i)=sum(varargin{i}(:));list(i)=list(i)/length(varargin{i});iflist(i)>firstlevelnum1=num1+1elseiflist(i)>secondlevelnum2=num2+1;elsenum3=num3+1;endend%在命令窗口中也應定義相應的全局變量>>globalfirstlevelsecondlevel>>firstlevel=85;>>secondlevel=75;(程序運行結果略)從該例中可以看到,定義全局變量時,與定義輸入變量和輸出變量不同,變量之間必須用空格分隔,而不能用逗號分隔,否則系統(tǒng)將不能識別逗號后的全局變量。6.3子函數與局部函數在MATLAB語言中,與其他的程序設計語言類似,也可以定義子函數,以擴充函數的功能。在函數文件中題頭中所定義的函數為主函數,而在函數體內定義的其他函數均被視為子函數。子函數只能被主函數或同一主函數下其他的子函數所調用。在MATLAB語言中將放置在目錄private下的函數稱為局部函數,這些函數只能被private目錄的父目錄中函數調用,而不能被其他的目錄的函數調用。局部函數與子函數所不同的是局部函數可以被其父目錄下的所有函數所調用,而子函數則只能為其所在的M文件的主函數所調用,所以局部函數可應用范圍大于子函數;在函數編輯的結構上,局部函數與一般的函數文件的編輯相同,而子函數則只能在主函數文件中編輯。當在MATLAB的M文件中調用函數時,首先將檢測該函數是否為此文件的子函數;如果不是的話,再檢測是否為可用的局部函數;當結果仍然為否定時,再檢測該函數是否為MATLAB搜索路徑上的其他M文件。6.4流程控制語句如其他的程序設計語言一樣,MATLAB語言也給出了豐富的流程控制語句,以實現(xiàn)具體的程序設計。在命令窗口中的操作雖然可以實現(xiàn)人面交互,但是所能實現(xiàn)的功能卻相對簡單,雖然也可以在命令窗口中使用流程控制語句,但是由于命令窗口中交互式的執(zhí)行方式,使用得這樣的操作極為不方便;而在M文件中,通過對流程控制語句的組合使用,可以實現(xiàn)多種復雜功能。MATLAB語言的流程控制語句主要有for、while、if-else-end及switch-case等4種語句。6.4.1for語句for循環(huán)語句是流程控制語句中的基礎,使用該循環(huán)語句可以以指定的次數重復執(zhí)行循環(huán)體內的語句。for循環(huán)語句的調用形式為:for循環(huán)控制變量=〈循環(huán)次數設定〉循環(huán)體end例如:fori=1:2:12s=s+i;end在上例中,循環(huán)次數由數組1:2:12決定,設定循環(huán)次數的數組可以是已定義的數組,也可以在for循環(huán)語句中定義,此時定義的格式為:〈初始值〉:〈步長〉:〈終值〉初始值為循環(huán)變量的初始設定值,每執(zhí)行循環(huán)體一次,循環(huán)控制變量將增加步長大小,直至循環(huán)控制變量的值大于終值時循環(huán)結束,這里步長是可以為負的。在for循環(huán)語句中,循環(huán)體內不能出現(xiàn)對循環(huán)控制變量的重新設置,否則將會出錯,for循環(huán)允許嵌套使用。6.4.2while語句while循環(huán)語句與for循環(huán)語句不同的是,前者是以條件的滿足與否來判斷循環(huán)是否結束的,而后者則是以執(zhí)行次數是否達到指定值為判斷的。while循環(huán)語句的一般形式為:while〈循環(huán)判斷的語句〉循環(huán)體end其中循環(huán)判斷語句為某種形式的邏輯判斷表達式,當該表達式的值為真時,就執(zhí)行循環(huán)體內的語句;當表達式的邏輯值為假時,就退出當前的循環(huán)體。如果循環(huán)判斷語句為矩陣時,當且僅當所有的矩陣元素非零時,邏輯表達式的值為真。在while循環(huán)語句中,在語句內必須有可以修改循環(huán)控制變量的命令,否則該循環(huán)語言將陷入死循環(huán)中,除非循環(huán)語句中有控制退出循環(huán)的命令,如break語句。當程序流程運行至該命令時,則不論循環(huán)控制變量是否滿足循環(huán)判斷語句均將退出當前循環(huán),執(zhí)行循環(huán)后的其他語句。與break語句對應,MATLAB還提供了continue命令用于控制循環(huán),當程序流運行至該命令時會忽略其后的循環(huán)體操作轉而執(zhí)行下一層次的循環(huán)。當循環(huán)控制語句為一空矩陣時,將不執(zhí)行循環(huán)體的操作而直接執(zhí)行其后的其他命令語句,即空矩陣被認為是假。6.4.3if-else-end語句條件判斷語句也是程序設計語言中流程控制語句之一。使用該語句,可以選擇執(zhí)行指定的命令,MATLAB語言中的條件判斷語句是if-else-end語句。if-else-end語句的一般形式為:if〈邏輯判斷語句〉邏輯值為“真”時執(zhí)行的語句else邏輯值為“假”時執(zhí)行的語句end當邏輯判斷表達式為“真”時,將執(zhí)行if與else語句間的命令,否則將執(zhí)行else與end語句間的命令。例如:ifa=1a=a+1elsea=a+2end在MATLAB語言的if-else-end語句中的eles子句是可選項,即語句中可以不包括else子句的條件判斷。在程序設計中,也經常碰到需要進行多重邏輯選擇的問題,這時可以采用if-else-end語句的嵌套形式:if〈邏輯判斷語句1〉邏輯值1為“真”時的執(zhí)行語句elseif〈邏輯判斷語句2〉邏輯值2“真”時的執(zhí)行語句elseif〈邏輯判斷語句3〉……else當以上所有的邏輯值均為假時的執(zhí)行語句 end在以上的各層次的邏輯判斷中,若其中任意一層邏輯判斷為真,則將執(zhí)行對應的執(zhí)行語句,并跳出該條件判斷語句,其后的邏輯判斷語句均不進行檢查。6.4.4switch-case語句if-else-end語句所對應的是多重判斷選擇,而有時也會遇到多分支判斷選擇的問題。MATLAB語言為解決多分支判斷選擇提供了switch-case語句。switch-case語句的一般表達形式為:switch〈選擇判斷量〉Case選擇判斷值1選擇判斷語句1case選擇判斷值2選擇判斷語句2……otherwise判斷執(zhí)行語句end與其他的程序設計語言的switch-case語句不同的是,在MATLAB語言中,當其中一個case語句后的條件為真時,switch-case語句不對其后的case語句進行判斷,也就是說在MATLAB語言中,即使有多條case判斷語句為真,也只執(zhí)行所遇到的第一條為真的語句。這樣就不必像C語言那樣,在每條case語句后加上break語句以防止繼續(xù)執(zhí)行后面為真的case條件語句?!?MATLAB的應用7.1MATLAB在數值分析中的應用插值與擬合是來源于實際、又廣泛應用于實際的兩種重要方法。隨著計算機的不斷發(fā)展及計算水平的不斷提高,它們已在國民生產和科學研究等方面扮演著越來越重要的角色。下面對插值中分段線性插值、擬合中的最為重要的最小二乘法擬合加以介紹。7.1.1分段線性插值所謂分段線性插值就是通過插值點用折線段連接起來逼近原曲線,這也是計算機繪制圖形的基本原理。實現(xiàn)分段線性插值不需編制函數程序,MATLAB自身提供了內部函數interp1其主要用法如下:interp1(x,y,xi)一維插值◆yi=interp1(x,y,xi)對一組點(x,y)進行插值,計算插值點xi的函數值。x為節(jié)點向量值,y為對應的節(jié)點函數值。如果y為矩陣,則插值對y的每一列進行,若y的維數超出x或xi的維數,則返回NaN?!魕i=interp1(y,xi)此格式默認x=1:n,n為向量y的元素個數值,或等于矩陣y的size(y,1)?!魕i=interp1(x,y,xi,’method’)method用來指定插值的算法。默認為線性算法。其值常用的可以是如下的字符串?!駈earest線性最近項插值?!駆inear線性插值?!駍pline三次樣條插值?!馽ubic三次插值。所有的插值方法要求x是單調的。x也可能并非連續(xù)等距的。正弦曲線的插值示例:>>x=0:0.1:10;>>y=sin(x);>>xi=0:0.25:10;>>yi=interp1(x,y,xi);>>plot(x,y,’0’,xi,yi)則可以得到相應的插值曲線(讀者可自己上機實驗)。Matlab也能夠完成二維插值的運算,相應的函數為interp2,使用方法與interpl基本相同,只是輸入和輸出的參數為矩陣,對應于二維平面上的數據點,詳細的用法見Matlab聯(lián)機幫助。7.1.2最小二乘法擬合在科學實驗的統(tǒng)計方法研究中,往往要從一組實驗數據中尋找出自變量x和因變量y之間的函數關系y=f(x)。由于觀測數據往往不夠準確,因此并不要求y=f(x)經過所有的點,而只要求在給定點上誤差按照某種標準達到最小,通常采用歐氏范數作為誤差量度的標準。這就是所謂的最小二乘法。在MATLAB中實現(xiàn)最小二乘法擬合通常采用polyfit函數進行。函數polyfit是指用一個多項式函數來對已知數據進行擬合,我們以下列數據為例介紹這個函數的用法:>>x=0:0.1:1;>>y=[-0.4471.9783.286.167.087.347.669.569.489.3011.2]為了使用polyfit,首先必須指定我們希望以多少階多項式對以上數據進行擬合,如果我們指定一階多項式,結果為線性近似,通常稱為線性回歸。我們選擇二階多項式進行擬合。>>P=polyfit(x,y,2)P=-9.810820.1293-0.0317函數返回的是一個多項式系數的行向量,寫成多項式形式為:為了比較擬合結果,我們繪制兩者的圖形:>>xi=linspace(0,1,100);%繪圖的X-軸數據。>>Z=polyval(p,xi);%得到多項式在數據點處的值。當然,我們也可以選擇更高冪次的多項式進行擬合,如10階:>>p=polyfit(x,y,10);>>xi=linspace(0,1,100);>>z=ployval(p,xi);讀者可以上機繪圖進行比較,曲線在數據點附近更加接近數據點的測量值了,但從整體上來說,曲線波動比較大,并不一定適合實際使用的需要,所以在進行高階曲線擬合時,“越高越好”的觀點不一定對的。7.2符號工具箱及其應用在數學應用中,常常需要做極限、微分、求導數等運算,MATLAB稱這些運算為符號運算。MATLAB的符號運算功能是通過調用符號運算工具箱(SymbolicMathToolbox)內的工具實現(xiàn),其內核是借用Maple數學軟件的。MATLAB的符號運算工具箱包含了微積分運算、化簡和代換、解方程等幾個方面的工具,其詳細內容可通過MATLAB系統(tǒng)的聯(lián)機幫助查閱,本節(jié)僅對它的常用功能做簡單介紹。7.2.1符號變量與符號表達式MATLAB符號運算工具箱處理的對象主要是符號變量與符號表達式。要實現(xiàn)其符號運算,首先需要將處理對象定義為符號變量或符號表達式,其定義格式如下:格式1:sym(‘變量名’)或sym(‘表達式’)功能:定義一個符號變量或符號表達式。例如:>>sym(‘x’)%定義變量x為符號變量>>sym(‘x+1’)%定義表達式x+1為符號表達式格式2:syms變量名1變量名2……變量名n功能:定義變量名1、變量2……、變量名n為符號變量。例如:>>symsabxt%定義a,b,x,t均為符號變量7.2.2微積分運算1、極限格式:limit(f,t,a,‘left’or‘right’)功能:求符號變量t趨近a時,函數f的(左或右)極限?!甽eft’表示求左極限,‘right’表示求右極限,省略時表示求一般極限;a省略時變量t趨近0;t省略時默認變量為x,若無x則尋找(字母表上)最接近字母x的變量。例如:求極限的命令及結果為:>>symsxt>>limit((1+2*t/x)^(3*x),x,inf)ans=exp(6*t)再如求函數x/|x|,當時的左極限和右極限,命令及結果為:>>symsx>>limit(x/abs(x),x,0,’left’)ans=-1>>limit(x/abs(x),x,0,’right’)ans=12、導數格式:diff(f,t,n)功能:求函數f對變量t的n階導數。當n省略時,默認n=1;當t省略時,默認變量x,若無x時則查找字母表上最接近字母x的字母。例如:求函數f=a*x^2+b*x+c對變量x的一階導數,命令及結果為>>symsabcx>>f=a*x^2+b*x+c;>>diff(f)ans=2*a*x+b求函數f對變量b的一階導數(可看作求偏導),命令及結果為>>diff(f,b)ans=x求函數f對變量x的二階導數,命令及結果為>>diff(f,2)ans=2*a3、積分格式:int(f,t,a,b)功能:求函數f對變量t從a到b的定積分.當a和b省略時求不定積分;當t省略時,默認變量為(字母表上)最接近字母x的變量。例如:求函數f=a*x^2+b*x+c對變量x不定積分,命令及結果為>>symsabcx>>f=a*x^2+b*x+c;>>int(f)ans=1/3*a*x^3+1/2*b*x^2+c*x求函數f對變量b不定積分,命令及結果為>>int(f,b)ans=a*x^2*b+1/2*b^2*x+c*b求函數f對變量x從1到5的定積分,命令及結果為>>int(f,1,5)ans=124/3*a+12*b+4*c4、級數求和格式:symsum(s,t,a,b)功能:求表達式s中的符號變量t從第a項到第b項的級數和。例如:求級數的前三項的和,命令及結果為>>symsum(1/x,1,3)ans=11/67.2.3化簡和代換MATLAB符號運算工具箱中,包括了較多的代數式化簡和代換功能,下面僅舉出部分常見運算。simplify利用各種恒等式化簡代數式expand將乘積展開為和式factor把多項式轉換為乘積形式collect合并同類項horner把多項式轉換為嵌套表示形式例如:進行合并同類項執(zhí)行>>symsx>>collect(3*x^3-0.5*x^3+3*x^2)ans=5/2*x^3+3*x^2)進行因式分解執(zhí)行>>factor(3*x^3-0.5*x^3+3*x^2)ans=1/2*x^2*(5*x+6)7.2.4解方程1、代數方程格式:solve(f,t)功能:對變量t解方程f=0,t缺省時默認為x或最接近字母x的符號變量。例如:求解一元二次方程f=a*x^2+b*x+c的實根,>>symsabcx>>f=a*x^2+b*x+c;>>solve(f,x)ans=[1/2/a*(-b+(b^2-4*a*c)^(1/2))][1/2/a*(-b-(b^2-4*a*c)^(1/2))]2、微分方程格式:dsolve(‘s’,’s1’,’s2’,…,’x’)其中s為方程;s1,s2,……為初始條件,缺省時給出含任意常數c1,c2,……的通解;x為自變量,缺省時默認為t。例如:求微分方程的通解>>dsolve(‘Dy=1+y^2’)ans=tan(t+c1)7.3優(yōu)化工具箱及其應用在工程設計、經濟管理和科學研究等諸多領域中,人們常常會遇到這樣的問題:如何從一切可能的方案中選擇最好、最優(yōu)的方案,在數學上把這類問題稱為最優(yōu)化問題。這類問題很多,例如當設計一個機械零件時如何在保證強度的前提下使重量最輕或用量最?。ó斎煌倒p料除外);如何確定參數,使其承載能力最高;在安排生產時,如何在現(xiàn)有的人力、設備的條件下,合理安排生產,使其產品的總產值最高;在確定庫存時如何在保證銷售量的前提下,使庫存成本最?。辉谖镔Y調配時,如何組織運輸使運輸費用最少。這些都屬于最優(yōu)化問題所研究的對象。MATLAB的優(yōu)化工具箱被放在toolbox目錄下的optim子目錄中,其中包括有若干個常用的求解函數最優(yōu)化問題的程序。MATLAB的優(yōu)化工具箱也在不斷地完善。不同版本的MATLAB,其工具箱不完全相同。在MATLAB5.3版本中,對優(yōu)化工具箱作了全面的改進。每個原有的常用程序都重新編制了一個新的程序。除fzero和fsolve外都重新起了名字。這些新程序使用一套新的控制算法的選項。與原有的程序相比,新程序的功能增強了。在MATLAB5.3和6.0版本中,原有的優(yōu)化程序(除fzero和fsolve外)仍然保留并且可以使用,但是它們遲早會被撤消的。鑒于上述情況,本書將只介紹那些新的常用的幾個優(yōu)化程序。7.3.1線性規(guī)劃問題線性規(guī)劃是最優(yōu)化理論發(fā)展最成熟,應用最廣泛的一個分支。在MATLAB的優(yōu)化工具箱中用于求解下述線性規(guī)劃的問題(線性不等式約束)(線性等式約束)(有界約束)的函數是linprog,其主要格式為:[x,fval,exitflag,output,lambda]=linprog(c,A,b,A1,b1,LB,UB,x0,options)其中,linprog為函數名,中括號及小括號中所含的參數都是輸入或輸出變量,這些參數的主要用法及說明如下:(1)c,A和b是不可缺省的輸入宗量;x是不可缺省的輸出宗量,它是問題的解。(2)當x無下界時,在LB處放置[]。當無上界時,在UB處放置[]。如果x的某個分量無下界,則置LB(i)=-inf.如果無上界,則置UB(i)=inf.如果無線性不等式約束,則在A和b處都放置[]。(3)x0是解的初始近似值。(4)options是用來控制算法的選項參數向量。(5)輸出宗量fval是目標函數在解x處的值。(6)輸出宗量exitflag的值描述了程序的運行情況。如果exitflag的值大于0,則程序收斂于解x;如果exitflag的值等于0,則函數的計算達到了最大次數;如果exitflag的值小于0,則問題無可行解,或程序運行失敗。(7)輸出宗量output輸出程序運行的某些信息。(8)輸出宗量Lambda為在解x處的值Lagrange乘子。例:求解線性規(guī)劃問題min,,,,,,.解:在命令窗口中鍵入>>c=[-2,-1,1];a=[1,4,-1;2,-2,1];b=[4;12];a1=[1,1,2];b1=6;>>lb=[0;0;-inf];ub=[inf;inf;5];>>[x,z]=linprog(c,a,b,a1,b1,1b,ub)運行后得到:x=4.66670.00000.6667z=-8.66677.3.2非線性約束最優(yōu)化在MATLAB的優(yōu)化工具箱中有一個求解下述非線性規(guī)劃的問題(線性不等式約束)(線性等式約束)(非線性不等式約束)(非線性等式約束)(有界約束)的函數是fmincon,其主要格式為:[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(‘fun’,x0,A,b,A1,b1,LB,UB,‘nonlcon’,options,p1,p2,……)其中,fmincon為函數名,參數的主要用法有的與線性規(guī)劃中的相同,下面介紹幾個非線性規(guī)劃特有的:(1)‘fun’和x0是不可缺省的輸入宗量。fun是給出目標函數的M文件的名字,x0是極小值點的初始近似值。x是不可缺省的輸出宗量,它是問題的解。(2)nonlcon是給出非線性約束函數和的M文件的文件名。(3)宗量p1,p2…是向目標函數傳送的參數的值。(4)輸出宗量grad為目標函數在解x處的梯度。(5)輸出宗量hessian為目標函數在解x處的Hessian矩陣。例:求解非線性規(guī)劃問題min,,,,解:建立目標函數的M文件functiony=nline(x)y=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);建立非線性約束條件的M文件function[c1,c2]=nyueshu(x)c1=[1.5+x(1)*x(2)-x(1)-x(2);-x(1)*x(2)-10];c2=0;在命令窗口中鍵入>>x0=[-1,1];a=[1,-1];b=1;a1=[1,1];b1=0;>>[x,f]=fmincon(‘nline’,x0,a,b,a1,b1,[],[],‘nyueshu’)運行后得到:x=-1.22471.2247f=1.89517.3.3二次規(guī)劃問題二次規(guī)劃數學模型的一般形式為:其中H為對稱矩陣,約束條件與線型規(guī)劃相同。在MATLAB的優(yōu)化工具箱中有一個求解上述規(guī)劃問題的程序:[x,fval,exitflag,output,lambda]=quadprog(H,c,A,b,A1,b1,LB,UB,x0,options)其中,quadprog為函數名,參數的主要用法及說明同線性規(guī)劃,這里不再贅述。例求解如下二次優(yōu)化問題。解:將目標函數化為標準形式在命令窗口中鍵入>>H=[2,0;0,2];c=[-8,-10];a=[3,2];b=6;lb=[0,0];x0=[1,1];>>x=quadprog(H,c,a,b,[],[],lb,[],x0)運行后得到:x=0.30772.53857.3.4foptions函數對于優(yōu)化的控制,MATLAB共提供了18個參數,這些參數對優(yōu)化的進行起者很關鍵的作用。下面就對參數選擇函數foptions作詳細介紹?!駀options優(yōu)化函數調用中的參數選擇。參數具體意義如下:options(1)參數顯示控制(默認值為0)。等于1時顯示一些結果。options(2)優(yōu)化點x的精度控制(默認值為1e–4)。options(3)優(yōu)化函數F的精度控制(默認值為1e–4)。options(4)違反約束的結束標準(默認值為1e–6)。options(5)策略選擇。不常用。options(6)優(yōu)化程序方法的選擇。值為0時為BFGS算法,值為1時采用DFP算法。options(7)線性插值算法選擇。值為0時為混合插值算法,值為1時采用立方插值算法。options(8)函數值顯示(目標-達到問題中的Lambda)。options(9)若需要檢測用戶提供的導數則設為1。options(10)函數和約束求值的數目。options(11)函數導數求值的個數options(12)約束求值的數目。options(13)等式約束的數目。options(14)函數求值的最大次數(默認值為100變量個數)。options(15)用于目標-達到問題中的特殊目標。options(16)優(yōu)化過程中變量的最小梯度值。options(17)優(yōu)

溫馨提示

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

評論

0/150

提交評論