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

下載本文檔

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

文檔簡介

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

溫馨提示

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

評論

0/150

提交評論