MATLAB語言基礎(chǔ)攻略_第1頁
MATLAB語言基礎(chǔ)攻略_第2頁
MATLAB語言基礎(chǔ)攻略_第3頁
MATLAB語言基礎(chǔ)攻略_第4頁
MATLAB語言基礎(chǔ)攻略_第5頁
已閱讀5頁,還剩119頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

MATLAB語言基礎(chǔ)廣東工業(yè)大學自動化學院李明系統(tǒng)仿真與MATLAB引言形而上者謂之道,形而下者謂之器

——《易經(jīng)·系辭》所謂“道”者,是指從具體實踐活動中總結(jié)、提取概括出來的具有普適性的規(guī)律?

認識世界所謂“器”者,則是在特定規(guī)律下制造出來的用于某種目的的工具?

改造世界控制系統(tǒng)設(shè)計→道MATLAB→器MATLAB初識MATLAB為何

MATLAB是美國MathWorks公司出品的商業(yè)數(shù)學軟件,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計算的高級技術(shù)計算語言和交互式環(huán)境,主要包括MATLAB和Simulink兩大部分。

MATLAB是矩陣實驗室(MatrixLaboratory)的簡稱,和Mathematica、Maple并稱為三大數(shù)學軟件。它在數(shù)學類科技應用軟件中在數(shù)值計算方面首屈一指。

MATLAB可以進行矩陣運算、繪制函數(shù)和數(shù)據(jù)、實現(xiàn)算法、創(chuàng)建用戶界面、連接其他編程語言的程序等,主要應用于工程計算、控制設(shè)計、信號處理與通訊、圖像處理、信號檢測、金融建模設(shè)計與分析等領(lǐng)域。

MATLAB何用MATLAB產(chǎn)品族主要應用于工程計算與科學繪圖控制系統(tǒng)的分析與設(shè)計

數(shù)字圖像處理數(shù)字信號處理通訊系統(tǒng)設(shè)計財務與金融工程附加的工具箱(單獨提供的專用MATLAB函數(shù)集)擴展了MATLAB環(huán)境,以解決這些應用領(lǐng)域內(nèi)的問題MATLAB的產(chǎn)生與發(fā)展產(chǎn)生MATLAB誕生于20世紀70年代,其首創(chuàng)者是時任新墨西哥大學教授Cleve

Moler及其同事,他們意識到在講述諸如線性代數(shù)等課程時,已有的編程語言比如Fortran和C語言已經(jīng)不能滿足需求,為了降低編程方面的負擔,CleveMoler基于他自己使用Fortran語言編寫的用于求解線性方程的子程序庫——基于特征計算的程序庫EISPACK和線性代數(shù)程序庫LINPACK,開發(fā)了MATLAB的雛形發(fā)展MATLAB是集命令翻譯、科學計算于一身的一套交互式軟件系統(tǒng),最初作為免費軟件在大學里廣泛使用,功能也比較簡單,只能進行矩陣運算和簡單的繪圖,但是因為在MATLAB中矩陣運算變得異常簡單,不需要用其他高級語言編寫矩陣運算程序庫,因而受到廣大工程專業(yè)大學生的青睞,也正是因為在控制分析和信號處理等工程領(lǐng)域中非常強調(diào)矩陣的運算和分析,才促使CleveMoler對MATLAB進行繼續(xù)開發(fā),并于1984年與JackLittle等一起創(chuàng)辦了MathWorks公司,把MATLAB推向市場。自公司開創(chuàng)以來,MathWorks不斷致力于版本的更新和軟件各方面功能的增強歷經(jīng)多年的發(fā)展,MATLAB長于數(shù)值計算,能處理大量的數(shù)據(jù),而且效率比較高。MathWork公司在此基礎(chǔ)上加強了MATLAB的符號計算、文字處理、可視化建模和實時控制能力,增強了MATLAB的市場競爭力,使MATLAB成為了市場主流的數(shù)值計算軟件。到20世紀90年代,MATLAB已成為國際控制界的標準計算軟件。MATLAB的優(yōu)勢強大易用的科學計算語言MATLAB之所以能迅速發(fā)展的一個重要原因就是MATLAB的使用簡潔直觀,符合人們的思維習慣,易于理解和學習。矩陣運算,例如矩陣乘積,矩陣求逆等等;用C則比較復雜求線性代數(shù)方程Ax=b的解,x=A\b針對許多專門的領(lǐng)域,將工程科學界重要的問題通過軟件制作成工具箱全面的圖形功能一般數(shù)據(jù)可視化軟件的功能,例如二維圖形和三維圖形的可視化、圖像處理、動畫和表達式作圖等添加了軟件獨有的圖形的光照處理、色度處理以及四維數(shù)據(jù)的表現(xiàn)等圖形用戶界面(GUI)的制作上作了很大的改善獨立開放的平臺和實用的程序接口支持多種計算機操作系統(tǒng),提供了大量的平臺獨立的措施利于平臺之間移植MATLAB和Fortran、C和Basic之間都可以方便的實現(xiàn)連接強大的動態(tài)系統(tǒng)仿真功能MATLAB界面MATLAB窗口(1)命令窗口(CommandWindow)三個藍色的入門鏈接“>>”為命令提示符,此時我們可以在>>之后輸入一些基本命令,例如數(shù)值運算命令,然后按下Enter鍵,MATLAB則會在命令窗口立即顯示結(jié)果,并將結(jié)果自動賦予變量名ansMATLAB允許一行輸入多個命令,此時可以用逗號“,”和分號“;”來實現(xiàn),區(qū)別在于使用逗號時將會顯示運行結(jié)果,使用分號時運行結(jié)果將予以隱藏>>3.14*3^2 %采用直接演算法,類似于計算器ans=28.2600>>r=3 %采用變量賦值的方法,圓的半徑r=3r=3>>S=3.14*r^2 %求圓的面積SS=28.2600>>r=3;S=3.14*r^2 %使用分號禁止顯示計算的中間結(jié)果S=28.2600

MATLAB窗口(2)歷史命令窗口(CommandHistory)歷史命令窗口用于記錄用戶在命令窗口執(zhí)行過的命令行。包括已運行過的命令、函數(shù)、表達式、使用時間等信息。在歷史命令窗口的命令是按逆序排列的。即最早的命令在排在最下面,最后的命令排在最上面。在歷史命令窗口可進行命令歷史的查找、檢查等工作。用鼠標選中歷史命令窗口中的命令行,單擊右鍵彈出操作菜單,我們可以選擇相應菜單項對這些歷史命令進行各種操作如:復制(Copy)執(zhí)行(Evaluateselection)刪除(Deleteselection)雙擊(Doubleclick)這些命令可使它再次執(zhí)行。MATLAB窗口(3)工作間管理窗口(Workspace)工作空間是用于儲存運算中的各種變量和結(jié)果的內(nèi)存空間,而工作空間窗口則用于顯示變量的名稱、大小、字節(jié)數(shù)及數(shù)據(jù)類型等;我們可以通過工作空間窗口對變量進行觀察、編輯、保存和刪除等操作,有命令行和變量編輯器(VariableEditor)兩種方式工作空間管理窗口中命令行方式的主要命令命令功能who顯示存儲在工作空間全部變量的名稱whos顯示存儲在工作空間全部變量的名稱、大小、數(shù)據(jù)類型等詳細信息clear從工作空間中清除變量和函數(shù)save保存工作空間變量load從磁盤文件中讀取變量到工作空間lengthlength(A),若A向量則顯示其長度,若A為矩陣則顯示行數(shù)與列數(shù)中的較大數(shù)sizesize(A),得到矩陣A的行數(shù)和列數(shù)disp顯示變量MATLAB窗口(4)當前路徑窗口(CurrentDirectory)MATLAB的當前目錄窗口(CurrentDirectory)用于顯示及設(shè)置當前工作目錄,同時顯示當前工作目錄下的文件名、文件類型及目錄的修改時間等信息。用鼠標選中文件,單擊右鍵可以進行打開(Open)、運行(RunFile)、重命名(Rename)、刪除(Delete)等操作,只有在當前目錄或搜索路徑下的文件及函數(shù)才可以被MATLAB運行或調(diào)用。設(shè)置當前目錄可以在當前目錄窗口上方的輸入欄中直接輸入,或點擊瀏覽器下拉按鈕進行選擇。MATLAB的路徑搜索什么是搜索路徑專門用于查找“.m”文件的路徑搜索器,為一系列文件路徑的組合,缺省狀態(tài)下包括當前路徑和已安裝的全部工具箱的路徑。如果調(diào)用的函數(shù)或文件在搜索路徑之外,MATLAB會認為此函數(shù)或文件不存在而返回錯誤信息。一般而言,當在命令窗口輸入一個字符串時,MATLAB按下列順序開始搜索:在工作空間中搜索是否有以該字符串為變量名的變量,有則返回該變量的值;搜索是否有同名的MATLAB內(nèi)部函數(shù),若有,執(zhí)行該內(nèi)部函數(shù);在當前目錄中查找與該字符串同名的M文件,若有,執(zhí)行該文件;在搜索目錄中查找與該字符串同名的M文件,若有,執(zhí)行該文件;如果在搜索目錄中存在多個同名函數(shù),則只執(zhí)行搜索路徑中的第一個函數(shù),其他函數(shù)不再執(zhí)行。MATLAB的路徑搜索搜索路徑>>path (列出所有搜索路徑)>>editpath (進入搜索路徑對話框)>>pathtool (進入搜索路徑對話框)對話框中的設(shè)置方法用AddFolder…按鈕可以將某一目錄加入搜索路徑而忽略其子目錄,選擇AddwithSubfolder…按鈕可將選中目錄的子目錄也包括在搜索路徑中,一般情況下選擇后者,此時系統(tǒng)會彈出“瀏覽文件夾”對話框,我們選擇好了目錄之后單擊“確定”,則新目錄會出現(xiàn)在搜索路徑中。MATLAB的幫助系統(tǒng)HelpDesk該窗口是一個獨立的交互式幫助瀏覽器,用戶可以在命令窗口中輸入helpdesk或helpwin來啟動幫助窗口。通過幫助窗口中的幫助主題(Contents)、幫助索引(Index)和聯(lián)機演示(Demos)可以瀏覽用戶可能需要的內(nèi)容,而在查詢結(jié)果(SearchResults)中可以查看按用戶要求得到的幫助信息列表

>>helpdesk >>helpwin >>docHelpDesk是HTML格式的幫助文檔,HelpDesk的搜索可以使用不完全關(guān)鍵字,MATLAB里包含了大量關(guān)于MATLAB安裝、使用、編程以及各種工具箱等的電子版手冊,具有搜索功能,因此也可以在指定的手冊中搜索關(guān)鍵字,使用非常方便。MATLAB的幫助系統(tǒng)help命令當用戶知道函數(shù)名稱想了解其具體用法時,可以在命令窗口使用help命令,調(diào)用方法是help函數(shù)名,例如想了解矩陣求逆函數(shù)inv()的用法,可以在命令窗口輸入help命令

>>helpinvlookfor命令lookfor命令與help不同,help命令要求函數(shù)名的精確匹配,而lookfor只要求與每個函數(shù)中的總結(jié)信息有匹配。所以當用戶不知道函數(shù)的確切名稱時可以使用lookfor命令,此時只需知道函數(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ù)等虛數(shù)單位i=sqrt(-1),復數(shù)z=a+b*i或z=r*exp(i*θ),且注意當復數(shù)的虛部為一個確定的數(shù)(而不是變量或者矩陣)時,可以省略系數(shù)和虛數(shù)單位之間的“*”,即3+i*6可以寫成3+6i,但是x+i*y不能寫成x+yi;當復數(shù)作為矩陣元素時,復數(shù)內(nèi)不能留有空格,否則可能會被當作兩個元素處理而出錯。例如k1為一向量,但是k2則是一個矩陣。>>k1=[3+4i;5+6i]k1=3.0000+4.0000i5.0000+6.0000i>>k2=[3+4i;5+6i] %復數(shù)作為矩陣元素時,復數(shù)內(nèi)不能留有空格k2=3.00000+4.0000i5.00000+6.0000iMATLAB中的數(shù)據(jù)類型(2)符號型數(shù)據(jù)

符號型數(shù)據(jù)則是在MATLAB中定義的特殊變量,它以字符串的形式表示,但又不同于普通字符串。其變量、表達式均為符號對象。符號對象使用sym或者syms生成,語法格式為

>>symsarg1arg2….arg_props

符號對象命令舉例

>>symsxy; %利用syms生成符號對象

>>z=sym(‘z’); %利用sym生成符號對象 >>symspreal; %聲明符號對象p為實的

>>m=sym('m','real'); %聲明符號對象m為實的

>>n=sym('n','positive'); %聲明符號對象n為正的

>>m=sym('m','unreal'); %去掉m的附加屬性

>>A=[1x;yz] %生成符號矩陣

>>f=sin(x)+cos(x); %建立符號表達式MATLAB中的數(shù)據(jù)類型(3)字符串型數(shù)據(jù)MATLAB作為一種高級語言,字符串運算功能也是很豐富的,字符串就是字符數(shù)組,在字符串里的每個字符是數(shù)組里的一個元素,字符串中空格也是字符,由于字符串是以向量的形式來存儲的,因而可以通過它的下標對字符串中的任何一個元素進行訪問在MATLAB增加了符號運算工具箱,字符串成為符號運算表達式的基本構(gòu)成單位舉例

>>s1='MATLABSTRING'; %生成字符串s1>>dim=size(s1) %顯示s1的維數(shù),1×13階矩陣dim=13>>s2=['MATLABSTRING']; %生成字符數(shù)組s2,與s1等價>>s1(2); %通過下標訪問字符串,ans=AMATLAB中的數(shù)據(jù)類型(4)多維數(shù)組

數(shù)組也可以嵌套,一個數(shù)組的元素可以是另外一個數(shù)組,這樣就構(gòu)成了多維數(shù)組,例如三維數(shù)組就是一般矩陣的拓展,可以直接用于彩色圖像的描述,在實際編程中可能用到更高維的數(shù)組。如圖所示即為一個三維數(shù)組的示意圖,數(shù)組的第一維稱為“行”,第二維稱為“列”,第三維稱為“頁”,運算則與低維的類似。

>>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 %三維矩陣間的./運算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ù)組也用下標標識,但元胞數(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ī)則變量名由一個字母導引,后面可以跟字母、數(shù)字、下劃線等,但不能用空格或者標點符號。例如var_temp、control_input1、state21均是合法變量名,而_output、45time、@position等均是非法變量名。變量名不能是MATLAB的保留字,例如for、end、while、if等命令名。MATLAB中的變量名是大小寫敏感的,即A和a代表不同的變量。變量名長度不能超過63位。變量的定義和賦值方式為:賦值變量=賦值表達式變量是MATLAB的基本元素之一,但其用法的特殊之處在于:MATLAB表達式中可以使用矩陣形式MATLAB中不需要預先聲明變量的類型和維數(shù),MATLAB會根據(jù)對新變量的操作創(chuàng)建該變量,確定其類型并為其分配存儲空間對已經(jīng)存在的變量的賦值操作,MATLAB會以新值代替舊值。如果需要的話,MATLAB可以改變該變量的類型(例如將字符串型數(shù)據(jù)賦給原數(shù)值型數(shù)據(jù)變量時)或者為其分配新的存儲空間(例如當矩陣維數(shù)發(fā)生變化時)MATLAB中的常量常量常量是一些在MATLAB中預先定義好數(shù)值的變量,既然其本質(zhì)是變量,就可以對其進行重新賦值,但在編程時,為了避免不必要的麻煩,請盡量避免對這些特定常量的重新賦值。表中就是一些MATLAB中的常量。常量名用法pi圓周率πeps機器的浮點運算誤差限,2.2204e-016,若|x|<eps,則可以認為x=0i,j虛數(shù)單位narginm函數(shù)入口參數(shù)變量,用于m函數(shù)程序設(shè)計nargoutm函數(shù)出口參數(shù)變量,用于m函數(shù)程序設(shè)計realmin最小的正浮點數(shù)2.2251e-308realmax最大的正浮點數(shù)1.7977e+308bitmax最大的正整數(shù)9.0072e+015InfInfinity,無窮大量+∞NaNNot-a-number,通常由0/0運算、Inf/Inf運算或者其他可能運算得出ans默認結(jié)果存儲變量MATLAB中的矩陣矩陣和向量數(shù)學上,一個m行n列的矩形陣列被稱為一個m×n矩陣,矩陣一般由數(shù)組成。特別的,標量可看作是1×1的矩陣,列向量可看作是n×1的矩陣,而行向量則是1×n的矩陣。矩陣定義矩陣是MATLAB中的一種基本運算對象。在MATLAB語言中不必描述矩陣的維數(shù)和類型,它們是由輸入的格式和內(nèi)容來確定的矩陣操作MATLAB可以根據(jù)用戶的需要以直接輸入、命令行語句、函數(shù)構(gòu)造等方式生成特定的矩陣,同時還可以通過提取或者擴充等方式對已有矩陣進行相關(guān)的操作矩陣生成(1)以直接輸入的方式生成矩陣

矩陣元素必須在“[]”內(nèi)矩陣的同行元素之間用空格(或“,”)隔開;矩陣的行與行之間用“;”(或回車符)隔開;矩陣的元素可以是數(shù)值、變量、表達式或函數(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];%復數(shù)矩陣的直接輸入矩陣生成(2)以命令行語句或函數(shù)方式生成矩陣冒號表達式產(chǎn)生一個行向量Vec=start:step:end

(step默認為1)

>>Vec=0:2:8; %[0,2,4,6,8] >>Vec=1:3;

%[1,2,3],默認step=1linspace()生成線性等間距格式行向量linspace(start,end,num),其中start和end是生成向量的第一個和最后一個元素,num是元素總數(shù)。等價于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ù)分隔行向量。默認num=50,該命令等價于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()生成隨機矩陣,元素滿足在(0,1)區(qū)間內(nèi)的均勻分布

>>A=rand(3) %生成3×3維rand()隨機矩陣

>>A=rand(2,3) %生成2×3維rand()隨機矩陣randn()生成隨機矩陣,元素滿足均值為0,方差為1的標準正態(tài)分布

>>A=randn(3) %生成3×3維randn()隨機矩陣

>>A=randn(2,3) %生成2×3維randn()隨機矩陣矩陣的訪問與賦值向量的訪問向量是有多個有序元素組成的,因而可以直接通過向量的下標來對向量中的元素進行訪問和修改,Vec(i)即表示向量Vec中的第i個元素。特別提出的是,可以通過冒號表達式對向量元素進行訪問,也可以用中括號方式任意指定多個向量元素進行訪問。

>>Vec=rand(1,6); %生成一個1×6的隨機行向量

>>Vec(3); %通過下標訪問向量的第3個元素

>>Vec(5)=0; %通過下標修改向量第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列的元素(一維下標為按列方式)

>>A=[417;256;389] %生成一個3×3的矩陣

>>A(3,3) %訪問A的第3行第3列的元素

>>A(3,2)=0 %修改A的第3行第2列的元素矩陣的拆分和提取(1)矩陣的拆分冒號表達式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運算符和中括號方式>>A=randn(3,3) %生成3×3的隨機矩陣>>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],:) %通過中括號復制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??梢岳每站仃噭h除矩陣的元素。

>>A=[417;256;389] >>A(2,:)=[] %刪除A的第二行

矩陣的提取diag()是抽取矩陣主對角線元素tril()是抽取矩陣的主下三角元素triu()是抽取矩陣主上三角元素

>>A=[123;456;789] >>diag(A) %抽取矩陣A的主對角線元素

>>tril(A) %抽取矩陣A的主下三角元素

>>triu(A) %抽取矩陣A的主上三角元素

矩陣的擴展子矩陣擴展在MATLAB中可以通過把矩陣B的子塊賦值為A來擴展矩陣A,假設(shè)A為m×n維矩陣,一般的命令格式為:B(r1:r2,c1:c2)=A,且需注意維數(shù)一致,即r2-r1+1=m且c2-c1+1=n。對于B中原先并不存在的元素,MATLAB將自動補0 >>A=[135;246] >>B(2:3,2:4)=A %將A矩陣擴充,使得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命令可以實現(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)置運算符是單撇號(’),矩陣A的轉(zhuǎn)置在MATLAB中用A’來表示,如果A是復數(shù)矩陣,則A’為A的共軛轉(zhuǎn)置矩陣,而非共軛轉(zhuǎn)置矩陣可用A.’來求得

>>A=[12;34] >>A'; %實矩陣的轉(zhuǎn)置

>>B=[1+i2;1i] >>B' %復矩陣的共軛轉(zhuǎn)置

>>B.‘ %復矩陣的非共軛轉(zhuǎn)置矩陣的旋轉(zhuǎn)rot90(A,k)將矩陣A旋轉(zhuǎn)90o的k倍,當k為1時可省略fliplr(A) 對矩陣實施左右翻轉(zhuǎn)flipud(A)矩陣A實施上下翻轉(zhuǎn)的函數(shù)

>>rot90(A); %將矩陣A旋轉(zhuǎn)90o >>fliplr(A); %將矩陣A左右翻轉(zhuǎn)

>>flipud(A); %將矩陣A上下翻轉(zhuǎn)MATLAB的矩陣運算矩陣的代數(shù)運算(1)基本運算矩陣加減矩陣加減即將A和B矩陣的對應元素相加減。若參與運算的兩矩陣之一為標量,則將標量與矩陣的所有元素分別進行加減操作。注意維數(shù)匹配。矩陣乘法設(shè)有矩陣A和B,若A為m×n維矩陣,B為n×p維矩陣,注意矩陣A的列數(shù)等于矩陣B的行數(shù),則可以由C=A*B實現(xiàn)矩陣的乘法,結(jié)果為m×p維矩陣。矩陣除法左除\:A\B等價于inv(A)*B,亦即方程A*x=B的解右除/:B/A等價于B*inv(A),亦即方程x*A=B的解

>>A=[12;34]; >>B=[10;01]; >>A+2 %[34;56]矩陣與標量相加,將標量與矩陣的所有元素相加

>>A+B %[22;35]對應元素相加

>>A-B %[02;33]對應元素相減

>>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ù)運算(2)點運算(維數(shù)不變,對應元素做相應運算)在MATLAB中,有一種特殊的點運算。點運算符有.*(點乘)、./(點右除)、.\(點左除)和.^(點乘方)。兩個矩陣進行點運算是指它們的對應元素進行相關(guān)運算,要求兩矩陣的維參數(shù)相同。 >>A=[12;34],B=[56;78]; >>A.*B %.*:A和B對應元素相乘,注意和A*B的區(qū)別 >>A./B %./:A和B對應元素相除,注意和A/B的區(qū)別 >>A.^3 %.^:對應元素和標量的乘方 >>A.^A %.^:對應矩陣元素之間的乘方 >>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)系與邏輯運算關(guān)系運算符和邏輯運算符矩陣的關(guān)系運算符和邏輯運算符有:<、<=、>、>=、==、~=、&、|、~。在關(guān)系與邏輯運算中,“真”用1表示,“假”用0表示,在邏輯運算中,所有的非零元素均按照1來處理,這和一般的關(guān)系與邏輯運算是相同的。運算規(guī)則若參與關(guān)系與邏輯運算的是兩個同維矩陣,那么運算將對矩陣相同位置上的元素按標量規(guī)則逐個進行比較或運算。最終運算結(jié)果是一個與原矩陣同維的矩陣,其元素由1或0組成。若參與關(guān)系與邏輯運算的一個是標量,一個是矩陣,那么運算將在標量與矩陣中的每個元素之間按標量規(guī)則逐個進行比較或運算。最終運算結(jié)果是一個與矩陣同維的矩陣,其元素由1或0組成。

>>A=[13;69];B=[42;07];A>=B; %同維矩陣的關(guān)系運算

>>a=5;A=[25;61];a==A; %標量與矩陣的關(guān)系運算

>>A=[43;01];B=[10;23];A|B; %同維矩陣的或運算

>>a=2;A=[01;32];a&A; %標量與矩陣的與運算矩陣分析(1)矩陣的行列式運算對一個方陣可以通過det命令求矩陣的行列式,如果參數(shù)矩陣為非方陣則會返回維數(shù)不匹配的錯誤信息。若A為數(shù)值矩陣,則得出數(shù)值計算結(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)矩陣的秩運算矩陣的行向量(或者列向量)中的最大線性無關(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)矩陣的求逆運算若矩陣A為方陣且滿秩,且存在一個與其同階的方陣B,使得:AB=BA=I(I為單位矩陣)則稱A為B互為逆矩陣。求方陣A的逆矩陣可調(diào)用函數(shù)inv(A)若矩陣A不是方陣,或者A是一個非滿秩的方陣時,矩陣A沒有逆矩陣,但可以找到一個與A的轉(zhuǎn)置矩陣A’同型的矩陣B,使得:ABA=A,BAB=B

此時稱矩陣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)矩陣的特征值和特征向量運算對矩陣A而言,滿足PA(λ)=det(λI-A)=0的根λ為矩陣A的特征值。滿足λiv=Av的向量v為矩陣A關(guān)于特征值λi的特征向量,PA(λ)稱為矩陣A的特征多項式。在MATLAB中,矩陣的特征值和特征向量可以調(diào)用函數(shù)eig()求得。調(diào)用格式如下E=eig(A):求矩陣A的全部特征值,構(gòu)成向量E[V,D]=eig(A):D為對角陣,其對角線上的元素為矩陣A的特征值,每個特征值對應的特征向量即為矩陣V的對應列,且特征向量均進行模方歸一化處理[V,D]=eig(A,‘nobalance’):與第2種格式類似,但第2種格式中先對A作相似變換后求矩陣A的特征值和特征向量,其每個特征向量各元素的平方和均為1,而格式3直接求矩陣A的特征值和特征向量,并不進行歸一化處理>>A=magic(3);>>E=eig(A);>>[V,D]=eig(A);>>[V,D]=eig(A,‘nobalance’)矩陣分析(5)矩陣的跡運算若矩陣A為方陣,則矩陣A的跡即為該矩陣對角線上各元素的和。矩陣的跡和該矩陣的特征值之和是相同的。在MATLAB中求矩陣A的跡的函數(shù)為trace(A) >>A=magic(3) %生成三階幻方矩陣A >>trace(A) %求A的跡

ans= 15 >>v=eig(A) %驗證矩陣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ù)命令也可以作用到矩陣上,但這種運算只是定義在矩陣的單個元素上在超越數(shù)學函數(shù)的后面加上字母m從而構(gòu)成矩陣的超越函數(shù),expm、sqrtm和logm分別為矩陣指數(shù)、矩陣開方和矩陣對數(shù)。矩陣的超越函數(shù)要求運算的矩陣必須為方陣。矩陣的超越函數(shù)也可以用一般的形式表示,如矩陣指數(shù)用funm(A,'exp')函數(shù)命令可以實現(xiàn),但它們所采用的算法不同,其計算結(jié)果會有微小的差別

>>A=magic(2) %生成二階魔方矩陣

>>expm(A) %矩陣乘方

>>logm(A) %矩陣對數(shù)

>>funm(A,‘log’) %另一種形式的對數(shù)調(diào)用MATLAB的符號運算符號表達式的化簡假設(shè)符號表達式為f,對符號表達式化簡的函數(shù)有:simplify(f) 應用函數(shù)規(guī)則對f進行化簡。simple(f) 調(diào)用MATLAB的相關(guān)函數(shù)對表達式進行綜合化 簡,并顯示化簡過程 >>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因式分解符號表達式的因式分解函數(shù)為factor(f) >>symsx; >>f=x^3-1; %生成符號表達式f=x3-1 >>f1=factor(f) %對f=x3-1進行因式分解,結(jié)果存入f1 f1= (x-1)*(x^2+x+1)符號微積分(1)符號極限在MATLAB中調(diào)用limit()函數(shù)可以求取符號表達式的極限,設(shè)符號表達式為f,調(diào)用函數(shù)格式如下:limit(f,x,a) 計算f在x→a條件下的極限;limit(f,a) 計算f中由默認自變量趨向于a條件下的極限;limit(f) 計算f在默認自變量趨向于0條件下的極限;limit(f,x,a,‘right’)和limit(f,x,a,‘left’)計算f在x→a條件下的右極限和左極限。 >>symsxa; >>f=(1+a/x)^x; >>r1=limit(sin(x)/x) %求符號表達式1的極限值 r1= 1 >>r2=limit(f,x,inf,'left') %求符號表達式2的極限值 r2=

exp(a)符號微積分(2)符號微分在MATLAB中調(diào)用diff()函數(shù)可以求取符號表達式的極限,設(shè)符號表達式為f,調(diào)用函數(shù)格式如下:diff(f) 求f對于默認自變量的微分diff(f,x) 求f對于自變量x的微分diff(f,n) 求f對于默認自變量的n次微分>>symsx>>f=exp(x)*sin(x);>>r1=diff(f) %求符號表達式f的一次微分r1=exp(x)*cos(x)+exp(x)*sin(x)>>r2=diff(f,2) %求符號表達式f的二次微分r2=2*exp(x)*cos(x)符號微積分(3)符號積分在MATLAB中調(diào)用int()函數(shù)可以求取符號表達式的積分,設(shè)符號表達式為f,調(diào)用函數(shù)格式如下:int(f) 求f對于默認自變量的不定積分int(f,x) 求f對于自變量x的不定積分int(f,a,b) 求f對于默認自變量從a到b的定積分>>symsx;>>f1=-2*x/(1+x^2)^2;>>f2=x*log(1+x);>>r1=int(f1) %求符號表達式1的不定積分>>r2=int(f2,0,1) %求符號表達式2的定積分r1=1/(x^2+1)r2=1/4多項式(1)應用背景多項式在工程計算中有著廣泛的應用,在很多情況下,特殊函數(shù)都可以用Taylor級數(shù)展開成多項式的形式,控制系統(tǒng)的傳遞函數(shù)可以用多項式的形式表述多項式的定義直接輸入MATLAB采用行向量表示多項式,將多項式的系數(shù)按降冪次序存放在行向量中即可,多項式P(x)=anxn+…+a1x+a0表示為P=[an,an-1,…,a1,a0]命令poly如果A是矩陣,則poly(A)將創(chuàng)建矩陣A的特征多項式;如果A是向量,則poly(A)將創(chuàng)建以A中各元素為根的多項式

>>A=magic(2); %二階魔方矩陣

>>poly(A); %矩陣A的特征多項式

>>symsx;det(x*eye(2)-A); %驗證是否相符

>>A=[123];>>poly(A); %創(chuàng)建以123為根的多項式

>>symsx;>>expand((x-1)*(x-2)*(x-3)); %驗證多項式顯示poly2sym(p,'x')多項式(2)多項式運算多項式加減:+-使用Matlab的運算符+-實現(xiàn)多項式的加減法對于次數(shù)相同的多項式,可以直接對其系數(shù)向量進行加減運算;如果兩個多項式次數(shù)不同,則應該把低次多項式中系數(shù)不足的高次項用0補足,然后進行加減運算>>pa=[1-1-26]; %pa=x3-x2-2x+6>>pb=[0123]; %pb=x2+2x+3>>p=pa+pb %多項式相加,向量維數(shù)必須相同,低次多項式補零p= %相加以后的結(jié)果1009多項式(3)多項式運算多項式相乘:p=conv(p1,p2)p為多項式p1和多項式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多項式相除:[q,r]=deconv(p1,p2)多項式p1除以多項式p2,商多項式為q,余多項式為r[q,r]=deconv(p1,p2)p1=conv(q,p2)+r>>p1=[123];p2=[12];[q,r]=deconv(p1,p2)q=10r=003多項式(4)多項式運算多項式求導

dp=polyder(p) 多項式p的導數(shù)多項式為dp

dp=polyder(p1,p2) 多項式p1和多項式p2乘積的導數(shù)多項式為dp

[num,den]=polyder(p1,p2)有理分式(p1/p2)的求導后的有理分式為(num/den)多項式求值代數(shù)多項式求值y=polyval(p,x)求多項式p在自變量為x時的值,若x是向量或矩陣,則采用數(shù)組運算(點運算)!矩陣多項式求值Y=ployvalm(p,A)按矩陣運算規(guī)則求多項式p在自變量為A時的值,當自變量A為矩陣時,多項式中的常數(shù)項a0被當作a0*eye(n)處理例如對于多項式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))多項式(5)多項式運算多項式求根:r=roots(p) r為多項式p的根組成的列向量>>p=[132];roots(p)ans=-2-1部分分式分解:[r,p,k]=residue(num,den)有理分式(num/den)部分分式分解后,r為留數(shù),p為極點,k為直項>>num=[1

11

39

52

26];den=[1

10

35

50

24]; %無重極點>>[r,p,k]=residue(num,den);>>num=[0

1

4

6];den=[1

3

3

1]; %有重極點>>[r,p,k]=residue(num,den)多項式擬合:p=polyfit(x,y,n) 由給定數(shù)據(jù)x和y擬合出n階多項式p,用來逼近y=f(x)曲線使用非線性擬合工具箱cftoolMATLAB編程基礎(chǔ)引言在前面的內(nèi)容中,我們掌握了MATLAB的基礎(chǔ)知識,學會了如何在MATLAB的命令窗口進行科學計算操作,例如矩陣計算、符號計算等,這些語句按照用戶輸入的固定順序一個接一個的執(zhí)行,它首先讀取輸入,然后運算得到所需結(jié)果,打印出結(jié)果,這和編程中的順序結(jié)構(gòu)編程類似,在之前的例子中,我們不能重復運算程序的某些部分,也不能根據(jù)輸入的值,有選擇地執(zhí)行程序的某些部分。在下面的內(nèi)容中,我們將視野擴大至順序結(jié)構(gòu)以外的流程控制結(jié)構(gòu),向讀者介紹MATLAB編程方法,循序漸進,首先講解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ù)的判斷,達到預先設(shè)定好的循環(huán)次數(shù)則循環(huán)結(jié)束,所以for循環(huán)的次數(shù)是確定的語法 forindex=expression

loopbody end

其中,index是循環(huán)變量,expression是循環(huán)控制表達式,在for和end之前的執(zhí)行語句為循環(huán)體(loopbody)執(zhí)行順序變量index讀取表達式expression,其在一般情況下是一個向量,用冒號表達式表示為start:increment:end,若采用默認的步長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)條件表達式的判斷,只要循環(huán)條件表達式為真,則循環(huán)體就重復執(zhí)行,直到循環(huán)條件表達式為假。所以while循環(huán)的次數(shù)不確定語法 whilecondition

loopbody end如果condition的值非零(true),程序?qū)?zhí)行循環(huán)體(loopbody),然后返回到while語句執(zhí)行,直到condition的值變?yōu)榱悖╢alse),這個重復過程結(jié)束。當程序執(zhí)行到while語句且condition的值為0之后,程序?qū)?zhí)行end后面的第一個語句。while循環(huán)求Fibonacci數(shù)列的小于100的前n項 >>f(1)=1;f(2)=1; %Fibonacci數(shù)列的前兩項 >>i=2; %項數(shù)標志 >>flag=0; %循環(huán)終止判斷標志變量 >>while(flag<100) %終止條件是循環(huán)終止判斷標志變量小于100 i=i+1;

f(i)=f(i-1)+f(i-2); %Fibonacci數(shù)列項的求取方法 flag=f(i)+f(i-1); %循環(huán)終止判斷變量,已求數(shù)列的最后兩項和 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其中當條件表達式condition的值為真(非0)時執(zhí)行語句段statements

if-else-end結(jié)構(gòu) ifcondition statements_1 else statements_2 end其中當條件表達式condition的值非0時執(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)控制下,當運行到程序的某一條條件表達式為真(非0)時,則執(zhí)行與之相關(guān)的語句段,而后系統(tǒng)不再檢查其他的條件表達式,系統(tǒng)將跳過if結(jié)構(gòu)中的其他語句。具體執(zhí)行順序為:如果條件表達式condition_1的值非0,那么程序?qū)?zhí)行語句段statements_1,然后跳轉(zhuǎn)到end后面的第一個可執(zhí)行語句繼續(xù)執(zhí)行。否則,程序?qū)z測條件表達式condition_2的值,如果condition_2的值非0,那么程序?qū)?zhí)行語句段statements_2,然后跳轉(zhuǎn)到end后面的第一個可執(zhí)行語句繼續(xù)執(zhí)行。如果所有的控制表達式均為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的值與下面表達式的值是否匹配來決定程序的轉(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語句段是可選的。如果它存在的話,當switch_expr的值與其他所有的選項都不相符時,語句段statements_other將會被執(zhí)行。如果它不存在,且witch_expr的值與所有的選項都不相符時,結(jié)構(gòu)中的任何一個語句段都不會被執(zhí)行。switch結(jié)構(gòu)注意如果switch_expr有很多值可以導致相同代碼的執(zhí)行,那么這些值可以括在同一括號內(nèi),如果這個switch表達式和括號中任何一個值相匹配,那么這個語句段將會被執(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í)行,當在循環(huán)體內(nèi)執(zhí)行到該語句時,程序?qū)⑻鲅h(huán),繼續(xù)執(zhí)行循環(huán)語句的下一語句。continue語句控制跳過循環(huán)體中的某些語句。當在循環(huán)體內(nèi)執(zhí)行到該語句時,程序?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語句當用戶需要在文件中進行終止操作時,可以使用return命令,執(zhí)行return命令后,進程將返回調(diào)用函數(shù)或者鍵盤。運用return命令可以提前結(jié)束程序的運行。return和break的區(qū)別在于return一般用于函數(shù)或者文件的結(jié)束,而break用于循環(huán)的終止。文件的編寫與調(diào)試為什么?當我們遇到綜合性問題時,命令窗口將不再適合,而需要用到程序編輯與調(diào)試的環(huán)境,在MATLAB中我們稱之為M文件編輯器。利用它我們可以實現(xiàn)對MATLAB命令行語句段的批處理,或者對M文件進行保存和調(diào)用,使得MATLAB的功能得到了極大的擴展,適用于較大規(guī)模程序的編制,并以此解決更為復雜的工程問題如何?MATLAB下提供了兩種源程序文件格式,其中一種是普通的ASCII碼構(gòu)成的文件,在這樣的文件中包含了一族由MATLAB語言所支持的語句,它類似于DOS下的批處理文件,這種文件稱為M-腳本文件;而MATLAB程序設(shè)計的主流方法是M-函數(shù)文件在實際編程中,推薦使用M-函數(shù)文件格式編程M文件M文件MATLAB程序,大致分為兩類:M腳本文件

(M-Script)和M函數(shù)文件(M-function),它們均是普通的ASCII碼構(gòu)成的文件,后綴均為.m。M文件名的命名規(guī)則,文件名必須以字母開頭,而后可以是英文、數(shù)字和下劃線的組合,文件名首字符不能是數(shù)字或下劃線,M文件名中不能含有空格;同時,M文件名文件名不能與Matlab的內(nèi)部函數(shù)名相同,因而我們建議對M文件的命名盡量不要是簡單的英文單詞,簡單的單詞命名容易與MATLAB內(nèi)部函數(shù)同名,還有一點需要注意,雖然MATLAB對M文件名是大小寫敏感的,但Windows的文件名是不區(qū)分大小寫的,為了文件的保存方便,實現(xiàn)不同平臺之間的通用性,,建議M文件名盡量只使用小寫。M文件編輯器功能編寫用戶的M文件打開和修改M文件,觀察變量值、調(diào)試程序等啟動M文件編輯器在命令窗口輸入edit命令可進入M文件編輯器,此時MATLAB將建立一個空文件,如果需要查看、編輯或者修改已經(jīng)存在的M文件,例如文件名為test.m,則用戶只需在命令窗口輸入edittest或者edittest.m;或者在Windows文件夾中雙擊該文件單擊工具欄上的M-file按鈕,此時MATLAB將建立一個空文件;通過File|New菜單可以選擇建立不同類型的M-file,包括空M文件、函數(shù)M文件和類M文件,當選擇建立函數(shù)M文件或者類M文件時,MATLAB會自動給出相應文件類型的模版。注意每次修改程序之后都要存盤M腳本文件適用范圍M腳本文件適用于用戶所需要立即得到結(jié)果的小規(guī)模運算使用方法M腳本文件中存儲的是可用于自動重復執(zhí)行的一組MATLAB命令和函數(shù)組合。M腳本文件等價于從命令窗口中順序輸入文件里的命令,程序只要依次將命令編輯在命令文件中,再保存成為擴展名為.m的M腳本文件即可。M腳本文件的執(zhí)行方式第一種方式是在M文件編輯器的工具欄中點擊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)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論