MATLAB程序設(shè)計 課件全套 第1-12章 緒論、MATLAB基礎(chǔ)知識-神經(jīng)網(wǎng)絡(luò)_第1頁
MATLAB程序設(shè)計 課件全套 第1-12章 緒論、MATLAB基礎(chǔ)知識-神經(jīng)網(wǎng)絡(luò)_第2頁
MATLAB程序設(shè)計 課件全套 第1-12章 緒論、MATLAB基礎(chǔ)知識-神經(jīng)網(wǎng)絡(luò)_第3頁
MATLAB程序設(shè)計 課件全套 第1-12章 緒論、MATLAB基礎(chǔ)知識-神經(jīng)網(wǎng)絡(luò)_第4頁
MATLAB程序設(shè)計 課件全套 第1-12章 緒論、MATLAB基礎(chǔ)知識-神經(jīng)網(wǎng)絡(luò)_第5頁
已閱讀5頁,還剩475頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1MATLAB程序設(shè)計《MATLAB程序設(shè)計》2第一章緒論1.1引言1.2MATLAB概述1.3工作環(huán)境1.4幫助系統(tǒng)1.5使用初步1.1引言《MATLAB程序設(shè)計》3科學(xué)研究和工程實踐中的計算問題如何解決?1.簡單計算:如常見的加減乘除可以采用口算、心算等人工方式;稍微復(fù)雜的也可借助算盤進行珠算;需要對數(shù)計算的問題可以采用計算尺;三角函數(shù)、指數(shù)運算等以及計算器進行;實際工程問題中,哪些是涉及了復(fù)雜、大量計算?工業(yè)機器人操作空間計算1.9液壓油管1.8髖關(guān)節(jié)驅(qū)動液壓缸1.7髖關(guān)節(jié)位移傳感器1.6背包下肢外骨骼機本體結(jié)構(gòu)設(shè)計1.10膝關(guān)節(jié)驅(qū)動液壓缸1.5髖關(guān)節(jié)1.4大腿連桿1.12踝關(guān)節(jié)1.3膝關(guān)節(jié)1.1足底1.2踝關(guān)節(jié)1.11小腿連桿下肢外骨骼助力機器人關(guān)節(jié)運動學(xué)分析第一:復(fù)雜的矩陣計算及變換《MATLAB程序設(shè)計》62.復(fù)雜的計算問題當D=|A|≠0,方程組有解,可用Cramer法則求解。N階行列式的計算需要n!次乘法,求解n階線性方程組,共需要做(n+1)!次乘法。如n=20,則,需做:21?。?.10909×10192.復(fù)雜的計算問題第二:非線性微分方程《MATLAB程序設(shè)計》7第四:優(yōu)化問題求解第三:超越方程求解怎么辦?計算機編程!Maple《MATLAB程序設(shè)計》8MathematicaMATLABMathematica是一個綜合性數(shù)學(xué)軟件環(huán)境,可以把公式文檔和公式推導(dǎo)、計算過程表達在一個notebook里面,圖文并茂地表達一個復(fù)雜的過程,可以實現(xiàn)任意復(fù)雜的算法,也容易生成數(shù)據(jù)去檢驗。Maple和Mathematica軟件類似,以符號運算處理見長,可以給出解析解和任意精度解。二者在處理大數(shù)據(jù)的能力有待進一步提高。MATLAB以強大的矩陣計算和仿真能力聞名于世,尤其是針對具體工程問題有許多工具箱,省去編程麻煩,成為工程師和科研人員進行科學(xué)計算的優(yōu)選對象。1.2

MATLAB概述MATLAB:意為矩陣實驗室,是Matrix和Laboratory單詞的簡稱,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析及數(shù)值計算的高級技術(shù)計算語言和交互式環(huán)境。

《MATLAB程序設(shè)計》9數(shù)據(jù)分析無線通信深度學(xué)習(xí)圖像處理與計算機視覺信號處理量化金融與風(fēng)險管理機器人控制系統(tǒng)仿真MATLAB應(yīng)用領(lǐng)域等其它MATLAB的主要優(yōu)勢是什么?1.編程環(huán)境

《MATLAB程序設(shè)計》10

接近于Windows的標準界面,人機交互性更強,操作更簡單。2.簡單易用《MATLAB程序設(shè)計》11具備面向?qū)ο缶幊痰奶攸c,基于C/C++的語法特征,但比其更簡單,程序可移植性好。3.強大的處理能力

包含大量經(jīng)典和最新的計算算法(如人工智能和深度學(xué)習(xí)),可方便的實現(xiàn)計算功能,如矩陣運算、多維數(shù)組操作、方程組求解、最優(yōu)化計算、信號分析、數(shù)據(jù)統(tǒng)計分析、建模動態(tài)仿真。《MATLAB程序設(shè)計》124.數(shù)據(jù)可視化可視化功能是該軟件的一大特點,包括二維和三維的可視化、圖像處理、動畫和表達式作圖,還具有其它軟件所沒有的圖形光照處理、色度處理以及四維數(shù)據(jù)表現(xiàn)等?!禡ATLAB程序設(shè)計》135.強大的工具箱

《MATLAB程序設(shè)計》14眾多的工具箱,分為功能性工具箱和學(xué)科性工具箱,前者主要用來擴充其符號計算、圖示建模仿真、文字處理以及與硬件實時交互;后者專業(yè)性很強,由學(xué)科內(nèi)的頂級專家編寫,用戶無需編寫這些學(xué)科內(nèi)的基礎(chǔ)程序而直接進行高精尖的研究即可。6.程序接口

MATLAB可以方便調(diào)用和轉(zhuǎn)換成C、C++和Fortran程序其它軟件如LabVIEW也可以調(diào)用MATLAB程序,程序擴展能力強?!禡ATLAB程序設(shè)計》15MATLAB的發(fā)展簡史20世紀70年代中期,CleveMoler博士開發(fā)了調(diào)用EISPACK和LINPACK的FORTRAN子程序庫.在其給學(xué)生講授線性代數(shù)課程時,自己動手又編了程序接口,當時取名為MATLAB;1983年,JackLittle和CleveMoler等人采用C語言開發(fā)了第二代專業(yè)版,使其具備數(shù)值計算和數(shù)據(jù)顯示的功能。1984年,CleveMoler和JackLittle成立MathWorks公司,正式把MATLAB推向市場《MATLAB程序設(shè)計》16CleveMolerJackLittle早期是一年更新一次版本1992年,MATLAB4.0版本推出Simulink、Control、NeuralNetwork、SignalProcessing專用工具箱。1993年,通過購買Maple的使用權(quán),以此為引擎,開發(fā)了符號計算工具箱,MATLAB4.1版具備符號運算功能,同推出Windows版,大受歡迎。1995年,MATLAB推出Linux版1997年,MATLAB5.0實現(xiàn)真正的32位運算,計算速度提高,圖形表示更佳到20世紀90年代,MATLAB已成為國際控制界的標準計算軟件。如今是一年更新兩次版本從2006年開始,版本號以年份進行區(qū)分,分為a和b,其中,a是3月份更新,b是9月份更新。且真正支持64位Windows系統(tǒng)運算目前最新版本是MATLAB2020a.《MATLAB程序設(shè)計》171.3工作環(huán)境《MATLAB程序設(shè)計》18雙擊MATLAB.exe,出現(xiàn)MATLABR2019b的啟動界面啟動后,其用戶界面如下所示工具欄命令行窗口工作區(qū)域1.3.1菜單/工具欄繪圖標簽APP標簽1.3.1菜單/工具欄主頁標簽1.新建腳本2.新建實時腳本3.新建4.打開5.導(dǎo)入數(shù)據(jù)6.保存工作區(qū)7.布局8.預(yù)設(shè)9.設(shè)置路徑10.幫助?區(qū)別腳本是命令或代碼的集合,而實時腳本是命令和文檔的集成,就是在原有m文件上加了交互式圖標,包含文本功能和控件。建議初學(xué)者采用默認值即可命令行窗口用于輸入命令、并顯示除圖形以外所有的執(zhí)行結(jié)果?!?gt;>”是命令提示符,表示MATLAB處于準備狀態(tài)。輸入命令后按下Enter鍵后,MATLAB執(zhí)行該命令并顯示結(jié)果。fx為函數(shù)瀏覽器按鈕,可快速查找函數(shù)《MATLAB程序設(shè)計》211.3.2命令行窗口如果命令錯寫成X=(log(3)+srt(11))/2,則MATLAB在編譯時會給出如圖的紅色錯誤信息。

重新輸入函數(shù)(命令)即可MATLAB被稱為“演算紙式”的編程語言《MATLAB程序設(shè)計》221.3.2命令行窗口若一個公式或命令行很長,如下,需要分兩行或多行輸入怎么辦?《MATLAB程序設(shè)計》231.3.2命令行窗口如圖,第一行后加“3個小黑點”并按下Enter鍵,在下一行接著輸入即可“3個小黑點”為“續(xù)行符”《MATLAB程序設(shè)計》24一個命令行可以輸入一個命令,也可以輸入多個命令,各命令之間用分號或逗號分割;1.3.2命令行窗口命令后如果有分號,則該命令執(zhí)行后的結(jié)果不顯示在命令行窗口;工作區(qū)也稱為工作空間,用來存儲各種變量和結(jié)果的內(nèi)存空間,如圖?!禡ATLAB程序設(shè)計》251.3.3工作區(qū)窗口變量的屬性可觀察,紅色方框處點擊右鍵,在彈出的屬性中對“大小”、“最大值”、“最小值”進行勾選,即可此窗口自動記錄自系統(tǒng)安裝以來所有使用過的命令,供用戶查詢方法:點擊“布局”,在屬性“命令歷史記錄”中勾選“??俊币嗫汕宄顨v史記錄《MATLAB程序設(shè)計》261.3.4命令歷史記錄窗口《MATLAB程序設(shè)計》271.4.1MATLAB幫助窗口1、單擊“主頁”選項卡“資源”命令組的“?”按鈕2、單擊“幫助”下拉按鈕并選擇“文檔”命令3、按F1功能鍵,再單擊“打開幫助瀏覽器”鏈接4、在命令行窗口輸入doc命令1.4幫助系統(tǒng)《MATLAB程序設(shè)計》28例如,開方運算命令sqrt的使用方法。1.4.1MATLAB幫助窗口《MATLAB程序設(shè)計》291、help命令

最基本方法,完全匹配,需要明確某函數(shù)或命令的準確名字,不準確就找不到1.4.2MATLAB幫助命令《MATLAB程序設(shè)計》302、lookfor命令

對搜索范圍內(nèi)的所有m文件進行關(guān)鍵字搜索,條件比較寬松。1.4.2MATLAB幫助命令3、模糊查詢

只需輸入命令的前幾個字母,然后按下Tab鍵,系統(tǒng)會列出所有以這幾個字母開頭的命令。后續(xù)使用help命令,作進一步的查詢。1.5使用初步1.繪制如右式描述的二維曲線《MATLAB程序設(shè)計》31MATLAB程序如下:t=0:0.1:6;x=t.*sin(3*t);y=t.*sin(t).*sin(t);plot(x,y)1.5使用初步2.求高次方程的根:《MATLAB程序設(shè)計》323.求解線性方程組MATLAB程序計算結(jié)果33MATLAB程序設(shè)計《MATLAB程序設(shè)計》34第二章MATLAB基礎(chǔ)知識2.1數(shù)據(jù)類型2.2變量和數(shù)據(jù)操作2.3MATLAB矩陣2.4MATLAB運算2.5矩陣分析2.1數(shù)據(jù)類型《MATLAB程序設(shè)計》35MATLAB功能強大的一個原因在于有豐富的數(shù)據(jù)類型數(shù)據(jù)類型數(shù)值類型邏輯類型字符串函數(shù)句柄結(jié)構(gòu)體單元數(shù)組面向?qū)ο蟮挠脩纛惡蚃ava類還有用于高級交叉編程的數(shù)據(jù)類型《MATLAB程序設(shè)計》362.1.1數(shù)值類型數(shù)值型數(shù)據(jù)是最基本的一類數(shù)據(jù)數(shù)值類型數(shù)據(jù)整型數(shù)據(jù)復(fù)(數(shù))型數(shù)據(jù)浮點(實)型數(shù)據(jù)無窮量和非數(shù)值量系統(tǒng)給每種數(shù)據(jù)類型分配不同字節(jié)的內(nèi)存單元,由此也決定了取值范圍不同《MATLAB程序設(shè)計》372.1.1數(shù)值類型1.整型數(shù)據(jù)整型數(shù)據(jù)是不帶小數(shù)的數(shù),分為帶符號整數(shù)和無符號整數(shù),每一種又根據(jù)所占字節(jié)的不同分為8位、16位、32位、64位整型數(shù)。注意:表中的轉(zhuǎn)換函數(shù)是將不同數(shù)據(jù)類型的整數(shù)進行相互轉(zhuǎn)換,超出范圍時,會出錯;例1:請在MATLAB命令行窗口輸入三條命令,觀察結(jié)果并比較差異:x=int8(-3),y=uint8(-3),z=int8(129)《MATLAB程序設(shè)計》382.1.1數(shù)值類型1.整型數(shù)據(jù)還有對非整數(shù)(或者浮點數(shù))的取整操作函數(shù),如下表有兩種類型,分別是單精度(Single)和雙精度(double)浮點數(shù)。區(qū)別如下:注意:1、MATLAB中默認的類型是雙精度浮點類型,單精度浮點數(shù)不能與整數(shù)型數(shù)據(jù)進行有關(guān)運算。2、浮點數(shù)表示的實際數(shù)值是有限且離散的(但不影響使用)《MATLAB程序設(shè)計》392.1.1數(shù)值類型2、浮點型數(shù)據(jù)復(fù)型數(shù)據(jù)包括實部和虛部兩部分,兩部分默認都是雙精度類型。虛數(shù)單位用i或j表示都可以,創(chuàng)建時可以按照復(fù)數(shù)形式進行輸入;6+5i、6+5j、6+5*i、6+5*j表示同一個復(fù)數(shù)。與復(fù)數(shù)有關(guān)的6個函數(shù),功能如表《MATLAB程序設(shè)計》402.1.1數(shù)值類型3、復(fù)型數(shù)據(jù)MATLAB使用Inf和-Inf表示正無窮量和負無窮量,一般是由于運算溢出,產(chǎn)生了超出雙精度浮點數(shù)數(shù)值范圍的結(jié)果。NaN表示非數(shù)值量,是由于0/0或者Inf/Inf等類型的非正常運算而產(chǎn)生的。在MATLAB命令行窗口中輸入以下命令:a=3/0,b=log(0),c=Inf-Inf結(jié)果為:a=Inf,b=-Inf,c=NaN《MATLAB程序設(shè)計》412.1.1數(shù)值類型4、無窮量(Inf)和非數(shù)值量(NaN)邏輯型數(shù)據(jù)是指布爾類型的數(shù)據(jù)及數(shù)據(jù)之間的邏輯關(guān)系除了傳統(tǒng)的數(shù)學(xué)運算外,MATLAB還支持關(guān)系運算和邏輯運算,其目的是提供求解真/假命題的答案。作為所有關(guān)系和邏輯表達式的輸入,MATLAB把任何非0數(shù)值當做真,把0當做假;所有關(guān)系和邏輯表達式的輸出,對于真,輸出為1,對于假,輸出為0;《MATLAB程序設(shè)計》422.1.2邏輯類型《MATLAB程序設(shè)計》431、使用true和false函數(shù)直接生成2、通過關(guān)系運算或邏輯運算產(chǎn)生2.1.2邏輯類型生成邏輯數(shù)值的方法類別符號說明關(guān)系操作<小于<=小于或等于>大于>=大于或等于==等于~=不等于邏輯運算&與|或~非字符串能夠顯示在屏幕上英文或中文字符,創(chuàng)建的方式:等號右邊在英文的狀態(tài)下輸入單引號,在單引號內(nèi)輸入你想要顯示的文本。一個字符串是存儲在一個行向量中的文本,這個行向量中每一個元素都代表一個字符(ASCII碼)??梢酝ㄟ^它的下標對字符串數(shù)組做具體的訪問?!禡ATLAB程序設(shè)計》442.1.3字符和字符串屬于間接調(diào)用函數(shù)的一種方法創(chuàng)建函數(shù)句柄需要用到操作符@。句法格式如下:

function_handle=@function_filename在使用過程中,和其它函數(shù)一樣,需要使用輸入?yún)?shù),如圖所示《MATLAB程序設(shè)計》452.1.4函數(shù)句柄把內(nèi)部函數(shù)cos創(chuàng)建成函數(shù)句柄調(diào)用句柄函數(shù)對x進行計算生成待使用的輸入?yún)?shù)《MATLAB程序設(shè)計》46結(jié)構(gòu)體相當于數(shù)據(jù)容器,可以將相關(guān)的、不同類型的數(shù)據(jù)封裝在一起。由字段名和字段值組成,如圖創(chuàng)建方法(1):使用點號(.)運算符如創(chuàng)建一個名為zhangsan的學(xué)生成績信息的結(jié)構(gòu)體。如果再增加一個學(xué)生lisi的學(xué)生成績2.1.5結(jié)構(gòu)體類型字段名字段值《MATLAB程序設(shè)計》47創(chuàng)建方法(2)使用struct函數(shù)創(chuàng)建:其格式如下:s=struct(‘field1’,value1,‘field2’,value2,……)2.1.5結(jié)構(gòu)體類型創(chuàng)建創(chuàng)建成功的提示成功訪問結(jié)構(gòu)體內(nèi)部的數(shù)據(jù)《MATLAB程序設(shè)計》481、數(shù)組類型

2.1.6單元數(shù)組類型在MATLAB中進行運算的所有數(shù)據(jù)類型,都是按照數(shù)組及矩陣的形式進行存儲和運算的定義是廣義的,元素是任意的數(shù)據(jù)類型,如數(shù)值、字符串、指針等數(shù)組的創(chuàng)建方法:(1)中括弧“[]”或冒號“:”(2)預(yù)定義函數(shù)創(chuàng)建:如linspace()《MATLAB程序設(shè)計》49單元數(shù)組是一種無所不包的廣義矩陣,組成單元數(shù)組的每一個元素稱為單元,每一個單元可以包括一個任意數(shù)組。創(chuàng)建方法:(1)使用賦值語句,注意使用的是“{}”,與數(shù)組不同(2)利用cell函數(shù)創(chuàng)建2.1.6單元數(shù)組類型2、單元(cell)數(shù)組類型

創(chuàng)建2*2大小的空單元數(shù)組創(chuàng)建成功的提示分別給單元數(shù)組賦值2.2變量和數(shù)據(jù)操作《MATLAB程序設(shè)計》502.2.1變量與賦值命了名的內(nèi)存單元就是變量,代表了一個或若干個內(nèi)存單元。變量命名規(guī)則:

第一:字母開頭,后接字母、數(shù)字或下劃線的字符序列;如my12、my_12均合法,12my、_my12均不合法第二:最多63個字符,超出無效;

第三:變量名區(qū)分大小寫;如myvar與myVar不是同一個變量注意:MATLAB提供的標準函數(shù)以及命令都必須使用小寫字母?!禡ATLAB程序設(shè)計》512.2.1變量與賦值賦值賦值語句有兩種形式:(1)變量=表達式(2)表達式

說明:(1)分號是不顯示結(jié)果,%是注釋前面的語句

(2)sin、sqrt、cos、abs均是MATLAB提供的數(shù)學(xué)函數(shù),pi和i是預(yù)定義變量

例題:計算的值,其中,并把結(jié)果賦值給變量z,并顯示計算結(jié)果。顯示z的值《MATLAB程序設(shè)計》52在MATLAB工作空間中,由系統(tǒng)本身定義的變量注意:預(yù)定義變量有特殊含義,在使用時盡量避免對它們重新賦值。如i、j兩個變量,如果非要賦值,則要確保在后面的運算中不涉及到復(fù)數(shù)運算2.2.2預(yù)定義變量預(yù)定義變量含義預(yù)定義變量含義ans計算結(jié)果的默認賦值變量nargin函數(shù)輸入?yún)?shù)個數(shù)pi圓周率π的近似值nargout函數(shù)輸出參數(shù)個數(shù)i,j虛數(shù)單位lasterr存放最新的錯誤信息Inf,inf無窮大,如1/01的結(jié)果lastwarn存放最新的警告信息NaN,nan非數(shù),如0/0,inf/infeps機器零閾值工作區(qū)窗口專門用于內(nèi)存變量的管理,可以刪除、觀察、修改!《MATLAB程序設(shè)計》532.2.3內(nèi)存變量的管理1、內(nèi)存變量的刪除與修改第一:在工作區(qū)窗口的右鍵快捷菜單中選擇“新建”命令,并給變量命名;第二:在工作區(qū)中雙擊該變量,打開變量編輯器;第三:在空白表格中填寫元素值,表格的每一個方格對應(yīng)矩陣一個元素?!禡ATLAB程序設(shè)計》542.2.3內(nèi)存變量的管理2、大矩陣輸入工作空間中的一些有用或者重要變量如何長久的保留下來?MAT文件是MATLAB中保存變量數(shù)據(jù)的一種標準格式,屬于二進制文件,擴展名為.mat。MAT文件的生成和裝入由save和load兩條命令完成,常用格式如下:savefilename變量1變量2……loadfilename《MATLAB程序設(shè)計》552.2.3內(nèi)存變量的管理3、內(nèi)存變量文件的導(dǎo)出與導(dǎo)入注意:1)三角函數(shù)的自變量是弧度和角度的區(qū)別?2)rem和mod函數(shù)的區(qū)別?3)符號函數(shù)的用法?《MATLAB程序設(shè)計》56數(shù)學(xué)中的大部分運算MATLAB全部可以實現(xiàn)2.2.4常用數(shù)學(xué)函數(shù)如果函數(shù)的自變量為矩陣,MATLAB會如何處理呢?自變量是數(shù)組或矩陣,函數(shù)的基本操作后仍以數(shù)組或矩陣的形式顯示結(jié)果《MATLAB程序設(shè)計》572.2.4常用數(shù)學(xué)函數(shù)《MATLAB程序設(shè)計》582.2.5數(shù)據(jù)的輸出格式1)、常數(shù)的表示方法日常記數(shù)法:如3.1415、-935i、3+5i科學(xué)記數(shù)法:如1.78e2、6.7325E2i、1234e-7好處:當我們要標記或運算某個較大或較小且位數(shù)較多時,用科學(xué)記數(shù)法免去浪費很多空間和時間數(shù)據(jù)在內(nèi)部是以雙精度保存,但輸出的格式可以使用format命令進行設(shè)置或改變。format格式如下:format格式符《MATLAB程序設(shè)計》592.2.5數(shù)據(jù)的輸出格式2.3MATLAB矩陣《MATLAB程序設(shè)計》60

數(shù)組與矩陣數(shù)學(xué)上,定義m×n個數(shù)排成m行n列的數(shù)表,稱為矩陣在程序設(shè)計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來的一種形式,即同類數(shù)據(jù)元素的集合,稱為數(shù)組。因此,矩陣以數(shù)組的方式存在,一維數(shù)組相當于向量,二維數(shù)組相當于矩陣《MATLAB程序設(shè)計》612.3.1矩陣的建立(一)賦值法——簡單矩陣1、直接輸入法:將矩陣的元素用方括號括起來,同一行的元素用空格或逗號(英文狀態(tài))隔開,行與行之間用分號(英文狀態(tài))隔開

說明:亦可以采用此方法建立復(fù)數(shù)矩陣例如:A=[2,3,5;3,6,10]B=[235;3610]V1=[8,59,60,33]V2=[5;8;3;4;9]《MATLAB程序設(shè)計》622、利用冒號或linspace命令產(chǎn)生一維矩陣(向量)2.3.1矩陣的建立3、小矩陣拼接大矩陣例如:A=[1,2,3;4,5,6;7,8,9]B=[1:2:5;4:2:8;7:3:13]C=[A,B;B,A]《MATLAB程序設(shè)計》63(二)指令構(gòu)建法——特殊矩陣特殊矩陣1、通用特殊矩陣2、專門學(xué)科的特殊矩陣3、稀疏矩陣零矩陣幺矩陣單位矩陣隨機矩陣魔方矩陣范徳蒙矩陣希爾伯特矩陣拓普利茲矩陣伴隨矩陣2.3.1矩陣的建立產(chǎn)生通用特殊矩陣的函數(shù)有:這幾個函數(shù)的調(diào)用相似,以zeros函數(shù)為例說明:《MATLAB程序設(shè)計》641、通用的特殊矩陣2.3.1矩陣的建立(1)zeros(m):產(chǎn)生m×m的零矩陣;(2)zeros(m,n):產(chǎn)生m×n的零矩陣當,m=n時,等同于zeros(m);(3)zeros(size(A)):產(chǎn)生與矩陣A同樣大小的零矩陣;(1)魔方矩陣中國的傳統(tǒng)游戲,又稱幻方。該矩陣每一行、每列以及兩條對角線的元素和都相等,對于n階魔方矩陣,其元素有1,2,3,……,n2-1,n2等共n2個整數(shù)。命令格式:magic(n)說明:該命令只有一個輸入?yún)?shù)n,為魔方的階數(shù);《MATLAB程序設(shè)計》652.3.1矩陣的建立2、用于專門學(xué)科的特殊矩陣例如:A=magic(3)B=magic(4)(2)范徳蒙(Vandermonde)矩陣該矩陣是法國數(shù)學(xué)家范德蒙提出的一種各列為幾何級數(shù)的矩陣。其特點是:最后一列全為1,倒數(shù)第二列為一個指定向量,其它各列是其后一列與倒數(shù)第二列對應(yīng)元素的乘積。范德蒙矩陣應(yīng)用之一就是在糾錯編碼中,常用的糾錯碼Reed-solomon編碼中冗余塊的編碼采用的即為范德蒙矩陣。命令格式:vander(V)說明:V為輸入?yún)?shù)向量《MATLAB程序設(shè)計》662.3.1矩陣的建立2、用于專門學(xué)科的特殊矩陣(3)希爾伯特(Hilbert)矩陣希爾伯特矩陣是一種數(shù)學(xué)變換矩陣,正定,且高度病態(tài)(即任何一個元素發(fā)生一點變動,整個矩陣的行列式的值和逆矩陣都會發(fā)生巨大變化),病態(tài)程度和階數(shù)相關(guān)。命令格式:hilb(n)說明:n為輸入?yún)?shù),希爾伯特矩陣的階數(shù)《MATLAB程序設(shè)計》672.3.1矩陣的建立2、用于專門學(xué)科的特殊矩陣稀疏矩陣:大量的零元素和極小量的非零元素構(gòu)成較大的矩陣;矩陣規(guī)模都比較大,為節(jié)省內(nèi)存存儲空間,需要進行處理。(1)矩陣存儲方式:完全存儲方式和稀疏存儲方式:完全存儲方式:將所有元素按列一個不少地存儲稀疏存儲方式:僅存儲矩陣中所有的非零元素及其位置,即行號和列號《MATLAB程序設(shè)計》682.3.1矩陣的建立3、稀疏矩陣《MATLAB程序設(shè)計》69第一:將完全存儲方式轉(zhuǎn)換成稀疏存儲方式

函數(shù)A=sparse(S),將矩陣S轉(zhuǎn)換成稀疏存儲方式的矩陣A;(2)稀疏存儲方式的產(chǎn)生命令如下:X=[20000;00000;00050;0100-1;0000-5]A=sparse(X)2.3.1矩陣的建立《MATLAB程序設(shè)計》70第二:產(chǎn)生稀疏存儲矩陣

函數(shù)B=spconvert(A),將A所描述的稀疏矩陣轉(zhuǎn)換成稀疏存儲矩陣B;注意;A為一個m*3或m*4的矩陣。(2)稀疏存儲方式的產(chǎn)生2.3.1矩陣的建立命令如下:A=[221;31-1;433;538;6612]B=spconvert(A)1、矩陣元素的引用方式:通過下標來引用,如A(3,4),可以對A中任意一個元素重新賦值,如A(3,1)=0與矩陣有關(guān)的三個命令《MATLAB程序設(shè)計》712.3.2矩陣的拆分size(A):求矩陣規(guī)模大小length(A):給出矩陣長度(最大值)ndims(A):求矩陣的維數(shù)《MATLAB程序設(shè)計》722、利用冒號表達式獲得子矩陣子矩陣:是指矩陣中的一部分元素構(gòu)成的矩陣(1)單個冒號來作為行下標或列下標時,他代表的是全部行或全部列;(2)A(i:i+m,k:k+n)表示第i行到第i+m行與第k列到第k+n列的所有元素2.3.2矩陣的拆分《MATLAB程序設(shè)計》733、改變矩陣的形狀

命令:reshape(A,m,n)2.3.2矩陣的拆分命令如下:B=reshape(A,5,4)將A矩陣變成5行4列的新矩陣B2.4MATLAB運算《MATLAB程序設(shè)計》74

MATLAB的運算都是針對矩陣而言的,既有矩陣意義下的運算,也有針對矩陣元素的運算(單個數(shù)據(jù)運算算是特例),但就運算的性質(zhì)而言,基本上分為算術(shù)運算、關(guān)系運算和運算邏輯三類?;具\算:+、-、*(乘)、/(右除)、\(左除)、^(乘方)2.4.1算術(shù)運算《MATLAB程序設(shè)計》752.4.1算術(shù)運算注意(1):同型矩陣可以做加減法,對應(yīng)元素直接相加減即可;不同型,則給出錯誤信息,不再進行計算。注意(2):單個元素或同長度行向量可以和矩陣做加減,即矩陣中每一個或每一行元素與該元素或行向量進行加減。例如:A=[2,3,5;3,6,10];B=[123;456];C=A-BD=[12]E=A+D例如:A=[2,3,5;3,6,10];B=[123];C=A-1D=A-B一、基本算術(shù)運算——矩陣加減運算(+,-)《MATLAB程序設(shè)計》762.4.1算術(shù)運算例如:A=[1,2,3;4,5,6]B=[1,2;3,4;5,6]C=A*BD=A*C一、基本算術(shù)運算——矩陣乘法(符號為“*”)注意(1):如果A為m×n矩陣,B為n×p矩陣,則C=A*B為m×p矩陣,如果不滿足條件,兩個矩陣不能相乘,系統(tǒng)會給出出錯信息注意(2):標量可以和矩陣做乘法,即矩陣中每一個元素與該元素進行乘?!禡ATLAB程序設(shè)計》772.4.1算術(shù)運算例如:A=[1,2;1,3];B=[1,0;1,2];C=A\BD=A/B一、基本算術(shù)運算——矩陣除法(左除‘\’和右除‘/’)注意(1):矩陣A必須是非奇異方陣,此時A\B等效于A的逆左乘B矩陣,而A/B相當于矩陣A乘以矩陣B的逆,此時矩陣的規(guī)模要一致。(2)當A和B都是標量時,此時A\B等效于A的倒數(shù)乘以B,而A/B相當于A乘以B的倒數(shù)。如果矩陣為方陣,則可以進行冪計算,格式為A^x,其中x為標量《MATLAB程序設(shè)計》782.4.1算術(shù)運算一、基本算術(shù)運算——矩陣的乘方(符號為“^”)例如:A=[2,3,8;3,1,-1;5,0,4];B1=A^2B2=A^3B3=A^0.1特殊運算,在有關(guān)算術(shù)運算符(+、-、*、/、\、^)前面加點,所以叫點運算兩矩陣進行點運算是指它們對應(yīng)的元素進行相關(guān)運算,因此,要求兩矩陣的規(guī)模和維數(shù)相同?!禡ATLAB程序設(shè)計》792.4.1算術(shù)運算二、點運算例如:A=[1,2;1,3];B=[1,0;1,2];C1=A*BC2=A.*BC3=A./BC4=A.^B《MATLAB程序設(shè)計》80第一:當兩個是標量時,直接比較兩數(shù)大小,如關(guān)系成立,則結(jié)果返回1,否則,返回0;第二:當兩個是同種類型的矩陣,比較是按照兩矩陣相同位置的元素進行。第三:當一個是標量,另一個是矩陣,則把標量分別與矩陣元素相比,結(jié)果是與矩陣同型的0、1矩陣;運算法則2.4.2關(guān)系運算類別符號說明關(guān)系運算<小于<=小于或等于>大于>=大于或等于==等于~=不等于六種關(guān)系運算《MATLAB程序設(shè)計》81例

產(chǎn)生5階隨機方陣A,其元素為[10,90]區(qū)間的隨機整數(shù),然后判斷A的元素是否能被3整除。(1)生成5階隨機方陣A。A=fix((90-10+1)*rand(5)+10)(2)判斷A的元素是否可以被3整除。

P=rem(A,3)==0其中,rem(A,3)是矩陣A的每個元素除以3的余數(shù)矩陣。此時,0被擴展為與A同維數(shù)的零矩陣,P是進行等于(==)比較的結(jié)果矩陣。《MATLAB程序設(shè)計》82

3種邏輯運算符:邏輯與——‘&’,邏輯或——‘|’,邏輯非——‘~’2.4.3邏輯運算(1)非零元素為真,用1表示,零元素為假,用0表示。(2)若參與邏輯運算的是兩個同維矩陣,那么運算將對矩陣相同位置上的元素按標量規(guī)則逐個

進行。(3)若參與邏輯運算的一個是標量,一個是矩陣,那么運算將在標量與矩陣中的每個元素之間按標量規(guī)則逐個進行。(4)在算術(shù)、關(guān)系、邏輯運算中,算術(shù)運算優(yōu)先級最高,邏輯運算優(yōu)先級最低。運算規(guī)則《MATLAB程序設(shè)計》83建立矩陣A。A=[4,-65,-54,0,6;56,0,67,-45,0]例題:建立矩陣A,然后找出大于4的元素的位置,并輸出相應(yīng)位置元素。(2)找出大于4的元素的位置。k=find(A>4)(3)輸出相應(yīng)位置的元素A(k)《MATLAB程序設(shè)計》842.5.1對角陣和三角陣1.對角陣:只有對角線上有非0元素的矩陣,或說若一個方陣除了主對角線上的元素外,其余元素都等于零,則稱之為對角陣。形式如下所示:注意:如果上式中各非零元素均為1,則稱單位矩陣,記為In,如上所示:《MATLAB程序設(shè)計》852.5.1對角陣和三角陣(1)提取矩陣的對角線元素設(shè)A為m×n矩陣,diag(A)函數(shù)用于提取矩陣A主對角線元素,產(chǎn)生一個具有min(m,n)個元素的列向量。diag函數(shù)還有一種形式diag(A,k),其功能是提取第k條對角線的元素;例如:A=[1,2,3;4,5,6];B=diag(A)C1=diag(A,1)C2=diag(A,-1)《MATLAB程序設(shè)計》86設(shè)V為具有m個元素的向量,diag(V)將產(chǎn)生一個m×m對角矩陣,其主對角線元素即為向量V的元素。

diag函數(shù)也有另一種形式diag(V,k),其功能是產(chǎn)生一個n×n(n=m+|k|)對角陣,其第k條對角線的元素即為向量V的元素。

(2)構(gòu)造對角矩陣例如:V=[1,2,-3];C1=diag(V)C2=diag(V,-1)2.5.1對角陣和三角陣《MATLAB程序設(shè)計》87

三角陣又進一步分為上三角陣和下三角陣,所謂上三角陣,即矩陣的對角線以下的元素全為0的一種矩陣,而下三角陣則是對角線以上的元素全為0的一種矩陣。2.5.1對角陣和三角陣2.三角陣(2)下三角矩陣提取矩陣A的下三角矩陣的函數(shù)是tril(A)和tril(A,k)。其用法與提取上三角矩陣的函數(shù)triu(A)和triu(A,k)完全相同。(1)上三角矩陣求矩陣A的上三角陣的函數(shù)是triu(A)。triu(A)函數(shù)也有另一種形式triu(A,k),其功能是求矩陣A的第k條對角線以上的元素?!禡ATLAB程序設(shè)計》882.5.2矩陣的轉(zhuǎn)置與旋轉(zhuǎn)1.矩陣的轉(zhuǎn)置

把原矩陣的第i行變成目標矩陣的第i列,轉(zhuǎn)置運算符為小數(shù)點后接單撇號,即(.’)例如:A=[1,2,-3;4,5,6];B=A.’還有一種轉(zhuǎn)置叫共軛轉(zhuǎn)置,其運算符為單撇號,它在轉(zhuǎn)置的基礎(chǔ)上還要取每個數(shù)的復(fù)共軛,如果原矩陣為實數(shù)矩陣,則二者的結(jié)果是一致的?!禡ATLAB程序設(shè)計》894.矩陣的上下翻轉(zhuǎn):與左右翻轉(zhuǎn)類似,對矩陣A實施上下翻轉(zhuǎn)的函數(shù)是flipud(A)。2.5.2矩陣的轉(zhuǎn)置與旋轉(zhuǎn)2.矩陣的旋轉(zhuǎn):利用函數(shù)rot90(A,k)將矩陣A旋轉(zhuǎn)90o的k倍,當k為1時可省略。3.矩陣的左右翻轉(zhuǎn):對矩陣實施左右翻轉(zhuǎn)是將原矩陣的第一列和最后一列調(diào)換,第二列和倒數(shù)第二列調(diào)換,…,依次類推。MATLAB對矩陣A實施左右翻轉(zhuǎn)的函數(shù)是fliplr(A)。

例如:A=[1,2,3;4,5,6;7,8,9];B1=rot90(A)B2=fliplr(A)B3=flipud(A)《MATLAB程序設(shè)計》902.5.3矩陣的逆與偽逆

對于一個方陣A,如果存在一個與其同階的方陣B,使得:A·B=B·A=I

(I為單位矩陣)則稱B為A的逆矩陣,當然,A也是B的逆矩陣。

求一個矩陣的逆是一件非常煩瑣的工作,容易出錯,但在MATLAB中,求一個矩陣的逆非常容易。求方陣A的逆矩陣可調(diào)用函數(shù)inv(A)。1.矩陣的逆例如:A=[1,2,3;1,4,9;1,8,27];B=inv(A)《MATLAB程序設(shè)計》912.5.3矩陣的逆與偽逆2.矩陣的偽逆

如果矩陣A不是一個方陣,或者A是一個非滿秩的方陣時,矩陣A沒有逆矩陣,但可以找到一個與A的轉(zhuǎn)置矩陣A’同型的矩陣B,使得:A·B·A=A,B·A·B=B此時稱矩陣B為矩陣A的偽逆,也稱為廣義逆矩陣。

在MATLAB中,求一個矩陣偽逆的函數(shù)是pinv(A)?!禡ATLAB程序設(shè)計》922.5.4方程的行列式在MATLAB中,求方陣A所對應(yīng)的行列式的值的函數(shù)是det(A)例如:A=[1,2,3;1,0,3;-3,4,1]B=det(A)

把一個方陣看作一個行列式,并對其按行列式的規(guī)則求值,這個值就稱為矩陣所對應(yīng)的行列式的值?!禡ATLAB程序設(shè)計》932.5.5矩陣的秩與跡2.矩陣的跡

1.矩陣的秩

矩陣線性無關(guān)的行數(shù)與列數(shù)稱為矩陣的秩。在MATLAB中,求矩陣秩的函數(shù)是rank(A)。

矩陣的跡等于矩陣的對角線元素之和,也等于矩陣的特征值之和。在MATLAB中,求矩陣的跡的函數(shù)是trace(A)。例如:A=[1,2,3;1,0,3;-3,4,1];r=rank(A)trace(A)《MATLAB程序設(shè)計》94

計算函數(shù)在MATLAB中,求向量范數(shù)的函數(shù)為:(1)norm(V)或norm(V,2):計算向量V的2—范數(shù)。(2)norm(V,1):計算向量V的1—范數(shù)。(3)norm(V,inf):計算向量V的∞—范數(shù)。2.5.6向量和矩陣的范數(shù)

矩陣或向量的范數(shù)用來度量矩陣或向量在某種意義下的長度。范數(shù)有多種方法定義,其定義不同,范數(shù)值也就不同。1.向量的3種常用范數(shù):2.矩陣的范數(shù)及其計算函數(shù)MATLAB提供了求3種矩陣范數(shù)的函數(shù),其函數(shù)調(diào)用格式與求向量的范數(shù)的函數(shù)完全相同。V=[-1,1/2,1];v1=norm(V,1),v2=norm(V),v3=norm(V,inf)《MATLAB程序設(shè)計》952.5.7矩陣的特征值與特征向量(3)[V,D]=eig(A,‘nobalance’):與第2種格式類似,但第2種格式中先對A作相似變換后求矩陣A的特征值和特征向量,而格式3直接求矩陣A的特征值和特征向量。對于n階方陣A,如果存在數(shù)λ和向量v,使得等式A*v=λ*v成立,則稱數(shù)λ為A的特征值,向量v稱為A的特征向量。在MATLAB中,計算矩陣A的特征值和特征向量的函數(shù)是eig(A),常用的調(diào)用格式有:(1)

E=eig(A):求矩陣A的全部特征值,構(gòu)成向量E。(2)

[V,D]=eig(A):求矩陣A的全部特征值,構(gòu)成對角陣D,并求A的特征向量構(gòu)成V的列向量?!禡ATLAB程序設(shè)計》96例如:A=[1,1,0.5;1,1,0.25;0.50.25,2];[VD]=eig(A)說明(1):3個特征值為-0.0166、1.4801、2.5365,各特征值對應(yīng)的特征向量為V的各列構(gòu)成的向量。說明(2):一個矩陣的特征向量有無窮多個,eig函數(shù)只找出其中的n個,其它特征向量可以由這n個特征向量進行線性組合。97MATLAB程序設(shè)計《MATLAB程序設(shè)計》98第三章MATLAB程序流程控制3.1M文件3.2程序控制結(jié)構(gòu)3.3函數(shù)文件3.4程序調(diào)試與優(yōu)化《MATLAB程序設(shè)計》993.1M文件1.M文件:使用MATLAB語言編寫的程序,稱為M文件。實質(zhì)上,M文件是由若干MATLAB命令或函數(shù)組合在一起的文本集合。作用:可以完成某些操作(加減乘除等復(fù)雜運算),也可以實現(xiàn)某種算法(粒子群算法、最小二乘法等)命令(Script)文件函數(shù)(function)文件實時腳本(livescript)文件M文件《MATLAB程序設(shè)計》1002.命令文件僅僅是一系列命令的集合注意:(1)運行這一部分命令時僅需要輸入文件名即可;

(2)MATLAB提供的有專門的M文件編輯器(兩種方式打開M文件編輯器)分別如下:

第一:在主頁中點擊“新建”,然后選擇“腳本”,即可進入

第二:在命令行輸入edit,回車后則可直接進入編輯器

M文件編輯區(qū)《MATLAB程序設(shè)計》101MATLAB程序如下:(1)打開M文件編輯器(2)輸入如下所示的命令;(3)保存文件,并將其命名為jiajiafa.m舉例:編寫一個矩陣相加減的命令文件在命令行窗口輸入jiajianfa,直接回車,結(jié)果如圖注意:工作區(qū)各變量的值均存在《MATLAB程序設(shè)計》102

也是命令的集合,但第一行必須以英文function開始,作為函數(shù)文件的標志3.函數(shù)文件與命令文件的主要區(qū)別一般來說,函數(shù)文件是為了實現(xiàn)某種特定功能而編寫的。(1)必須以function聲明,一般帶有輸入?yún)⒘亢头祷刂担?)不使用function聲明,一般不帶有輸入?yún)⒘亢头祷刂?;?)文件中的變量不會保留在工作區(qū)(2)文件中的變量會保留在工作區(qū)(3)不可以直接運行,必須函數(shù)調(diào)用的方式(3)可以直接運行函數(shù)文件命令文件《MATLAB程序設(shè)計》103舉例:編寫將華氏溫度f轉(zhuǎn)換成攝氏溫度c的函數(shù)文件functionc=ftoc(f)c=5*(f-32)/9;在命令行窗口輸入ftoc(70),執(zhí)行結(jié)果如圖:MATLAB程序如下:(1)在M文件編輯器中輸入如下命令;(2)保存文件,并將其命名為ftoc.m注意(1)觀察工作區(qū)變量(2)注意文件的保存路徑完整的函數(shù)文件組成《MATLAB程序設(shè)計》104在線幫助文本區(qū):函數(shù)主體:函數(shù)聲明行:編寫和修改記錄:H1行:《MATLAB程序設(shè)計》1054.實時腳本文件除了基本的程序代碼,還包括格式化文本、方程式、超鏈接和圖像,而且運行代碼時能實時顯示輸出結(jié)果,增強了代碼的描述效果。

還可以將mlx文件轉(zhuǎn)換輸出為pdf等用于分享?!禡ATLAB程序設(shè)計》106第一:點擊“新建實時腳本”,即打開如圖所示的“實時編輯器”如何建立mlx文件第二:點擊

“文本”,輸入文本、公式等非M代碼部分;《MATLAB程序設(shè)計》107第三:點擊“代碼”,輸入命令;《MATLAB程序設(shè)計》108《MATLAB程序設(shè)計》109第四:點擊“運行”,顯示結(jié)果;《MATLAB程序設(shè)計》110第五:點擊“保存”的下拉菜單“導(dǎo)出為pdf”《MATLAB程序設(shè)計》1113.2程序結(jié)構(gòu)定義:編程語言提供表達復(fù)雜控制流程的手段,又被稱為編程語言的控制結(jié)構(gòu)。程序是一個語句序列執(zhí)行程序就是按特定的次序執(zhí)行程序中的語句。程序中執(zhí)行點的變遷稱為控制流程,當執(zhí)行到程序中的某一條語句時,也說控制轉(zhuǎn)到了該語句。順序結(jié)構(gòu)循環(huán)結(jié)構(gòu)選擇結(jié)構(gòu)程序控制結(jié)構(gòu)《MATLAB程序設(shè)計》1121.順序結(jié)構(gòu)定義:按照程序中語句的排列順序依次執(zhí)行的程序結(jié)構(gòu)。舉例:華氏溫度轉(zhuǎn)換為攝氏溫度的M文件注意:input:用戶從鍵盤輸入數(shù)據(jù)的常用函數(shù)disp:系統(tǒng)的輸出函數(shù)《MATLAB程序設(shè)計》113定義:根據(jù)條件成立或不成立,分別執(zhí)行不同的語句的程序結(jié)構(gòu),又稱為分支結(jié)構(gòu);

組成:if結(jié)構(gòu)、switch-case結(jié)構(gòu)、try-catch結(jié)構(gòu)2.選擇結(jié)構(gòu)2.1if結(jié)構(gòu)單分支:if-end雙分支:if-else-end多分支:if-elseif-elseif-……-end《MATLAB程序設(shè)計》114(2)雙分支if-else-end語句:分段函數(shù),要求從任意從鍵盤輸入一個數(shù)并計算結(jié)果if條件成立

語句組1else語句組2endif條件成立

語句組end(1)單分支if-end語句:《MATLAB程序設(shè)計》115(3)多分支if語句if條件1語句組1elseif條件2語句組2……elseif條件m語句組melse語句nend舉例:輸入一個字符,如為大寫字母,則輸入其對應(yīng)的小寫字母;如為小寫字母,則輸出對應(yīng)的大寫字母;如為數(shù)字,則輸出對應(yīng)的數(shù)值;如為其它字符,則原樣輸出?!禡ATLAB程序設(shè)計》116程序如下:《MATLAB程序設(shè)計》1172.2.switch語句switch表達式

case值1

語句組1case值2語句組2……case值m語句組motherwise語句組nend《MATLAB程序設(shè)計》118舉例if語句和switch語句的差異《MATLAB程序設(shè)計》119if語句switch語句比較復(fù)雜,特別是嵌套使用可讀性強,容易理解要調(diào)用strcmp函數(shù)比較不同長度的字符串可以比較不同長度的字符串可以檢測相等和不相等僅檢測相等《MATLAB程序設(shè)計》1202.3.try語句一種試探性執(zhí)行語句,提供了一種捕獲錯誤的機制:try語句組1catch語句組2end舉例:矩陣乘法運算要求兩矩陣的維數(shù)相容,否則會出錯。先求兩矩陣的乘積,如果出錯,則自動轉(zhuǎn)去求兩矩陣的點乘《MATLAB程序設(shè)計》1213.循環(huán)結(jié)構(gòu)3.1.for語句for循環(huán)變量=表達式1:表達式2:表達式3循環(huán)體語句end初值步長終值for循環(huán)變量=矩陣表達式循環(huán)體語句end注意:《MATLAB程序設(shè)計》122第一:針對向量的每一個元素執(zhí)行一次循環(huán)體;第二:可以在循環(huán)體內(nèi)修改循環(huán)變量的值;第三:3個表達式只被計算一次,一旦確定不可改變;第四:循環(huán)退出后,循環(huán)變量的值就是向量元素中最后一個值;第五:向量為空,循環(huán)體不執(zhí)行;舉例一個三位整數(shù),各位數(shù)字的立方和等于該函數(shù)本身,則稱該數(shù)為水仙花數(shù),輸出全部的水仙花數(shù)?!禡ATLAB程序設(shè)計》123程序如下:《MATLAB程序設(shè)計》1243.2.while語句while條件循環(huán)體語句end利用while循環(huán)實現(xiàn)S=1+2+…+100的值:注意和for循環(huán)的區(qū)別《MATLAB程序設(shè)計》1253.3程序的流程控制breakpausecontinue常用的流程控制命令returnechowarningerror《MATLAB程序設(shè)計》1261.break命令終止程序循環(huán),通常和if語句結(jié)合使用在多層嵌套循環(huán)中,只終止最內(nèi)層的循環(huán)《MATLAB程序設(shè)計》1272.continue命令控制跳過循環(huán)體中的某些語句。當在循環(huán)體內(nèi)執(zhí)行到該語句時,程序?qū)⑻^循環(huán)體中所有剩余的語句,繼續(xù)下一次循環(huán)。常在for或while語句中與if配對使用舉例:鍵盤任意輸入一個整數(shù)n,求(n-1)!《MATLAB程序設(shè)計》1283.return命令使正在運行的函數(shù)正常結(jié)束并返回到命令行窗口或調(diào)用它的函數(shù)位置三者之間的區(qū)別continue:用于循環(huán)控制,當不想執(zhí)行循環(huán)體的全部語句,只想在做完某一步后直接返回,后面的語句將被跳過;break:用在for或while循環(huán)中,結(jié)束本層循環(huán),繼續(xù)執(zhí)行循環(huán)之后的下一條語句;return:終止當前命令的繼續(xù)執(zhí)行,控制權(quán)交給調(diào)用函數(shù)或命令行窗口(鍵盤);《MATLAB程序設(shè)計》129《MATLAB程序設(shè)計》130用來使程序暫停,然后根據(jù)用戶的設(shè)定來選擇何時繼續(xù)進行。4.pause命令使用格式pausepause(n)pause(state)暫停執(zhí)行M文件,n秒后恢復(fù)執(zhí)行state只有兩個選項,一個為on,一個是off《MATLAB程序設(shè)計》131

舉例《MATLAB程序設(shè)計》1325.echo命令語句回顯:在函數(shù)或腳本執(zhí)行期間顯示系統(tǒng)執(zhí)行的語句echoonechooff對所有腳本文件中的語句啟用回顯。在所有腳本文件中禁用語句回顯。echo

在上述兩個命令中進行切換《MATLAB程序設(shè)計》1336.warning命令用于在程序運行時給出必要的警告信息。warning(‘message’)顯示警告信息為“message”,其中message是文本信息顯示警告信息為“message”,其中message包含轉(zhuǎn)義字符,且每個轉(zhuǎn)義字符的值將被轉(zhuǎn)化為a1、a2…的值warning(‘message’,a1,a2…)舉例編制一個能計算以5為底的對數(shù)計算,要求當輸入?yún)?shù)不符合對數(shù)計算規(guī)則時,給出必要的警告信息?!禡ATLAB程序設(shè)計》134《MATLAB程序設(shè)計》1357.error命令用于顯示錯誤信息,同時返回鍵盤控制。error(‘message’)終止程序并顯示錯誤信息message終止程序并顯示錯誤信息message,其中message包含轉(zhuǎn)義字符error(‘message’,a1,a2…)與warning類似,可將上述程序中warning替換成error《MATLAB程序設(shè)計》136error與warning、disp的區(qū)別warning可以使用在程序的任何位置,但不影響程序的正常運行error可以使用在程序的任何位置,執(zhí)行后立即終止程序運行warning顯示的文本信息為橘黃色,且有聲音提示;error顯示的文本信息為紅色,有聲音提示;disp顯示的文本信息為黑色,無聲音提示;《MATLAB程序設(shè)計》1373.4程序的調(diào)試程序出現(xiàn)錯誤或者輸出結(jié)果與預(yù)期結(jié)果不一致,就需要對所編寫的程序進行調(diào)試。錯誤根據(jù)系統(tǒng)提示進行設(shè)置斷點進行語法錯誤程序邏輯錯誤調(diào)試方法《MATLAB程序設(shè)計》1381.根據(jù)系統(tǒng)提示信息進行調(diào)試系統(tǒng)會針對語法問題給出警告信息或錯誤信息大部分語法錯誤系統(tǒng)會檢測出來,并給出相應(yīng)的錯誤信息《MATLAB程序設(shè)計》139斷點:是指用來臨時中斷M文件執(zhí)行的一個標志。2.設(shè)置斷點調(diào)試(1)斷點設(shè)置方法M編輯器中,按F12可將某一行設(shè)置為斷點利用dbstop命令設(shè)置M編輯器中,選擇“斷點”

“設(shè)置/清除”dbstopinmfiledbstopinmfileatLineNodbstopinmfileifexpressiondbstopifconditiondbstop(b)《MATLAB程序設(shè)計》140(2)清除斷點方法M編輯器中,按F12可將某一行清除斷點利用dbclear命令清除M編輯器中,選擇“斷點”

“設(shè)置/清除”dbclearalldbclearinmfileatLineNodbclearinmfiledbclearifcondition《MATLAB程序設(shè)計》141(3)列出全部斷點dbstatus命令dbstatusdbstatus-completenamesdbstatusmfiledbstatusfile-completenames列出包括錯誤、警告以及nan\inf在內(nèi)的所有斷點列出M文件mfile.m所有斷點為每個斷點顯示包含該斷點的函數(shù)或文件的完全限定名為指定文件每個斷點顯示包含該斷點的函數(shù)或文件的完全限定名《MATLAB程序設(shè)計》142dbstepdbstepindbstepNdbstepout執(zhí)行當前M文件斷點處的下一行執(zhí)行當前M文件斷點處的第N行與dbstep函數(shù)類似運行當前函數(shù)的其余代碼,并在退出函數(shù)后立即暫停(4)從斷點處繼續(xù)執(zhí)行程序dbstep命令注意:dbcont命令也可以實現(xiàn)此功能,它可以執(zhí)行所有行程序直至遇到下一個斷點或到達M文件的末尾《MATLAB程序設(shè)計》143dbstackdbstack(n)顯示導(dǎo)致當前斷點產(chǎn)生的調(diào)用函數(shù)的名稱及行號,并按他們的執(zhí)行次序?qū)⑵淞谐鲈陲@示中省略前n個堆棧幀(5)斷點的調(diào)用關(guān)系dbstack命令(6)進入與退出調(diào)試模式斷點設(shè)置好之后,按F5鍵進入調(diào)試模式當程序出現(xiàn)錯誤,系統(tǒng)自動退出,如要強行退出調(diào)試模式,輸入dbquit命令?!禡ATLAB程序設(shè)計》144舉例——調(diào)試程序my_test1《MATLAB程序設(shè)計》145補充:利用調(diào)試工具進行程序調(diào)試輸入命令麻煩,可以采用調(diào)試工具進行舉例——調(diào)試程序my_test1《MATLAB程序設(shè)計》146斷點設(shè)置完成后,點擊如圖所示的“運行并前進”按鈕,進入調(diào)試模式《MATLAB程序設(shè)計》147進入調(diào)試模式,命令按鈕也有所變化,如圖,步進:單步運行,單擊一次,程序運行一次,但不進入函數(shù)步入:單步運行。遇到函數(shù)時進入函數(shù),仍單步運行步出:停止單步運行《MATLAB程序設(shè)計》1483.5程序的性能分析與優(yōu)化因設(shè)計思路不同,其程序也多種多樣,導(dǎo)致執(zhí)行效率差別較大,尤其是數(shù)據(jù)規(guī)模大時,差距更為明顯。需要借助工具分析程序運行時間的耗時長短從而確定程序性能好壞。分析方法利用profile(探查器)函數(shù)利用tic和toc兩個計時函數(shù)組合(一)性能分析:利用timeit函數(shù)《MATLAB程序設(shè)計》1491.profile函數(shù)探查函數(shù)的執(zhí)行時間找出影響運行速度的“瓶頸”所在《MATLAB程序設(shè)計》150預(yù)設(shè)->字體->自定義->探查器->桌面代碼或者其他字體,然后應(yīng)用確定一下。探測器界面如何調(diào)出?timeit:測量運行函數(shù)所需的時間《MATLAB程序設(shè)計》1512.timeit函數(shù)注意:多次調(diào)用指定的函數(shù),并計算測量結(jié)果的中位數(shù)?;菊Z法為:t=timeit(f)或t=timeit(f,n)《MATLAB程序設(shè)計》152

tic:啟動秒表計時器,記錄當前時間3.tic和toctoc:從秒表讀取已用時間

tic

toc

函數(shù)結(jié)合使用,可以測量執(zhí)行某行命令需要的時間。《MATLAB程序設(shè)計》153連續(xù)調(diào)用tic函數(shù)會覆蓋內(nèi)部記錄的開始時間。clear函數(shù)不會重置tic函數(shù)調(diào)用記錄的起始時間。有時程序運行速度太快,導(dǎo)致tic和toc無法提供有用的數(shù)據(jù)。如果您的代碼運行速度快于1/10秒,請考慮測量它在循環(huán)中運行的時間,然后求平均值以計算單次運行的時間。以下操作會導(dǎo)致意外輸出:使用tic和toc確定timeit的時間在timeit計時的函數(shù)內(nèi)使用tic和toc注意事項《MATLAB程序設(shè)計》154(二)程序優(yōu)化如何提高程序的運行速度是重點考慮的問題。

(1)采用向量化運算y=0;n=1000;fori=1:ny=y+1/(2*i-1);endyn=1000;i=1:2:2*n-1;y=sum(1./i);y《MATLAB程序設(shè)計》

(2)預(yù)分配內(nèi)存空間在循環(huán)之前預(yù)分配向量或數(shù)組的內(nèi)存空間,可有效提高運行速度。cleara=0;forn=2:1000;a(n)=a(n-1)+10;endclear;a=zeros(1,1000)forn=2:1000;a(n)=a(n-1)+10;end《MATLAB程序設(shè)計》156

(3)減少運算強度一般來說,乘法比乘方快,加減比乘除快。cleara=rand(32);x=a.^3;x=a.*a.*a;《MATLAB程序設(shè)計》157舉例——用篩選法求某自然數(shù)范圍內(nèi)容全部素數(shù)《MATLAB程序設(shè)計》158補充:函數(shù)調(diào)用調(diào)用的一般格式:[輸出實參表]=函數(shù)名(輸入?yún)?shù)表)1、各實參出現(xiàn)的順序、個數(shù),應(yīng)與函數(shù)定義時一致;2、調(diào)用時,實參傳遞給形參,從而實現(xiàn)參數(shù)傳遞,從而執(zhí)行函數(shù)功能;例:利用函數(shù)文件,實現(xiàn)平面坐標到極坐標之間的轉(zhuǎn)換建立函數(shù)文件my_tran.m在my_main1.m中調(diào)用my_tran函數(shù)遞歸調(diào)用《MATLAB程序設(shè)計》159函數(shù)可以嵌套調(diào)用,一個函數(shù)調(diào)用它自身稱為函數(shù)的遞歸調(diào)用MATLAB中有專門用于階乘運算的命令:factorial遞歸調(diào)用設(shè)計不當,容易陷入死循環(huán)!160MATLAB程序設(shè)計《MATLAB程序設(shè)計》161第四章數(shù)據(jù)可視化4.1二維圖形繪制4.2三維圖形繪制4.1二維圖形繪制《MATLAB程序設(shè)計》162在MATLAB中,繪制直角坐標系下的二維曲線可以利用plot函數(shù)。這是最基本且應(yīng)用最為廣泛的繪圖函數(shù)。plot函數(shù)的基本調(diào)用格式為:plot(x,y)4.1.1繪制單根二維曲線

例4-1在0≤x≤2π區(qū)間內(nèi),繪制曲線x=0:pi/100:2*pi;y=x.^2.*cos(4*pi*x);figureplot(x,y,'k-','LineWidth',1.5)xlim([min(x),max(x)]);xlabel('x');ylabel('y');4.1二維圖形繪制《MATLAB程序設(shè)計》163例4-2繪制曲線,4.1.1繪制單根二維曲線

這是以參數(shù)方程的形式給出的二維曲線,只要給定參數(shù)向量,再分別求出x,y向量即可繪出曲線t=0:pi/100:2*pi;x=t.*cos(3*t);y=t.*cos(t).^2;figureplot(x,y,'k-','LineWidth',1.5)xlabel('x’);

ylabel('y');4.1二維圖形繪制《MATLAB程序設(shè)計》1644.1.1繪制單根二維曲線

plot函數(shù)最簡單的調(diào)用格式是只包含一個輸入?yún)?shù)x,調(diào)用格式為plot(x),在這種情況下,當x是實向量時,以該向量元素的下標為橫坐標,元素值為縱坐標畫出一條連續(xù)曲線,這實際上是繪制折線圖。x=0:pi/100:2*pi;y=x.^2.*cos(4*pi*x);figureplot(y,'k-','LineWidth',1.5)xlim([0,length(y)])xlabel('數(shù)據(jù)點');ylabel('y');

以例題4-1為例,采用plot(x)格式繪制圖形4.1二維圖形繪制《MATLAB程序設(shè)計》1654.1.2繪制多根二維曲線

調(diào)用形式:(1)plot函數(shù)的輸入?yún)?shù)是矩陣形式;(2)含多個輸入?yún)?shù)的plot函數(shù);(3)具有兩個縱坐標標度的圖形4.1二維圖形繪制《MATLAB程序設(shè)計》1664.1.2繪制多根二維曲線

(1)plot函數(shù)的輸入?yún)?shù)是矩陣形式①當x是向量,y其中一維與x保持相同長度時,則繪制出多根不同顏色的曲線。曲線條數(shù)等于y矩陣的另一維大小,x被作為這些曲線共同的橫坐標。x=linspace(-pi,pi,100);y=[exp(x*i);2*exp(x*i);3*exp(x*i)]';figureplot(y,'LineWidth',1.5);xlim([min(x),max(x)]);xlabel('x');ylabel('y’);legend('Line1','Line2','Line3')4.1二維圖形繪制《MATLAB程序設(shè)計》1674.1.2繪制多根二維曲線

(1)plot函數(shù)的輸入?yún)?shù)是矩陣形式②

當x、y是同型矩陣時,則以x、y對應(yīng)列元素為橫、縱坐標分別繪制曲線,曲線條數(shù)等于矩陣的列數(shù)。x1=linspace(0,pi,100);x2=linspace(2*pi,3*pi,100);x3=linspace(4*pi,5*pi,100);x=[x1;x2;x3]';y=[tan(x1);tan(x2);tan(x3)]';figureplot(x,y,'LineWidth',1.5);xlabel('x');ylabel('y');legend('Line1','Line2','Line3')4.1二維圖形繪制《MATLAB程序設(shè)計》1684.1.2繪制多根二維曲線

(2)含多個輸入?yún)?shù)的plot函數(shù)

plot函數(shù)可以包含若干組向量對,每一向量對可以繪制一條曲線,含多個輸入?yún)?shù)的plot函數(shù)調(diào)用格式為:plot(x1,y1,x2,y2,...,xn,yn)>>x1=linspace(0,2*pi,100);>>x2=linspace(0,3*pi,100);>>x3=linspace(0,4*pi,100);>>plot(x1,sin(x1),x2,1+sin(x2),x3,2+sin(x3))4.1二維圖形繪制《MATLAB程序設(shè)計》1694.1.2繪制多根二維曲線

(2)含多個輸入?yún)?shù)的plot函數(shù)②當輸入?yún)?shù)有矩陣形式時,配對的x、y按對應(yīng)列元素為橫、縱坐標分別繪制曲線,曲線條數(shù)等于矩陣的列數(shù)。>>xl=linspace(0,2*pi,100);>>x2=linspace(0,3*pi,100);>>x3=linspace(0,4*pi,100);>>y1=sin(x1);>>y2=1+sin(x2);>>y3=2+sin(x3)

溫馨提示

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

評論

0/150

提交評論