《Matlab App Designer設(shè)計入門及實戰(zhàn)》課件全套 湯全武 第1-12章 MATLAB App Designer設(shè)計預(yù)備知識-基于MATLAB App Designer的通信原理系統(tǒng)_第1頁
《Matlab App Designer設(shè)計入門及實戰(zhàn)》課件全套 湯全武 第1-12章 MATLAB App Designer設(shè)計預(yù)備知識-基于MATLAB App Designer的通信原理系統(tǒng)_第2頁
《Matlab App Designer設(shè)計入門及實戰(zhàn)》課件全套 湯全武 第1-12章 MATLAB App Designer設(shè)計預(yù)備知識-基于MATLAB App Designer的通信原理系統(tǒng)_第3頁
《Matlab App Designer設(shè)計入門及實戰(zhàn)》課件全套 湯全武 第1-12章 MATLAB App Designer設(shè)計預(yù)備知識-基于MATLAB App Designer的通信原理系統(tǒng)_第4頁
《Matlab App Designer設(shè)計入門及實戰(zhàn)》課件全套 湯全武 第1-12章 MATLAB App Designer設(shè)計預(yù)備知識-基于MATLAB App Designer的通信原理系統(tǒng)_第5頁
已閱讀5頁,還剩918頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

MATLABAppDesignerGUI設(shè)計及實戰(zhàn)(微課視頻版)目錄第1章MATLABAppDesigner設(shè)計預(yù)備知識 第2章MATLAB常用文件操作 第3章二維繪圖 第4章句柄圖形系統(tǒng) 第5章MATLABAppDesigner設(shè)計基礎(chǔ)及常用組件 第6章儀器、容器、圖窗工具和航天航空組件 第7章預(yù)定義對話框 第8章基于MATLABAppDesigner的學(xué)生成績管理 第9章MATLABAppDesigner在中學(xué)教學(xué)中的應(yīng)用舉例 第10章基于MATLABAppDesigner的數(shù)字信號處理系統(tǒng) 第11章基于MATLABAppDesigner的圖像處理系統(tǒng) 第12章基于MATLABAppDesigner的通信原理系統(tǒng) 第1章MATLABAppDesigner設(shè)計預(yù)備知識本章要點

MATLAB意為矩陣工程(矩陣實驗室),軟件主要面向科學(xué)計算、可視化及交互式程序設(shè)計的高科技計算環(huán)境。它將數(shù)值分析、矩陣計算、科學(xué)數(shù)據(jù)可視化以及非線性動態(tài)系統(tǒng)的建模和仿真等諸多強(qiáng)大功能集成在一個易于使用的視窗環(huán)境中,并在很大程度上擺脫了傳統(tǒng)非交互式程序設(shè)計語言的編程模式。本章要點:⑴MATLAB軟件介紹。⑵MATLAB工作環(huán)境。⑶MATLAB中的函數(shù)類型。⑷MATLAB程序設(shè)計結(jié)構(gòu)。學(xué)習(xí)目標(biāo):⑴了解MATLAB軟件的組成及特點。⑵熟悉MATLAB工作環(huán)境。⑶掌握MATLAB中的幾種函數(shù)類型的使用方法及特點。⑷掌握if、switch語句實現(xiàn)選擇結(jié)構(gòu)的方法。⑸掌握for、while語句實現(xiàn)循環(huán)結(jié)構(gòu)的方法。1.1MATLAB軟件介紹MATLAB主要由核心部分和各種應(yīng)用工具箱兩大部分組成。MATLAB核心部分由MATLAB開發(fā)環(huán)境、MATLAB語言、MATLAB數(shù)學(xué)函數(shù)庫、MATLAB圖形處理系統(tǒng)和MATLAB應(yīng)用程序接口五大部分組成。①

MATLAB開發(fā)環(huán)境是一個集成的工作環(huán)境,包括MATLAB命令行窗口、文件編輯調(diào)試器、工作區(qū)、數(shù)組編輯器和在線幫助文檔等;②MATLAB編程語言是一種面向科學(xué)與工程計算的高級語言,允許按照數(shù)學(xué)習(xí)慣的方式編寫程序;③MATLAB的數(shù)學(xué)函數(shù)庫包含了大量的計算算法,包括基本函數(shù)、矩陣運算和復(fù)雜算法等;④MATLAB的圖形處理系統(tǒng)能夠?qū)⒍S和三維數(shù)組的數(shù)據(jù)用圖形表示出來,并可以實現(xiàn)圖像處理、動畫顯示和表達(dá)式作圖等功能;⑤MATLAB應(yīng)用程序接口使MATLAB語言能與C或FORTRAN等其他編程語言進(jìn)行交互。1.1MATLAB軟件介紹MATLAB工具箱包括功能性工具箱和科學(xué)性工具箱兩類。①功能性工具箱主要用來擴(kuò)充其符號計算功能、圖示建模仿真功能、文字處理功能以及與硬件實時交互功能,適用于多種學(xué)科;②科學(xué)性工具箱專業(yè)性較強(qiáng),如controltoolbox、communicationtoolbox等,這些工具箱都是由該領(lǐng)域內(nèi)學(xué)術(shù)水平很高的專家編寫的,所以用戶不用編寫自己學(xué)科范圍內(nèi)的基礎(chǔ)程序即可直接進(jìn)行高、精、尖的研究。1.2MATLAB工作環(huán)境MATLAB既是一種語言,又是一種編程環(huán)境。在這種環(huán)境中,系統(tǒng)提供了許多編寫、調(diào)試和執(zhí)行MATLAB程序的便利工具。下面主要介紹MATLAB中的命令行窗口、圖形窗口、工作空間窗口、M文件編輯窗口和幫助系統(tǒng)窗口。1.2MATLAB工作環(huán)境1.2.1命令行窗口通過命令行窗口鍵入MATLAB的各種命令并讀出相應(yīng)的結(jié)果。但要注意,每一條命令或命令行鍵入后都要按回車鍵,命令才會被執(zhí)行,例如,鍵入如下程序:a=ones(4,4)然后按回車鍵,即可創(chuàng)建一個4*4且元素值為1的矩陣,并顯示如下運行結(jié)果:a=11111111111111111.2MATLAB工作環(huán)境1.2.1命令行窗口在MATLAB中,命令行窗口常用的命令及功能如表1-1所示。命令功能clc擦去一頁命令行窗口,光標(biāo)回到屏幕左上角clear清除工作空間中所有的變量clearall從工作空間清除所有變量和函數(shù)clear變量名清除指定的變量clf清除圖形窗口內(nèi)容delete<文件名>從磁盤刪除指定的文件help<命令行>查詢所示命令的幫助信息which<文件名>查找指定文件路徑who顯示當(dāng)前工作空間中的變量whos列出當(dāng)前工作空間的變量及信息表1-1命令行窗口常見命令與功能1.2MATLAB工作環(huán)境1.2.1命令行窗口命令功能what列出當(dāng)前目錄下的.m文件和.mat文件loadname加載name文件中的所有變量到工作空間loadnamex,y加載name文件中的變量x,y到工作空間savename保存工作空間變量到文件name.mat中savenamex,y保存工作空間變量x,y到文件name.mat中Home或Ctrl+A光標(biāo)移動到首行End或Ctrl+E光標(biāo)移動到行尾Esc或Ctrl+U清除一行Del或Ctrl+D清除光標(biāo)后的字符Backspace或Ctrl+H清除光標(biāo)前的字符Ctrl+K清除光標(biāo)至行尾字Ctrl+C中斷程序運行續(xù)表1-1命令行窗口常見命令與功能1.2MATLAB工作環(huán)境1.2.2圖形窗口圖形窗口是用來顯示MATLAB所繪制的圖形,這些圖像可以是二維圖形,甚至是三維圖像。只要執(zhí)行了任意一種繪圖命令,圖形窗口就會自動產(chǎn)生輸入程序命令如下:x=1:0.2:10;y=sin(x);plot(x,y)運行結(jié)果如圖1-1所示。圖1-1運行程序自動彈出圖形窗口1.2MATLAB工作環(huán)境1.2.3工作空間窗口工作空間窗口用來顯示當(dāng)前計算機(jī)內(nèi)存中MATLAB變量信息,包括變量的名稱、數(shù)據(jù)結(jié)構(gòu)、字節(jié)數(shù)及其類型等,如圖1-2所示,所顯示變量信息可通過單擊右上角“倒三角”圖形,單擊【選擇列】按鈕進(jìn)行設(shè)置。同時,在MATLAB中可以對變量進(jìn)行觀察、編輯、保存和刪除等操作,若要查看變量的具體內(nèi)容,可以雙擊該變量名稱。圖1-2

工作空間窗口1.2MATLAB工作環(huán)境1.2.4M文件編輯窗口MATLAB命令窗口適用于編寫短小的程序,對編寫大型、復(fù)雜程序應(yīng)采用文件編輯方法,即編輯M文件。在MATLAB命令行窗口輸入edit,這時啟動編輯器,并打開空白的M文件,如圖1-3所示。圖1-3

編輯器1.2MATLAB工作環(huán)境1.2.4M文件編輯窗口MATLAB文本編輯器提供了編輯M文件和調(diào)試M文件兩大功能。其中,編輯功能與Windows編輯程序類似,此處不再贅述,只對下列幾點進(jìn)行特別說明:⑴注釋:Ctrl+R快捷鍵注釋%,Ctrl+T快捷鍵刪除注釋。⑵縮進(jìn):增加縮進(jìn)量用Ctrl+]鍵,減少縮進(jìn)量用Ctrl+[鍵。M程序調(diào)試器的熱鍵設(shè)置和VC有些類似,下面列出來一些常用的調(diào)試方法。⑴設(shè)置/清除斷點:使用快捷鍵F12。⑵執(zhí)行:使用快捷鍵F5。⑶單步執(zhí)行:使用快捷鍵F10。⑷stepin:遇到函數(shù)時,進(jìn)入函數(shù)內(nèi)部,使用快捷鍵F11。⑸stepout:執(zhí)行流程跳出函數(shù),使用快捷鍵Shift+F11。1.2MATLAB工作環(huán)境1.2.5幫助系統(tǒng)窗口常用的幫助信息有help、demo、doc、who、whos、what、which、lookfor等。如果用戶知道某個函數(shù)的名稱,并想了解該函數(shù)的具體用法,只需在命令行窗口中輸入:例如:在窗口中輸入helpcos就可以獲得cos函數(shù)的信息。helpcoscosCosineofargumentinradians.cos(X)isthecosineoftheelementsofX.Seealsoacos,cosd,cospi.cos的文檔名為cos的其他函數(shù)如果用戶不知道一些函數(shù)的確切名稱,此時help函數(shù)就無能為力了,但可以使用lookfor函數(shù),即在使用lookfor函數(shù)時,用戶只需知道某個函數(shù)的部分關(guān)鍵字,在命令行窗口輸入:lookfor+關(guān)鍵字1.2MATLAB工作環(huán)境1.2.5幫助系統(tǒng)窗口如果用戶不知道一些函數(shù)的確切名稱,此時help函數(shù)就無能為力了,但可以使用lookfor函數(shù),即在使用lookfor函數(shù)時,用戶只需知道某個函數(shù)的部分關(guān)鍵字,在命令行窗口輸入:lookfor+關(guān)鍵字1.3MATLAB中的函數(shù)類型MATLAB中的函數(shù)可以劃分為M文件主函數(shù)、子函數(shù)、嵌套函數(shù)、私有函數(shù)和重載函數(shù),下面分別進(jìn)行講述。1.3.1主函數(shù)M文件中的第一個函數(shù)稱為主函數(shù),一個M文件只能包含一個主函數(shù),主函數(shù)之后可能附隨多個子函數(shù)。M文件主函數(shù)的說法是針對其內(nèi)部的子函數(shù)和嵌套函數(shù)而言的,一個M文件中除了主函數(shù)外,還可以編寫多個嵌套函數(shù)或子函數(shù)。1.3MATLAB中的函數(shù)類型1.3.2子函數(shù)一個M文件中可能包含多個函數(shù),主函數(shù)之外的函數(shù)都稱為子函數(shù),保存所用的函數(shù)名應(yīng)該與主函數(shù)定義名相同,外部函數(shù)只能對主函數(shù)進(jìn)行調(diào)用。所有的子函數(shù)都有自己獨立的聲明、幫助和注釋等結(jié)構(gòu),只需要在位置上注意所處主函數(shù)之后即可,而各個子函數(shù)則沒有前后順序,可以任意放置。M文件內(nèi)部發(fā)生函數(shù)調(diào)用時,MATLAB首先檢查該文件中是否存在相應(yīng)名稱的子函數(shù),然后檢查這一M文件所在目錄的子目錄下是否存在同名的私有函數(shù),然后按照MATLAB路徑,檢查是否存在同名的M文件或內(nèi)部函數(shù)。1.3MATLAB中的函數(shù)類型1.3.3嵌套函數(shù)任一M函數(shù)體內(nèi)所定義的函數(shù)稱為外部函數(shù)的嵌套函數(shù),MATLAB支持多重嵌套函數(shù),即在嵌套函數(shù)內(nèi)部繼續(xù)定義下一層的嵌套函數(shù),形如:functionx=A(p1,p2)functiony=B(p3)...end...end1.3MATLAB中的函數(shù)類型1.3.3嵌套函數(shù)MATLAB函數(shù)體通常不需要end結(jié)束標(biāo)記,但如包含嵌套函數(shù),則該M文件內(nèi)的所有函數(shù)(主函數(shù)和子函數(shù)),不論是否包含嵌套函數(shù)都需end標(biāo)記。嵌套函數(shù)的調(diào)用規(guī)則:①父級函數(shù)可調(diào)用下一層嵌套函數(shù);②相同父級的同級嵌套函數(shù)可相互調(diào)用;③處于低層的嵌套函數(shù)可調(diào)用任意父級函數(shù)。1.3.4私有函數(shù)私有函數(shù)是具有限制性訪問權(quán)限的函數(shù),是位于私有目錄private目錄下的函數(shù)文件,這些私有函數(shù)的構(gòu)造與普通M函數(shù)完全相同,訪問條件是:①存放于該private子目錄的上一層父目錄中的M文件函數(shù);②從存放于該private子目錄上一層父目錄中的M文件函數(shù)中發(fā)起調(diào)用的M腳本。1.3MATLAB中的函數(shù)類型1.3.5重載函數(shù)重載是計算機(jī)編程中非常重要的概念,它經(jīng)常是用在處理功能類似,但是參數(shù)類型或個數(shù)不同的函數(shù)編寫中。例如實現(xiàn)兩個相同的計算功能,輸入變量數(shù)量相同,不同的是其中一個輸入變量的類型為雙精度浮點類型,另一個輸入類型為整型,這時候用戶就可以編寫兩個同名函數(shù),一個用來處理雙精度浮點類型的輸入函數(shù),另一個用來處理整型的輸入?yún)?shù)。MATLAB的內(nèi)置函數(shù)中有許多重載函數(shù),放置在不同的文件路徑下,文件夾名稱以@開頭,然后跟一個代表MATLAB數(shù)據(jù)類型的字符。1.4MATLAB程序設(shè)計結(jié)構(gòu)計算機(jī)語言程序控制結(jié)構(gòu)主要有三大類:順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。這一點MATLAB與其他編程語言完全一致。1.4.1順序結(jié)構(gòu)順序結(jié)構(gòu)是按照語句出現(xiàn)順序執(zhí)行的一種控制結(jié)構(gòu),即按由上到下的書寫順序執(zhí)行,只有一個入口和一個出口。在MATLAB語言的函數(shù)中,變量主要有輸入變量、輸出變量及函數(shù)內(nèi)所使用的變量。1.4MATLAB程序設(shè)計結(jié)構(gòu)1.數(shù)據(jù)輸入可使用input函數(shù),實現(xiàn)從鍵盤輸入數(shù)據(jù)。1)輸入數(shù)值調(diào)用格式為:x=input('提示信息')例如輸入:x=input('pleaseinputanumber:')運行結(jié)果如下:>>x=input('pleaseinputanumber:')pleaseinputanumber:8x=81.4.1順序結(jié)構(gòu)1.4MATLAB程序設(shè)計結(jié)構(gòu)1.數(shù)據(jù)輸入2)輸入字符串調(diào)用格式為:x=input('提示信息','s')例如輸入:x=input('pleaseinputastring:','s')運行結(jié)果如下:x=input('pleaseinputastring:','s')pleaseinputastring:thisisastringx='thisisastring'1.4.1順序結(jié)構(gòu)1.4MATLAB程序設(shè)計結(jié)構(gòu)2.數(shù)據(jù)輸出1)disp函數(shù)調(diào)用格式為:disp(輸出項)其中,輸出項既可以是字符串,也可以是矩陣。1.4.1順序結(jié)構(gòu)1.4MATLAB程序設(shè)計結(jié)構(gòu)2.數(shù)據(jù)輸出1)disp函數(shù)【例1-1】disp函數(shù)數(shù)據(jù)輸出實例。程序命令如下:A=20+300-20*2;B=[121314;151617;181920];C='thisisastring';disp(A);disp(B);disp(C);1.4.1順序結(jié)構(gòu)運行結(jié)果如下:280121314151617181920thisisastring1.4MATLAB程序設(shè)計結(jié)構(gòu)2.數(shù)據(jù)輸出2)fprintf函數(shù)1.4.1順序結(jié)構(gòu)運行結(jié)果如下:洋洋的年齡是18注意:%d整數(shù);%e實數(shù):科學(xué)計算法形式;%f實數(shù):小數(shù)形式;%s:輸出字符串。fprintf函數(shù)可將數(shù)據(jù)按指定格式寫入文本文件【例1-2】fprintf函數(shù)數(shù)據(jù)輸出實例。程序命令如下:clc;clear;age=18;name='洋洋';fprintf('%s的年齡是%d\n',name,age)1.4MATLAB程序設(shè)計結(jié)構(gòu)3.程序的暫停1.4.1順序結(jié)構(gòu)可使用pause函數(shù)執(zhí)行程序暫停,其調(diào)用格式如下:

pause(延遲秒數(shù))

如果默認(rèn)延遲時間,直接使用pause即可暫停程序,指導(dǎo)用戶按任意一個按鍵后程序繼續(xù)執(zhí)行。若要強(qiáng)行中止程序的運行可使用Ctrl+C命令。1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)選擇結(jié)構(gòu)用于判斷給定的條件,根據(jù)判斷的結(jié)果判斷某些條件,根據(jù)判斷的結(jié)果來控制程序的流程。MATLAB語言中的條件判斷語句主要是if語句、switch語句和try語句1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)1.if語句1)單分支if語句if條件語句組end當(dāng)條件成立時,則執(zhí)行語句組,執(zhí)行完之后繼續(xù)執(zhí)行if語句的后續(xù)語句,若條件不成立,則直接執(zhí)行if語句的后續(xù)語句。1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)1.if語句2)雙分支if語句if條件語句組1else語句組2end當(dāng)條件成立時,執(zhí)行語句組1;否則執(zhí)行語句組2。語句組1或語句組2執(zhí)行后,再執(zhí)行if語句的后續(xù)語句。1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)【例1-3】計算分段函數(shù)的值,程序命令如下:x=input('請輸入x的值:');ifx<0y=3*x+6elsey=5*x-2end運行結(jié)果如下:請輸入x的值:8y=381.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)3)多分支if語句if條件1語句組1elseif條件2語句組2...elseif條件m語句組melse語句組nend1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)【例1-4】輸入三角形的三條邊,判斷能否構(gòu)成三角形,如果可以構(gòu)成三角形,則進(jìn)一步判斷三角形的形狀。程序命令如下:1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)L=input('請輸入三角形的三條邊:');ifL(1)<=0|L(2)<=0|L(3)<=0disp('三角形的邊長不能為0或為負(fù)');elseifL(1)+L(2)<=L(3)|L(1)+L(3)<=L(2)|L(2)+L(3)<=L(1)disp('不能構(gòu)成三角形');elseifL(1)==L(2)&L(2)==L(3)disp('構(gòu)成等邊三角形');elseifL(1)==L(2)|L(1)==L(3)|L(2)==L(3)disp('構(gòu)成等腰三角形');elsedisp('構(gòu)成一般三角形');end1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)運行結(jié)果如下:請輸入三角形的三條邊:[112]不能構(gòu)成三角形請輸入三角形的三條邊:[234]構(gòu)成一般三角形請輸入三角形的三條邊:[333]構(gòu)成等邊三角形1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)2.switch語句多分支if語句用于實現(xiàn)多分支選擇結(jié)構(gòu)。if-else-end語句所對應(yīng)的是多重判斷選擇,而有時也會遇到多分支判斷選擇的問題。MATLAB語言為解決多分支判斷選擇提供了switch-case語句。switch語句根據(jù)表達(dá)式的取值不同,分別執(zhí)行不同的語句,其語句格式為:1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)switch表達(dá)式case表達(dá)式1語句組1case表達(dá)式2語句組2...case表達(dá)式m語句組motherwise語句組nend與其他的程序設(shè)計語言的switch-case語句不同的是,在MATLAB語言中,當(dāng)其中一個case語句后的條件為真時,switch-case語句不對其后的case語句進(jìn)行判斷,也就是說在MATLAB語言中,即使有多條case判斷語句為真,也只執(zhí)行所遇到的第一條為真的語句。這樣就不必像C語言那樣,在每條case語句后加上break語句以防止繼續(xù)執(zhí)行后面為真的case條件語句。1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)【例1-5】利用switch語句實現(xiàn)簡單計算器功能,即輸入兩個操作數(shù)和運算符號,即可進(jìn)行加減乘數(shù)運算。程序命令如下:1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)N=input('請輸入操作數(shù):');S=input('請輸入運算符號:','s');switchScase'+'Y=N(1)+N(2)case'-'Y=N(1)-N(2)case'*'Y=N(1)*N(2)case'/'Y=N(1)/N(2)otherwisedisp('erroroperator')end運行結(jié)果如下:請輸入操作數(shù):[823]請輸入運算符號:-Y=-151.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)3.try語句錯誤檢查語句,當(dāng)程序運行在復(fù)雜的環(huán)境下時,一些語句可能會產(chǎn)生錯誤,導(dǎo)致程序停止執(zhí)行,這時我們需要將這些語句放在try...catch結(jié)構(gòu)中,其一般形式為:try程序段A;catch程序段B;end1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)逐行運行程序段A,一旦運行出錯,就跳過程序段A后面的語句,改為執(zhí)行程序段B,此時命令行并不顯示出錯信息,若程序段A運行完沒有出現(xiàn)錯誤,則跳過程序段B,繼續(xù)執(zhí)行后面的程序。該語句結(jié)構(gòu)也可以只包含try語句,不含catch語句,其一般形式為:try程序段A;end逐行運行程序段A,若運行出錯,就跳過程序段A后面的語句,繼續(xù)執(zhí)行后面的程序。1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.2分支結(jié)構(gòu)【例1-6】矩陣的乘法運算。程序命令如下:A=[1,2,3;4,5,6];B=[7,8,9;10,11,12];tryC=A*BcatchC=A.*Bends=lasterror;disp(s.message)%顯示出錯原因運行結(jié)果為:C=71627405572ans=Errorusing==>mtimesInnermatrixdimensionsmustagree.1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.3循環(huán)結(jié)構(gòu)程序中總會有對某些量的迭代運算,或?qū)δ硞€過程的重復(fù)處理,這就需要使用循環(huán)來簡化程序。下面分別介紹for循環(huán)和while循環(huán)。1.for語句for語句用于循環(huán)次數(shù)確定的循環(huán),調(diào)用格式為:for循環(huán)變量=表達(dá)式1:表達(dá)式2:表達(dá)式3循環(huán)體語句end其中,表達(dá)式1的值為循環(huán)變量的初值,表達(dá)式2的值為步長,表達(dá)式3的值為循環(huán)變量的終值,當(dāng)步長為1時,表達(dá)式2可以忽略。1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.3循環(huán)結(jié)構(gòu)【例1-7】sum=1-2+3-4+5-6……+99-100,利用for語句求sum的值。程序命令如下:k=1;sum=0;fori=1:1:100sum=sum+k*i;k=-1*k;endfprintf('sum的值為%d\n',sum);運行結(jié)果如下:sum的值為-501.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.3循環(huán)結(jié)構(gòu)【例1-8】輸入5個整數(shù),統(tǒng)計并輸出其中正數(shù)、負(fù)數(shù)和零的個數(shù)。程序命令如下:a1=0;b1=0;c1=0;fori=1:5fprintf('請輸入第%d個數(shù):',i);x=input('');ifx>0a1=a1+1;elseifx<0b1=b1+1;elsec1=c1+1;endendfprintf('共有正整數(shù)%d個、負(fù)數(shù)%d個、零%d個',a1,b1,c1);1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.3循環(huán)結(jié)構(gòu)運行結(jié)果如下:請輸入第1個數(shù):1請輸入第2個數(shù):0請輸入第3個數(shù):0請輸入第4個數(shù):-1請輸入第5個數(shù):5共有正整數(shù)2個、負(fù)數(shù)1個、零2個1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.3循環(huán)結(jié)構(gòu)【例1-9】利用for語句嵌套實現(xiàn)輸出乘法口訣表。程序命令如下:fori=1:10forj=1:10result=i*j;fprintf("%d*%d=%-3d",i,j,result);%-3d表示左對齊,占3位endfprintf("\n");%每一行后換行end1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.3循環(huán)結(jié)構(gòu)運行結(jié)果如圖1-4所示。1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.3循環(huán)結(jié)構(gòu)2.while語句while語句是依條件結(jié)束的語句。調(diào)用格式為:while(表達(dá)式)循環(huán)體語句end其中,循環(huán)判斷語句為某種形式的邏輯判斷表達(dá)式,當(dāng)該表達(dá)式的值為真時,執(zhí)行循環(huán)體內(nèi)的語句,直到表達(dá)式的邏輯值為假時,退出循環(huán)。在while語句中必須有可以修改循環(huán)控制變量的命令,否則該循環(huán)語句將陷入死循環(huán)中?;蛘哐h(huán)語句中有能控制退出循環(huán)的命令,例如break語句和continue命令。當(dāng)程序流程運行至該命令時,將退出當(dāng)前循環(huán),執(zhí)行循環(huán)后的其他語句。1.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.3循環(huán)結(jié)構(gòu)【例1-10】用while語句求所有的水仙花數(shù)。水仙花數(shù)是一個3位數(shù)的自然數(shù),該數(shù)各位數(shù)的立方和等于該數(shù)本身。程序命令如下:k=100;while(k<=999)x=fix(k/100);y=rem(fix(k/10),10);z=rem(k,10);ifk==x*x*x+y*y*y+z*z*zfprintf('%d\n',k);endk=k+1;end運行結(jié)果如下:1533703714071.4MATLAB程序設(shè)計結(jié)構(gòu)1.4.3循環(huán)結(jié)構(gòu)3.continue、break和return⑴continue:用于循環(huán)控制。當(dāng)不想執(zhí)行循環(huán)體的全部語句,只想在做完某一步后直接返回到循環(huán)頭時,在此處插入continue。continue后面的語句將被跳過。⑵break:用在for或while循環(huán)中,立即結(jié)束本層循環(huán),而繼續(xù)執(zhí)行循環(huán)之后的下一條語句。嵌套語句中,它只跳出所在層的循環(huán)。⑶return:終止當(dāng)前命令的繼續(xù)執(zhí)行,控制權(quán)交給調(diào)用函數(shù)或鍵盤。本章小結(jié)本章先介紹了MATLAB軟件概述,進(jìn)而介紹了MATLAB軟件的工作環(huán)境和函數(shù)類型,最后介紹了三大程序設(shè)計結(jié)構(gòu)。本章是全書的基礎(chǔ),重點做到熟悉MATLAB應(yīng)用環(huán)境平臺和基本操作,為后面核心技術(shù)與工程應(yīng)用的學(xué)習(xí)打下良好的基礎(chǔ)。習(xí)題1-1輸??個整數(shù),若為奇數(shù)則輸出其平方根,否則輸出其立方根。1-2輸入5個數(shù),求其中最大數(shù)和最小數(shù),分別用循環(huán)結(jié)構(gòu)和調(diào)用max函數(shù)、min函數(shù)來實現(xiàn)。1-3計算1到999之間的所有偶數(shù)之和。1-4計算分段函數(shù)1-5編寫M文件,等待鍵盤輸入,輸入密碼20240101,密碼正確,顯示輸入密碼

正確,程序結(jié)束;否則提示,重新輸入。1-6有一群雞和兔子,加在一起頭的數(shù)量是66,腳的數(shù)量是220,編寫M文件解

答雞和兔子數(shù)量各是多少?習(xí)題1-7編寫函數(shù)文件,求

,將n作為函數(shù)的輸入?yún)?shù),y作為函數(shù)的輸出參數(shù)。1-8編寫程序,求

得值,其中,數(shù)字a和表達(dá)式中位數(shù)最多項的a個數(shù),由鍵盤輸入第2章MATLAB常用文件操作本章要點

本章主要講解MATLAB常用文件的讀取與寫入,具體包括:Mat文件、Txt文件、Excel文件和圖像文件的讀取與寫入。其中,數(shù)據(jù)輸入是指從磁盤文件或剪貼板中獲取數(shù)據(jù),加載到MATLAB工作空間;數(shù)據(jù)輸出是指將MATLAB工作空間的變量保存到文件中。通過這些功能的講解,讀者可以清晰地掌握各種常見文件的使用方法,并在后續(xù)章節(jié)MATLABAppDesigner設(shè)計中,可以簡便地通過MATLABAppDesigner軟件調(diào)用以上常用文件。本章要點:⑴Mat常用文件操作。⑵Txt文件的讀取與寫入。⑶Excel文件的讀取與寫入。⑷圖像文件的讀寫。學(xué)習(xí)目標(biāo):⑴熟悉Mat文件的寫入與讀取方法。⑵掌握常用文件Txt文件的讀取與寫入方法。⑶熟悉xlsfinfo、xlswrite、xlsread函數(shù)的調(diào)用方法。⑷了解圖像文件的基本分類。⑸熟悉imread、imwrite、imfinfo函數(shù)的調(diào)用方法。2.1Mat常用文件操作MATLAB通過Mat文件這種特殊的數(shù)據(jù)格式文件保存工作空間中的變量。Mat文件是一種雙精度、二進(jìn)制的MATLAB格式文件,擴(kuò)展名為.mat,因此對于.mat文件的操作是必須掌握的。

Mat文件具有可移植性。一臺機(jī)器上生成的Mat文件,在另一臺裝有MATLAB的機(jī)器上可以正確讀取,而且保留不同格式所允許的最高精度和最大數(shù)值范圍,它們也能被MATLAB之外的其他程序(如C或FORTRAN程序)讀寫。2.1.1Mat文件的寫入Mat文件分為兩部分:文件頭部和數(shù)據(jù)。文件頭部主要包括一些描述性文字和相應(yīng)的版本標(biāo)識,數(shù)據(jù)依次按數(shù)據(jù)類型、數(shù)據(jù)長度和數(shù)據(jù)內(nèi)容三部分保存。將數(shù)據(jù)輸出到Mat文件使用save函數(shù),其調(diào)用格式如表2-1所示。2.1Mat常用文件操作2.1.1Mat文件的寫入表2-1

save函數(shù)調(diào)用格式函數(shù)調(diào)用格式函數(shù)格式說明save將工作空間中所有變量保存到當(dāng)前目錄下的文件:MATLAB.matsavefilename將工作空間中所有變量保存到當(dāng)前目錄下的文件:filename.matsavefilenamex1x2...xn將變量x1,x2,...,xn保存到當(dāng)前目錄下的文件:filename.matsave('filename','-struct','s')保存結(jié)構(gòu)體s的所有字段為文件filename.mat里的獨立變量save('filename','-struct','s','f1','f2',...)保存結(jié)構(gòu)體s的指定字段為文件filename.mat里的獨立變量savefilenames*將工作空間中s開頭的變量全部保存到filename.mat中;*為通配符save('filename',...)save指令的函數(shù)格式用法save(...,'format')按照不同的輸出格式format來保存數(shù)據(jù)2.1Mat常用文件操作2.1.1Mat文件的寫入MATLAB有很多不同的保存數(shù)據(jù)的方式,下面分別介紹。⑴首先產(chǎn)生數(shù)據(jù),如圖2-1(a)所示,程序命令如下:>>clc,clear,closeallwarningoffx=randn(100,1);⑵進(jìn)行數(shù)據(jù)保存,如圖2-1(b)所示,程序命令如下:savex.matx⑶也可以將x這個數(shù)據(jù)保存到y(tǒng).mat中,如圖2-1(c)所示,程序命令如下:savey.matx(a)產(chǎn)生數(shù)據(jù)(b)數(shù)據(jù)保存1(c)數(shù)據(jù)保存2圖2-1

.mat文件保存2.1Mat常用文件操作2.1.1Mat文件的寫入

MATLAB工作區(qū)存儲著不同名稱對應(yīng)的數(shù)據(jù)包,用戶可以右擊選擇【另存為】保存,具體如圖2-2所示。

MATLAB默認(rèn)的數(shù)據(jù)保存文件名為MATLAB.m,用戶也可進(jìn)行修改,例如修改為lk,單擊【保存】按鈕,在工作文件夾路徑下可得到lk.mat文件,如圖2-3所示。圖2-2

另存數(shù)據(jù)圖2-3

lk.mat文件2.1Mat常用文件操作2.1.1Mat文件的寫入對于工作區(qū)的數(shù)據(jù),也可以選擇多個數(shù)據(jù)包,一起打包保存,如圖2-4所示。圖2-4多個數(shù)據(jù)打包保存2.1Mat常用文件操作2.1.2Mat文件的讀取從Mat文件中加載數(shù)據(jù)到工作空間使用load函數(shù),如表2-2所示。表2-2

load函數(shù)調(diào)用格式函數(shù)調(diào)用格式函數(shù)格式說明load加載MATLAB.mat中所有變量,如果加載前已存在同名變量,則覆蓋loadfilename加載filename.mat中所有變量,如果加載前已存在同名變量,則覆蓋load('filename','X','Y','Z')加載filename.mat中變量X、Y、Z,如果加載前已存在同名變量,則覆蓋loadfilenames*加載filename.mat中以s開頭的變量,如果加載前已存在同名變量,則覆蓋load('-mat','filename')將文件當(dāng)作Mat文件加載;如果不是Mat文件,返回錯誤load('-ascii','filename')將文件當(dāng)作ASCII文件加載;如果不是數(shù)字文件,返回錯誤S=load(...)load指令的函數(shù)格式用法注意:除非必須與非MATLAB程序進(jìn)行數(shù)據(jù)交換,存儲和加載文件時,都應(yīng)用MATLAB文件格式。這種格式高效且移植性強(qiáng),保存了所有MATLAB數(shù)據(jù)類型的細(xì)節(jié)。2.1Mat常用文件操作2.1.2Mat文件的讀取下面介紹一個數(shù)據(jù)加載的過程。首先進(jìn)行MATLAB工作區(qū)和命令窗口的清理工作。clc,clear,closeallwarningofffeaturejitoff加載數(shù)據(jù)文件有以下三種方法:⑴采用load函數(shù)進(jìn)行加載:load('x.mat')⑵也可輸入如下命令:loadx.mat⑶用戶也可以雙擊選擇的數(shù)據(jù)文件,則MATLAB命令窗口自動生成代碼:load('data.mat')

另外,利用load函數(shù)加載數(shù)據(jù),速度較快,可以節(jié)約程序執(zhí)行時間。load函數(shù)有助于提高系統(tǒng)執(zhí)行效率,節(jié)約CPU損耗時間,特別是在循環(huán)讀取圖像數(shù)據(jù)時,可以事先將許多圖像數(shù)據(jù)保存在一個cell細(xì)胞體中。2.2Txt文件的讀取與寫入

Txt文件也是我們常用的文本文件,文本文件的一個好處是可以清楚字符串的格式,并且Txt文件的保存數(shù)據(jù)和讀取數(shù)據(jù)的快捷性受到業(yè)界的支持,本節(jié)著重講解Txt文件的讀取與寫入操作方法。2.2Txt文件的讀取與寫入2.2.1Txt文件的打開

MATLAB對于這種常見的Txt文本提供了讀取功能。在當(dāng)前文件夾右擊,單擊【打開】選項,如圖2-5所示,即可彈出類似于MATLAB腳本文件的文件窗口,如圖2-6所示,腳本文件內(nèi)容不會出現(xiàn)亂碼,MATLAB軟件完全兼容Txt文件。也可以在當(dāng)前文件夾右擊,單擊【在MATLAB外部打開】選項,則采用文本文件查看模式,如圖2-7所示。圖2-5

圖2-6

圖2-7

2.2Txt文件的讀取與寫入2.2.2Txt文件數(shù)據(jù)的導(dǎo)入

Txt文件數(shù)據(jù)的導(dǎo)入,首先按照Txt文件的打開方式,采用MATLAB讀取該文本數(shù)據(jù)。選擇【導(dǎo)入數(shù)據(jù)】選項,如圖2-8所示,即可生成如圖2-9所示內(nèi)容,可發(fā)現(xiàn)導(dǎo)入的數(shù)據(jù)自動以VarName1命名,以此類推為VarName2、VarName3...等。圖2-8

導(dǎo)入數(shù)據(jù)界面圖2-9

外部導(dǎo)入2.2Txt文件的讀取與寫入2.2.2Txt文件數(shù)據(jù)的導(dǎo)入

在如圖2-9所示界面中選擇【導(dǎo)入所選內(nèi)容】,單擊【生成腳本】命令,得到相應(yīng)的腳本文件如圖2-10所示。圖2-10腳本文件2.2Txt文件的讀取與寫入2.2.2Txt文件數(shù)據(jù)的導(dǎo)入

【例2-1】試?yán)胠oad和save函數(shù),讀寫Txt文件中的數(shù)據(jù)。若文件matrix.txt中存儲了一個如圖0-11所示的矩陣,將該數(shù)據(jù)提取出來,存到變量b中:b=load('matrix.txt')b=

1000

0100

0010

0001圖1-11

matrix文本文件將生成的變量b存入b.txt中:saveb.txtb-asciitypeb.txt1.0000000e+000.0000000e+000.0000000e+000.0000000e+000.0000000e+001.0000000e+000.0000000e+000.0000000e+000.0000000e+000.0000000e+001.0000000e+000.0000000e+000.0000000e+000.0000000e+000.0000000e+001.0000000e+002.3Excel文件的讀取與寫入

Excel是較為常見的存儲和處理數(shù)據(jù)的軟件,雖然其本身具有強(qiáng)大的數(shù)據(jù)處理能力,但是在大數(shù)據(jù)背景下,Excel已經(jīng)不能很好地勝任目前的數(shù)據(jù)計算任務(wù),這時就需要與MATLAB等軟件相結(jié)合進(jìn)行數(shù)據(jù)處理,然后將計算結(jié)果寫入到Excel中。因此,Excel文件與MATLAB軟件之間數(shù)據(jù)的傳遞方法就顯得尤為重要。本節(jié)講解Excel文件的讀取與寫入操作方法。

Excel文件和Txt文件一樣,可以很好地保存數(shù)據(jù)并顯示數(shù)據(jù),實現(xiàn)Excel數(shù)據(jù)的傳輸和MATLAB的對接,將會對數(shù)據(jù)處理提供便利。讀寫Excel文件的相關(guān)函數(shù)如表2-3所示。表2-3

讀寫Excel文件的相關(guān)函數(shù)函數(shù)說明xlsfinfo檢查文件是否包含Excel表格xlswrite寫Excel文件xlsread讀Excel文件2.3Excel文件的讀取與寫入

MATLAB數(shù)據(jù)導(dǎo)入功能是很強(qiáng)大的,其具有很強(qiáng)的兼容性,能夠?qū)缀跛械臄?shù)據(jù)類型進(jìn)行導(dǎo)入操作。Excel數(shù)據(jù)的讀取主要講解xlsfinfo函數(shù)和xlsread函數(shù)。2.3.1Excel數(shù)據(jù)的讀取1.xlsfinfo函數(shù)

xlsfinfo函數(shù)調(diào)用格式為:

type=xlsfinfo('filename')或xlsfinfofilename

如果指定文件filename能被xlsread讀取,則返回字符串'MicrosoftExcelSpreadsheet';否則為空。

[type,sheets]=xlsfinfo('filename')

如果指定文件filename能被xlsread讀取,則返回type='MicrosoftExcelSpreadsheet';否則返回為空。Sheets為字符串單元數(shù)組名,它包含文件中每個工作表的名稱,如sheet1、sheet2等。2.3Excel文件的讀取與寫入

【例2-2】利用上述xlsfinfo三種調(diào)用格式,調(diào)用data.xlsx文件和no.docx文件,并觀察返回內(nèi)容。2.3.1Excel數(shù)據(jù)的讀取程序輸入命令如下:>>type=xlsfinfo('data.xlsx')

type='MicrosoftExcelSpreadsheet'

xlsfinfo'data.xlsx'

ans='MicrosoftExcelSpreadsheet'

[type,sheets]=xlsfinfo('data.xlsx')

type='MicrosoftExcelSpreadsheet'sheets=1×2cell數(shù)組{'Sheet1'}{'Sheet2'}

type=xlsfinfo('no.docx')

type=

空的0×0char數(shù)組2.3Excel文件的讀取與寫入2.3.1Excel數(shù)據(jù)的讀取2.xread函數(shù)xread調(diào)用格式為:num=xlsread('filename')從Excel文件filename的第1個工作頁中讀取所有的數(shù)值到double型數(shù)組num中。它忽略頭行、頭列、尾行和尾列的所有單元為文本的行列,其他單元中的文本全部讀取為NaN。【例2-3】試?yán)脁lsread函數(shù)讀取data.xlsx文件。如圖2-12所示為data.xlsx文件中的數(shù)據(jù)。圖2-12

Excel文件中的數(shù)據(jù)2.3Excel文件的讀取與寫入2.3.1Excel數(shù)據(jù)的讀取xread調(diào)用格式為:num=xlsread('filename')從Excel文件filename的第1個工作頁中讀取所有的數(shù)值到double型數(shù)組num中。它忽略頭行、頭列、尾行和尾列的所有單元為文本的行列,其他單元中的文本全部讀取為NaN?!纠?-3】試?yán)脁lsread函數(shù)讀取data.xlsx文件。如圖2-12所示為data.xlsx文件中的數(shù)據(jù)。圖2-12

Excel文件中的數(shù)據(jù)2.3Excel文件的讀取與寫入2.3.1Excel數(shù)據(jù)的讀取程序命令如下:num=xlsread('data.xlsx')運行結(jié)果如下:num=1NaN3488452NaN4816123NaN7128194NaN341710265NaN132212566NaN162714407NaN78716478NaN223718669NaN2542206110NaN2847226811NaN3152247512NaN3413268213NaN3762288914NaN4067302315NaN4372322416NaN9077341102.3Excel文件的讀取與寫入2.3.1Excel數(shù)據(jù)的讀取除上述調(diào)用方法外,xlsread函數(shù)還有其他的幾種常見調(diào)用方法:⑴格式:num=xlsread('filename',-1)說明:手動框選要讀取的數(shù)據(jù)塊,返回到矩陣num中。注意:當(dāng)輸入上述程序命令后,自動跳轉(zhuǎn)到Excel表格中,然后手動框選數(shù)據(jù)后,單擊【確定】按鈕即可。⑵格式:num=xlsread('filename',sheet)

說明:讀filename中指定頁的數(shù)據(jù)到矩陣N中。

注意:sheet指的是Excel中的第幾個工作表,寫數(shù)字1或2或3等即可。

⑶格式:num=xlsread('filename','range')

說明:讀filename中指定頁、指定區(qū)域的數(shù)據(jù)到矩陣N中。

注意:range指的Excel表格中的單元格范圍,例如:A2:G2或者B2:G6。

⑷格式:[num,txt]=xlsread('filename')

說明:讀filename中的數(shù)據(jù),返回數(shù)值數(shù)據(jù)到double型數(shù)組num中,文本數(shù)據(jù)到字符串單元數(shù)組txt中。txt中對應(yīng)數(shù)值數(shù)據(jù)的位置為空字符串。2.3Excel文件的讀取與寫入2.3.1Excel數(shù)據(jù)的讀取例如:對于圖2-12所示文件進(jìn)行調(diào)用。程序命令如下:[num,txt]=xlsread('data.xlsx')運行結(jié)果如下:num=1NaN3488452NaN4816123NaN712819

15NaN4372322416NaN907734110txt=17×6cell數(shù)組

列1至6{'序號'}{'銷售團(tuán)隊'}{'第一季度'}{'第二季度'}

{'第三季度'}{'第四季度'}{0×0char}{'猛虎隊'}{0×0char}

{0×0char}

{0×0char}

{0×0char}{0×0char}{'夢之隊'}{0×0char}

{0×0char}

{0×0char}

{0×0char}{0×0char}{'GOGOGO隊'}{0×0char}{0×0char}

{0×0char}

{0×0char}{0×0char}{'Lucky隊'}{0×0char}{0×0char}

{0×0char}

{0×0char}2.3Excel文件的讀取與寫入2.3.1Excel數(shù)據(jù)的讀?、筛袷剑篬num,txt,raw]=xlsread('filename')說明:讀filename中的數(shù)據(jù),返回數(shù)值數(shù)據(jù)到double型數(shù)組num中,非數(shù)值的文本數(shù)據(jù)到字符串單元數(shù)組txt中,未處理的單元數(shù)據(jù)到字符串單元數(shù)組raw中。raw中包含數(shù)值數(shù)據(jù)和文本數(shù)據(jù)。2.3Excel文件的讀取與寫入2.3.1Excel數(shù)據(jù)的讀取例如對于圖2-12所示文件進(jìn)行調(diào)用。程序命令如下:

[num,txt,raw]=xlsread('data.xlsx')運行結(jié)果如下:raw=17×6cell數(shù)組

{'序號'}{'銷售團(tuán)隊'}{'第一季度'}{'第二季度'}{'第三季度'}{'第四季度'}{[1]}{'猛虎隊'}{[34]}{[88]}{[4]}{[5]}{[2]}{'夢之隊'}{[4]}{[81]}{[6]}{[12]}{[3]}{'GOGOGO隊'}{[7]}{[12]}{[8]}{[19]}{[4]}{'Dream隊'}{[34]}{[17]}{[10]}{[26]}{[5]}{'多樂隊'}{[13]}{[22]}{[12]}{[56]}{[6]}{'野狼隊'}{[16]}{[27]}{[14]}{[40]}{[7]}{'鐵娘子隊'}{[78]}{[7]}{[16]}{[47]}{[8]}{'牛氣沖天隊'}{[22]}{[37]}{[18]}{[66]}{[9]}{'虎虎生威隊'}{[25]}{[42]}{[20]}{[61]}{[10]}{'豬豬俠隊'}{[28]}{[47]}{[22]}{[68]}{[11]}{'GPU隊'}{[31]}{[52]}{[24]}{[75]}{[12]}{'攀攀隊'}{[34]}{[13]}{[26]}{[82]}{[13]}{'搖擺隊'}{[37]}{[62]}{[28]}{[89]}{[14]}{'心理師隊'}{[40]}{[67]}{[30]}{[23]}{[15]}{'戰(zhàn)神隊'}{[43]}{[72]}{[32]}{[24]}{[16]}{'Lucky隊'}{[90]}{[77]}{[34]}{[110]}2.3Excel文件的讀取與寫入2.3.2Excel數(shù)據(jù)的寫入

MATLAB提供了Excel讀取功能,同樣也有Excel寫入數(shù)據(jù)能力。MATLAB提供xlswrite函數(shù)供用戶調(diào)用,其調(diào)用格式為:

xlswrite('filename',M)

將矩陣或字符串單元數(shù)組M寫入Excel文件filename中。例如,輸入程序命令如下:

xlswrite('number.xlsx',[123;456])

程序運行結(jié)果如圖2-13所示,number.xlsx文件寫入了命令中的數(shù)據(jù)。圖2-13

寫Excel文件2.3Excel文件的讀取與寫入2.3.2Excel數(shù)據(jù)的寫入

觀察上述方法,只能將數(shù)據(jù)寫入Excel文件的默認(rèn)位置,當(dāng)用戶想將數(shù)據(jù)寫入指定的sheet中,其調(diào)用格式為:

xlswrite('filename',M,sheet)

其中,sheet可為一個double型的正整數(shù),表示工作頁序號;sheet也可以為一個帶引號的字符串,表示工作頁的名稱。

注意:若sheet表示的工作頁不存在,將新建一個工作頁。此時MATLAB或顯示警告信息:

Warning:Addedspecifiedwordsheet.2.3Excel文件的讀取與寫入2.3.2Excel數(shù)據(jù)的寫入【例2-4】請利用xlswrite函數(shù),將數(shù)組M=[123;456;789]寫入example.xlsx文件中名為“矩陣”的工作表中。輸入程序命令如下:xlswrite('example.xlsx',[123;456;789],'矩陣')example.xlsx文件在程序運行前如圖2-14所示,程序運行后如圖2-15所示。圖2-14

Excel文件原數(shù)據(jù)圖2-15寫入Excel數(shù)據(jù)后2.3Excel文件的讀取與寫入2.3.2Excel數(shù)據(jù)的寫入如果在指定sheet工作表中的指定單元格寫入內(nèi)容,其調(diào)用格式為:xlswrite('filename',M,sheet,'range')其中,sheet默認(rèn)將M寫入第1個工作表中。range指定單元格范圍,即左上角單元格名稱和右下角單元格名稱,如:D2:F4。range指定的矩形范圍大小應(yīng)該等于M的尺寸大小。例如:xlswrite('apple.xlsx',[123;456;789],3,'D2:F4')產(chǎn)生的數(shù)據(jù)如圖2-16所示。圖2-16

在指定位置寫入數(shù)據(jù)有時需要在完成寫操作后,返回完成狀態(tài)。寫操作成功時status=1,否則status=0,其調(diào)用格式為:status=xlswrite('filename',...)返回寫操作的完成狀態(tài)和寫操作過程中產(chǎn)生的警告或錯誤信息。其調(diào)用格式為:[status,message]=xlswrite('filename',...)2.3Excel文件的讀取與寫入2.3.2Excel數(shù)據(jù)的寫入【例2-5】當(dāng)前目錄下有一個Excel文件score.xlsx,如圖2-17所示。圖2-17

score.xlsx的數(shù)據(jù)信息要求實現(xiàn)以下功能:⑴利用xlswrite函數(shù),添加李某成績:姓名:李星星;學(xué)號:6;測試成績:80;期中成績:90;期末成績:98⑵命令行輸入學(xué)生序號或姓名,查詢學(xué)生全部成績,當(dāng)輸入quit時退出循環(huán)。2.3Excel文件的讀取與寫入2.3.2Excel數(shù)據(jù)的寫入【解析】問題1可以直接采用xlswrite函數(shù)解決問題,程序命令如下:s={'李星星','6','80','90','98'};xlswrite('score.xlsx',s,1,'A7:E7')運行結(jié)果如圖2-18所示。圖2-18

寫入數(shù)據(jù)到score.xlsx2.3Excel文件的讀取與寫入2.3.2Excel數(shù)據(jù)的寫入問題2采用input函數(shù)獲取用戶輸入,用xlsread函數(shù)將相關(guān)學(xué)生信息讀取出來。while1

str=input('\n請輸入學(xué)生序號或姓名:','s');

ifisequal(str,'quit')%如果輸入quit時推出循環(huán)

break

end

str2=str2num(str);%將輸入關(guān)鍵字轉(zhuǎn)化為數(shù)值

[numtxt]=xlsread('score.xlsx');%讀取Excel文件

ifisempty(str2)%如果輸入的關(guān)鍵字是姓名

n=find(strcmp(txt(2:end,1),{str}));%找出第幾個學(xué)生

else

n=str2;%若為學(xué)號,找出第幾個學(xué)生

end

fprintf(1,'姓名:%s序號:%d測試成績:%d期中成績:%d期末成績:%d\n',txt{n+1},num(n,:));end2.3Excel文件的讀取與寫入2.3.2Excel數(shù)據(jù)的寫入運行結(jié)果如下:請輸入學(xué)生序號或姓名:3姓名:劉星星序號:3測試成績:90期中成績:95期末成績:98請輸入學(xué)生序號或姓名:王虎姓名:王虎序號:4測試成績:80期中成績:85期末成績:75請輸入學(xué)生序號或姓名:quit>>2.4圖像文件的讀寫MATLAB具有強(qiáng)大的圖像處理功能,并且MATLAB圖像處理工具箱繼承了很多圖像處理的算法,為用戶提供了很多便利。在MATLAB中,要想對一幅圖像或者文件進(jìn)行處理,首要步驟就是對圖像或者文件進(jìn)行讀取,然后進(jìn)行處理,最后保存處理后的圖像。其中,MATLAB讀寫圖像文件的函數(shù)如表2-4所示。表2-4

讀寫圖像文件的函數(shù)函數(shù)調(diào)用格式函數(shù)說明imreadA=imread(filename,fmt)[X,map]=imread(filename,fmt)[...]=imread(filename)讀圖像文件filename。如果文件不在當(dāng)前目錄,filename中應(yīng)包含文件路徑。fmt為圖像文件格式,如果默認(rèn),MATLAB會根據(jù)后綴名識別圖像格式imwriteimwrite(A,filename,fmt)imwrite(X,map,filename,fmt)imwrite(...,filename)以格式fmt寫圖像數(shù)據(jù)A到圖像文件filename,A可為m×n(灰度圖像)或m×n×3(彩色圖像)數(shù)組,fmt默認(rèn),格式依據(jù)filename后綴名識別imfinfoinfo=imfinfo(filename,fmt)info=imfinfo(filename)返回圖像文件的信息2.4圖像文件的讀寫在用MATLAB查詢圖像信息之前,要對常見的圖像格式有一定的了解,常見的圖像文件格式如表2-5所示。2.4.1圖像文件的查詢表2-5

常見的圖像格式格式格式說明

格式格式說明'bmp'包括1、8和24位不壓縮圖像

'jpg'or'jpeg'8、12和16位基線的JPEG圖像'gif'8位圖像

在圖像處理中,可以利用imfinfo函數(shù)來獲取一張圖片的具體信息,具體調(diào)用方法如表2-4所示。所獲取圖像的具體信息包括:圖片的格式、尺寸、顏色數(shù)量、修改時間等等。其中,函數(shù)fmt對應(yīng)于所有圖像處理工具箱所支持的圖像文件格式。由此函數(shù)獲取的圖像信息主要有:filename(文件名)、fileModDate(最近修改時間)、fileSize(文件大?。?、format(文件格式)、formatVersion(文件格式的版本號)、width(圖像的寬度)、height(圖像高度)、bitDepth(每個像素的位數(shù))、colorType:truecolor(圖像類型)等。2.4圖像文件的讀寫【例2-6】利用imfinfo函數(shù)獲取圖像信息示例。2.4.1圖像文件的查詢程序命令如下:imfinfo('MATLAB.jpg')ans=Filename:'D:\book\MATLAB.jpg'FileModDate:'25-Jan-202212:38:10'FileSize:10810Format:'jpg'FormatVersion:''Width:373Height:233BitDepth:24ColorType:'truecolor'FormatSignature:''NumberOfSamples:3CodingMethod:'Huffman'CodingProcess:'Sequential'Comment:{}2.4圖像文件的讀寫MATLAB提供了非常重要的用于圖像文件讀取的指令函數(shù)imread,其常見調(diào)用格式如表2-4所示。imread讀取圖像的RGB值并存儲到一個M×N×3的整數(shù)矩陣中,元素值范圍為[0,255]。M×N×3的整數(shù)矩陣可以想象成3個重疊在一起的顏色模板,每個模板上有M×N個點。圖像的像素大小為M×N,每個像素點對應(yīng)有3個在[0,255]范圍內(nèi)的值,分別表示該點的R、G、B值。2.4.2圖像文件的讀取2.4圖像文件的讀寫【例2-7】利用imread函數(shù)讀取圖像示例。2.4.2圖像文件的讀取程序命令如下:closeall;clearall;clc;I1=imread('girl.png');I2=imread('cat.jpg');I3=imread('D:\sunflower.jpg');set(0,'defaultFigurePosition',[100,100,1000,500]);%修改圖像位置的默認(rèn)設(shè)置set(0,'defaultFigureColor',[111]);%修改圖像背景顏色的設(shè)置figure;subplot(1,3,1),imshow(I1);title('顯示灰度圖像');subplot(1,3,2),imshow(I2);title('顯示RGB圖像');subplot(1,3,3),imshow(I3);title('顯示非當(dāng)前路徑下的圖像');2.4圖像文件的讀寫運行結(jié)果如圖2-19所示。2.4.2圖像文件的讀取圖2-19

圖像的讀取2.4圖像文件的讀寫將圖片寫入坐標(biāo)軸,可使用imshow或image函數(shù)。imshow或image函數(shù)都會產(chǎn)生一個圖像對象,它們的區(qū)別如下:

⑴imshow的兩種用法imshow(filename):將指定的圖片讀入坐標(biāo)軸內(nèi);imshow(Data):將顏色矩陣Data映射到坐標(biāo)軸內(nèi)。若當(dāng)前窗口存在坐標(biāo)軸,imshow會將圖像顯示在當(dāng)前坐標(biāo)軸內(nèi);若當(dāng)前窗口不存在坐標(biāo)軸,imshow會產(chǎn)生一個隱藏的坐標(biāo)軸,并將圖像顯示其中。2.4.2圖像文件的讀?、苅mage函數(shù)用法,例如,輸入程序命令如下:colorData=imread(filename);%獲取圖像數(shù)據(jù)image(colorData);%將圖像數(shù)據(jù)鋪滿坐標(biāo)軸⑶imshow(filename)等同于:colorData=imread(filename);%獲取圖像數(shù)據(jù)imshow(colorData);%將圖像數(shù)據(jù)等比例縮放,顯示到坐標(biāo)軸2.4圖像文件的讀寫⑷imshow不會擴(kuò)展圖像數(shù)據(jù),即不會拉伸圖像使其鋪滿坐標(biāo)軸,而是改變坐標(biāo)軸寬高比使其適應(yīng)圖像數(shù)據(jù);image不會改變坐標(biāo)軸的大小尺寸,而是擴(kuò)展填充圖像矩陣,使其鋪滿坐標(biāo)軸區(qū)域。為避免圖片失真,一般用imshow比較多。2.4.2圖像文件的讀取如果要將圖像數(shù)據(jù)寫到最標(biāo)軸內(nèi),可使用image函數(shù),調(diào)用格式為:image(

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論