![MATLAB語言基礎(chǔ)攻略_第1頁](http://file4.renrendoc.com/view/fe26fac1c506e62bb2fbdd5f7e186c61/fe26fac1c506e62bb2fbdd5f7e186c611.gif)
![MATLAB語言基礎(chǔ)攻略_第2頁](http://file4.renrendoc.com/view/fe26fac1c506e62bb2fbdd5f7e186c61/fe26fac1c506e62bb2fbdd5f7e186c612.gif)
![MATLAB語言基礎(chǔ)攻略_第3頁](http://file4.renrendoc.com/view/fe26fac1c506e62bb2fbdd5f7e186c61/fe26fac1c506e62bb2fbdd5f7e186c613.gif)
![MATLAB語言基礎(chǔ)攻略_第4頁](http://file4.renrendoc.com/view/fe26fac1c506e62bb2fbdd5f7e186c61/fe26fac1c506e62bb2fbdd5f7e186c614.gif)
![MATLAB語言基礎(chǔ)攻略_第5頁](http://file4.renrendoc.com/view/fe26fac1c506e62bb2fbdd5f7e186c61/fe26fac1c506e62bb2fbdd5f7e186c615.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
MATLAB語言基礎(chǔ)廣東工業(yè)大學(xué)自動化學(xué)院李明系統(tǒng)仿真與MATLAB引言形而上者謂之道,形而下者謂之器
——《易經(jīng)·系辭》所謂“道”者,是指從具體實(shí)踐活動中總結(jié)、提取概括出來的具有普適性的規(guī)律?
認(rèn)識世界所謂“器”者,則是在特定規(guī)律下制造出來的用于某種目的的工具?
改造世界控制系統(tǒng)設(shè)計(jì)→道MATLAB→器MATLAB初識MATLAB為何
MATLAB是美國MathWorks公司出品的商業(yè)數(shù)學(xué)軟件,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級技術(shù)計(jì)算語言和交互式環(huán)境,主要包括MATLAB和Simulink兩大部分。
MATLAB是矩陣實(shí)驗(yàn)室(MatrixLaboratory)的簡稱,和Mathematica、Maple并稱為三大數(shù)學(xué)軟件。它在數(shù)學(xué)類科技應(yīng)用軟件中在數(shù)值計(jì)算方面首屈一指。
MATLAB可以進(jìn)行矩陣運(yùn)算、繪制函數(shù)和數(shù)據(jù)、實(shí)現(xiàn)算法、創(chuàng)建用戶界面、連接其他編程語言的程序等,主要應(yīng)用于工程計(jì)算、控制設(shè)計(jì)、信號處理與通訊、圖像處理、信號檢測、金融建模設(shè)計(jì)與分析等領(lǐng)域。
MATLAB何用MATLAB產(chǎn)品族主要應(yīng)用于工程計(jì)算與科學(xué)繪圖控制系統(tǒng)的分析與設(shè)計(jì)
數(shù)字圖像處理數(shù)字信號處理通訊系統(tǒng)設(shè)計(jì)財(cái)務(wù)與金融工程附加的工具箱(單獨(dú)提供的專用MATLAB函數(shù)集)擴(kuò)展了MATLAB環(huán)境,以解決這些應(yīng)用領(lǐng)域內(nèi)的問題MATLAB的產(chǎn)生與發(fā)展產(chǎn)生MATLAB誕生于20世紀(jì)70年代,其首創(chuàng)者是時(shí)任新墨西哥大學(xué)教授Cleve
Moler及其同事,他們意識到在講述諸如線性代數(shù)等課程時(shí),已有的編程語言比如Fortran和C語言已經(jīng)不能滿足需求,為了降低編程方面的負(fù)擔(dān),CleveMoler基于他自己使用Fortran語言編寫的用于求解線性方程的子程序庫——基于特征計(jì)算的程序庫EISPACK和線性代數(shù)程序庫LINPACK,開發(fā)了MATLAB的雛形發(fā)展MATLAB是集命令翻譯、科學(xué)計(jì)算于一身的一套交互式軟件系統(tǒng),最初作為免費(fèi)軟件在大學(xué)里廣泛使用,功能也比較簡單,只能進(jìn)行矩陣運(yùn)算和簡單的繪圖,但是因?yàn)樵贛ATLAB中矩陣運(yùn)算變得異常簡單,不需要用其他高級語言編寫矩陣運(yùn)算程序庫,因而受到廣大工程專業(yè)大學(xué)生的青睞,也正是因?yàn)樵诳刂品治龊托盘柼幚淼裙こ填I(lǐng)域中非常強(qiáng)調(diào)矩陣的運(yùn)算和分析,才促使CleveMoler對MATLAB進(jìn)行繼續(xù)開發(fā),并于1984年與JackLittle等一起創(chuàng)辦了MathWorks公司,把MATLAB推向市場。自公司開創(chuàng)以來,MathWorks不斷致力于版本的更新和軟件各方面功能的增強(qiáng)歷經(jīng)多年的發(fā)展,MATLAB長于數(shù)值計(jì)算,能處理大量的數(shù)據(jù),而且效率比較高。MathWork公司在此基礎(chǔ)上加強(qiáng)了MATLAB的符號計(jì)算、文字處理、可視化建模和實(shí)時(shí)控制能力,增強(qiáng)了MATLAB的市場競爭力,使MATLAB成為了市場主流的數(shù)值計(jì)算軟件。到20世紀(jì)90年代,MATLAB已成為國際控制界的標(biāo)準(zhǔn)計(jì)算軟件。MATLAB的優(yōu)勢強(qiáng)大易用的科學(xué)計(jì)算語言MATLAB之所以能迅速發(fā)展的一個重要原因就是MATLAB的使用簡潔直觀,符合人們的思維習(xí)慣,易于理解和學(xué)習(xí)。矩陣運(yùn)算,例如矩陣乘積,矩陣求逆等等;用C則比較復(fù)雜求線性代數(shù)方程Ax=b的解,x=A\b針對許多專門的領(lǐng)域,將工程科學(xué)界重要的問題通過軟件制作成工具箱全面的圖形功能一般數(shù)據(jù)可視化軟件的功能,例如二維圖形和三維圖形的可視化、圖像處理、動畫和表達(dá)式作圖等添加了軟件獨(dú)有的圖形的光照處理、色度處理以及四維數(shù)據(jù)的表現(xiàn)等圖形用戶界面(GUI)的制作上作了很大的改善獨(dú)立開放的平臺和實(shí)用的程序接口支持多種計(jì)算機(jī)操作系統(tǒng),提供了大量的平臺獨(dú)立的措施利于平臺之間移植MATLAB和Fortran、C和Basic之間都可以方便的實(shí)現(xiàn)連接強(qiáng)大的動態(tài)系統(tǒng)仿真功能MATLAB界面MATLAB窗口(1)命令窗口(CommandWindow)三個藍(lán)色的入門鏈接“>>”為命令提示符,此時(shí)我們可以在>>之后輸入一些基本命令,例如數(shù)值運(yùn)算命令,然后按下Enter鍵,MATLAB則會在命令窗口立即顯示結(jié)果,并將結(jié)果自動賦予變量名ansMATLAB允許一行輸入多個命令,此時(shí)可以用逗號“,”和分號“;”來實(shí)現(xiàn),區(qū)別在于使用逗號時(shí)將會顯示運(yùn)行結(jié)果,使用分號時(shí)運(yùn)行結(jié)果將予以隱藏>>3.14*3^2 %采用直接演算法,類似于計(jì)算器ans=28.2600>>r=3 %采用變量賦值的方法,圓的半徑r=3r=3>>S=3.14*r^2 %求圓的面積SS=28.2600>>r=3;S=3.14*r^2 %使用分號禁止顯示計(jì)算的中間結(jié)果S=28.2600
MATLAB窗口(2)歷史命令窗口(CommandHistory)歷史命令窗口用于記錄用戶在命令窗口執(zhí)行過的命令行。包括已運(yùn)行過的命令、函數(shù)、表達(dá)式、使用時(shí)間等信息。在歷史命令窗口的命令是按逆序排列的。即最早的命令在排在最下面,最后的命令排在最上面。在歷史命令窗口可進(jìn)行命令歷史的查找、檢查等工作。用鼠標(biāo)選中歷史命令窗口中的命令行,單擊右鍵彈出操作菜單,我們可以選擇相應(yīng)菜單項(xiàng)對這些歷史命令進(jìn)行各種操作如:復(fù)制(Copy)執(zhí)行(Evaluateselection)刪除(Deleteselection)雙擊(Doubleclick)這些命令可使它再次執(zhí)行。MATLAB窗口(3)工作間管理窗口(Workspace)工作空間是用于儲存運(yùn)算中的各種變量和結(jié)果的內(nèi)存空間,而工作空間窗口則用于顯示變量的名稱、大小、字節(jié)數(shù)及數(shù)據(jù)類型等;我們可以通過工作空間窗口對變量進(jìn)行觀察、編輯、保存和刪除等操作,有命令行和變量編輯器(VariableEditor)兩種方式工作空間管理窗口中命令行方式的主要命令命令功能who顯示存儲在工作空間全部變量的名稱whos顯示存儲在工作空間全部變量的名稱、大小、數(shù)據(jù)類型等詳細(xì)信息clear從工作空間中清除變量和函數(shù)save保存工作空間變量load從磁盤文件中讀取變量到工作空間lengthlength(A),若A向量則顯示其長度,若A為矩陣則顯示行數(shù)與列數(shù)中的較大數(shù)sizesize(A),得到矩陣A的行數(shù)和列數(shù)disp顯示變量MATLAB窗口(4)當(dāng)前路徑窗口(CurrentDirectory)MATLAB的當(dāng)前目錄窗口(CurrentDirectory)用于顯示及設(shè)置當(dāng)前工作目錄,同時(shí)顯示當(dāng)前工作目錄下的文件名、文件類型及目錄的修改時(shí)間等信息。用鼠標(biāo)選中文件,單擊右鍵可以進(jìn)行打開(Open)、運(yùn)行(RunFile)、重命名(Rename)、刪除(Delete)等操作,只有在當(dāng)前目錄或搜索路徑下的文件及函數(shù)才可以被MATLAB運(yùn)行或調(diào)用。設(shè)置當(dāng)前目錄可以在當(dāng)前目錄窗口上方的輸入欄中直接輸入,或點(diǎn)擊瀏覽器下拉按鈕進(jìn)行選擇。MATLAB的路徑搜索什么是搜索路徑專門用于查找“.m”文件的路徑搜索器,為一系列文件路徑的組合,缺省狀態(tài)下包括當(dāng)前路徑和已安裝的全部工具箱的路徑。如果調(diào)用的函數(shù)或文件在搜索路徑之外,MATLAB會認(rèn)為此函數(shù)或文件不存在而返回錯誤信息。一般而言,當(dāng)在命令窗口輸入一個字符串時(shí),MATLAB按下列順序開始搜索:在工作空間中搜索是否有以該字符串為變量名的變量,有則返回該變量的值;搜索是否有同名的MATLAB內(nèi)部函數(shù),若有,執(zhí)行該內(nèi)部函數(shù);在當(dāng)前目錄中查找與該字符串同名的M文件,若有,執(zhí)行該文件;在搜索目錄中查找與該字符串同名的M文件,若有,執(zhí)行該文件;如果在搜索目錄中存在多個同名函數(shù),則只執(zhí)行搜索路徑中的第一個函數(shù),其他函數(shù)不再執(zhí)行。MATLAB的路徑搜索搜索路徑>>path (列出所有搜索路徑)>>editpath (進(jìn)入搜索路徑對話框)>>pathtool (進(jìn)入搜索路徑對話框)對話框中的設(shè)置方法用AddFolder…按鈕可以將某一目錄加入搜索路徑而忽略其子目錄,選擇AddwithSubfolder…按鈕可將選中目錄的子目錄也包括在搜索路徑中,一般情況下選擇后者,此時(shí)系統(tǒng)會彈出“瀏覽文件夾”對話框,我們選擇好了目錄之后單擊“確定”,則新目錄會出現(xiàn)在搜索路徑中。MATLAB的幫助系統(tǒng)HelpDesk該窗口是一個獨(dú)立的交互式幫助瀏覽器,用戶可以在命令窗口中輸入helpdesk或helpwin來啟動幫助窗口。通過幫助窗口中的幫助主題(Contents)、幫助索引(Index)和聯(lián)機(jī)演示(Demos)可以瀏覽用戶可能需要的內(nèi)容,而在查詢結(jié)果(SearchResults)中可以查看按用戶要求得到的幫助信息列表
>>helpdesk >>helpwin >>docHelpDesk是HTML格式的幫助文檔,HelpDesk的搜索可以使用不完全關(guān)鍵字,MATLAB里包含了大量關(guān)于MATLAB安裝、使用、編程以及各種工具箱等的電子版手冊,具有搜索功能,因此也可以在指定的手冊中搜索關(guān)鍵字,使用非常方便。MATLAB的幫助系統(tǒng)help命令當(dāng)用戶知道函數(shù)名稱想了解其具體用法時(shí),可以在命令窗口使用help命令,調(diào)用方法是help函數(shù)名,例如想了解矩陣求逆函數(shù)inv()的用法,可以在命令窗口輸入help命令
>>helpinvlookfor命令lookfor命令與help不同,help命令要求函數(shù)名的精確匹配,而lookfor只要求與每個函數(shù)中的總結(jié)信息有匹配。所以當(dāng)用戶不知道函數(shù)的確切名稱時(shí)可以使用lookfor命令,此時(shí)只需知道函數(shù)的部分關(guān)鍵字,調(diào)用格式為lookfor
關(guān)鍵字。例如若用戶不知道MATLAB中矩陣求逆的函數(shù),而求逆函數(shù)的關(guān)鍵字為inverse,則可以在命令窗口輸入如下命令:
>>lookforinverse根據(jù)列出命令的總結(jié)信息,可以找到矩陣求逆的函數(shù)為inv-Matrixinverse。MATLAB基本使用方法MATLAB中的數(shù)據(jù)類型(1)數(shù)值型數(shù)據(jù)通常以雙精度數(shù)值來表示,不區(qū)分整數(shù)、實(shí)數(shù)、復(fù)數(shù)等虛數(shù)單位i=sqrt(-1),復(fù)數(shù)z=a+b*i或z=r*exp(i*θ),且注意當(dāng)復(fù)數(shù)的虛部為一個確定的數(shù)(而不是變量或者矩陣)時(shí),可以省略系數(shù)和虛數(shù)單位之間的“*”,即3+i*6可以寫成3+6i,但是x+i*y不能寫成x+yi;當(dāng)復(fù)數(shù)作為矩陣元素時(shí),復(fù)數(shù)內(nèi)不能留有空格,否則可能會被當(dāng)作兩個元素處理而出錯。例如k1為一向量,但是k2則是一個矩陣。>>k1=[3+4i;5+6i]k1=3.0000+4.0000i5.0000+6.0000i>>k2=[3+4i;5+6i] %復(fù)數(shù)作為矩陣元素時(shí),復(fù)數(shù)內(nèi)不能留有空格k2=3.00000+4.0000i5.00000+6.0000iMATLAB中的數(shù)據(jù)類型(2)符號型數(shù)據(jù)
符號型數(shù)據(jù)則是在MATLAB中定義的特殊變量,它以字符串的形式表示,但又不同于普通字符串。其變量、表達(dá)式均為符號對象。符號對象使用sym或者syms生成,語法格式為
>>symsarg1arg2….arg_props
符號對象命令舉例
>>symsxy; %利用syms生成符號對象
>>z=sym(‘z’); %利用sym生成符號對象 >>symspreal; %聲明符號對象p為實(shí)的
>>m=sym('m','real'); %聲明符號對象m為實(shí)的
>>n=sym('n','positive'); %聲明符號對象n為正的
>>m=sym('m','unreal'); %去掉m的附加屬性
>>A=[1x;yz] %生成符號矩陣
>>f=sin(x)+cos(x); %建立符號表達(dá)式MATLAB中的數(shù)據(jù)類型(3)字符串型數(shù)據(jù)MATLAB作為一種高級語言,字符串運(yùn)算功能也是很豐富的,字符串就是字符數(shù)組,在字符串里的每個字符是數(shù)組里的一個元素,字符串中空格也是字符,由于字符串是以向量的形式來存儲的,因而可以通過它的下標(biāo)對字符串中的任何一個元素進(jìn)行訪問在MATLAB增加了符號運(yùn)算工具箱,字符串成為符號運(yùn)算表達(dá)式的基本構(gòu)成單位舉例
>>s1='MATLABSTRING'; %生成字符串s1>>dim=size(s1) %顯示s1的維數(shù),1×13階矩陣dim=13>>s2=['MATLABSTRING']; %生成字符數(shù)組s2,與s1等價(jià)>>s1(2); %通過下標(biāo)訪問字符串,ans=AMATLAB中的數(shù)據(jù)類型(4)多維數(shù)組
數(shù)組也可以嵌套,一個數(shù)組的元素可以是另外一個數(shù)組,這樣就構(gòu)成了多維數(shù)組,例如三維數(shù)組就是一般矩陣的拓展,可以直接用于彩色圖像的描述,在實(shí)際編程中可能用到更高維的數(shù)組。如圖所示即為一個三維數(shù)組的示意圖,數(shù)組的第一維稱為“行”,第二維稱為“列”,第三維稱為“頁”,運(yùn)算則與低維的類似。
>>A=[12;13];>>B(:,:,1)=A; %輸入矩陣B的第一頁
>>B(:,:,2)=A^2; %輸入矩陣B的第二頁
>>B(:,:,3)=A^2; %輸入矩陣B的第三頁>>C=ones(2,2,3); %矩陣C為為2×2×3維全1矩陣>>D=C./B %三維矩陣間的./運(yùn)算D(:,:,1)=1.00000.50001.00000.3333D(:,:,2)=0.33330.12500.25000.0909D(:,:,3)=0.33330.12500.25000.0909MATLAB中的數(shù)據(jù)類型(5)元胞數(shù)組存儲形式類似于矩陣,元胞數(shù)組的各元素不一定是數(shù)值,可以是MATLAB支持的任意存儲類型,并且各元素的類型也可以不盡相同。其元素就被稱為“元胞”(cell)。元胞數(shù)組也用下標(biāo)標(biāo)識,但元胞數(shù)組中有元胞元素和元胞元素的內(nèi)容兩個概念,用圓括號表示元胞元素,用大括號來包含元胞元素的內(nèi)容,cell_array{i,j}即表示元胞數(shù)組cell_array的第i行,第j列的存儲內(nèi)容,亦即元胞元素cell_array(i,j)的內(nèi)容。>>A=[25;42]; %矩陣的定義使用[]>>B={A,[69];'test',[16;74]} %元胞數(shù)組的定義使用{}B= %僅顯示存儲量類型
[2x2double][1x2double]'test'[2x2double]>>C(1,1)={[13;57]}; %C(1,1)代表元胞元素,其內(nèi)容是一矩陣>>C{1,2}=[24;68]; %C{1,2}代表C(1,2)的內(nèi)容,為一矩陣>>celldisp(C) %顯示元胞數(shù)組C的具體內(nèi)容MATLAB中的數(shù)據(jù)類型(6)結(jié)構(gòu)型數(shù)組結(jié)構(gòu)型數(shù)組與元胞數(shù)組類似,不同之處在于結(jié)構(gòu)型數(shù)組利用指針方式傳遞數(shù)據(jù)。在結(jié)構(gòu)數(shù)組的直接賦值定義過程中,需要指出結(jié)構(gòu)中的屬性名,并且以指針操作符“.”來連接結(jié)構(gòu)型數(shù)組與屬性名,在命令行提示符后輸入結(jié)構(gòu)型數(shù)組的名稱,則可顯示其屬性以及屬性值
>>student_1.name='lin
hong';>>student_1.stature=182;>>student_1.weight=79;>>student_1student_1=name: 'linhong'stature: 182weight: 79MATLAB中的變量變量命名規(guī)則變量名由一個字母導(dǎo)引,后面可以跟字母、數(shù)字、下劃線等,但不能用空格或者標(biāo)點(diǎn)符號。例如var_temp、control_input1、state21均是合法變量名,而_output、45time、@position等均是非法變量名。變量名不能是MATLAB的保留字,例如for、end、while、if等命令名。MATLAB中的變量名是大小寫敏感的,即A和a代表不同的變量。變量名長度不能超過63位。變量的定義和賦值方式為:賦值變量=賦值表達(dá)式變量是MATLAB的基本元素之一,但其用法的特殊之處在于:MATLAB表達(dá)式中可以使用矩陣形式MATLAB中不需要預(yù)先聲明變量的類型和維數(shù),MATLAB會根據(jù)對新變量的操作創(chuàng)建該變量,確定其類型并為其分配存儲空間對已經(jīng)存在的變量的賦值操作,MATLAB會以新值代替舊值。如果需要的話,MATLAB可以改變該變量的類型(例如將字符串型數(shù)據(jù)賦給原數(shù)值型數(shù)據(jù)變量時(shí))或者為其分配新的存儲空間(例如當(dāng)矩陣維數(shù)發(fā)生變化時(shí))MATLAB中的常量常量常量是一些在MATLAB中預(yù)先定義好數(shù)值的變量,既然其本質(zhì)是變量,就可以對其進(jìn)行重新賦值,但在編程時(shí),為了避免不必要的麻煩,請盡量避免對這些特定常量的重新賦值。表中就是一些MATLAB中的常量。常量名用法pi圓周率πeps機(jī)器的浮點(diǎn)運(yùn)算誤差限,2.2204e-016,若|x|<eps,則可以認(rèn)為x=0i,j虛數(shù)單位narginm函數(shù)入口參數(shù)變量,用于m函數(shù)程序設(shè)計(jì)nargoutm函數(shù)出口參數(shù)變量,用于m函數(shù)程序設(shè)計(jì)realmin最小的正浮點(diǎn)數(shù)2.2251e-308realmax最大的正浮點(diǎn)數(shù)1.7977e+308bitmax最大的正整數(shù)9.0072e+015InfInfinity,無窮大量+∞NaNNot-a-number,通常由0/0運(yùn)算、Inf/Inf運(yùn)算或者其他可能運(yùn)算得出ans默認(rèn)結(jié)果存儲變量MATLAB中的矩陣矩陣和向量數(shù)學(xué)上,一個m行n列的矩形陣列被稱為一個m×n矩陣,矩陣一般由數(shù)組成。特別的,標(biāo)量可看作是1×1的矩陣,列向量可看作是n×1的矩陣,而行向量則是1×n的矩陣。矩陣定義矩陣是MATLAB中的一種基本運(yùn)算對象。在MATLAB語言中不必描述矩陣的維數(shù)和類型,它們是由輸入的格式和內(nèi)容來確定的矩陣操作MATLAB可以根據(jù)用戶的需要以直接輸入、命令行語句、函數(shù)構(gòu)造等方式生成特定的矩陣,同時(shí)還可以通過提取或者擴(kuò)充等方式對已有矩陣進(jìn)行相關(guān)的操作矩陣生成(1)以直接輸入的方式生成矩陣
矩陣元素必須在“[]”內(nèi)矩陣的同行元素之間用空格(或“,”)隔開;矩陣的行與行之間用“;”(或回車符)隔開;矩陣的元素可以是數(shù)值、變量、表達(dá)式或函數(shù)。
>>A=[12345]; %生成行向量,同行元素之間用空格隔開
>>A=[1,2,3,4,5]; %生成行向量,同行元素之間用,隔開
>>B=[1;2;3;4;5]; %生成列向量>>A=[294;753;618]; %三階幻方矩陣輸入方式1>>A=[2,9,4;7,5,3;6,1,8]; %三階幻方矩陣輸入方式2>>A %顯示輸入的矩陣A=294753618>>C=[1+9i2+8i3+7i;4+6i5+5i6+4i;7+3i8+2i9+i];%復(fù)數(shù)矩陣的直接輸入矩陣生成(2)以命令行語句或函數(shù)方式生成矩陣冒號表達(dá)式產(chǎn)生一個行向量Vec=start:step:end
(step默認(rèn)為1)
>>Vec=0:2:8; %[0,2,4,6,8] >>Vec=1:3;
%[1,2,3],默認(rèn)step=1linspace()生成線性等間距格式行向量linspace(start,end,num),其中start和end是生成向量的第一個和最后一個元素,num是元素總數(shù)。等價(jià)于a:(b-a)/(n-1):b >>Vec=linspace(0,3,4); %[0,1,2,3],遞增 >>Vec=linspace(5,2,4); %[5,4,3,2],遞減logspace()生成等比格式行向量,Vec=logspace(start,end,num),創(chuàng)建從10start開始,到10end結(jié)束,有num個元素的對數(shù)分隔行向量。默認(rèn)num=50,該命令等價(jià)于10.^linspace(start,end,num)
>>Vec=logspace(0,3,4) %[1,10,100,1000] >>Vec=logspace(2,0,3) %[100,10,1]矩陣生成(3)特殊的矩陣生成函數(shù)ones()生成全1矩陣,zeros()生成生全0矩陣,eye()生成單位陣>>A=ones(3) %生成3×3維全1矩陣>>A=ones(2,3) %生成2×3維全1矩陣>>A=zeros(2) %生成2×2維全0矩陣>>A=zeros(3,2) %生成3×2維全0矩陣>>A=eye(3) %生成3×3維單位陣
>>A=eye(3,5)>>A=eye(5,3)rand()生成隨機(jī)矩陣,元素滿足在(0,1)區(qū)間內(nèi)的均勻分布
>>A=rand(3) %生成3×3維rand()隨機(jī)矩陣
>>A=rand(2,3) %生成2×3維rand()隨機(jī)矩陣randn()生成隨機(jī)矩陣,元素滿足均值為0,方差為1的標(biāo)準(zhǔn)正態(tài)分布
>>A=randn(3) %生成3×3維randn()隨機(jī)矩陣
>>A=randn(2,3) %生成2×3維randn()隨機(jī)矩陣矩陣的訪問與賦值向量的訪問向量是有多個有序元素組成的,因而可以直接通過向量的下標(biāo)來對向量中的元素進(jìn)行訪問和修改,Vec(i)即表示向量Vec中的第i個元素。特別提出的是,可以通過冒號表達(dá)式對向量元素進(jìn)行訪問,也可以用中括號方式任意指定多個向量元素進(jìn)行訪問。
>>Vec=rand(1,6); %生成一個1×6的隨機(jī)行向量
>>Vec(3); %通過下標(biāo)訪問向量的第3個元素
>>Vec(5)=0; %通過下標(biāo)修改向量第5個元素的值,賦值為0>>Vec(2:4); %訪問向量的第2個到第4個元素
>>Vec(2:2:6); %訪問向量的第2、4、6個元素
>>Vec([134]); %中括號訪問多個指定的向量元素
>>Vec([13])=[00]; %修改多個指定的向量元素的值
>>Vec(4:end); %end參數(shù)表示結(jié)尾矩陣的訪問A(i,j)表示A中第i行、第j列的元素(一維下標(biāo)為按列方式)
>>A=[417;256;389] %生成一個3×3的矩陣
>>A(3,3) %訪問A的第3行第3列的元素
>>A(3,2)=0 %修改A的第3行第2列的元素矩陣的拆分和提取(1)矩陣的拆分冒號表達(dá)式A(:,j) —A的第j列全部元素A(i,:) —A第i行的全部元素A(i:i+m,:) —A矩陣第i~i+m行的全部元素A(:,k:k+m) —A矩陣第k~k+m列的全部元素A(i:i+m,k:k+m) —A矩陣第i~i+m行內(nèi),并在第k~k+m列中的所有元素end運(yùn)算符和中括號方式>>A=randn(3,3) %生成3×3的隨機(jī)矩陣>>A(2,:) %A第2行的全部元素>>A(:,3) %A的第3列全部元素>>A(2:3,:) %A的第2~3行的全部元素>>A(:,1:2) %A的第1~2列的全部元素>>A(2:3,1:2) %A的第2~3行內(nèi),并在第1~2列中的所有元素>>F=A([1,1,2],:) %通過中括號復(fù)制A的第1行2次,第2行1次>>B=eye(3) %生成3×3階單位陣B>>A(:,[13])=B(:,2:3) %將A的第1、3行用B的第2行到第3行取代
矩陣的拆分和提取(2)空矩陣定義[]為空矩陣。給變量A賦空矩陣的語句為A=[]。注意,A=[]與clearA不同,clear是將A從工作空間中刪除,而空矩陣則存在于工作空間中,只是維數(shù)為0。可以利用空矩陣刪除矩陣的元素。
>>A=[417;256;389] >>A(2,:)=[] %刪除A的第二行
矩陣的提取diag()是抽取矩陣主對角線元素tril()是抽取矩陣的主下三角元素triu()是抽取矩陣主上三角元素
>>A=[123;456;789] >>diag(A) %抽取矩陣A的主對角線元素
>>tril(A) %抽取矩陣A的主下三角元素
>>triu(A) %抽取矩陣A的主上三角元素
矩陣的擴(kuò)展子矩陣擴(kuò)展在MATLAB中可以通過把矩陣B的子塊賦值為A來擴(kuò)展矩陣A,假設(shè)A為m×n維矩陣,一般的命令格式為:B(r1:r2,c1:c2)=A,且需注意維數(shù)一致,即r2-r1+1=m且c2-c1+1=n。對于B中原先并不存在的元素,MATLAB將自動補(bǔ)0 >>A=[135;246] >>B(2:3,2:4)=A %將A矩陣擴(kuò)充,使得A成為B的一個子塊矩陣連接設(shè)A為m×n1維矩陣、B是m×n2維矩陣,注意其行數(shù)相同,則我們將矩陣A、B按行連接成m×(n1+n2)維的矩陣C,可以寫成C=[A,B]設(shè)A為m1×n維矩陣、B為m2×n維矩陣,注意其列數(shù)相同,則我們將矩陣A、B縱向連接成(m1+m2)×n維的矩陣C,可以寫成C=[A;B] >>A=[132;432];B=[17;56]; >>C=[A,B] %橫向連接
>>A=[35;21];B=[74;36;91]; >>C=[A;B] %縱向連接
矩陣的變維矩陣的變維reshape命令可以實(shí)現(xiàn)矩陣的變維,該命令將矩陣已有元素按照用戶指定的方式生成新的矩陣,例如B=reshape(A,m,n)命令將生成矩陣B,B為m×n維矩陣,且B的元素按列從A中抽取,如果A的元素少于m×n,則MATLAB返回錯誤信息另一種變維的方式是首先定義矩陣的結(jié)構(gòu),然后將已有的元素填充的新定義的矩陣中去,這里元素的填充方式仍然是按列的方式
>>A=1:6 %生成1×6維的行向量
>>B=reshape(A,2,3) %將行向量的元素值重構(gòu)為維矩陣
>>C=zeros(3,2);C(:)=B(:) %將2×3維矩陣重構(gòu)為3×2維矩陣矩陣的變向矩陣的轉(zhuǎn)置轉(zhuǎn)置運(yùn)算符是單撇號(’),矩陣A的轉(zhuǎn)置在MATLAB中用A’來表示,如果A是復(fù)數(shù)矩陣,則A’為A的共軛轉(zhuǎn)置矩陣,而非共軛轉(zhuǎn)置矩陣可用A.’來求得
>>A=[12;34] >>A'; %實(shí)矩陣的轉(zhuǎn)置
>>B=[1+i2;1i] >>B' %復(fù)矩陣的共軛轉(zhuǎn)置
>>B.‘ %復(fù)矩陣的非共軛轉(zhuǎn)置矩陣的旋轉(zhuǎn)rot90(A,k)將矩陣A旋轉(zhuǎn)90o的k倍,當(dāng)k為1時(shí)可省略fliplr(A) 對矩陣實(shí)施左右翻轉(zhuǎn)flipud(A)矩陣A實(shí)施上下翻轉(zhuǎn)的函數(shù)
>>rot90(A); %將矩陣A旋轉(zhuǎn)90o >>fliplr(A); %將矩陣A左右翻轉(zhuǎn)
>>flipud(A); %將矩陣A上下翻轉(zhuǎn)MATLAB的矩陣運(yùn)算矩陣的代數(shù)運(yùn)算(1)基本運(yùn)算矩陣加減矩陣加減即將A和B矩陣的對應(yīng)元素相加減。若參與運(yùn)算的兩矩陣之一為標(biāo)量,則將標(biāo)量與矩陣的所有元素分別進(jìn)行加減操作。注意維數(shù)匹配。矩陣乘法設(shè)有矩陣A和B,若A為m×n維矩陣,B為n×p維矩陣,注意矩陣A的列數(shù)等于矩陣B的行數(shù),則可以由C=A*B實(shí)現(xiàn)矩陣的乘法,結(jié)果為m×p維矩陣。矩陣除法左除\:A\B等價(jià)于inv(A)*B,亦即方程A*x=B的解右除/:B/A等價(jià)于B*inv(A),亦即方程x*A=B的解
>>A=[12;34]; >>B=[10;01]; >>A+2 %[34;56]矩陣與標(biāo)量相加,將標(biāo)量與矩陣的所有元素相加
>>A+B %[22;35]對應(yīng)元素相加
>>A-B %[02;33]對應(yīng)元素相減
>>A*B %B是單位陣,故結(jié)果為[12;34] >>A/B %方程x*B=A的解AB-1:[12;34] >>A\B %方程A*x=B的解A-1B:[-21;1.5-0.5]矩陣的代數(shù)運(yùn)算(2)點(diǎn)運(yùn)算(維數(shù)不變,對應(yīng)元素做相應(yīng)運(yùn)算)在MATLAB中,有一種特殊的點(diǎn)運(yùn)算。點(diǎn)運(yùn)算符有.*(點(diǎn)乘)、./(點(diǎn)右除)、.\(點(diǎn)左除)和.^(點(diǎn)乘方)。兩個矩陣進(jìn)行點(diǎn)運(yùn)算是指它們的對應(yīng)元素進(jìn)行相關(guān)運(yùn)算,要求兩矩陣的維參數(shù)相同。 >>A=[12;34],B=[56;78]; >>A.*B %.*:A和B對應(yīng)元素相乘,注意和A*B的區(qū)別 >>A./B %./:A和B對應(yīng)元素相除,注意和A/B的區(qū)別 >>A.^3 %.^:對應(yīng)元素和標(biāo)量的乘方 >>A.^A %.^:對應(yīng)矩陣元素之間的乘方 >>A.‘ %.’:非共軛轉(zhuǎn)置,注意.‘與’,‘為共軛轉(zhuǎn)置矩陣的維數(shù)
>>[m,n]=size(A) %返回矩陣的行數(shù)m和列數(shù)n >>M=size(A) %在矩陣M中返回矩陣的行數(shù)、列數(shù)
>>len=length(A) %返回矩陣A行數(shù)和列數(shù)中的最大值矩陣的關(guān)系與邏輯運(yùn)算關(guān)系運(yùn)算符和邏輯運(yùn)算符矩陣的關(guān)系運(yùn)算符和邏輯運(yùn)算符有:<、<=、>、>=、==、~=、&、|、~。在關(guān)系與邏輯運(yùn)算中,“真”用1表示,“假”用0表示,在邏輯運(yùn)算中,所有的非零元素均按照1來處理,這和一般的關(guān)系與邏輯運(yùn)算是相同的。運(yùn)算規(guī)則若參與關(guān)系與邏輯運(yùn)算的是兩個同維矩陣,那么運(yùn)算將對矩陣相同位置上的元素按標(biāo)量規(guī)則逐個進(jìn)行比較或運(yùn)算。最終運(yùn)算結(jié)果是一個與原矩陣同維的矩陣,其元素由1或0組成。若參與關(guān)系與邏輯運(yùn)算的一個是標(biāo)量,一個是矩陣,那么運(yùn)算將在標(biāo)量與矩陣中的每個元素之間按標(biāo)量規(guī)則逐個進(jìn)行比較或運(yùn)算。最終運(yùn)算結(jié)果是一個與矩陣同維的矩陣,其元素由1或0組成。
>>A=[13;69];B=[42;07];A>=B; %同維矩陣的關(guān)系運(yùn)算
>>a=5;A=[25;61];a==A; %標(biāo)量與矩陣的關(guān)系運(yùn)算
>>A=[43;01];B=[10;23];A|B; %同維矩陣的或運(yùn)算
>>a=2;A=[01;32];a&A; %標(biāo)量與矩陣的與運(yùn)算矩陣分析(1)矩陣的行列式運(yùn)算對一個方陣可以通過det命令求矩陣的行列式,如果參數(shù)矩陣為非方陣則會返回維數(shù)不匹配的錯誤信息。若A為數(shù)值矩陣,則得出數(shù)值計(jì)算結(jié)果,若A為符號矩陣,則得出解析解。 >>A=magic(3); %[816;357;492] >>det(A) %-360 ans= -360 >>symsabcd; >>A=[ab;cd]; >>det(A) ans= a*d-b*c矩陣分析(2)矩陣的秩運(yùn)算矩陣的行向量(或者列向量)中的最大線性無關(guān)組的個數(shù)稱為矩陣的秩。在MATLAB中,求矩陣秩的函數(shù)是rank(A) >>A=rand(3); >>rank(A) ans= 3 >>B=[123;456];B(3,:)=2*B(1,:)+3*B(2,:); >>rank(B) ans=
2 >>C=ones(3); >>rank(C) ans= 1矩陣分析(3)矩陣的求逆運(yùn)算若矩陣A為方陣且滿秩,且存在一個與其同階的方陣B,使得:AB=BA=I(I為單位矩陣)則稱A為B互為逆矩陣。求方陣A的逆矩陣可調(diào)用函數(shù)inv(A)若矩陣A不是方陣,或者A是一個非滿秩的方陣時(shí),矩陣A沒有逆矩陣,但可以找到一個與A的轉(zhuǎn)置矩陣A’同型的矩陣B,使得:ABA=A,BAB=B
此時(shí)稱矩陣B為矩陣A的偽逆,也稱為廣義逆矩陣。在MATLAB中,求一個矩陣偽逆的函數(shù)是pinv(A)
>>A=magic(4);inv(A);A^(-1) %滿秩方陣的逆
>>A=[123;456];pinv(A); %非方陣的廣義逆
>>B=[123;456;579];pinv(B); %非滿秩矩陣的廣義逆矩陣分析(4)矩陣的特征值和特征向量運(yùn)算對矩陣A而言,滿足PA(λ)=det(λI-A)=0的根λ為矩陣A的特征值。滿足λiv=Av的向量v為矩陣A關(guān)于特征值λi的特征向量,PA(λ)稱為矩陣A的特征多項(xiàng)式。在MATLAB中,矩陣的特征值和特征向量可以調(diào)用函數(shù)eig()求得。調(diào)用格式如下E=eig(A):求矩陣A的全部特征值,構(gòu)成向量E[V,D]=eig(A):D為對角陣,其對角線上的元素為矩陣A的特征值,每個特征值對應(yīng)的特征向量即為矩陣V的對應(yīng)列,且特征向量均進(jìn)行模方歸一化處理[V,D]=eig(A,‘nobalance’):與第2種格式類似,但第2種格式中先對A作相似變換后求矩陣A的特征值和特征向量,其每個特征向量各元素的平方和均為1,而格式3直接求矩陣A的特征值和特征向量,并不進(jìn)行歸一化處理>>A=magic(3);>>E=eig(A);>>[V,D]=eig(A);>>[V,D]=eig(A,‘nobalance’)矩陣分析(5)矩陣的跡運(yùn)算若矩陣A為方陣,則矩陣A的跡即為該矩陣對角線上各元素的和。矩陣的跡和該矩陣的特征值之和是相同的。在MATLAB中求矩陣A的跡的函數(shù)為trace(A) >>A=magic(3) %生成三階幻方矩陣A >>trace(A) %求A的跡
ans= 15 >>v=eig(A) %驗(yàn)證矩陣A的跡與其特征值的和相等
v= 15.0000 4.8990 -4.8990 >>sum_of_eig_A=v(1)+v(2)+v(3)
sum_of_eig_A= 15.0000矩陣的超越函數(shù)超越函數(shù)MATLAB語言中的exp、sqrt和log等函數(shù)命令也可以作用到矩陣上,但這種運(yùn)算只是定義在矩陣的單個元素上在超越數(shù)學(xué)函數(shù)的后面加上字母m從而構(gòu)成矩陣的超越函數(shù),expm、sqrtm和logm分別為矩陣指數(shù)、矩陣開方和矩陣對數(shù)。矩陣的超越函數(shù)要求運(yùn)算的矩陣必須為方陣。矩陣的超越函數(shù)也可以用一般的形式表示,如矩陣指數(shù)用funm(A,'exp')函數(shù)命令可以實(shí)現(xiàn),但它們所采用的算法不同,其計(jì)算結(jié)果會有微小的差別
>>A=magic(2) %生成二階魔方矩陣
>>expm(A) %矩陣乘方
>>logm(A) %矩陣對數(shù)
>>funm(A,‘log’) %另一種形式的對數(shù)調(diào)用MATLAB的符號運(yùn)算符號表達(dá)式的化簡假設(shè)符號表達(dá)式為f,對符號表達(dá)式化簡的函數(shù)有:simplify(f) 應(yīng)用函數(shù)規(guī)則對f進(jìn)行化簡。simple(f) 調(diào)用MATLAB的相關(guān)函數(shù)對表達(dá)式進(jìn)行綜合化 簡,并顯示化簡過程 >>symsxy; >>f=(x^2+y^2)^2+(x^2-y^2)^2+sin(x)^2+cos(x)^2; >>simplify(f)
ans= 2*x^4+2*y^4+1因式分解符號表達(dá)式的因式分解函數(shù)為factor(f) >>symsx; >>f=x^3-1; %生成符號表達(dá)式f=x3-1 >>f1=factor(f) %對f=x3-1進(jìn)行因式分解,結(jié)果存入f1 f1= (x-1)*(x^2+x+1)符號微積分(1)符號極限在MATLAB中調(diào)用limit()函數(shù)可以求取符號表達(dá)式的極限,設(shè)符號表達(dá)式為f,調(diào)用函數(shù)格式如下:limit(f,x,a) 計(jì)算f在x→a條件下的極限;limit(f,a) 計(jì)算f中由默認(rèn)自變量趨向于a條件下的極限;limit(f) 計(jì)算f在默認(rèn)自變量趨向于0條件下的極限;limit(f,x,a,‘right’)和limit(f,x,a,‘left’)計(jì)算f在x→a條件下的右極限和左極限。 >>symsxa; >>f=(1+a/x)^x; >>r1=limit(sin(x)/x) %求符號表達(dá)式1的極限值 r1= 1 >>r2=limit(f,x,inf,'left') %求符號表達(dá)式2的極限值 r2=
exp(a)符號微積分(2)符號微分在MATLAB中調(diào)用diff()函數(shù)可以求取符號表達(dá)式的極限,設(shè)符號表達(dá)式為f,調(diào)用函數(shù)格式如下:diff(f) 求f對于默認(rèn)自變量的微分diff(f,x) 求f對于自變量x的微分diff(f,n) 求f對于默認(rèn)自變量的n次微分>>symsx>>f=exp(x)*sin(x);>>r1=diff(f) %求符號表達(dá)式f的一次微分r1=exp(x)*cos(x)+exp(x)*sin(x)>>r2=diff(f,2) %求符號表達(dá)式f的二次微分r2=2*exp(x)*cos(x)符號微積分(3)符號積分在MATLAB中調(diào)用int()函數(shù)可以求取符號表達(dá)式的積分,設(shè)符號表達(dá)式為f,調(diào)用函數(shù)格式如下:int(f) 求f對于默認(rèn)自變量的不定積分int(f,x) 求f對于自變量x的不定積分int(f,a,b) 求f對于默認(rèn)自變量從a到b的定積分>>symsx;>>f1=-2*x/(1+x^2)^2;>>f2=x*log(1+x);>>r1=int(f1) %求符號表達(dá)式1的不定積分>>r2=int(f2,0,1) %求符號表達(dá)式2的定積分r1=1/(x^2+1)r2=1/4多項(xiàng)式(1)應(yīng)用背景多項(xiàng)式在工程計(jì)算中有著廣泛的應(yīng)用,在很多情況下,特殊函數(shù)都可以用Taylor級數(shù)展開成多項(xiàng)式的形式,控制系統(tǒng)的傳遞函數(shù)可以用多項(xiàng)式的形式表述多項(xiàng)式的定義直接輸入MATLAB采用行向量表示多項(xiàng)式,將多項(xiàng)式的系數(shù)按降冪次序存放在行向量中即可,多項(xiàng)式P(x)=anxn+…+a1x+a0表示為P=[an,an-1,…,a1,a0]命令poly如果A是矩陣,則poly(A)將創(chuàng)建矩陣A的特征多項(xiàng)式;如果A是向量,則poly(A)將創(chuàng)建以A中各元素為根的多項(xiàng)式
>>A=magic(2); %二階魔方矩陣
>>poly(A); %矩陣A的特征多項(xiàng)式
>>symsx;det(x*eye(2)-A); %驗(yàn)證是否相符
>>A=[123];>>poly(A); %創(chuàng)建以123為根的多項(xiàng)式
>>symsx;>>expand((x-1)*(x-2)*(x-3)); %驗(yàn)證多項(xiàng)式顯示poly2sym(p,'x')多項(xiàng)式(2)多項(xiàng)式運(yùn)算多項(xiàng)式加減:+-使用Matlab的運(yùn)算符+-實(shí)現(xiàn)多項(xiàng)式的加減法對于次數(shù)相同的多項(xiàng)式,可以直接對其系數(shù)向量進(jìn)行加減運(yùn)算;如果兩個多項(xiàng)式次數(shù)不同,則應(yīng)該把低次多項(xiàng)式中系數(shù)不足的高次項(xiàng)用0補(bǔ)足,然后進(jìn)行加減運(yùn)算>>pa=[1-1-26]; %pa=x3-x2-2x+6>>pb=[0123]; %pb=x2+2x+3>>p=pa+pb %多項(xiàng)式相加,向量維數(shù)必須相同,低次多項(xiàng)式補(bǔ)零p= %相加以后的結(jié)果1009多項(xiàng)式(3)多項(xiàng)式運(yùn)算多項(xiàng)式相乘:p=conv(p1,p2)p為多項(xiàng)式p1和多項(xiàng)式p2的乘積>>p=[2,-1,0,3];q=[2,1];>>k=conv(p,q); %(2x3-x2+3)(2x+1)k=40-163>>m=conv([11],conv([12],conv([13],[14]))) %(x+1)(x+2)(x+3)(x+4)m=110355024多項(xiàng)式相除:[q,r]=deconv(p1,p2)多項(xiàng)式p1除以多項(xiàng)式p2,商多項(xiàng)式為q,余多項(xiàng)式為r[q,r]=deconv(p1,p2)p1=conv(q,p2)+r>>p1=[123];p2=[12];[q,r]=deconv(p1,p2)q=10r=003多項(xiàng)式(4)多項(xiàng)式運(yùn)算多項(xiàng)式求導(dǎo)
dp=polyder(p) 多項(xiàng)式p的導(dǎo)數(shù)多項(xiàng)式為dp
dp=polyder(p1,p2) 多項(xiàng)式p1和多項(xiàng)式p2乘積的導(dǎo)數(shù)多項(xiàng)式為dp
[num,den]=polyder(p1,p2)有理分式(p1/p2)的求導(dǎo)后的有理分式為(num/den)多項(xiàng)式求值代數(shù)多項(xiàng)式求值y=polyval(p,x)求多項(xiàng)式p在自變量為x時(shí)的值,若x是向量或矩陣,則采用數(shù)組運(yùn)算(點(diǎn)運(yùn)算)!矩陣多項(xiàng)式求值Y=ployvalm(p,A)按矩陣運(yùn)算規(guī)則求多項(xiàng)式p在自變量為A時(shí)的值,當(dāng)自變量A為矩陣時(shí),多項(xiàng)式中的常數(shù)項(xiàng)a0被當(dāng)作a0*eye(n)處理例如對于多項(xiàng)式p(x)=2x3-x2+3
polyvalm(p,A)=2*A*A*A-A*A+3*eye(size(A))
polyval(p,A)=2*A.*A.*A-A.*A+3*ones(size(A))多項(xiàng)式(5)多項(xiàng)式運(yùn)算多項(xiàng)式求根:r=roots(p) r為多項(xiàng)式p的根組成的列向量>>p=[132];roots(p)ans=-2-1部分分式分解:[r,p,k]=residue(num,den)有理分式(num/den)部分分式分解后,r為留數(shù),p為極點(diǎn),k為直項(xiàng)>>num=[1
11
39
52
26];den=[1
10
35
50
24]; %無重極點(diǎn)>>[r,p,k]=residue(num,den);>>num=[0
1
4
6];den=[1
3
3
1]; %有重極點(diǎn)>>[r,p,k]=residue(num,den)多項(xiàng)式擬合:p=polyfit(x,y,n) 由給定數(shù)據(jù)x和y擬合出n階多項(xiàng)式p,用來逼近y=f(x)曲線使用非線性擬合工具箱cftoolMATLAB編程基礎(chǔ)引言在前面的內(nèi)容中,我們掌握了MATLAB的基礎(chǔ)知識,學(xué)會了如何在MATLAB的命令窗口進(jìn)行科學(xué)計(jì)算操作,例如矩陣計(jì)算、符號計(jì)算等,這些語句按照用戶輸入的固定順序一個接一個的執(zhí)行,它首先讀取輸入,然后運(yùn)算得到所需結(jié)果,打印出結(jié)果,這和編程中的順序結(jié)構(gòu)編程類似,在之前的例子中,我們不能重復(fù)運(yùn)算程序的某些部分,也不能根據(jù)輸入的值,有選擇地執(zhí)行程序的某些部分。在下面的內(nèi)容中,我們將視野擴(kuò)大至順序結(jié)構(gòu)以外的流程控制結(jié)構(gòu),向讀者介紹MATLAB編程方法,循序漸進(jìn),首先講解MATLAB編程中的幾種流程控制結(jié)構(gòu),而后介紹MATLAB中的腳本文件和M函數(shù)文件的編寫,最后針對已經(jīng)編好的程序介紹如何調(diào)試程序。MATLAB中的控制結(jié)構(gòu)循環(huán)結(jié)構(gòu)for循環(huán)while循環(huán)選擇結(jié)構(gòu)if結(jié)構(gòu)switch結(jié)構(gòu)try/catch結(jié)構(gòu)其他流程控制語句break語句continue語句for循環(huán)循環(huán)終止條件for循環(huán)的循環(huán)終止條件通常是對循環(huán)次數(shù)的判斷,達(dá)到預(yù)先設(shè)定好的循環(huán)次數(shù)則循環(huán)結(jié)束,所以for循環(huán)的次數(shù)是確定的語法 forindex=expression
loopbody end
其中,index是循環(huán)變量,expression是循環(huán)控制表達(dá)式,在for和end之前的執(zhí)行語句為循環(huán)體(loopbody)執(zhí)行順序變量index讀取表達(dá)式expression,其在一般情況下是一個向量,用冒號表達(dá)式表示為start:increment:end,若采用默認(rèn)的步長1,則表示為start:end;在這種情況下,循環(huán)變量index每次從向量expression中讀取一個元素,然后程序執(zhí)行循環(huán)體(loopbody),直至向量expression中所有元素讀取完畢,故一般而言,向量expression中有多少元素,循環(huán)體就執(zhí)行多少次for循環(huán)利用for循環(huán)求6! >>N=6;S=1; >>fori=N:-1:1 S=S*i; end >>S S= 720求解級數(shù)求和問題 >>S=0; >>fori=1:100000 S=S+1/2^i+1/3^i; endfor循環(huán)for循環(huán)可以嵌套使用,請用這種方法打印九九乘法表>>fori=1:9forj=1:ifprintf('%d*%d=%d',i,j,i*j);endfprintf('\n');end1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=256*1=66*2=126*3=186*4=246*5=306*6=367*1=77*2=147*3=217*4=287*5=357*6=427*7=498*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81while循環(huán)循環(huán)終止條件對循環(huán)條件表達(dá)式的判斷,只要循環(huán)條件表達(dá)式為真,則循環(huán)體就重復(fù)執(zhí)行,直到循環(huán)條件表達(dá)式為假。所以while循環(huán)的次數(shù)不確定語法 whilecondition
loopbody end如果condition的值非零(true),程序?qū)?zhí)行循環(huán)體(loopbody),然后返回到while語句執(zhí)行,直到condition的值變?yōu)榱悖╢alse),這個重復(fù)過程結(jié)束。當(dāng)程序執(zhí)行到while語句且condition的值為0之后,程序?qū)?zhí)行end后面的第一個語句。while循環(huán)求Fibonacci數(shù)列的小于100的前n項(xiàng) >>f(1)=1;f(2)=1; %Fibonacci數(shù)列的前兩項(xiàng) >>i=2; %項(xiàng)數(shù)標(biāo)志 >>flag=0; %循環(huán)終止判斷標(biāo)志變量 >>while(flag<100) %終止條件是循環(huán)終止判斷標(biāo)志變量小于100 i=i+1;
f(i)=f(i-1)+f(i-2); %Fibonacci數(shù)列項(xiàng)的求取方法 flag=f(i)+f(i-1); %循環(huán)終止判斷變量,已求數(shù)列的最后兩項(xiàng)和 end
求出滿足的最小m值 >>s=0;m=0 >>while(s<=10000) m=m+1; s=s+m; end [s,m]
ans= 10011 141if結(jié)構(gòu)if-end結(jié)構(gòu)
ifcondition statements end其中當(dāng)條件表達(dá)式condition的值為真(非0)時(shí)執(zhí)行語句段statements
if-else-end結(jié)構(gòu) ifcondition statements_1 else statements_2 end其中當(dāng)條件表達(dá)式condition的值非0時(shí)執(zhí)行語句段statements_1,否則執(zhí)行語句段statements_2if結(jié)構(gòu)if-elseif-…-else-end結(jié)構(gòu) ifcondition_1 statements_1
elseifcondition_2 %這里可以有多個elseif statements_2 else statements_3 end在這種結(jié)構(gòu)控制下,當(dāng)運(yùn)行到程序的某一條條件表達(dá)式為真(非0)時(shí),則執(zhí)行與之相關(guān)的語句段,而后系統(tǒng)不再檢查其他的條件表達(dá)式,系統(tǒng)將跳過if結(jié)構(gòu)中的其他語句。具體執(zhí)行順序?yàn)椋喝绻麠l件表達(dá)式condition_1的值非0,那么程序?qū)?zhí)行語句段statements_1,然后跳轉(zhuǎn)到end后面的第一個可執(zhí)行語句繼續(xù)執(zhí)行。否則,程序?qū)z測條件表達(dá)式condition_2的值,如果condition_2的值非0,那么程序?qū)?zhí)行語句段statements_2,然后跳轉(zhuǎn)到end后面的第一個可執(zhí)行語句繼續(xù)執(zhí)行。如果所有的控制表達(dá)式均為0,那么程序?qū)?zhí)行與else相關(guān)的語句段statements_3
switch結(jié)構(gòu)語法 switch(switch_expr) casecase_expr_1, statements_1 casecase_expr_2, statements_2 … otherwise,
statements_other end在這個控制結(jié)構(gòu)中,主要是通過對switch_expr的值與下面表達(dá)式的值是否匹配來決定程序的轉(zhuǎn)向的。如果switch_expr的值與case_expr_1相符,那么第一個語句段statements_1將會被執(zhí)行,然后程序?qū)D(zhuǎn)到switch結(jié)構(gòu)結(jié)束語句end后的第一個語句。如果switch_expr的值與case_expr_2相符,那么第二個語句段將會被執(zhí)行,然后程序?qū)絪witch結(jié)構(gòu)結(jié)束語句end后的第一個語句。在這個結(jié)構(gòu)中,otherwise語句段是可選的。如果它存在的話,當(dāng)switch_expr的值與其他所有的選項(xiàng)都不相符時(shí),語句段statements_other將會被執(zhí)行。如果它不存在,且witch_expr的值與所有的選項(xiàng)都不相符時(shí),結(jié)構(gòu)中的任何一個語句段都不會被執(zhí)行。switch結(jié)構(gòu)注意如果switch_expr有很多值可以導(dǎo)致相同代碼的執(zhí)行,那么這些值可以括在同一括號內(nèi),如果這個switch表達(dá)式和括號中任何一個值相匹配,那么這個語句段將會被執(zhí)行。
switch(switch_expr) case{case_expr_1,case_expr_2,case_expr_3}, statements otherwise,
statements_other endswitch結(jié)構(gòu) day=input('請輸入英文日期如:Sunday\n','s');switchday case{'Sunday','sunday'}
disp('星期日');
case{'Monday','monday'}
disp('星期一');
case{'Tuesday','tuesday'}
disp('星期二');
case{'Wednesday','wednesday'}
disp('星期三');
case{'Thursday','thursday'}
disp('星期四');
case{'Friday','friday'}
disp('星期五');
case{'Saturday','saturday'}
disp('星期六');
otherwise
disp('Error');
end其他流程控制語句break語句和continue語句break語句和continue語句用于循環(huán)中的流程控制。一般可以和if語句配合使用。break語句用于終止循環(huán)的執(zhí)行,當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時(shí),程序?qū)⑻鲅h(huán),繼續(xù)執(zhí)行循環(huán)語句的下一語句。continue語句控制跳過循環(huán)體中的某些語句。當(dāng)在循環(huán)體內(nèi)執(zhí)行到該語句時(shí),程序?qū)⑻^循環(huán)體中所有剩下的語句,繼續(xù)下一次循環(huán)。如果break或continue語句出現(xiàn)在循環(huán)嵌套的內(nèi)部,那么break語句和continue語句將會在包含它的最內(nèi)部的循環(huán)起作用。求[200,500]之間第一個能被53整除的整數(shù) >>fori=200:500 ifrem(i,53)~=0 continue end break end >>i i=
212
其他流程控制語句return語句當(dāng)用戶需要在文件中進(jìn)行終止操作時(shí),可以使用return命令,執(zhí)行return命令后,進(jìn)程將返回調(diào)用函數(shù)或者鍵盤。運(yùn)用return命令可以提前結(jié)束程序的運(yùn)行。return和break的區(qū)別在于return一般用于函數(shù)或者文件的結(jié)束,而break用于循環(huán)的終止。文件的編寫與調(diào)試為什么?當(dāng)我們遇到綜合性問題時(shí),命令窗口將不再適合,而需要用到程序編輯與調(diào)試的環(huán)境,在MATLAB中我們稱之為M文件編輯器。利用它我們可以實(shí)現(xiàn)對MATLAB命令行語句段的批處理,或者對M文件進(jìn)行保存和調(diào)用,使得MATLAB的功能得到了極大的擴(kuò)展,適用于較大規(guī)模程序的編制,并以此解決更為復(fù)雜的工程問題如何?MATLAB下提供了兩種源程序文件格式,其中一種是普通的ASCII碼構(gòu)成的文件,在這樣的文件中包含了一族由MATLAB語言所支持的語句,它類似于DOS下的批處理文件,這種文件稱為M-腳本文件;而MATLAB程序設(shè)計(jì)的主流方法是M-函數(shù)文件在實(shí)際編程中,推薦使用M-函數(shù)文件格式編程M文件M文件MATLAB程序,大致分為兩類:M腳本文件
(M-Script)和M函數(shù)文件(M-function),它們均是普通的ASCII碼構(gòu)成的文件,后綴均為.m。M文件名的命名規(guī)則,文件名必須以字母開頭,而后可以是英文、數(shù)字和下劃線的組合,文件名首字符不能是數(shù)字或下劃線,M文件名中不能含有空格;同時(shí),M文件名文件名不能與Matlab的內(nèi)部函數(shù)名相同,因而我們建議對M文件的命名盡量不要是簡單的英文單詞,簡單的單詞命名容易與MATLAB內(nèi)部函數(shù)同名,還有一點(diǎn)需要注意,雖然MATLAB對M文件名是大小寫敏感的,但Windows的文件名是不區(qū)分大小寫的,為了文件的保存方便,實(shí)現(xiàn)不同平臺之間的通用性,,建議M文件名盡量只使用小寫。M文件編輯器功能編寫用戶的M文件打開和修改M文件,觀察變量值、調(diào)試程序等啟動M文件編輯器在命令窗口輸入edit命令可進(jìn)入M文件編輯器,此時(shí)MATLAB將建立一個空文件,如果需要查看、編輯或者修改已經(jīng)存在的M文件,例如文件名為test.m,則用戶只需在命令窗口輸入edittest或者edittest.m;或者在Windows文件夾中雙擊該文件單擊工具欄上的M-file按鈕,此時(shí)MATLAB將建立一個空文件;通過File|New菜單可以選擇建立不同類型的M-file,包括空M文件、函數(shù)M文件和類M文件,當(dāng)選擇建立函數(shù)M文件或者類M文件時(shí),MATLAB會自動給出相應(yīng)文件類型的模版。注意每次修改程序之后都要存盤M腳本文件適用范圍M腳本文件適用于用戶所需要立即得到結(jié)果的小規(guī)模運(yùn)算使用方法M腳本文件中存儲的是可用于自動重復(fù)執(zhí)行的一組MATLAB命令和函數(shù)組合。M腳本文件等價(jià)于從命令窗口中順序輸入文件里的命令,程序只要依次將命令編輯在命令文件中,再保存成為擴(kuò)展名為.m的M腳本文件即可。M腳本文件的執(zhí)行方式第一種方式是在M文件編輯器的工具欄中點(diǎn)擊Run按鈕,第二種方式類似批處理文件,只需要在MATLAB命令窗口的命令行提示符>>之后鍵入M腳本文件的文件名即可,這樣MATLAB將自動執(zhí)行該M腳本文件中的
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45198-2024老舊汽車估值評價(jià)規(guī)范
- STAT3-IN-39-生命科學(xué)試劑-MCE-5782
- ANO1-IN-4-生命科學(xué)試劑-MCE-2608
- 3-Methoxybenzeneboronic-acid-d3-3-Methoxyphenylboronic-acid-d-sub-3-sub-生命科學(xué)試劑-MCE-9929
- 二零二五年度電子產(chǎn)品銷售退換貨及售后服務(wù)協(xié)議
- 2025年度游戲工作室游戲市場調(diào)研分析師用工合同
- 二零二五年度生態(tài)旅游區(qū)集體土地入股聯(lián)營協(xié)議
- 2025年度電子商務(wù)消費(fèi)者權(quán)益保護(hù)合同協(xié)議
- 二零二五年度美容店轉(zhuǎn)讓合同含美容院品牌形象使用權(quán)及廣告推廣
- 二零二五年度綠色環(huán)保餐飲商鋪?zhàn)赓U協(xié)議
- 具有履行合同所必須的設(shè)備和專業(yè)技術(shù)能力的承諾函-設(shè)備和專業(yè)技術(shù)能力承諾
- 混床計(jì)算書(新)
- 1325木工雕刻機(jī)操作系統(tǒng)說明書
- 初中衡水體英語(28篇)
- 斯瓦希里語輕松入門(完整版)實(shí)用資料
- 復(fù)古國潮風(fēng)中國風(fēng)春暖花開PPT
- GB/T 2317.2-2000電力金具電暈和無線電干擾試驗(yàn)
- 機(jī)動車輛保險(xiǎn)理賠實(shí)務(wù)2023版
- 病原微生物實(shí)驗(yàn)室標(biāo)準(zhǔn)操作規(guī)程sop文件
- 最完善的高速公路機(jī)電監(jiān)理細(xì)則
- 建筑工程技術(shù)資料管理.ppt
評論
0/150
提交評論