版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
MATLABProgrammingandEngineeringApplicationMATLAB程序設(shè)計與工程應(yīng)用本書知識結(jié)構(gòu)第1章MATLAB與程序設(shè)計1.1算法和程序了解計算機(jī)系統(tǒng)的基本組成,了解計算機(jī)系統(tǒng)中算法和程序的基本概念,典型程序設(shè)計語言的基本特點,掌握程序處理的兩種基本方式(編譯和解釋)及其特點。1.2MATLAB入門了解MATLAB的工作環(huán)境及基本操作,熟悉腳本命令和程序的基本概念,掌握創(chuàng)建、編輯、保存和運行腳本程序的基本操作方法。1.3MATLAB的內(nèi)置函數(shù)了解內(nèi)置函數(shù)的概念,了解MATLAB中提供的初等數(shù)學(xué)內(nèi)置函數(shù)及其用法。1.4MATLAB的幫助系統(tǒng)了解MATLAB的幫助系統(tǒng),熟悉進(jìn)入幫助系統(tǒng)、獲取幫助的常用操作方法。1.1算法和程序計算機(jī)的硬件(Hardware)是電腦內(nèi)部所有的組件設(shè)備,例如中央處理器CPU、主板、內(nèi)存條、硬盤、顯示器和鍵盤等,軟件(Software)是與計算機(jī)系統(tǒng)操作有關(guān)的程序和文檔。程序(Program)通常指的是完成特定功能的一組命令序列以及所處理的數(shù)據(jù),而文檔(Documentation)通常指的是與軟件開發(fā)、維護(hù)和使用有關(guān)的文字材料。程序設(shè)計又稱為編程(Programming),就是針對需要求解的問題,提出高效合理的算法,并選用一種合適的程序設(shè)計語言實現(xiàn)該算法。其中算法(Algorithm)是描述求解問題方法的操作步驟集合,而程序設(shè)計語言(ProgrammingLanguage)規(guī)定了書寫程序時允許使用的一組記號和一套語法規(guī)則。1.1算法和程序算法是描述求解問題方法的操作步驟。在描述一個算法時,所采用的基本元素主要有變量、賦值、分支、循環(huán)和過程等。其中,變量(Variable)代表算法需要處理的數(shù)據(jù),一般用若干個英文字符構(gòu)成的符號來表示,例如x、y1、TotalNum等。賦值就是將期望的數(shù)據(jù)作為變量的值保存到變量中,或者對變量中原來保存的數(shù)據(jù)值進(jìn)行修改。在求解不同的問題時,算法的具體操作步驟和執(zhí)行流程各不相同,但大多可以歸納為三種典型情況,即順序、分支和循環(huán),稱為程序的基本結(jié)構(gòu)。任何復(fù)雜的算法問題,都可以通過設(shè)置適當(dāng)?shù)淖兞浚庙樞颉⒎种Ш脱h(huán)三種基本的執(zhí)行流程及其組合來描述。1.1.1算法1.1算法和程序1.1.1算法1.1算法和程序1.1.1算法一個算法可以在另一個算法中使用,稱為調(diào)用(Call)。為正確調(diào)用指定的算法,需要規(guī)定一種固定的格式,稱為過程(Procedure)。過程是從解決復(fù)雜問題的大算法中抽取出來的,能夠?qū)崿F(xiàn)相對獨立功能的小步驟。過程又稱為子程序(Subroutine)或函數(shù)(Function),而調(diào)用子程序的程序通常稱為主程序(MainFunction)。在主程序中調(diào)用子程序時,通常需要向子程序傳遞期望的參數(shù),從而使子程序具有一定的通用性,能夠在同一個或多個算法中多次調(diào)用以實現(xiàn)相同或類似的功能。1.1算法和程序1.1.2程序設(shè)計語言低級程序設(shè)計語言包括機(jī)器語言和匯編語言。機(jī)器語言(MachineLanguage)是面向計算機(jī)的底層硬件,能直接被計算機(jī)識別和執(zhí)行的程序設(shè)計語言。匯編語言(Assemblylanguage)又稱為符號語言(SymbolicLanguage),也是一種面向計算機(jī)底層硬件的語言。在匯編語言中,用便于人工閱讀和記憶的符號(助記符,Mnemonic)代替機(jī)器語言中用抽象的二進(jìn)制代碼表示的指令。例如,用助記符MOV表示數(shù)據(jù)的移動操作,用ADD表示加法操作等。1.1算法和程序1.1.2程序設(shè)計語言高級程序設(shè)計語言與匯編語言相比,高級程序設(shè)計語言(簡稱高級語言)更接近自然語言,因而抽象度高,與具體計算機(jī)的相關(guān)度更低,求解問題的方法描述更為直觀。因此,用高級語言設(shè)計程序的難度大大降低。根據(jù)設(shè)計要求,可以將所有的高級語言分為過程式語言和非過程式語言。在過程式程序設(shè)計語言中,通過用一系列可以順序執(zhí)行的運算步驟來描述相應(yīng)的求解過程,而非過程式語言無法表示出求解過程順序執(zhí)行的運算步驟。1.1算法和程序1.1.2程序的編譯和解釋高級語言和匯編語言程序都需要翻譯為計算機(jī)能識別的目標(biāo)程序(機(jī)器語言),才能被計算機(jī)硬件識別、處理和執(zhí)行。這一翻譯過程一般由專門的語言處理程序?qū)崿F(xiàn),例如匯編程序、編譯程序、解釋程序和相應(yīng)的操作程序等。在各種語言處理程序中,編譯(Compile)和解釋(Interpret)是語言處理的兩種基本方式。在編譯方式下,首先根據(jù)算法編制相應(yīng)的高級語言或匯編語言程序(稱為源程序),然后用專門的語言處理程序(編譯程序、匯編程序)翻譯為等價的目標(biāo)程序,再由計算機(jī)硬件進(jìn)行識別、存儲、處理和執(zhí)行,源程序、編譯程序和匯編程序不參與目標(biāo)程序的運行過程。1.2MATLAB入門MATLAB是一個功能十分強(qiáng)大的開發(fā)平臺,具有極其豐富的各種功能,在計算機(jī)程序設(shè)計、科學(xué)計算和數(shù)據(jù)分析、系統(tǒng)建模與仿真和幾乎所有行業(yè)(通信、自動控制、大數(shù)據(jù)、人工智能和機(jī)器學(xué)習(xí)、金融等)的工程實踐中都得到了極其廣泛的應(yīng)用。與傳統(tǒng)的計算機(jī)語言相比,MATLAB在技術(shù)解決問題方面具有許多優(yōu)勢。其中主要包括如下幾方面。
使用方便
平臺獨立性
MATLAB編譯器
豐富的預(yù)定義函數(shù)庫
設(shè)備獨立的繪圖功能
圖形化的用戶界面1.2MATLAB入門1.2.1MATLAB的工作環(huán)境1.2MATLAB入門1.2.2腳本和程序在MATLAB的命令行窗口可以直接輸入簡單的命令或者數(shù)學(xué)表達(dá)式,實現(xiàn)簡單的運算和操作。這些命令稱為腳本(Script)命令。如果需要實現(xiàn)復(fù)雜的運算功能,可以將腳本命令集中放到一個文件中,稱為腳本程序(ScriptProgram)。1.2MATLAB入門腳本命令在命令行窗口中的命令提示符“>>”后,輸入的各種命令和數(shù)據(jù)、變量、數(shù)學(xué)表達(dá)式和數(shù)學(xué)函數(shù)等,統(tǒng)稱為腳本命令。每條命令輸入完畢后回車,將立即得到執(zhí)行,并在命令行的下面顯示執(zhí)行結(jié)果,同時在工作區(qū)子窗口中顯示腳本命令創(chuàng)建的變量及變量的值或?qū)傩缘取R虼苏fMATLAB是一種解釋型程序設(shè)計語言。三個常用的腳本命令——clc:清除命令行子窗口clear:清除工作區(qū)子窗口中的所有變量;closeall:關(guān)閉運行程序所創(chuàng)建和打開的所有圖形窗口。1.2MATLAB入門腳本程序的創(chuàng)建和保存將多個腳本命令集中放到一個文件中,即可得到腳本程序。MATLAB的腳本程序文件名默認(rèn)以.m為后綴。在MATLAB中,可以通過如下幾種方法創(chuàng)建腳本程序。(1)單擊主頁選項卡上的新建腳本按鈕。此時將在主窗口中間自動打開編輯器子窗口,同時在主窗口的頂部出現(xiàn)編輯器、發(fā)布、視圖等標(biāo)簽。在編輯器子窗口頂部有一個標(biāo)簽untitled,這就是新創(chuàng)建的腳本程序文件。通過重復(fù)單擊主頁選項卡上的新建腳本按鈕,可以創(chuàng)建更多新的腳本程序文件,各新建的程序文件依次自動命名為untitled.m、untitled2.m等。每個程序文件對應(yīng)一個標(biāo)簽,并顯示在編輯器子窗口的頂部,如圖1-5所示。單擊某個程序文件的標(biāo)簽,即可在編輯器子窗口中錄入編輯程序。1.2MATLAB入門1.2MATLAB入門(2)如果已經(jīng)打開編輯器子窗口,通過依次單擊主窗口中編輯器選項卡上的新建、腳本命令,也可以創(chuàng)建腳本程序文件。每創(chuàng)建一個程序文件,都將在編輯器子窗口的頂部增加一個對應(yīng)的選項卡標(biāo)簽。通過以上兩種方法創(chuàng)建的腳本程序,只是顯示在編輯器子窗口中,并可以在其中編輯錄入程序。程序一旦做了修改或編輯,子窗口頂部的標(biāo)簽后面將出現(xiàn)一個星號,表示程序文件還沒有保存到硬盤上。單擊主窗口中編輯器選項卡上的保存按鈕,即可實現(xiàn)程序文件的保存。默認(rèn)保存到在當(dāng)前文件夾子窗口中設(shè)置的當(dāng)前文件夾中,也可以指定保存到其他位置,同時注意為程序文件起一個合適的文件名。在MATLAB中,腳本程序文件名的后綴默認(rèn)為.m。1.2MATLAB入門(3)在當(dāng)前文件夾子窗口中右擊,在彈出的快捷菜單中依次單擊新建、腳本菜單命令。創(chuàng)建的程序文件仍然依次自動命名為untitled.m、untitled2.m等,并同時保存在當(dāng)前文件夾中,此時可以為程序文件起一個合適的文件名。在當(dāng)前文件夾中雙擊所創(chuàng)建的程序文件名,即可在編輯器子窗口中打開文件并編輯錄入程序。(4)在命令行窗口輸入edit命令創(chuàng)建腳本程序。例如,輸入如下命令>>editmyprog將自動打開編輯器子窗口,其中程序文件名為myprog.m。如果未指定文件名,將打開一個名為untitledi.m的新程序文件,其中的i可以為2、3、4、…,取決于在當(dāng)前編輯器子窗口中原來已經(jīng)創(chuàng)建的程序文件個數(shù)。1.2MATLAB入門腳本程序的運行創(chuàng)建腳本程序并編輯完程序代碼后,利用編輯器選項卡上運行按鈕組中的工具按鈕可以實現(xiàn)程序的運行控制等,如圖1-7所示。單擊運行按鈕,直接啟動程序運行,也可以利用運行按鈕的下拉菜單命令實現(xiàn)斷點的設(shè)置和清除,以實現(xiàn)斷點運行和程序調(diào)試等。1.2MATLAB入門程序運行完畢后,程序中所有的變量都將出現(xiàn)在工作區(qū)子窗口,某些變量的運行結(jié)果也將同步顯示在命令行窗口。例如,新建腳本程序,并將其保存為prog1.m。在編輯器子窗口中打開該文件,并在其中輸入如圖1-10所示程序。運行程序后,將在工作區(qū)得3個變量a、b和c,同時在命令行窗口顯示運行結(jié)果。由于第1和第2條命令后面有分號,因此在命令行窗口只顯示變量c的值,而不顯示a和b變量的值。1.2MATLAB入門1.3MATLAB的內(nèi)置函數(shù)作為一款科學(xué)計算工具,MATLAB提供了大量用于科學(xué)計算和各行業(yè)應(yīng)用程序的庫函數(shù),稱為MATLAB的內(nèi)置函數(shù)。MATLAB中的數(shù)學(xué)運算內(nèi)置函數(shù)主要包括如下幾類:初等數(shù)學(xué)函數(shù)庫:算術(shù)運算函數(shù)、三角函數(shù)、指數(shù)和對數(shù)函數(shù)等;線性代數(shù)函數(shù)庫:矩陣分解、線性方程求解、計算特征值或奇異值等;數(shù)值積分和微分方程求解函數(shù)庫:數(shù)值積分求解函數(shù)、常微分方程求解函數(shù)、偏微分方程求解函數(shù)等;傅里葉分析和濾波函數(shù)庫:實現(xiàn)傅里葉變換、卷積和數(shù)字濾波的函數(shù)。1.3MATLAB的內(nèi)置函數(shù)1.3MATLAB的內(nèi)置函數(shù)實例1-1MATLAB內(nèi)置函數(shù)的使用調(diào)用MATLAB中的內(nèi)置函數(shù),實現(xiàn)如下計算:1.4MATLAB的幫助系統(tǒng)MATLABProgrammingandEngineeringApplicationMATLAB程序設(shè)計與工程應(yīng)用本書知識結(jié)構(gòu)3QASDRTFYGUML,;/第2章基本數(shù)據(jù)類型及運算2.1基本數(shù)據(jù)類型了解MATLAB程序中的基本數(shù)據(jù)類型,了解浮點數(shù)和整數(shù)的表示范圍及相互轉(zhuǎn)換方法,熟悉常用的常量符號。2.2變量及其屬性掌握MATLAB程序中變量的命名規(guī)則及其賦值方法,變量的屬性及其查看方法。2.3數(shù)組熟悉數(shù)組、向量和數(shù)值序列的概念及其創(chuàng)建方法,掌握數(shù)組元素的訪問及獲取數(shù)組大小的常用方法。第2章基本數(shù)據(jù)類型及運算2.4數(shù)據(jù)的基本運算了解MTALAB中對標(biāo)量和數(shù)組的基本運算方法及區(qū)別,熟悉利用運算符實現(xiàn)算術(shù)運算和構(gòu)成算術(shù)表達(dá)式的基本方法。2.5字符與字符串了解MATLAB程序中字符的編碼方法,掌握字符和字符串、字符向量與字符串?dāng)?shù)組的區(qū)別、聯(lián)系及其用法,熟悉字符串的各種基本運算和操作方法。2.6數(shù)據(jù)的輸入和輸出掌握MATLAB程序中實現(xiàn)數(shù)據(jù)輸入輸出的基本方法,熟悉常用的數(shù)值顯示格式,掌握數(shù)據(jù)格式化輸出的基本方法。在程序中,數(shù)據(jù)類型(DataType)是數(shù)據(jù)的屬性,用于為變量或者表達(dá)式規(guī)定可能的取值,定義數(shù)據(jù)在計算機(jī)內(nèi)存中的存儲方式以及對數(shù)據(jù)可以進(jìn)行的操作。在MATLAB中,基本的數(shù)據(jù)類型主要有數(shù)值型數(shù)據(jù)、邏輯型數(shù)據(jù)和字符串等,此外還提供了函數(shù)句柄、結(jié)構(gòu)體、元胞數(shù)組等高級數(shù)據(jù)類型。本章首先介紹簡單的數(shù)值型數(shù)據(jù)類型以及MATLAB中重要的數(shù)組和向量。MATLAB程序中的數(shù)值有兩種基本的類型,即整數(shù)(Integer)和浮點數(shù)(Floating-pointnumber)。其中整數(shù)可以是有符號整數(shù)或無符號整數(shù),而浮點數(shù)又包括單精度型(Single)和雙精度型(Double)兩種。各種數(shù)據(jù)類型的區(qū)別主要在于能夠表示的數(shù)據(jù)范圍和精度有所不同。2.1基本數(shù)據(jù)類型2.1.1整數(shù)2.1基本數(shù)據(jù)類型2.1.2浮點數(shù)(實數(shù))2.1基本數(shù)據(jù)類型2.1.3常量2.1基本數(shù)據(jù)類型在MATLAB中規(guī)定了很多專用的標(biāo)識符,用于代表固定的數(shù)據(jù),稱為常量(Constant)。常用的常量名如下。pi:圓周率。inf:無窮大。典型的情況是一個非0正數(shù)除以0,結(jié)果為
;一個負(fù)數(shù)除以0,得到結(jié)果為-
,表示為-inf。eps:無窮小。MATLAB程序中能夠表示的最接近0的最小數(shù)值,近似為2-52或2.2204′10-16。NaN:不確定量,又稱為非數(shù)值量(NoraNumber),典型的情況如0除以0。2.2變量及其屬性在MATLAB腳本命令和腳本程序的各種語句和表達(dá)式中,用變量(Variable)來表示和給定運算所需的數(shù)據(jù)。每個變量代表一定的內(nèi)存單元,變量值存儲在這些單元中,需要時可以從中讀取出來參加運算,或者將運算結(jié)果作為變量值,重新保存到對應(yīng)的單元中。在MATLAB程序中,變量及其屬性不需要在使用前進(jìn)行聲明。在程序中,每遇到一個新的變量,會自動創(chuàng)建該變量,并為其分配合適的存儲空間,這樣極大地簡化了MATLAB程序的編寫。2.2.1變量及其賦值程序中的每個變量都有唯一的標(biāo)識符作為名字,稱為變量名。通過變量名對變量所在的單元及其中的數(shù)據(jù)進(jìn)行訪問。變量的命名必須符合以下規(guī)則:變量名必須以字母開頭,后面可以是字母、數(shù)字、下畫線等,但不能有空格。例如my_Var1。變量名的長度不能超過63個英文字符。變量名不能用保留字,即在MATLAB中已經(jīng)用作特殊用途的標(biāo)識符。MATLAB中的變量名是大小寫敏感的,例如a1和A1是兩個不同的變量。2.2變量及其屬性2.2.1變量及其賦值為變量賦值的基本語法格式為:變量名=變量值需要說明以下幾點:執(zhí)行上述語句或命令后,可以在工作區(qū)中立即看到變量名及對應(yīng)的變量值。如果表達(dá)式后無分號,則執(zhí)行后在命令行窗口立即顯示變量及變量值;如果有分號,則命令行窗口不會有任何顯示。如果在上述命令中沒有給定變量名,則將變量值賦給默認(rèn)變量ans。通過在命令行窗口輸入clear命令或者執(zhí)行程序中的clear語句,可以清除工作區(qū)中原來創(chuàng)建的變量。2.2變量及其屬性2.2.2變量的屬性通過在命令行窗口執(zhí)行whos命令,可以按字母順序列出已經(jīng)創(chuàng)建的所有變量的名稱(Name)、大小(Size)、占用內(nèi)存單元字節(jié)數(shù)(Bytes)和數(shù)據(jù)類型(Class)等屬性。2.2變量及其屬性2.3.1數(shù)組的基本概念在計算機(jī)科學(xué)中,數(shù)組(Array)是由相同類型數(shù)據(jù)的集合所組成的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中用一塊連續(xù)的區(qū)域來存儲。數(shù)組中的每個數(shù)據(jù)稱為元素(Element),各元素在內(nèi)存中連續(xù)依次存放。數(shù)組中的各元素在數(shù)組中的位置用一個或者若干個整數(shù)指定,這些整數(shù)稱為下標(biāo)(Subscript)。在下標(biāo)中,每個整數(shù)對應(yīng)一維,下標(biāo)整數(shù)的個數(shù)稱為數(shù)組的維數(shù)(Dimension),維數(shù)為k的數(shù)組通常簡稱為k維數(shù)組。在MATLAB中,一維數(shù)組通常又稱為向量(Vector),其中只有一行的數(shù)組稱為行向量(RowVector),只有一列的數(shù)組稱為列向量(ColumnVector)。2.3數(shù)組2.3.1數(shù)組的基本概念2.3數(shù)組2.3.2數(shù)組的創(chuàng)建2.3數(shù)組一維和二維數(shù)組的創(chuàng)建
所有元素放在中括號中。
對于一維數(shù)組,各數(shù)據(jù)元素之間用空格或者逗號分隔。對于二維數(shù)組,同一行的各數(shù)據(jù)元素之間用空格或逗號分隔,各行之間用分號來分隔。2.3.2數(shù)組的創(chuàng)建2.3數(shù)組三維數(shù)組的創(chuàng)建
三維數(shù)組可以認(rèn)為是由多個相同維數(shù)的二維數(shù)組構(gòu)成。因此,為創(chuàng)建三維數(shù)組,可以首先創(chuàng)建二維數(shù)組,然后再進(jìn)行擴(kuò)展。創(chuàng)建第一頁創(chuàng)建第二頁2.3.2數(shù)組的創(chuàng)建2.3數(shù)組序列的生成
序列(Sequence)實際上是一個行向量,其中的各元素按照一定的規(guī)律而變化,例如相鄰的任意兩個元素之間的差都相等。
在MATLAB中,創(chuàng)建序列最基本的方法是用冒號運算符,其典型格式為
first:dis:last
其中first和last分別為序列的起始值和終止值;
dis為步長,即序列中相鄰兩個元素之間的差。2.3.2數(shù)組的創(chuàng)建2.3數(shù)組完整給出3個參數(shù)步長為默認(rèn)值1步長可以為負(fù)三個參數(shù)可以為實數(shù)步長為默認(rèn)值1三個參數(shù)可以為實數(shù)序列的生成2.3.2數(shù)組的創(chuàng)建2.3數(shù)組利用專用內(nèi)置函數(shù)創(chuàng)建序列
y=linspace(a,b)
其中,參數(shù)a和b為序列的最最小值和最大值。
該語句執(zhí)行后將返回一個行向量(序列),序列中的每個數(shù)據(jù)從a到b共100個,相鄰兩個元素之差都相等。調(diào)用該函數(shù)也可以再給定第三個參數(shù)n。當(dāng)n為大于0的正整數(shù)時,將返回n個等差數(shù)據(jù)序列,相鄰兩個數(shù)據(jù)之間的差值為(b-a)/(n-1)。如果n為負(fù)整數(shù),則返回一個空向量。2.3.2數(shù)組的創(chuàng)建2.3數(shù)組利用專用內(nèi)置函數(shù)創(chuàng)建序列
y=logspace(a,b)
創(chuàng)建10a~10b之間的對數(shù)數(shù)值序列。顯然有:x1(1)=10x2(1)、x1(2)=10x2(2)
、…
2.3.2數(shù)組的創(chuàng)建2.3數(shù)組------------------------------------------------------------------實例2-1數(shù)組的創(chuàng)建用三種不同的方法創(chuàng)建向量a=[0,2,4,6,8,10]。方法1:在命令行窗口直接輸入如下命令: >>a=[0,2,4,6,8,10]方法2:利用數(shù)值序列的創(chuàng)建方法實現(xiàn)。在命令行窗口輸入如下命令: >>a=0:2:10方法3:調(diào)用linspace內(nèi)置函數(shù)實現(xiàn)。 >>a=linspace(0,10,6)-----------------------------------------------------------------2.3.3數(shù)組元素的訪問2.3數(shù)組創(chuàng)建數(shù)組后,根據(jù)程序的需要可以訪問其中的指定元素。在MATLAB中,通過在數(shù)組名后添加一對小括號,并在小括號中依次列出需要訪問的元素的下標(biāo)。例如,A(2)表示訪問一維數(shù)組A中的第2個元素,
而B(1,2)表示訪問二維數(shù)組B中第1行第2列的元素。2.3.3數(shù)組元素的訪問2.3數(shù)組需要說明以下幾點:在MATLAB中,數(shù)組各維的下標(biāo)序號從1開始。由于數(shù)組中各元素在內(nèi)存中是按列順序存放的,因此對多維數(shù)組,也可以與一維數(shù)組一樣,采用只有一個下標(biāo)的方法進(jìn)行訪問。
例如,對2′3數(shù)組A中的第2行第1列元素A(2,1),按照逐列順序存放時,該元素是A中的第3個元素,因此也可以表示為A(3)。在訪問數(shù)據(jù)和矩陣時,結(jié)合冒號表達(dá)式,可以同時訪問數(shù)組中的多個數(shù)據(jù)。2.3.3數(shù)組元素的訪問2.3數(shù)組例如,創(chuàng)建二維數(shù)組A:訪問A中第二行第1~4列的所有元素,得到向量B。訪問A中所有行第3列的所有元素,得到一個列向量。訪問A中第1行第2列到最后一列的所有元素,得到行向量C。2.3.4數(shù)組大小的獲取2.3數(shù)組數(shù)組的大小(Size)指的是一個數(shù)組中含有數(shù)據(jù)的總個數(shù),也可以用各維中數(shù)據(jù)的個數(shù)表示。以二維數(shù)組為例,假設(shè)兩個維的長度分別為m和n,則數(shù)組中共有m×n個數(shù)據(jù)。size函數(shù)size函數(shù)的基本調(diào)用格式有如下2種:d=size(X)S=size(X,dim)第一種調(diào)用格式返回行向量d=[mn],其中的m和n分別表示二維數(shù)組X的行數(shù)和列數(shù)。參數(shù)dim指定數(shù)組X的維數(shù),返回數(shù)組中該維的長度,保存到變量S中。2.3.4數(shù)組大小的獲取2.3數(shù)組length函數(shù)length函數(shù)用于返回數(shù)組中所有維的最大長度。如果數(shù)組為行向量或者列向量,返回結(jié)果也表示向量中數(shù)據(jù)的總個數(shù)。numel函數(shù)numel函數(shù)用于返回數(shù)組中所有元素的個數(shù)。對于二維數(shù)組,返回結(jié)果等于行數(shù)與列數(shù)的乘積。2.3.4數(shù)組大小的獲取2.3數(shù)組例如,假設(shè)X為3×2數(shù)組,則
>>d
=
size(X)
>>S1=
size(X,1)
>>L=length(X)
>>N=numel(X)執(zhí)行結(jié)果如下:
d=
32 %數(shù)組X共有3行2列
S1=
3
%數(shù)組X第一維的長度為3,即行數(shù)為3
L=
2
%數(shù)組X中最后一維的長度,即列數(shù)為2
N=
6
%數(shù)組X中數(shù)據(jù)的總個數(shù)為62.4數(shù)據(jù)的基本運算MATLAB中的運算主要有算術(shù)運算、關(guān)系運算、邏輯運算等,每種運算都提供了相應(yīng)的運算符,可以很方便地構(gòu)成各種表達(dá)式。這里首先介紹常用的基本算術(shù)運算符。在MATLAB程序中,與能夠同時保存多個數(shù)據(jù)的數(shù)組不同,單個常數(shù)或者變量稱為標(biāo)量(Scalar)。對標(biāo)量和數(shù)組,在運算方法上有所不同,因此MATLAB中規(guī)定了不同的運算符。2.4數(shù)據(jù)的基本運算2.4.1標(biāo)量運算2.4數(shù)據(jù)的基本運算運算符“\”和“/”分別稱為左除和右除運算,二者的區(qū)別在于表達(dá)式中被除數(shù)和除數(shù)書寫的位置。
例如,表達(dá)式5/2=2.5,而5\2=0.4。賦值運算符的作用是將常數(shù)或者表達(dá)式的值賦給左側(cè)的變量,運算符左側(cè)只能是一個變量,而不能是表達(dá)式。
例如,如下賦值表達(dá)式:
>>a+2=20
是錯誤的。2.4.1標(biāo)量運算2.4數(shù)據(jù)的基本運算運算符的優(yōu)先級。運算符的優(yōu)先級用于確定計算表達(dá)式時各運算符代表的運算的順序。表2-3中各種算術(shù)運算符的優(yōu)先級從高到低依次為:①
乘方運算(^);②
乘法(*)、右除(/)、左除(\);③
加法(+)、減法(-)。
其中,處于同一優(yōu)先級的運算符將按照上述從左至右順序依次執(zhí)行運算。
與普通的數(shù)學(xué)表達(dá)式一樣,利用括號可以改變上述默認(rèn)的優(yōu)先級順序。此外,對于比較復(fù)雜、含有運算符種類比較多的表達(dá)式,也建議適當(dāng)?shù)匾肜ㄌ枺栽鰪?qiáng)程序的可讀性。2.4.1標(biāo)量運算2.4數(shù)據(jù)的基本運算數(shù)組中的每個元素也都是標(biāo)量,因此用上述標(biāo)量運算符也可以對其進(jìn)行運算。例如,如下表達(dá)式:>>c=A(1,2)+B(2,2)*5將數(shù)組B中第二行第二列這所得元素乘以5,再與數(shù)組A中第一行第二列的元素相加,結(jié)果賦給變量c。由于數(shù)組中存儲的是多個同類型數(shù)據(jù),在工程應(yīng)用中,通常需要對數(shù)組中的所有數(shù)據(jù)執(zhí)行相同的運算。為了簡化程序的編寫,MATLAB中提供了專門的數(shù)組運算符,對數(shù)組整體進(jìn)行運算。這是MATLAB與大多數(shù)高級語言程序的主要區(qū)別之一。2.4.2數(shù)組的運算2.4數(shù)據(jù)的基本運算2.4.2數(shù)組的運算說
明:數(shù)組的加減運算與標(biāo)量的加減運算符完全相同。實現(xiàn)的是將這兩個數(shù)組中所有對應(yīng)位置上的兩個數(shù)據(jù)相加減,分別得到結(jié)果數(shù)組中的各元素。假設(shè)A和B中分別有10個元素,則表達(dá)式A+B實際上一共執(zhí)行了10次加法運算。2.4數(shù)據(jù)的基本運算2.4.2數(shù)組的運算數(shù)組的乘除運算和乘方運算也是對數(shù)組中每個元素分別進(jìn)行乘除運算和乘方運算,但為了與標(biāo)量運算相區(qū)別,在前面加上一個“.”號。
例如,數(shù)組的乘方運算數(shù)組的除法運算2.4數(shù)據(jù)的基本運算2.4.2數(shù)組的運算兩個數(shù)組進(jìn)行上述運算時,要求其維數(shù)和大小都必須相同。
例如:報錯:數(shù)組A和B數(shù)據(jù)個數(shù)不同,不能進(jìn)行加法運算!2.4數(shù)據(jù)的基本運算2.4.2數(shù)組的運算一個數(shù)組也可以與標(biāo)量進(jìn)行運算,此時是將該標(biāo)量與數(shù)組中的各數(shù)據(jù)分別進(jìn)行運算。對乘方運算,必須用“.^”運算符,而其他運算用標(biāo)量運算符和數(shù)組運算符都可以。
例如:2.4數(shù)據(jù)的基本運算2.4.2數(shù)組的運算實例2-2數(shù)組的運算創(chuàng)建數(shù)組a=[0,1,2;1,-1,1],b=[0,0,0;1,1,1],并利用MATLAB腳本命令實現(xiàn)如下運算,:(1)a+b,(2)(a+b)2,(3)2ab。2.5字符與字符串2.5.1字符及其編碼作為文本的各種文字符號統(tǒng)稱為字符(Character)。為了與表示大小的普通數(shù)值型數(shù)據(jù)相區(qū)別,在程序中一般用單引號括起來。例如,'A'、'中'。在計算機(jī)中,所有信息都必須用若干位二進(jìn)制的組合進(jìn)行表示和區(qū)分。對文本字符(例如十進(jìn)制數(shù)字代碼字符、大小寫英文字母字符等),目前常用的方法是將每個字符用規(guī)定的8位二進(jìn)制表示,稱為ASCII碼(AmericanStandardInformationExchangecode,美國標(biāo)準(zhǔn)信息交換碼)。在MATLAB中,字符都用Unicode編碼的格式保存到計算機(jī)的內(nèi)存中。為了解決存儲效率問題,又出現(xiàn)了一些中間格式的字符集編碼,稱為Unicode轉(zhuǎn)換格式UTF(UnicodeTransformationFormat)。2.5字符與字符串2.5.1字符及其編碼ASCII碼上個世紀(jì)60年代,美國制定了一套字符編碼,對英文字符與二進(jìn)制位之間的關(guān)系做了統(tǒng)一規(guī)定,稱為ASCII碼,一直沿用至今。ASCII碼一共規(guī)定了Windows鍵盤上128個字符的編碼,比如大寫字母A的ASCII碼為65,數(shù)字字符3的ASCII碼為51。英語用128個符號編碼就夠了,但是用來表示其他語言,128個符號是不夠的。例如,對簡體中文,常用的編碼方式是GB2312,在這種編碼方式中,使用兩個字節(jié)表示一個漢字,所以理論上最多可以表示256
256=65536個中文字符。2.5字符與字符串2.5.1字符及其編碼Unicode編碼由于不同國家的語言采用的編碼方式不同,同一個編碼可以被解釋成不同的符號。因此,要想打開一個文本文件,就必須知道其編碼方式。否則,如果用錯誤的編碼方式進(jìn)行解讀,就會出現(xiàn)亂碼。如果有一種編碼,能夠?qū)⑹澜缟纤械姆柖技{入其中,每一個符號都給予一個獨一無二的編碼,那么亂碼問題就會消失。這就是Unicode編碼。在Unicode編碼中,每個字符用1~4個字節(jié)表示。對英文字符,Unicode編碼與其ASCII碼相同,比如英文大小字母A的Unicode編碼和ASCII碼都為65。對漢字字符,其Unicode編碼為2~4個字節(jié),例如漢字字符“中”的Unicode編碼為20013。2.5字符與字符串2.5.1字符及其編碼UTF編碼UTF編碼是Unicode編碼的一種實現(xiàn)方式,是一種可變長度的編碼方式,也就是對不同的字符用不同字節(jié)數(shù)的編碼。目前常用的有UTF-8和UTF-16等。UTF-8
使用1~4字節(jié)為每個字符編碼,其中大部分漢字采用3字節(jié)編碼,少量不常用漢字采用4字節(jié)編碼。UTF-16
使用2或4字節(jié)為每個字符編碼,其中大部分漢字采用2字節(jié)編碼,少量不常用漢字采用4字節(jié)編碼。MATLAB中采用UTF-16編碼。在MATLAB中,所有的字符都用Unicode編碼表示并存儲到計算機(jī)中。因此,對用單引號括起來的字符,在程序中實際上是代表其Unicode碼。2.5字符與字符串2.5.1字符及其編碼例如,創(chuàng)建數(shù)值型變量,默認(rèn)為double型創(chuàng)建字符型變量,Class屬性為char普通數(shù)值型變量的運算字符型變量的運算,是將字符的Unicode編碼(ASCII碼)進(jìn)行運算2.5字符與字符串2.5.2字符串與字符串?dāng)?shù)組由若干個字符可以構(gòu)成字符串(String),在程序中可用于指定單個文本片段(文件名和繪圖標(biāo)簽等)、顯示輸出運算結(jié)果,或者將已知的字符編碼數(shù)據(jù)表示為字符,從而便于在程序中輸入一些不能用鍵盤直接輸入的特殊字符(例如希臘字母、溫度符號字符)。在MATLAB中,字符串又可以有兩種不同的表示方法,分別稱為字符向量和字符串。2.5字符與字符串2.5.2字符串與字符串?dāng)?shù)組字符向量在MATLAB中,用單引號括起來的若干個字符稱為字符向量(CharacterVector)。在字符向量中,每個字符的Unicode編碼按順序依次存放到計算機(jī)內(nèi)存中,相當(dāng)于只有一行的數(shù)組。因此,與普通的數(shù)值型數(shù)組或向量一樣,利用下標(biāo)可以訪問字符向量中指定的一個或多個字符。2.5字符與字符串2.5.2字符串與字符串?dāng)?shù)組字符向量在MATLAB中,用單引號括起來的若干個字符稱為字符向量(CharacterVector)。在字符向量中,每個字符的Unicode編碼按順序依次存放到計算機(jī)內(nèi)存中,相當(dāng)于只有一行的數(shù)組。因此,與普通的數(shù)值型數(shù)組或向量一樣,利用下標(biāo)可以訪問字符向量中指定的一個或多個字符。2.5字符與字符串2.5.2字符串與字符串?dāng)?shù)組利用double函數(shù)將字符向量中的各字符轉(zhuǎn)換為對應(yīng)的Unicode編碼。利用char函數(shù)將字符的編碼轉(zhuǎn)換為字符(向量)。2.5字符與字符串2.5.2字符串與字符串?dāng)?shù)組利用double函數(shù)將字符向量中的各字符轉(zhuǎn)換為對應(yīng)的Unicode編碼。利用char函數(shù)將字符的編碼轉(zhuǎn)換為字符(向量)。2.5字符與字符串2.5.2字符串與字符串?dāng)?shù)組字符串從R2017a版本開始,MATLAB程序也允許用雙引號來創(chuàng)建字符串(String)。與字符向量不同,用雙引號包圍起來的字符串是一個整體。字符串是一個標(biāo)量,不能單獨訪問其中的某個字符。2.5字符與字符串2.5.2字符串與字符串?dāng)?shù)組字符串?dāng)?shù)組用一對雙引號括起來的字符序列構(gòu)成一個字符串標(biāo)量。與普通的數(shù)值型數(shù)據(jù)一樣,多個字符串標(biāo)量可以構(gòu)成一個數(shù)組。數(shù)組中各元素分別都是一個字符串,則稱為字符串?dāng)?shù)組(StringArray)。2.5字符與字符串2.5.3文本與數(shù)值型數(shù)據(jù)之間的轉(zhuǎn)換字符和字符串統(tǒng)稱為文本(Text),這是與前面介紹的整數(shù)、浮點數(shù)等數(shù)值型數(shù)據(jù)類似的另一種數(shù)據(jù)類型。其基本區(qū)別在于,數(shù)值型數(shù)據(jù)一般都具有大小的概念,而文本一般不具有大小概念,只是對某種信息的符號代號,例如電話號碼、房間號、身份證號碼等。如果一個文本中全部是數(shù)字代碼字符0~9,在程序中經(jīng)常需要將其轉(zhuǎn)換為數(shù)值型數(shù)據(jù),以便進(jìn)行特殊的處理變換,例如排序操作。或者相反,將數(shù)值型數(shù)據(jù)轉(zhuǎn)換為文本,以便實現(xiàn)顯示輸出等,例如將程序中的某個計算結(jié)果123送往計算機(jī)屏幕顯示。2.5字符與字符串2.5.3文本與數(shù)值型數(shù)據(jù)之間的轉(zhuǎn)換文本轉(zhuǎn)換為數(shù)值型數(shù)據(jù)字符向量或字符串標(biāo)量轉(zhuǎn)換為數(shù)值標(biāo)量常數(shù)字符串?dāng)?shù)組轉(zhuǎn)換為數(shù)值型數(shù)組2.5字符與字符串2.5.3文本與數(shù)值型數(shù)據(jù)之間的轉(zhuǎn)換在調(diào)用str2double函數(shù)實現(xiàn)轉(zhuǎn)換時,表示數(shù)值的文本可以包含數(shù)字、逗號(千位分隔符)、小數(shù)點、前導(dǎo)
+
或
-
符號,還可以是科學(xué)記數(shù)法中表示以10為底的專用字符e。如果文本中包含其他的非法字符,str2double
不能將文本轉(zhuǎn)換為數(shù)值,此時將返回
NaN
。2.5字符與字符串2.5.3文本與數(shù)值型數(shù)據(jù)之間的轉(zhuǎn)換數(shù)值型數(shù)據(jù)轉(zhuǎn)換為文本2.5字符與字符串2.5.4字符向量和字符串的基本操作字符串長度的獲取字符向量
字符向量實際上是普通的一維數(shù)組,其中的所有元素構(gòu)成一個字符串。因此可以調(diào)用普通數(shù)組的操作函數(shù)size、length和numel以獲取其長度,返回的是其中字符的個數(shù)。字符串?dāng)?shù)組
由于其中的每個字符串元素都是一個整體或者說一個標(biāo)量,因此用上述函數(shù)不是獲取其中每個字符串的長度,而是字符串?dāng)?shù)組中字符串的個數(shù)。
為了獲取字符串?dāng)?shù)組中各字符串的長度,必須調(diào)用strlength函數(shù)。2.5字符與字符串2.5.4字符向量和字符串的基本操作創(chuàng)建字符向量獲取各維的長度獲取字符向量第二維的長度(字符個數(shù))獲取字符的個數(shù)創(chuàng)建字符串?dāng)?shù)組獲取數(shù)組的長度(字符串的個數(shù))獲取數(shù)組中每個字符串的長度獲取數(shù)組中指定字符串的長度(字符個數(shù))2.5字符與字符串2.5.4字符向量和字符串的基本操作字符串的連接和拆分字符向量的連接和合并實現(xiàn)字符向量的合并,最簡單的方法是將各字符向量按順序放到一對中括號中,各字符向量之間用空格或逗號分隔。比較:2.5字符與字符串2.5.4字符向量和字符串的基本操作字符串的連接和拆分字符串的連接和合并
對用雙引號括起來的多個字符串,還可以用加號實現(xiàn)連接和合并。字符串的連接和合并2.5字符與字符串2.5.4字符向量和字符串的基本操作用加法運算符可以實現(xiàn)多個字符串的合并連接,也可以實現(xiàn)字符串與數(shù)值常數(shù)或字符、字符向量的合并,得到一個新的字符串。如果一個表達(dá)式中所有項都是字符向量和常數(shù),則不是進(jìn)行字符串的合并連接,而是將各字符向量中對應(yīng)字符的Unicode編碼與常數(shù)進(jìn)行普通的相加運算,得到普通的數(shù)值型數(shù)組或向量。顯然在這種情況下,同一個表達(dá)式中所有字符向量都必須具有相同長度。2.5字符與字符串2.5.4字符向量和字符串的基本操作字符串?dāng)?shù)組的連接和合并實現(xiàn)數(shù)組中同一行多個字符串的合并指定合并時的分隔符指定按列合并2.5字符與字符串2.5.4字符向量和字符串的基本操作字符串的拆分指定拆分時的分隔字符,默認(rèn)為空格。注意:split函數(shù)實現(xiàn)對字符串的拆分,得到若干子字符串。對字符向量,拆分后得到的是元胞數(shù)組,這將在后面介紹。2.5字符與字符串2.5.4字符向量和字符串的基本操作字符串的編輯2.5字符與字符串2.5.4字符向量和字符串的基本操作實例2-3字符串的編輯創(chuàng)建如下字符串:>>chr="HelloWorld" 之后,調(diào)用內(nèi)置函數(shù)依次實現(xiàn)如下功能:(1)刪除chr字符串末尾的所有空格字符,得到字符串chr1;(2)將字符串chr1中的所有小寫字母替換為大寫字母,得到字符串chr2;(3)用chr和chr2構(gòu)造2′1字符串?dāng)?shù)組chr3;(4)通過在各字符串末尾添加空格,使字符串?dāng)?shù)組chr3中所有字符串具有相同的長度。2.5字符與字符串2.5.4字符向量和字符串的基本操作創(chuàng)建字符串chr刪除尾隨空白字符串的合并小寫字母轉(zhuǎn)換為大寫字母為數(shù)組中的字符串添加尾隨空白,使兩個字符串長度相同2.6數(shù)據(jù)的輸入和輸出2.6.1數(shù)據(jù)的輸入根據(jù)程序流程的需要,在執(zhí)行程序的過程,希望用戶從鍵盤上實時輸入?yún)⒓舆\算的數(shù)據(jù)。x=?input(prompt)其中參數(shù)prompt為提示信息,可以是用單引號或者雙引號括起來的字符向量或者字符串。執(zhí)行上述命令時,將在命令行窗口顯示參數(shù)prompt中的字符串,并等待用戶輸入值。輸入完畢后,按回車鍵,則將用戶輸入的數(shù)據(jù)存入變量x。2.6數(shù)據(jù)的輸入和輸出2.6.1數(shù)據(jù)的輸入執(zhí)行input函數(shù)后,用戶可以輸入任何數(shù)值型常數(shù)、變量或者表達(dá)式。對輸入的變量或者表達(dá)式,返回結(jié)果為變量和表達(dá)式的值。如果需要文本字符串,必須在調(diào)用input函數(shù)時附加一個參數(shù)'s'或者''s''。執(zhí)行時,如果在提示信息后面不輸入任何信息直接回車,則返回結(jié)果為一個空數(shù)組(長度為0的數(shù)組)。2.6數(shù)據(jù)的輸入和輸出2.6.1數(shù)據(jù)的輸入執(zhí)行一次該命令也可以輸入一個數(shù)組。此時,在提示信息后面依次輸入數(shù)組的各元素,各元素必須放在一對中括號中,各元素之間可以輸入空格、逗號或分號分隔。2.6數(shù)據(jù)的輸入和輸出2.6.2數(shù)據(jù)的輸出顯示在命令行窗口直接輸入變量名,或者將變量直接作為程序中的一行語句,則執(zhí)行后將立即在命令行窗口顯示變量名及其數(shù)值。此外,MATLAB中還提供了專門的函數(shù)disp(x),用于顯示變量x的值,但是不顯示變量名稱。變量和數(shù)組的顯示2.6數(shù)據(jù)的輸入和輸出2.6.2數(shù)據(jù)的輸出顯示默認(rèn)情況下,MATLAB使用5位短格式顯示數(shù)值。數(shù)值的顯示格式除此之外,用戶還可以根據(jù)需要自行指定其他顯示格式。設(shè)置數(shù)值的顯示格式可以使用
format
命令。執(zhí)行該命令后,后面所有的變量值都將以指定格式顯示,直到再次執(zhí)行format命令重新設(shè)置顯示格式。2.6數(shù)據(jù)的輸入和輸出2.6.2數(shù)據(jù)的輸出顯示2.6數(shù)據(jù)的輸入和輸出2.6.2數(shù)據(jù)的輸出顯示為使數(shù)據(jù)按照期望的格式進(jìn)行輸出,同時顯示一些必要的提示信息,可以調(diào)用MATLAB中的內(nèi)置函數(shù)fprintf。該函數(shù)的具體調(diào)用格式如下:fprintf(formatSpec,A1,...,An)
其中,
參數(shù)A1,...,An指定需要顯示輸出的變量或者數(shù)組,
參數(shù)
formatSpec
指定顯示輸出的格式,稱為格式字符串。數(shù)據(jù)的格式化輸出2.6數(shù)據(jù)的輸入和輸出2.6.2數(shù)據(jù)的輸出顯示格式字符串的作用是指定后面各變量值的顯示格式以及提示信息。格式字符串必須使用單引號或者雙引號括起來的字符向量或字符串,其中可以是普通的字符或特殊字符(例如換行符\n),還可以是以百分號開始的格式化操作符。普通字符將直接輸出顯示,而格式化操作符用于指定相應(yīng)的顯示格式。格式化操作符必須以百分號開頭,后面緊跟格式說明字符,這些格式說明字符一般為規(guī)定的一個大寫或小寫字母。2.6數(shù)據(jù)的輸入和輸出2.6.2數(shù)據(jù)的輸出顯示2.6數(shù)據(jù)的輸入和輸出2.6.2數(shù)據(jù)的輸出顯示兩點說明——在格式操作符中可以附加標(biāo)志、字段寬度和精度等參數(shù),以便進(jìn)一步定義輸出文本的格式。常用的附加標(biāo)志有空格字符和字符0,空格字符指定在數(shù)值之前插入空格,字符0用于指定在數(shù)值之前補(bǔ)零以填充顯示數(shù)值的位數(shù)。
字段寬度用于指定顯示輸出數(shù)值的最低位數(shù),一般為整數(shù)數(shù)字。當(dāng)指定的字段寬度超過數(shù)值的有效位數(shù)時,在數(shù)值前面添加若干空格或0。
精度參數(shù)一般為小數(shù),用于指定定點或科學(xué)記數(shù)法中小數(shù)的位數(shù),或者緊湊型的定點或科學(xué)記數(shù)法中顯示數(shù)據(jù)的有效位數(shù)。2.6數(shù)據(jù)的輸入和輸出2.6.2數(shù)據(jù)的輸出顯示字段寬度精度附加標(biāo)志空格附加標(biāo)志0附加標(biāo)志空格和02.6數(shù)據(jù)的輸入和輸出2.6.2數(shù)據(jù)的輸出顯示fprintf函數(shù)中的變量參數(shù)A1、A2等可以是數(shù)組,執(zhí)行時將順序顯示數(shù)組中的各元素,每個元素與格式化字符串中的一個格式化操作符相對應(yīng)。當(dāng)數(shù)組元素的個數(shù)超過格式化操作符的個數(shù)時,將重復(fù)應(yīng)用格式化字符串中的各格式化操作符顯示后面的各元素。MATLABProgrammingandEngineeringApplicationMATLAB程序設(shè)計與工程應(yīng)用本書知識結(jié)構(gòu)第3章MATLAB基本結(jié)構(gòu)程序設(shè)計3.1面向過程程序設(shè)計簡介了解面向過程程序設(shè)計的基本概念。3.2邏輯數(shù)據(jù)類型及其運算掌握MALTAB程序中的邏輯數(shù)據(jù)類型,熟悉各種邏輯運算符和關(guān)系運算符以及邏輯表達(dá)式和關(guān)系表達(dá)式的構(gòu)成和運算方法。3.3分支結(jié)構(gòu)程序設(shè)計了解分支程序的基本結(jié)構(gòu),掌握if語句和switch語句的基本格式及實現(xiàn)程序分支的基本方法。3.4循環(huán)結(jié)構(gòu)程序設(shè)計了解循環(huán)程序的基本結(jié)構(gòu),掌握for和while語句的基本格式及實現(xiàn)程序循環(huán)的基本方法,了解break和continue語句在循環(huán)程序的功能及其用法。面向過程程序設(shè)計就是面向解決問題的過程和步驟進(jìn)行編程。傳統(tǒng)的面向過程的編程思想可以總結(jié)為“自頂向下,逐步細(xì)化”,程序設(shè)計的具體實現(xiàn)步驟可以簡單概括如下。將要實現(xiàn)的功能描述為一個從開始到結(jié)束按部就班的連續(xù)步驟(過程)。依次逐步完成這些步驟,并分別編寫相應(yīng)的程序段。如果某一步的難度較大,又可以進(jìn)一步細(xì)化為若干個子步驟,以此類推,直到得到想要的結(jié)果。上述步驟采用自頂向下的設(shè)計方法,將一個復(fù)雜的任務(wù)或者功能分解為很多更易理解和實現(xiàn)的子過程。每個子過程獨立進(jìn)行程序編制和測試,直到確保每個子任務(wù)都能正常工作,再將這些子過程按照一定的程序結(jié)構(gòu)組合起來實現(xiàn)完整的功能,所以又稱為結(jié)構(gòu)化程序設(shè)計。3.1面向過程程序設(shè)計簡介在結(jié)構(gòu)化程序設(shè)計中,有三種基本的程序結(jié)構(gòu),即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。其中順序結(jié)構(gòu)就是依次執(zhí)行各子過程和步驟,當(dāng)所有子過程執(zhí)行完畢,就實現(xiàn)了整個程序的功能。在分支和循環(huán)結(jié)構(gòu)的程序中,各子過程和步驟之間存在著執(zhí)行流程的切換和跳轉(zhuǎn),而一般來說,流程的切換和跳轉(zhuǎn)都需要有相應(yīng)的條件進(jìn)行控制。本章將主要介紹MALTAB中分支和循環(huán)結(jié)構(gòu)的程序設(shè)計方法。3.1面向過程程序設(shè)計簡介3.2.1邏輯數(shù)據(jù)類型3.2邏輯數(shù)據(jù)類型及其運算在MATLAB中,邏輯數(shù)據(jù)可以用內(nèi)置函數(shù)true和false產(chǎn)生,也可以由關(guān)系運算符構(gòu)成的關(guān)系表達(dá)式和邏輯運算符構(gòu)成的邏輯表達(dá)式產(chǎn)生。在計算機(jī)中,邏輯型數(shù)據(jù)的取值true和false分別用數(shù)值1和0表示和存儲,并可以和普通的數(shù)值型數(shù)據(jù)進(jìn)行各種算術(shù)運算。3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算在程序中,關(guān)系通常指的是兩個數(shù)據(jù)之間的相對大小,關(guān)系運算就是比較判斷兩個變量或者數(shù)據(jù)的大小關(guān)系。邏輯運算是對一個或者多個邏輯型數(shù)據(jù)、邏輯型變量和關(guān)系表達(dá)式的結(jié)果進(jìn)行運算。3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算關(guān)系運算符與關(guān)系表達(dá)式關(guān)系運算符用于構(gòu)成關(guān)系表達(dá)式。利用關(guān)系表達(dá)式對兩個數(shù)值型常數(shù)和變量進(jìn)行比較判斷,結(jié)果為邏輯型數(shù)值1或0,分別表示關(guān)系表達(dá)式成立(true)或者不成立(false)。關(guān)系表達(dá)式添加括號,明確指定優(yōu)先級,以增強(qiáng)可讀性3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算幾點說明——關(guān)系表達(dá)式的結(jié)果用0和1表示,可以將其視為普通的數(shù)值型數(shù)據(jù),并與其他普通型數(shù)據(jù)常數(shù)或變量進(jìn)行算術(shù)運算。關(guān)系運算符的優(yōu)先級
在同時含有算術(shù)運算和關(guān)系運算的表達(dá)式中,所有關(guān)系運算符的優(yōu)先級相同,并且都低于所有算術(shù)運算符的優(yōu)先級。因此,在關(guān)系表達(dá)式中需要注意添加小括號,以明確指定關(guān)系運算符的優(yōu)先級順序。3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算數(shù)組的比較
關(guān)系表達(dá)式中的變量也可以是數(shù)組。用關(guān)系運算符對兩個數(shù)組進(jìn)行比較,實際上是對兩個數(shù)組中對應(yīng)位置上的元素進(jìn)行比較,此時要求兩個數(shù)組的大小必須相同,結(jié)果是大小相同的邏輯型數(shù)組。3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算邏輯運算符與邏輯表達(dá)式邏輯運算符用于構(gòu)成邏輯表達(dá)式,實現(xiàn)對邏輯型數(shù)據(jù)的與、或、非邏輯運算。輯運算符通常和關(guān)系運算符一起配合使用,用于構(gòu)造比較復(fù)雜的關(guān)系比較和判斷。3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算幾點說明——邏輯與和邏輯或運算都有兩種運算符,其中“&&”和“||”是具有短路功能的邏輯與和邏輯或運算。所謂短路功能,指的是在計算所有關(guān)系表達(dá)式之前就可完全確定邏輯表達(dá)式的結(jié)果。例如,在邏輯表達(dá)式A&&B中,如果關(guān)系表達(dá)式A=false(0),則根據(jù)運算規(guī)則,不管關(guān)系表達(dá)式B取值為0還是1,整個邏輯表達(dá)式的結(jié)果一定為false(0),因此不需要另外計算關(guān)系表達(dá)式B的值。3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算“&&”和“||”只能對兩個邏輯型標(biāo)量數(shù)據(jù)或者能夠得到邏輯型標(biāo)量數(shù)據(jù)的邏輯或關(guān)系表達(dá)式進(jìn)行運算,而不能是邏輯型數(shù)組。邏輯非是一元運算符,只需要一個邏輯型變量或數(shù)據(jù)參與運算,而另外的三種運算符都需要兩個變量。在算術(shù)運算、關(guān)系運算和邏輯運算中,邏輯與和邏輯或運算符的優(yōu)先級最低,而邏輯非的優(yōu)先級要高于所有的算術(shù)和關(guān)系運算符。在邏輯與和邏輯或運算中,優(yōu)先級從高到低依次為&、|、&&和||。3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算除了上述專用的運算符以外,MATLAB中還提供了專用的函數(shù)實現(xiàn)相應(yīng)的邏輯運算,即and、or和not函數(shù)。此外,還可以調(diào)用xor函數(shù)實現(xiàn)邏輯異或運算,參加運算的邏輯型變量或數(shù)據(jù)分別作為這些函數(shù)的兩個或一個參數(shù)寫在小括號中。3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算字符串比較專用函數(shù)
函數(shù)strcmp(s1,s2)和strcmpi(s1,s2)用于比較兩個給定字符串s1和s2是否相同,函數(shù)strncmp(s1,s2,n)和strncmpi(s1,s2,n)用于比較兩個字符串的前n個字符是否相同。其中,函數(shù)strcmpi(s1,s2)和strncmpi(s1,s2,n)在比較時都不區(qū)分英文字母的大小寫。3.2.2關(guān)系運算和邏輯運算3.2邏輯數(shù)據(jù)類型及其運算字符類型和屬性的獲取
在MATLAB中,提供了如下內(nèi)置函數(shù)用于判斷給定參數(shù)是否為字符向量和字符串,檢測字符串中指定字符的屬性(例如是否有英文字母等),返回邏輯值
1
(true)或者邏輯值
0
(false)。
函數(shù)ischar(x):確定參數(shù)x是否為字符向量;函數(shù)isstring(x):確定參數(shù)x是否為字符串;函數(shù)isletter():檢測字符或者字符串中哪些字符為英文字母,返回結(jié)果為一個行向量,向量中每個數(shù)據(jù)取值為1或0。當(dāng)取值為1時,表示字符串中對應(yīng)位置上的字符為英文字母。3.3.1if語句3.3分支結(jié)構(gòu)程序設(shè)計基本的if語句if表達(dá)式1語句塊1endif表達(dá)式1語句塊1else語句塊2end單分支結(jié)構(gòu)雙分支結(jié)構(gòu)3.3.1if語句3.3分支結(jié)構(gòu)程序設(shè)計if表達(dá)式1語句塊1elseif表達(dá)式2語句塊2else語句塊3end三分支結(jié)構(gòu)3.3.1if語句3.3分支結(jié)構(gòu)程序設(shè)計if表達(dá)式1語句塊1elseif表達(dá)式2語句塊2else語句塊3end三分支結(jié)構(gòu)if語句最后一定以end命令結(jié)束。在上述語句中,還可以含有多個elseif,從而得到更多的分支。elseif是
else和
if兩個單詞拼接而成的,兩個單詞之間沒有空格。3.3.1if語句3.3分支結(jié)構(gòu)程序設(shè)計實例3-1基本的分支程序判斷變量a中數(shù)的奇偶。如果該數(shù)為偶數(shù),則將其除以2后賦給變量b;否則將變量b置為0。3.3.1if語句3.3分支結(jié)構(gòu)程序設(shè)計實例3-2多分支結(jié)構(gòu)程序設(shè)計從鍵盤上輸入一個0~100之間的整數(shù)。如果該數(shù)小于30,則屏幕提示“小”;大于80,則提示“大”;否則提示“中”。3.3.1if語句3.3分支結(jié)構(gòu)程序設(shè)計if語句的嵌套所謂嵌套if語句,就是在基本if語句內(nèi)部,還含有另外一層或者多層if語句。實例3-3if語句的嵌套1程序功能與實例3-2相同,要求用嵌套if語句實現(xiàn)。3.3.1if語句3.3分支結(jié)構(gòu)程序設(shè)計實例3-4if語句的嵌套2有兩個長度可能不相等的行向量a和b,編程實現(xiàn)如下功能:在其中長度較小的向量后面補(bǔ)充若干個0,使兩個向量的長度相同,并顯示各種情況下的相關(guān)信息。運行結(jié)果3.3.2switch語句3.3分支結(jié)構(gòu)程序設(shè)計switch開關(guān)表達(dá)式case表達(dá)式1語句塊1case表達(dá)式2語句塊2...otherwise語句塊Nendswitch語句逐一檢測各case子句中的表達(dá)式,直到其中的一個表達(dá)式成立,則執(zhí)行該case子句下面的語句塊。如果case子句中的表達(dá)式為數(shù)值型數(shù)據(jù),則當(dāng)其等于開關(guān)表達(dá)式的值時,該case子句中的表達(dá)式成立。對于字符串,當(dāng)case子句中的字符串表達(dá)式等于開關(guān)表達(dá)式中的字符串時,該表達(dá)式成立。3.3.2switch語句3.3分支結(jié)構(gòu)程序設(shè)計實例3-5switch語句的使用根據(jù)鍵盤上輸入的字符A、B、C或D,分別顯示不同的信息。運行一次運行第二次3.4循環(huán)結(jié)構(gòu)程序設(shè)計在一個程序中,當(dāng)某個條件成立時,重復(fù)執(zhí)行某些操作,這就是循環(huán)。許多實際問題都可以用循環(huán)結(jié)構(gòu)的程序來實現(xiàn)某些重復(fù)操作,例如求很多數(shù)據(jù)的累加和連乘、重復(fù)執(zhí)行指定的操作等。在循環(huán)程序的具體實現(xiàn)中,有兩種基本的循環(huán),即計數(shù)循環(huán)和條件循環(huán)。3.4.1基本的循環(huán)語句3.4循環(huán)結(jié)構(gòu)程序設(shè)計for索引=值
語句塊endfor語句索引即為循環(huán)計數(shù)變量,而值一般情況下是一個數(shù)組(可以是向量、數(shù)值序列或者多維數(shù)組)如果索引值是向量或者數(shù)值序列,則每次循環(huán)將向量中的一個元素賦給索引變量,循環(huán)次數(shù)等于向量的長度。索引值如果為二維數(shù)組,則每次循環(huán)可以將數(shù)組中的一列數(shù)據(jù)作為索引,此時索引變量是一個列向量,循環(huán)次數(shù)等于數(shù)組的列數(shù)。3.4.1基本的循環(huán)語句3.4循環(huán)結(jié)構(gòu)程序設(shè)計實例3-6for語句的使用1求1~100之間所有奇數(shù)的累加和。運行結(jié)果3.4.1基本的循環(huán)語句3.4循環(huán)結(jié)構(gòu)程序設(shè)計實例3-7for語句的使用2求數(shù)組中所有數(shù)據(jù)的累加和。運行結(jié)果3.4.1基本的循環(huán)語句3.4循環(huán)結(jié)構(gòu)程序設(shè)計while表達(dá)式語句塊endwhile語句表達(dá)式可以是關(guān)系表達(dá)式或者邏輯表達(dá)式,代表繼續(xù)循環(huán)的條件。當(dāng)表達(dá)式為true時,重復(fù)執(zhí)行語句塊,直到表達(dá)式的值變?yōu)閒alse。3.4.1基本的循環(huán)語句3.4循環(huán)結(jié)構(gòu)程序設(shè)計實例3-8while語句的應(yīng)用1任意輸入一個正整數(shù)n,用while循環(huán)求其階乘n!,編制相應(yīng)的MATLAB程序。正整數(shù)n的階乘n!=1×2×3×…×n=n×(n-1)×(n-2)×…×2×1。因此根據(jù)輸入的正整數(shù)n進(jìn)行運算,每次循環(huán)將n的值減1,并與前面的乘積相乘,直到n的值減到1為止。3.4.1基本的循環(huán)語句3.4循環(huán)結(jié)構(gòu)程序設(shè)計實例3-9while語句的應(yīng)用2整數(shù)向量a中按照從大到小的順序存放有若干數(shù)據(jù),將各數(shù)據(jù)依次進(jìn)行累加,當(dāng)累加結(jié)果剛超過100時停止累加,求累加和及這些數(shù)據(jù)的平均值。3.4.2循環(huán)語句的嵌套3.4循環(huán)結(jié)構(gòu)程序設(shè)計實例3-10循環(huán)語句的嵌套求數(shù)組中各行數(shù)據(jù)的最大值。3.4.3break和continue語句3.4循環(huán)結(jié)構(gòu)程序設(shè)計這兩種語句主要用在for和while循環(huán)體中,一般與if語句配合使用。其中,break語句用于當(dāng)滿足指定條件時終止執(zhí)行循環(huán),并跳過循環(huán)體中break語句之后的語句,繼續(xù)執(zhí)行程序中該循環(huán)end語句之后的語句。如果是嵌套循環(huán),break語句執(zhí)行后將退出所在的循環(huán),返回到外層循環(huán)中繼續(xù)執(zhí)行。continue語句用于跳過當(dāng)次循環(huán)時循環(huán)體中后面的其他語句,跳轉(zhuǎn)到所在循環(huán)體的開始,繼續(xù)執(zhí)行所在循環(huán)體的下次循環(huán)。由此可見,break語句和continue語句的功能幾乎是完全相反的。3.4循環(huán)結(jié)構(gòu)程序設(shè)計實例3-11continue語句的用法求出1~50之間7的所有倍數(shù)值。3.4.3break和continue語句3.4循環(huán)結(jié)構(gòu)程序設(shè)計實例3-12break語句的用法利用break語句實現(xiàn)實例3-10中同樣的功能。3.4.3break和continue語句3.4循環(huán)結(jié)構(gòu)程序設(shè)計3.4.4循環(huán)語句的向量化由于MATLAB中基本的數(shù)據(jù)類型是數(shù)組,并且提供了大量對數(shù)組進(jìn)行操作和運算的運算符和函數(shù),很多時候可以不用循環(huán)而直接實現(xiàn)。例如,兩個數(shù)組的加減乘法運算,實質(zhì)上是數(shù)組中對應(yīng)兩個元素的運算,可以根據(jù)這一原理用循環(huán)語句實現(xiàn),這是在傳統(tǒng)的C語言等程序中實現(xiàn)的基本方法。在MATLAB中,只需要利用數(shù)組的加減乘運算符號,用一條語句就實現(xiàn)了。這就是循環(huán)語句的向量化。根據(jù)上述思想,MATLAB中還提供了一些內(nèi)置函數(shù),實現(xiàn)數(shù)組元素最大值、最小值和平均值等的求解,而不必自行編制循環(huán)結(jié)構(gòu)程序來實現(xiàn)。這些都體現(xiàn)了MATLAB作為矩陣實驗室在編程思想上的改進(jìn)。3.4循環(huán)結(jié)構(gòu)程序設(shè)計實例3-13循環(huán)語句的向量化分別用循環(huán)語句和內(nèi)置函數(shù)求數(shù)組中所有元素的最大值和平均值。3.4.4循環(huán)語句的向量化MATLABProgrammingandEngineeringApplicationMATLAB程序設(shè)計與工程應(yīng)用本書知識結(jié)構(gòu)第4章函數(shù)4.1函數(shù)的基本概念了解函數(shù)和函數(shù)文件的概念,函數(shù)文件的特點及其與腳本文件的區(qū)別。熟悉函數(shù)的基本結(jié)構(gòu),掌握函數(shù)聲明語句的基本格式。4.2函數(shù)的創(chuàng)建與調(diào)用掌握創(chuàng)建函數(shù)的基本方法,了解函數(shù)調(diào)用的概念,掌握MALTAB中函數(shù)調(diào)用的基本方法和常用格式。4.3局部函數(shù)、嵌套函數(shù)和匿名函數(shù)了解局部函數(shù)、嵌套函數(shù)和匿名函數(shù)的概念,各種函數(shù)的創(chuàng)建和使用方法。4.4函數(shù)之間的數(shù)據(jù)共享掌握函數(shù)之間數(shù)據(jù)共享的基本方法及其應(yīng)用,熟悉局部變量、永久變量、全局變量的概念及用法上的區(qū)別。4.5函數(shù)的參數(shù)驗證了解函數(shù)參數(shù)驗證的概念,了解位置參數(shù)、可選位置參數(shù)、重復(fù)參數(shù)、名值對參數(shù)等概念,掌握各種參數(shù)的聲明及使用方法。在結(jié)構(gòu)化程序中,函數(shù)又稱為子程序(Subroutine),是功能相對獨立、需要重復(fù)使用(調(diào)用)的一段程序代碼。與數(shù)學(xué)中函數(shù)的概念類似,程序中的函數(shù)一般有專門的函數(shù)名和若干個輸入輸出變量。4.1函數(shù)的基本概念4.1.1函數(shù)文件在MATLAB中,如果M文件中第一條可執(zhí)行語句(除程序注釋以外的語句)以關(guān)鍵字function開始,該文件就成為函數(shù)文件(Functionfile)。函數(shù)文件具有如下特點:(1)一般情況下,每個函數(shù)文件中定義一個函數(shù)。這種情況下,文件名必須與函數(shù)名完全相同。與普通的腳本程序文件一樣,函數(shù)文件名的后綴仍然為.m。4.1函數(shù)的基本概念(2)在一個M文件中也可以同時定義多個函數(shù),此時第一個函數(shù)是主函數(shù),文件名必須是該主函數(shù)的函數(shù)名。在主函數(shù)或腳本代碼后面的函數(shù)稱為局部函數(shù),只能在同一個文件內(nèi)調(diào)用。有關(guān)局部函數(shù)的概念和用法將在后面介紹。(3)從R2016a版本開始,MATLAB也允許像其他高級語言程序一樣,將一個函數(shù)與調(diào)用函數(shù)的程序一起放在同一個文件中,此時函數(shù)必須放在調(diào)用該函數(shù)的程序后面。(4)與腳本程序不同的是,由于函數(shù)一般帶有入口參數(shù),所以函數(shù)不能獨立運行,但可以在其他函數(shù)或者腳本程序中調(diào)用,也可以在命令行窗口通過給定入口參數(shù)進(jìn)行調(diào)用。4.1函數(shù)的基本概念4.1.2函數(shù)文件的基本結(jié)構(gòu)最基本的函數(shù)主要包括3部分,即函數(shù)聲明、函數(shù)體和end語句,此外還可以用程序注釋的形式(每行以“%”開頭)為函數(shù)添加必要的說明和幫助信息等。例如,下面的代碼定義了一個完整的函數(shù):functionf=fact(n)%函數(shù)聲明,函數(shù)名,輸入輸出變量列表 %求n的階乘 %n必須為正整數(shù) f=prod(1:n);%函數(shù)體end4.1函數(shù)的基本概念其中函數(shù)名為fact,該函數(shù)有一個入口參數(shù)n,函數(shù)將1~n的連乘結(jié)果保存到出口參數(shù)f中。(1)函數(shù)聲明:位于函數(shù)文件的首行。(2)函數(shù)體:實現(xiàn)該函數(shù)功能的MATLAB命令、接收輸入?yún)?shù)、實現(xiàn)程序流程控制等。(3)函數(shù)結(jié)束語句:在函數(shù)體的最后,利用end語句表示函數(shù)體的結(jié)束。(4)函數(shù)的幫助信息:在函數(shù)聲明行之后,函數(shù)體之前,可以利用注釋對該函數(shù)功能、輸入和輸出參數(shù)進(jìn)行一些必要的簡單說明,如上述代碼中的第2和第3行。4.1函數(shù)的基本概念函數(shù)的聲明函數(shù)聲明的作用是定義函數(shù)名、函數(shù)的入口參數(shù)(輸入?yún)?shù))和出口參數(shù)(輸出參數(shù))。在MATLAB中,函數(shù)聲明語句以關(guān)鍵字function開頭,后面緊跟著的是函數(shù)的返回值列表(出口參數(shù))和一個“=”符號。語句右側(cè)首先是函數(shù)的名稱,之后在小括號中列出函數(shù)的入口參數(shù)。函數(shù)聲明語句的基本格式如下:function[y1,...,yN]=myfun(x1,...,xM)其中,myfun為函數(shù)名,一般取有意義的英文單詞,必須以字母開頭,可以包含字母、數(shù)字或下劃線;x1,…,xM為輸入?yún)?shù);y1,…,yN為輸出參數(shù)。4.1函數(shù)的基本概念幾點說明:(1)在函數(shù)文件中,函數(shù)聲明語句必須是函數(shù)文件中的第一條可執(zhí)行語句,只可以在前面添加注釋語句等。保存文件時,函數(shù)文件名必須是函數(shù)名,并且以.m為后綴。(2)如果函數(shù)是定義在腳本文件的末尾,將與所在的腳本文件一起保存。此時,腳本文件名不能與文件中的函數(shù)具有相同的名稱。(3)函數(shù)可以沒有輸入?yún)?shù),也可以有一個或多個輸入?yún)?shù)。所有的輸入?yún)?shù)必須放在一對小括號中,并用逗號隔開。如果沒有輸入?yún)?shù),可以忽略函數(shù)名后的小括號。4.1函數(shù)的基本概念(4)函數(shù)的出口參數(shù)可以沒有,也可以有一個或者多個。如果沒有輸出參數(shù),在函數(shù)聲明語句中可以將其忽略不寫,后面的“=”也不能寫。例如:functionmyFun(x)如果函數(shù)只有一個輸出參數(shù),則在function關(guān)鍵字后面直接指定輸出參數(shù)的名稱。例如,如下函數(shù)只有一個輸出參數(shù)myOutput:functionmyOutput=myFun(x)如果函數(shù)有多個輸出參數(shù),必須將所有的輸出參數(shù)寫在方括號中。例如,如下函數(shù)有3個輸出參數(shù)one、two和three:function[one,two,three]=myFun(x)4.1函數(shù)的基本概念函數(shù)體函數(shù)體是實現(xiàn)函數(shù)具體功能的語句塊,其中可以包括任何有效的MATLAB表達(dá)式、分支和循環(huán)結(jié)構(gòu)程序段、注釋、空白行和嵌套函數(shù)。在函數(shù)體內(nèi)可以根據(jù)需要創(chuàng)建新的變量,所有在函數(shù)體內(nèi)創(chuàng)建的變量都存儲在該函數(shù)的工作區(qū)內(nèi),該工作區(qū)獨立于MATLAB的基礎(chǔ)工作區(qū),稱為函數(shù)工作區(qū)。函數(shù)返回到調(diào)用該函數(shù)的主程序時,函數(shù)工作區(qū)自動關(guān)閉,其中的變量也不能再被訪問。此外,與普通的腳本程序一樣,函數(shù)體內(nèi)的語句末尾如果有分號,則該語句的運算結(jié)果不會在命令行窗口顯示,該語句中創(chuàng)建的變量也不顯示在工作區(qū)。如果函數(shù)體內(nèi)的某條語句沒有分號結(jié)尾,則語句執(zhí)行的結(jié)果將顯示在命令行窗口,但所創(chuàng)建的變量仍然為局部變量,不會顯示在MATLAB的基礎(chǔ)工作區(qū)。4.1函數(shù)的基本概念
end語句函數(shù)體以end語句結(jié)束,也可以是遇到文件的末尾或者一個新的function聲明語句結(jié)束。只有當(dāng)一個函數(shù)中有嵌套函數(shù)時,才需要在嵌套函數(shù)的最后使用end語句。但是為了增強(qiáng)程序的可讀性,最好還是將每個函數(shù)以end語句結(jié)束,并且與函數(shù)文件第一行的function關(guān)鍵字左對齊,函數(shù)體中的語句都縮進(jìn)適當(dāng)距離。4.2函數(shù)的創(chuàng)建與調(diào)用為創(chuàng)建一個新的函數(shù),可以單擊MATLAB主頁選項卡中新建按鈕下的箭頭,在下拉菜單中選中函數(shù)菜單命令,即可打開MATLAB編輯器子窗口,在其中即可像普通的腳本文件一樣創(chuàng)建函數(shù)文件,如圖4-1所示。圖4-1MATLAB創(chuàng)建的函數(shù)文件4.2函數(shù)的創(chuàng)建與調(diào)用利用上述方法創(chuàng)建的函數(shù)文件,在形式上與普通的腳本文件主要有如下兩點區(qū)別:(1)新建的函數(shù)文件不是一個空白文件,其中已經(jīng)自動添加了一些語句和代碼。第一條是函數(shù)聲明語句,其中定義了函數(shù)名untitled、函數(shù)的輸入?yún)?shù)inputArg1和inputArg2、輸出參數(shù)outputArg1、outputArg2等。(2)新建的函數(shù)文件自動命名為Untitled*.m。在定義了函數(shù)并保存文件時,自動以定義的函數(shù)名作為文件名。4.2函數(shù)的創(chuàng)建與調(diào)用定義函數(shù)文件并保存后,即可在命令行或者其他腳本命令、程序和函數(shù)文件中調(diào)用(Call)。調(diào)用時,將入口參數(shù)按照順序列在函數(shù)名后的小括號中,并根據(jù)需要將返回值賦給指定的變量。在函數(shù)定義中給定的輸入輸出參數(shù)稱為形式參數(shù)(簡稱形參,F(xiàn)ormalParameter)。在調(diào)用時,必須根據(jù)形參的要求,將正確的參數(shù)值作為實在參數(shù)(簡稱實參,ActualParameter)傳遞給函數(shù)。函數(shù)體接收到這些實參值后,執(zhí)行相應(yīng)的功能和操作,并將運算結(jié)果通過輸出參數(shù)返回。4.2函數(shù)的創(chuàng)建與調(diào)用--------------------------------------------------------------------------------------------------------實例4-1函數(shù)的創(chuàng)建與調(diào)用創(chuàng)建MATLAB函數(shù)實現(xiàn)排列問題的求解。已知排列數(shù)的計算公式為--------------------------------------------------------------------------------------------------------首先在MATLAB中新建腳本,并在打開的編輯器子窗口中定義如下函數(shù):%文件名:pnr.mfunctionp=pnr(n,r)
p1=1;p2=1
fori=1:n%求n!
p1=p1*i;
end
fori=1:n-r%求(n-r)!
p2=p2*i;
end
p=p1/p2;%求排列數(shù)end該函數(shù)名為pnr,因此保存文件時,文件將自動命名為pnr.m。上述函數(shù)文件保存后,在命令行窗口輸入如下命令即可調(diào)用執(zhí)行:>>pnr(5,2)ans=
204.2函數(shù)的創(chuàng)建與調(diào)用出口參數(shù)的寫法有如下三種情況:(1)只有一個出口參數(shù)的情況例如,如下語句定義了一個函數(shù)average:
functiony=average(x)
y=sum(x)/length(x);
end在命令行或者其他文件中,可以用如下腳本命令調(diào)用上述函數(shù):
>>z=1:99;
%創(chuàng)建一個行向量z
>>average(z)
%將z作為輸入?yún)?shù),調(diào)用上述函數(shù)求其中所有元素的平均值
ans=
504.2函數(shù)的創(chuàng)建與調(diào)用出口參數(shù)的寫法有如下三種情況:(2)有多個出口參數(shù)的情況例如,如下語句定義了一個函數(shù)stat:function[m,s]=stat(x)n
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥品生產(chǎn)質(zhì)量管理規(guī)范GMP基礎(chǔ)知識培訓(xùn)試題及答案
- 倉儲企業(yè)倉庫安全管理制度
- 棚戶區(qū)改造項目海綿城市工程評估施工方案-施工作業(yè)指導(dǎo)書
- 橋梁蓋梁施工方案
- 醫(yī)療器械生產(chǎn)監(jiān)督管理培訓(xùn)測試卷附答案
- 物業(yè)小區(qū)消防應(yīng)急疏散演練腳本
- 2026年11月物業(yè)管理師操作技能考試題及答案
- 危險貨物運輸企業(yè)安全管理員定期維護(hù)安全操作規(guī)程
- 淮陰美術(shù)面試題及答案
- 大學(xué)生心理健康教育(配心理學(xué)效應(yīng)手冊) 教案 專題9、10:鐘擺效應(yīng)-洞察情緒密碼提升調(diào)節(jié)能力;南風(fēng)效應(yīng)-提升交往技巧 建立積極關(guān)系
- 2025一級消防工程師繼續(xù)教育題庫及答案
- 【課件】工作危害分析法(JHA)專項培訓(xùn)課件丨
- 電工四級練習(xí)題庫(含參考答案)
- 2024年陜西延長石油集團(tuán)招聘筆試真題
- 《湖南省房屋建筑和市政工程消防質(zhì)量控制技術(shù)標(biāo)準(zhǔn)》
- 牛結(jié)節(jié)病的癥狀和治療方法
- 2024年建筑三類人員考試題庫(多選題)
- (高清版)JTGT 5440-2018 公路隧道加固技術(shù)規(guī)范
- 新聞評論寫作五步法課件
- 工程造價咨詢服務(wù)方案(技術(shù)方案)
- 國際紅十字運動的基本知識
評論
0/150
提交評論