




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
MATLAB基礎內容概要一、常量、變量、符號二、MATLAB數據類型三、矩陣基礎四、圖形可視化五、MATLAB編程一、常量、變量、符號【例1】在命令窗口命令提示符“>>”后輸入語句:x=(5*2+1.3-0.8)*10^2/25回車后,語句直接執行返回正確結果x=43.2000,且沒有出現錯誤提示。從【例1】可以看到,這是一個賦值操作,等式右端是一個表達式,在MATLAB中變量x未進行變量聲明(Variabledeclaration)就可以直接使用。MATLAB中變量如何命名,支持的數據類型有哪些,運算符支持哪些,等等,下面將一一解答。1.常量在討論變量前,首先看一下MATLAB的常量。MATLAB中有一類數據,系統內部已賦予了一定值,這類具有固定數據值的變量為常量。表1列出了在MATLAB中的主要常量。一、常量、變量、符號2.變量1)變量命名雖然MATLAB中的變量在使用前不需要聲明指定數據類型,但仍需要遵守如下規定:
變量名必須以字母開頭,和后續的字母、數字或下劃線混合組成;
MATLAB對于大小寫是敏感的,變量名需區分大小寫;
變量名的長度是任意的,但是MATLAB只能識別前63個字符;
變量名盡量不要與已有的函數名、常量名相同;
變量名不可以使用MATLAB中的關鍵詞,如break、case、catch、classdef、continue、else、elseif、end、for、function、global、if、otherwise、parfor、persistent、return、spmd、switch、try、while等。一、常量、變量、符號【例2】試判斷下面這些變量哪些不符合變量的命名規則,并在命令窗口中通過將給變量逐一賦值為100的方式,驗證你的判斷。g56gsignal_noisesignal-noise56ggname@_a22)全局變量和局部變量在MATLAB中變量可分為局部變量與全局變量,其作用域不同。默認狀況下的變量都是局部變量,只在當前的工作空間或者函數體中有效。如果一些變量需要在不同的函數體中同時使用,需要定義為全局變量。其定義格式為:global變量名global變量名1變量名2.......在使用全局變量時應注意,任意一處對于全局變量的改變都會導致其永久地改變。一、常量、變量、符號3.常用符號MATLAB中的常用符號包括數學運算符、標點符號、邏輯運算符和關系運算符,參見表2。這些符號的具體使用方法在此不進行一一介紹,后續的例子會演示具體用法。一、常量、變量、符號表3列出了MATLAB語言中的標點符號及其作用。二、MATLAB數據類型MATLAB的數據類型包括數值型(Numeric)、字符型(Char)、元胞數組或單元型(Cell)、結構體型(Structure)、邏輯型(Logical)、函數句柄型(FunctionHandle)、Java類型(JavaClasses)和用戶類(UserClasses)等共8種,其中數值型又可以細分為8種類型。每種數據類型都是以矩陣或數組的形式出現的,矩陣或數組的維數最小為0
0,沒有上限。下面僅對前面的5個數據類型進行簡要介紹。1.常用基礎數據類型1)數值型MATLAB的數值類型包括有符號和無符號的整數、單精度和雙精度浮點數。(1)整型。MATLAB的整型數據有4種有符號型和4種無符號型。對于整型數據,MATLAB支持1字節、2字節、4字節和8字節的存儲,分別對應8位、16位、32位、64位整數類型。數值范圍允許的情況下,用位數較短的數據類型能節約程序的運行時間和存儲空間。其具體數值范圍及其生成函數參見表4。二、MATLAB數據類型二、MATLAB數據類型【例3】在命令窗口中按所給格式逐條執行如下賦值語句,并通過返回結果體會數據類型定義和轉換的含義。>>x1=int8(11)>>x2=int8(3/5)>>x3=int8(130)>>x4=uint8(130)>>x5=uint64(-1)可以看出整型數據生成函數不僅限定數值的范圍,而且也會將小數按照規則轉換為對應的整數,即表4所列數據生成函數,也是數據類型轉換函數。可以通過函數whos查看各變量占用存儲空間的大小。(2)浮點型。在MATLAB中浮點型變量包括單精度和雙精度兩種類型,存儲分別需要32位和64位。在默認狀態下,MATLAB中輸入的數據均為雙精度浮點型。函數double(single)既是數據類型定義函數,又是數據類型轉換函數。【例4】在命令窗口中按所給格式執行如下賦值語句,并注意觀察返回結果。>>x1=single(32)>>x2=double(3/5)與【例3】中的x2對比,會有什么發現?二、MATLAB數據類型(3)復數。復數由實部和虛部兩部分組成。基本的虛數單位是
1的平方根,在MATLAB中用i或j來表示。2)字符型MATLAB中字符串是指由字符組成的數組,字符在內部是以對應的數值形式存儲的。指定字符型數據,要把字符用單引號括起來。(1)字符串的創建。字符串的創建可以通過直接賦值、已有字符串的連接、其他類型數據類型的轉換三種方式實現,下面通過一維和二維的字符串的創建來具體說明。①一維字符串創建。A.直接賦值。【例5】在命令窗口中命令提示符“>>”后輸入語句:str='test',觀察返回結果。回車后將返回執行結果為:str=test。調用whos命令,返回結果包括str的類型、字符數、所占的存儲空間等信息:Name Size BytesClass Attributesstr1x48char二、MATLAB數據類型B.連接法。通過strcat或“[]”,可以將字符或字符串串連起來形成新的字符串。【例6】分別用如下兩種方法實現較長字符串的生成,注意觀察兩者在實現方法和效果上的區別。>>str='test';>>str1=strcat(str,'num')>>str2=[str,'num']兩個返回結果分別為:str1=testnum,str2=testnum。從本例中可以看出使用strcat連接字符串時會自動刪除字符串后的空格。②二維字符串創建。A.直接賦值。要求每行的字符串的長度相同,若每行字符串長度不同,可在字符串后加空格(空格在MATLAB中也算是字符)補齊長度。二、MATLAB數據類型【例7】在命令窗口中按所給格式執行如下兩條語句,并注意觀察返回結果。>>str1=['test';'ab']>>str2=['test';'ab']注意第二條語句中ab后是2個空格。可通過函數char和strvcat連接已有的字符串。在使用這兩個函數時可以不考慮字符串長度問題,函數會根據每行字符串的長度自動添加空格補齊。【例8】在命令窗口中按所給格式執行如下兩條語句,并注意觀察返回結果。>>str=strvcat('test','aa')>>str=char('test','aa')(2)字符串常用操作。字符串類型的數據在編程中會經常使用。MATLAB針對于字符串提供了豐富的字符串操作函數,參見表5。二、MATLAB數據類型二、MATLAB數據類型3)元胞數組(單元型)元胞數組提供了一種用于種類各異數據的存儲機制。元胞數組中可以包含類型各異、存儲空間占用大小不同的元胞數,比如將一個1
50的字符數組構成的元胞、一個7
13的雙精度數組構成的元胞、一個1
1dunit32數構成的元胞,可以存儲在同一個元胞數組中。通過元胞數組的使用,可以在同一變量中存儲不同數據類型的數據,給代碼的編寫帶來很大便利。(1)元胞數組的創建。①賦值法。通過給單個元胞進行數據賦值的方式,可以創建元胞數組。給元胞進行數據賦值有兩種方式,一種是元胞索引(Cellindexing)賦值,一種是內容索引(Contentindexing)賦值。前者是將元胞下標用“()”括起來,內容用“{}”括起來,后者是下標用“{}”括起來,內容進行MATLAB標準賦值。二、MATLAB數據類型【例9】在命令窗口中按所給格式執行如下語句,并參照返回結果體會元胞數組的創建方法。>>A1(1,1)={[143;058;729]};>>A1(1,2)={'AnneSmith'};>>A1(2,1)={3+7i};>>A1(2,2)={-pi:pi/10:pi}>>A2{1,1}=[143;058;729];>>A2{1,2}='AnneSmith';>>A2{2,1}=3+7i;>>A2{2,2}=-pi:pi/10:pi②函數法。使用函數cell()可以預分配指定大小的空元胞數組,之后在進行具體賦值。x=cell(m,n):生成m
n的元胞數組,m為行數,n為列數。二、MATLAB數據類型(2)元胞數組的訪問。元胞數組的訪問有兩種方式,一種是用內容索引的方式訪問元胞內容,一種是用元胞索引的方式訪問元胞子集。【例10】在完成【例9】基礎上,逐條執行如下語句,并注意觀察返回結果。>>x=A2{1,1}>>x=x+1>>x=A2{1,1}(2,2)>>B=A2(:,1)(3)元胞數組的刪除。元胞數組的刪除包括對其中元胞的刪除,以及元胞數內容的刪除。【例11】在完成【例9】基礎上,逐條執行如下語句,并注意觀察返回結果。>>B=[A2(:,1);A2(2,2)]>>B{2,1}=[]>>B{1,1}(2,:)=[]二、MATLAB數據類型4)結構體型結構體型是帶有域的向量或數組,域是存儲數據的地方,不同的域可以存儲不同類型的數據。結構體類型數據通過域操作,實現對結構體中的不同數據進行賦值、操作。(1)結構體的創建。①直接賦值。通過命令對結構體中的不同的域進行賦值,結構體與域之間用點號“.”連接。這種方法每次只能完成對一個域的操作。【例12】在命令窗口中按所給格式逐條執行如下語句,并注意觀察返回結果。>>S='海青';>>Stu.num=1>>Stu.grade=[899162]>>Stu(2).name='青海';>>Stu.num=2>>Stu(2).grade=[989991]二、MATLAB數據類型②函數法。用函數struct可以預先分配一個結構陣列,其基本形式為。s=struct(‘fied1’,values1,’field2’,values2,....)輸入參數為域名和對應的值。參數表內的所有域的值要么同為單個數值,要么同為元胞數組。【例13】在命令窗口中按所給格式執行如下語句,并注意觀察返回結果。>>Stu=struct('name',{'海青','海青'},'num',{1,2},'grade',{[899162],[989991]})(2)結構體型常用操作。①結構體型中元素的訪問。【例14】在命令窗口中按所給格式執行如下語句,實現對【例12】中結構體型Stu中不同域元素的訪問。>>Stu(1)>>Stu(:,1)>>S二、MATLAB數據類型②結構體數據域的增加。通過給結構體數組中一個結構體數據增添域,就可以實現結構體數組中每個結構體數據的域添加。例如執行賦值語句Stu(2).weight=63,就使每個結構體數據都增加了體重這個域。③結構體域的刪除。使用函數rmfield可以刪除結構體數組中每個結構體數據的同一個域,基本形式為s=rmfield(ss,{‘field1’,’field2’,...})關于結構體型的更多知識,請參考Help文件中DataTypes內標題為Structures的相關文件。5)邏輯型MATLAB中的邏輯型數據,僅僅包括兩個值“0”和“1”,分別代表邏輯“假”和“真”。某些MATLAB函數和運算符返回邏輯真與假,以表示某一條件是否滿足。邏輯型主要用于關系和邏輯運算。二、MATLAB數據類型2.數據類型間的轉換數據類型轉換主要包括數值類型之間的轉換、數值與字符(字符串)之間的相互類型轉換和其他類型轉換三大類,而其他轉換通常是指轉換的目標數據類型是結構體、元胞數組或函數句柄等類型。數值類型之間的相互轉換通常通過調用函數完成,基本格式為x1=class(x2)x1為類型轉換后的數據,x2為原始類型數據,class為轉換的目標類型。表6列出了不同數據類型間轉換的部分函數。二、MATLAB數據類型三、矩陣基礎(一)矩陣的創建創建矩陣常用直接賦值、函數調用和導入三種方法,下面將分別舉例說明。1.直接賦值法直接賦值即在中括號“[]”內依次輸入數據,便完成矩陣創建。在MATLAB中,矩陣用中括號“[]”將數據括起來。矩陣中同一行、不同列的數據使用空格或者逗號分隔,矩陣的不同行使用分號分隔。矩陣要求每一行的列數相同,每一列的行數相同。【例1】在命令窗口中按所給格式逐條執行如下語句,參照返回結果比較兩創建方法的
異同。>>a1=[1,2,3;4,5,6;789]>>a2=[123;456;789]三、矩陣基礎2.函數調用法MATLAB提供了部分矩陣生成函數,直接調用相應函數能快速生成一些有規律的特殊矩陣。常用的矩陣生成函數參見表1,這里不進行詳細討論。三、矩陣基礎3.導入法導入法主要針對利用以文件形式存儲的數據創建矩陣,通過數據平臺或者文件輸入函數,把TXT,Excel,MAT等文件格式中的數據導入MATLAB工作空間,并以矩陣的形式進行存儲。常用的命令有load、dlmread、xlsread、wavread、imread等,相關函數的使用請參考相關Help文件。(二)矩陣元素的操作對于矩陣元素的操作主要是通過元素的索引(矩陣中的每一個元素在矩陣中對應了一個二維的行號及列號或一維的標號)而進行的。對于多維矩陣,MATLAB在內部不是以它們在命令窗口中顯示的形式存儲的,而是存成單列的形式。1.單個元素的操作對單個元素的操作,可以通過它的索引號對其進行操作,格式為a(m,n),m為元素在矩陣a中的行號,n為所在列號。三、矩陣基礎【例2】在命令窗口中按所給格式逐條執行如下語句,并注意觀察不同索引方式下返回結果的異同,體會矩陣在MATLAB內部以單列形式存儲的含義。>>a=[123;456;789]>>a(1,2)>>a(4)>>a(1,2)=02.多個元素的操作1)多個元素的索引對多個元素的操作也是通過其索引號來進行的,格式為a([i1,i2,…],[j1,j2,…]),其中[i1,i2,…]為矩陣a中行號,[j1,j2,…]為矩陣a中列號。【例3】在完成【例2】基礎上繼續執行如下語句,注意體會標號的對應關系。>>a([1,2],[2,3])返回結果為ans= 2 3 5 6三、矩陣基礎在對矩陣行列的操作中,符號冒號有著很重要的作用,單個冒號可以代表所有的行或者列。【例4】在完成【例2】基礎上繼續執行如下語句,體會冒號的作用。>>a(1:2,2:3)>>a(:,1)>>a(1,:)在對矩陣行列的操作中,end作為索引號時代表在矩陣中最后一行,最后一列,最后一個元素,可以通過與冒號的結合使用,實現對矩陣行列的操作。【例5】在完成【例2】基礎上繼續執行如下語句,體會end在矩陣標號中的含義。>>a(1:end,1)>>a(1,1:end)>>1:2:3>>a(1,1:2:end)矩陣還有其他的索引方式,詳細內容詳見Help中名為MatrixIndexing的文件。三、矩陣基礎2)矩陣延拓有時生成行或列都相同的矩陣是有用的,可以用repmat函數來實現。其調用格式為repmat(a,[i,j])或者repmat(a,i,j)。【例6】在命令窗口中按所給格式執行如下語句,并通過觀察返回結果和Help相關文件學習repmat的用法。>>a=[123]返回結果為a= 1 2 3>>repmat(a,[3,2])返回結果為ans= 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3三、矩陣基礎>>repmat(a,3,2)返回結果為ans= 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 33)矩陣按行或列進行添加和刪除矩陣整行或整列刪除,只需要使用冒號選中某行或某列元素,將其賦值為空矩陣就可以實現刪除整行或整列,但不能刪除單個元素。可以直接利用對具體行列的賦值來增加矩陣的行列。三、矩陣基礎【例7】在命令窗口中按所給格式逐條執行如下語句,并通過觀察返回結果學習矩陣行列的刪除方法。>>a=[123;456;789]返回結果為a= 1 2 3 4 5 6 7 8 9>>a(:,1)=[]返回結果為a= 2 3 5 6 8 9三、矩陣基礎>>a(1,:)=[]返回結果為a= 5 6 8 9>>a(1,1)=[]三、矩陣基礎【例8】在命令窗口中按所給格式逐條執行如下語句,并通過觀察返回結果學習矩陣行列的增添方法。>>a=[123;456;789]返回結果為a= 1 2 3 4 5 6 7 8 9>>a(4,1)=1返回結果為a= 1 2 3 4 5 6 7 8 9 1 0 0三、矩陣基礎>>a(1,4)=1返回結果為a= 1 2 3 1 4 5 6 0 7 8 9 0 1 0 0 04)矩陣的連接矩陣的連接包括水平方向的左右連接和垂直方向的上下連接,水平連接的矩陣需要具有相同的行數,垂直連接的矩陣需要具有相同列數,其調用格式為
[a;b]用于垂直方向連接具有相同列數的矩陣a,b;
[ab]或者[a,b]用于水平方向連接具有相同行數的矩陣a,b;
cat(dim,a,b)在指定維數上連接矩陣a,b,dim為1時垂直方向,dim為2時水平方向;
horzcat(a,b)同[a;b];
vertcat(a,b)同[ab]。三、矩陣基礎表2列出了矩陣的其他操作。三、矩陣基礎(三)矩陣的運算1.矩陣的算術運算MATLAB支持的矩陣的運算包括加、減、乘、除、乘方、轉置、關系運算以及線性代數中涉及的矩陣特征值求解、三角化等內容,下面將分類進行介紹。在介紹上述運算之前,需要說明一點,MATLAB有兩類不同的算術運算,矩陣算術運算和向量算術運算。矩陣算術運算是按照線性代數學科中的規則定義的。向量算術運算是逐個元素實現的,因此能用于多維向量的運算。句點“.”用于區分兩種運算。由于對于加減運算而言,矩陣運算和向量運算相同,因此沒有“.+”和“.-”。1)加減運算矩陣的加減法運算一般要求參與加減運算的矩陣具有相同的維數,即行數相同且列數相同。設A和B為維數相同的兩個矩陣,兩矩陣的加減運算分別表示為若A、B中有一為標量,不妨設B表示的為標量,此時A與B的加減相當于對矩陣A中的每個元素都加或減B。三、矩陣基礎【例9】在命令窗中按格式逐條執行如下語句,并通過觀察返回結果學習矩陣的加減運算。>>a=[123;456];>>b=[456;123];>>c=a+b返回結果為c= 5 7 9 5 7 9
>>a=[123;456];>>b=[456;123];>>c=a-b返回結果為c= -3 -3 -3 3 3 3三、矩陣基礎>>a=[123;456];>>b=[456;123];>>c=a-1返回結果為c= 0 1 2 3 4 5
三、矩陣基礎2)乘除法運算MATLAB語言中,矩陣或向量的乘除法表示如下。(1)乘法運算。C=A*BC=A.*B(2)除法運算。C=A\BC=A/BC=A.\BC=A./B矩陣乘法用*表示,是求兩矩陣的線性代數積,要求A矩陣的列數必須等于B矩陣的函數行數;向量乘法用.*表示,是求兩矩陣每個對應元素的乘積,要求A矩陣與B矩陣的維數必須相同,除非其中一個為標量。矩陣和向量的除法與對應的乘法在維數上有相同的要求。三、矩陣基礎【例10】在命令窗口中按所給格式逐條執行如下語句(嚴格按照格式輸入,忽略返回的錯誤信息),并通過觀察返回結果學習乘法在矩陣算術運算和向量算術運算上的區別。>>a=[123;456];>>b=[12;34;56];>>c=a*b返回結果為c= 22 28 49 64
>>a=[123;456];>>b=[12;34;56];>>d=a*a三、矩陣基礎返回信息提示為???Errorusing==>mtimesInnermatrixdimensionsmustagree.
>>a=[123;456];>>b=[12;34;56];>>e=a.*a返回結果為e= 1 4 9 16 25 36符合MATLAB輸入要求的直接給出了執行結果,不符合的給出了錯誤提示。提示的內容為錯誤使用了矩陣乘法,內部矩陣維度必須一致。三、矩陣基礎(3)乘方運算。在乘方運算中,矩陣的乘方與向量的乘方所代表的含義也不相同,其具體用法如下所述。C=A^B,其中A需為方陣,B為標量,代表B個A相乘。C=A.^B,若A、B均為數組時,要求A、B具有相同維數,代表對應索引號的乘方運算,若B為標量,代表對A中的每一個元素做B階乘方運算。【例11】在命令窗口中按所給格式逐條執行如下語句,并通過觀察返回結果學習矩陣的乘方運算。>>a=[12;34];>>c=a^2返回結果為c= 7 10 15 22三、矩陣基礎>>a=[12;34];>>a=[12;34];>>c=a.^2返回結果為c= 1 4 9 16(4)轉置運算。矩陣的轉置運算,即將元素(m,n)變換為(n,m)上的元素,變換方法也存在按矩陣運算和按向量運算的區別,兩種不同的轉置方法如下:C=A'C=A.'三、矩陣基礎【例12】在命令窗口中按所給格式逐條執行如下語句,并通過觀察返回結果學習矩陣兩種轉置運算的區別。>>a=reshape(1:4,2,2)返回結果為a= 1 3 2 4
>>b=reshape(5:8,2,2)返回結果為b= 5 7 6 8
三、矩陣基礎>>c=a+i*b返回結果為c= 1.0000+5.0000i 3.0000+7.0000i 2.0000+6.0000i 4.0000+8.0000i>>c'返回結果為ans= 1.0000-5.0000i 2.0000-6.0000i 3.0000-7.0000i 4.0000-8.0000i>>c.'返回結果為ans= 1.0000+5.0000i 2.0000+6.0000i 3.0000+7.0000i 4.0000+8.0000i三、矩陣基礎(5)矩陣的特殊運算。行列式運算:det(x),要求矩陣x為方陣。秩運算:rank(x)。逆運算:inv(x),要求矩陣x存在逆陣。特征值運算:e=eig(x)2.矩陣的關系運算、邏輯運算MATLAB中的關系運算及邏輯運算,主要用于判斷矩陣大小邏輯關系。若二者皆為矩陣,則表示對應位置上的運算,這就要求矩陣具有相同維數;若有一者為標量,則表示為該標量與矩陣中每一個元素進行運算。矩陣間主要的關系運算和邏輯運算參見表3。三、矩陣基礎四、圖形可視化(一)繪圖函數總覽MATLAB提供了豐富的畫圖函數,有基本線圖(LinePlots)函數、數據分布(ProportionandDistributionofData)圖函數、離散數據圖(DiscreteDataPlots)函數、極坐標圖(PolarPlots)函數、等高線圖(ContourPlots)函數、矢量場圖(VectorFields)函數、表面圖(Surfaces)函數、多邊形(Polygons)圖函數和動畫圖(Animation)函數等。基本線圖(LinePlots)函數包括能畫線性線圖、雙對數線圖、半對數線圖及誤差樣條圖的畫圖函數,具體函數和函數說明參見表1。四、圖形可視化數據分布(ProportionandDistributionofData)圖函數包括餅圖(PieCharts)函數、樣條圖(BarPlots)函數、直方圖(Histograms)函數,具體函數和函數說明參見表2。四、圖形可視化離散數據圖(DiscreteDataPlots)函數能畫離散線圖、階梯圖和散點圖,具體函數和函數說明參見表3。極坐標圖(PolarPlots)函數能實現極坐標線圖的畫圖功能,具體函數和函數說明參見表4。四、圖形可視化等高線圖(ContourPlots)函數能畫2D和3D的等高線圖,具體函數和函數說明參見表5。矢量場圖(VectorFields)函數提供了表征速度矢量、流線型的繪圖功能,具體函數和函數說明參見表6。四、圖形可視化MATlAB在x-y平面基礎上引入z坐標,用直線連接這些相鄰的點便得到了表面圖,具體函數和函數說明參見表7。MATLAB還提供了能產生電影和動畫效果的繪圖函數,具體函數和函數說明參見表8。四、圖形可視化(二)繪圖函數應用舉例1.line函數line函數用于繪制二維曲線圖形,數據點之間用直線連接。【例1】在命令窗口中執行如下語句,并通過效果圖(圖1)和相關Help文件學習line函數的用法。x=0:0.4*pi:2*pi;y=sin(x);line(x,y)四、圖形可視化2.plot函數plot函數是繪制二維曲線圖形主要函數,與line函數不同的是該函數在繪制線圖時數據點之間用平滑的曲線連接,且有多種調用格式,曲線的樣式、顏色可靈活控制。表9列出了曲線樣式和顏色種類和對應的控制符。表10列出了一些常用附加屬性。四、圖形可視化【例2】如下代碼和圖2,演示了用plot函數繪制曲線并指定線型、線的粗細和顏色的方法和效果。x=0:pi/20:2*pi;y1=sin(x);figure(1)plot(x,y1,'r-.','linewidth',5)y2=sin(x+pi/2);figure(2)plot(x,y1,'r:',x,y2,'+')【例3】如下代碼和圖3,演示了用stem函數繪制曲線并指定線型、顏色和線條粗細的方法和效果。x=0:pi/20:2*pi;y1=sin(x);stem(x,y1,'.')四、圖形可視化4.staris函數staris函數特別適合顯示離散數據的時間歷史圖,下面是一個簡單應用舉例。【例4】如下代碼和圖4,演示了用stairs函數畫階梯圖形的方法與效果
x=linspace(0,10,50);y=sin(x).*exp(-x/3);stairs(x,y); 5.errorbar函數errorbar函數繪制的圖形常用來顯示數據偏離曲線的程度或數據的置信度。【例5】如下代碼和圖5,演示了用errorbar函數畫數據誤差量圖的方法與效果。x=linspace(0,2*pi,30);y=sin(x);e=std(y)*ones(size(x));errorbar(x,y,e)四、圖形可視化6.plolar函數plolar函數用于繪制極坐標圖形。【例6】如圖6所示,用polar函數畫極坐標圖形的方法。theta=linspace(0,2*pi);r=cos(4*theta);polar(theta,r);7.fill函數fill函數常用于繪制填充顏色的多邊形。【例7】如圖7所示,用fill函數畫實心圖的方法。x=linspace(0,10,50);y=sin(x).*exp(-x/3);fill(x,y,'b');%'b'為藍色四、圖形可視化8.fplot函數fplot函數用于在指定范圍內繪制函數的圖形,由于采用了自適應的步進控制,因此在數據量較少時,用該方法繪制出的圖形效果要優于其他方法。【例8】如圖8所示,用fplot函數在限定范圍內畫函數圖形的方法。fplot('sin(1/x)',[0.020.2]);%[0.020.2]是繪圖范圍9.plot3函數plot3函數用于繪制數據點的三維圖。【例9】如圖9所示,用plot3函數繪制空間曲線方法。x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);plot3(x,y,z);四、圖形可視化10.三維曲面繪圖函數MATLAB提供了mesh函數和surf函數來繪制三維曲面圖。mesh函數用來繪制三維網格圖,而surf用來繪制三維曲面圖,各線條之間的補面用顏色填充。其調用格式分別為mesh(x,y,z,c)和surf(x,y,z,c)。一般情況下,x,y,z是維數相同的矩陣,x,y是網格坐標矩陣,z是網格點上的高度矩陣,c用于指定在不同高度下的顏色范圍。網格坐標利用meshgrid函數生成。【例10】如圖10所示,三維曲面繪制方法。x=0:0.1:2*pi;[x,y]=meshgrid(x);z=sin(y).*cos(x);figure(1)mesh(x,y,z);figure(2)surf(x,y,z);從線條顏色、線條間有無填充、填充顏色等幾個方面對比【例9】和【例10】的結果,并借助MATLABHelp仔細體會plot3、mesh、surf三函數的區別。四、圖形可視化11.旋轉體繪圖函數為了一些專業用戶可以更方便地繪制出三維旋轉體,MATLAB專門提供了2個函數:柱面函數cylinder和球面函數sphere。下面通過示例演示兩函數的使用。【例11】如圖11所示,用cylinder函數繪制旋轉柱面方法。t=0:pi/12:3*pi;r=abs(exp(-0.25*t).*sin(t));[X,Y,Z]=cylinder(r,30);mesh(X,Y,Z)colormap([100])四、圖形可視化【例12】如圖12所示,用sphere函數繪制地球表面的氣溫分布示意圖方法。.[a,b,c]=sphere(40);t=abs(c);surf(a,b,c,t);axis('equal') %此兩句控制坐標軸的大小相同.axis('square')colormap('hot')四、圖形可視化(三)圖形標注及窗口控制為提高圖形的可讀性和窗口的可控性,MATLAB還提供了專門的圖形標注函數、窗口控制函數等。1.圖形標注函數常用的圖形標注函數包括:圖題標注函數title;x軸標注函數xlabel;y軸標注函數ylabel;圖形窗口內文本加注函數text;圖形注解函數legend。1)標題標注函數titletitle函數用于給圖形添加標題,其調用格式為title('string'):設置當前繪圖區的標題為字符串string的值。title(…,'propertyname',propertyvalue):可以在添加或設置標題的同時,設置標題的屬性,如文字顏色、旋轉角度、字體、加粗等。2)坐標軸標注函數xlabel、ylabel與zlabelxlabel、ylabel與zlabel函數分別用于給橫坐標和縱坐標添加標簽,三函數的調用的格式相同,這里以xlabel為例。xlabel('string')設置橫軸標簽為字符串值,string代表的是字符串。xlabel(…,'propertyname',propertyvalue):在設置橫軸標簽值的同時設置其相關屬性,如文字顏色、旋轉角度、字體、加粗等。四、圖形可視化3)圖形窗口內文本加注函數textText函數可以用來在圖形窗口中指定位置添加文字說明,調用格式為text(x,y,'圖形說明'),其中x和y表示添加文本的位置坐標。4)圖形注解函數legend當同一圖形窗口中同時存在多條曲線時,用legend函數可以很好地進行每條曲線的注解,便于圖形閱讀,legend調用格式如下:legend('圖例1','圖例2',…)。四、圖形可視化【例13】如圖13所示,圖形標注函數應用方法(逐條執行其中的圖形標注語句更容易理解每個函數的作用)。x=[1997:2006];y=[1.450.912.30.861.460.951.00.961.210.74];xin=1997:0.2:2006;yin=spline(x,y,xin)plot(x,y,'ob',xin,yin,'-.r')title('1997年到2006年北京年平均降水量圖(單位:cm)')xlabel('年份','fontsize',15)ylabel('每年降雨量(cm)','fontsize',8)text(2000,2,'Morerainlessdust')legend('圖例1')四、圖形可視化2.圖形坐標相關函數圖形坐標相關函數有很多,如設置和查詢x軸范圍的函數(xlim)(y軸、z軸有對應函數)、設置軸邊界的函數box,顯示和消隱柵格線的函數grid、控制軸比例和外觀的函數axis、添加新圖時仍保留當前圖的函數hold、獲取當前軸的句柄函數gca、設置句柄圖屬性的函數set,等等。下面僅用示例演示axis、grid、set和gca的一種用法,各函數詳細使用請參考MATLAB中的Help文件。【例14】如圖14所示,圖形坐標相關函數應用方法(逐條執行其中plot以后的語句更容易理解每個函數的作用)。alpha=0:0.01:2*pi;x=sin(alpha);y=cos(alpha);plot(x,y)axis([-1.51.5-1.51.5])gridonset(gca,'xtick',[-1.5:0.5:-0.5-0.4:0.2:0.40.5:0.5:1.5])四、圖形可視化3.窗口控制函數有時需要在多個窗口中顯示結果,MATLAB提供了兩個函數,分別是figure和subplot。figure有兩種用法,只用一句figure命令,會創建一個新的圖形窗口,并返回一個整數型的窗口編號。figure(n)表示將第n號圖形窗口作為當前的圖形窗口,并將其顯示在所有窗口的最前面;如果該圖形窗口不存在,則新建一個窗口,并賦以編號n。subplot函數是將圖形窗口分成柵格,并創建軸目標。subplot(m,n,i)圖形顯示時分割窗口命令,把一個圖形窗口分為m行,n列,m×n個小窗口,并指定第i個小窗口為當前窗口。四、圖形可視化【例15】如圖15所示,二維繪圖函數、圖形修飾函數綜合應用示意。x=0:0.1*pi:2*pi; %定義x向量y=sin(x);figure(1); %創建一個新的圖形窗口,編號為1subplot(2,2,1); %將窗口劃分為2行,2列,在第1個窗口中作圖plot(x,y); %以默認形式畫正弦曲線圖title('正弦線(默認顏色實線)'); %給圖形加標題subplot(222); %在第2個窗口中作圖plot(x,y,'r'); %畫正弦波圖,線的顏色為紅色xlabel('X'); %給x軸加說明ylabel('SIN(X)'); %給y軸加說明title('正弦線(紅色實線)'); %給圖形加標題subplot(2,2,3); %在第3個窗口中作圖plot(x,y,'--'); %畫正弦波,線型為破折線title('正余弦線'); %給圖形加標題holdonplot(x,cos(x),'-.'); %畫余弦波圖,線型為點畫線legend('圖例sin(x)','圖例cos(x)')subplot(224); %在第4個窗口中作圖plot(x,sin(x),'r+'); %畫正弦波圖,線型為+線,線顏色為紅色gridtext(4,0,'注記'); %指定位置添加文本title('正弦線(紅色+點線)'); %給圖形加標題四、圖形可視化五、MATLAB編程(一)循環利用循環控制語句,MATLAB能像其他語言一樣能重復執行代碼塊。MATLAB的循環有兩種方式實現,for循環與while循環,前者用于執行指定次數的循環,后者循環次數取決于執行條件的真假。continue和break的使用可以在退出循環的方式上有更多選擇。1.for構成的循環for構成循環語句時,需要指定循環起止點及步進,即循環次數是預知的。for循環的構成格式為forindex=startind:stepsize:stopind
循環體語句end步進stepsize默認為1,但是可以設置為任意值,包括負數。當步進stepsize為正數時,循環變量值超過stopind時循環終止;步進為負數時,循環變量值小于stopind時,循環體終止執行。循環體一般由多條語句構成。五、MATLAB編程【例1】用for循環創建矩陣,在命令窗口中按格式逐條執行如下語句,根據返回結果體會for循環的應用。fori=1:3forj=1:3[i,j]a(i,j)=i+jendenddisp(a)多重循環體寫成鋸齒形是為了增加可讀性;通常循環體執行期間建議不要顯示結果,即語句要以“;”結尾,這樣可以加快循環速度。這兩點對于while構成的循環同樣適用。五、MATLAB編程2.while構成的循環利用while構成循環時,無須指定循環的具體次數,非常適合循環次數不能預知的情況,但是要設置循環終止條件,否則就是死循環了。while循環的構成格式為whileexpression
循環體end表達式expression為循環的判斷條件,一旦條件不滿足即表達式結果為“假”,終止循環。如果判斷條件是向量或矩陣的話,可能需要all或any函數作為判斷條件。五、MATLAB編程【例2】用while循環計算1到10的累加,在命令窗口中按格式執行如下語句,通過返回結果體會while循環工作機理。s=10;sum=0;whiles>0sum=sum+s;s=s-1endsum五、MATLAB編程3.循環操作的提前終止1)continue指令當for循環或while循環的循環體內包含continue語句且執行到該語句時,則循環體內continue所在行以后的語句均被跳過,而直接進入下次循環。【例3】下面的語句用于實現將矩陣a內的每個元素求倒數,結果存入矩陣b中,當a內元素為0時,b內對應位置上的值記為0。按照格式執行如下語句,對照返回的i值體會continue的作用。a=[1230321];fori=1:7ifa(i)==0b(i)=0;continueendib(i)=1./a(i);end五、MATLAB編程2)break指令若循環體內包含break語句,當程序執行到該語句時,則直接結束循環,而后從該for循環或while循環end之后的下一句開始繼續執行。對于嵌套循環,break和continue的作用范圍均限于包含它們的最內層的循環。【例4】下面的語句用于將1到10中最小的不是5的倍數的數賦給矩陣n,結合示例語句和返回結果,體會循環中break的用法。fori=1:10ifmod(i,5)==0breakendn(i)=i;endidisp(n)五、MATLAB編程3)return指令return屬于程序終止(ProgramTermination)語句,為了清晰地比較幾種提前退出控制,特在這里進行討論。continue能提前結束此次循環,進入下一次循環;break能使程序的運行直接跳出包含它的循環體。接下來討論的return會終止當前被調用程序,而直接返回調用它的程序或返回鍵盤。【例5】這是MATLAB中的Help系統中的一個例子。若計算矩陣行列式的功能交由如下函數det完成,而且其中設置了條件判斷,當被計算矩陣為空時,觸發執行return,致使函數det直接退出,返回到調用它的程序。functiond=det(A)%DETdet(A)isthedeterminantofA.ifisempty(A)d=1;returnelse
…end五、MATLAB編程(二)條件控制條件控制語句能在程序運行時選擇執行哪段代碼,使得程序有更強的適應性。條件控制有兩種常見形式,基于條件真假進行選擇的用if語句,根據表達式的值從一定數量的選項中進行選擇的用switch語句,下面將分別介紹。1.條件控制語句if1)單分支形式單分支條件控制格式為iflogical_expression
語句組end當邏輯表達式logical_expression為真時,執行其中的語句組。五、MATLAB編程【例6】x為一魔方矩陣,輸出矩陣中大于3的元素的行列標號。參照下面的程序和返回結果,體會if單分支形式控制的用法。x=magic(3)fori=1:3forj=1:3ifx(i,j)>3[i,j]endendend五、MATLAB編程2)雙分支形式雙分支條件控制格式為iflogical_expression
語句組1else
語句組2end當logical_expression為真時執行語句組1,為假時執行語句組2。五、MATLAB編程【例7】在完成【例6】功能基礎上增加了統計魔方矩陣中不超過3的元素個數的功能,參照下面的程序和返回結果,體會if雙分支形式控制的用法。x=magic(3);n=0fori=1:3forj=1:3ifx(i,j)>3[i,j]elsen=n+1;endendend五、MATLAB編程3)多分支形式多分支形式條件控制格式為iflogical_expression1
語句組1elseiflogical_expression2
語句組2…elseiflogical_expressionm
語句組melse
語句組m+1end哪個logical_expression結果為真,就執行哪個logical_expression下的語句組,所有logical_expression都是假,就執行語句組m+1。五、MATLAB編程【例8】下面的語句實現對輸入數字極性的判斷功能,參照下面的程序和返回結果,體會if多分支形式控制的用法。其中input為鍵盤交互指令。x=input('你給個數唄')ifx>0disp('正數')elseifx==0disp('零')elsedisp('負數')end五、MATLAB編程2.條件控制語句switch如前所述,switch語句根據表達式的值從一定數量的選項中進行選擇,配合其使用的還有case,有時也會有otherwise,格式為switchexpression(scalarorstring)casevalue1
語句組1casevalue2
語句組2
…casevaluem
語句組motherwise
語句組m+1endswitch根據expression的值等于哪個value,就執行哪個語句組,當expression的值與任何一個給定的value都不相符時,執行語句組m+1。用于判斷的表達式必須為一個標量或者字符串。五、MATLAB編程【例9】下面的語句用于對成績進行歸類,參照下面的程序和返回結果,體會switch的用法。grade=[96,43,71,50,88,79,90];rg=length(grade);fork=1:rgswitchround(grade(k)/10)case{9,10}disp('優')case{8,7}disp('良')case{6}disp('及格')otherwisedisp('不及格')endendgrade五、MATLAB編程3.try/catch構成的分支跳轉語句語句try和catch用于程序的差錯控制(ErrorControl),當程序萬一出現錯誤時,這些語句為你采取某些措施提供了一種方式。test語句用來測試代碼中的某些命令是否發生錯誤。一旦try程序塊中發生錯誤,MATLAB將立即跳轉到相應的catch塊。catch塊需要以某種方式對發生的錯誤進行響應。【例10】下面的代碼實現了矩陣維數不滿足加法規則時的錯誤檢測,并進行錯誤告警的響應,參照下面的程序和返回結果,體會try/catch的用法。x=ones(2);y=magic(3);tryz=x+y;disp(z)catcherror('無法相加')end五、MATLAB編程(三)交互指令交互指令使得程序在執行期間能接受交互輸入,以便在中途更好地對程序進行控制,常用的指令有input和keyboard等,下面將逐一進行介紹,另外還會簡單介紹pause指令。1.input指令使用input函數,可以提醒用戶輸入內容,并讀入響應內容。當執行到該語句時,input會使程序顯示提示內容,在輸入時暫停程序執行,按回車后程序恢復執行。輸入的變量可以為數值或字符串,其格式為x=input(‘prompt’)x=input(‘prompt’,’s’)命令窗口顯示提示字符串‘prompt’,等待鍵盤輸入,兩指令可以接受任意MATLAB表達式。前者返回數值,后者返回字符串。五、MATLAB編程【例11】按照格式執行如下語句,參照所給代碼和返回結果體會input的用法。x=input('輸入方陣的階數=')y=ones(x);disp(y)x=input('輸入的姓名','s')y=['你的名字是',x];disp(y)五、MATLAB編程2.keyboard指令keyboard意思是從鍵盤輸入。當m文件中包含keyboard語句且程序執行到該語句時,程序會停止執行并將控制權交給鍵盤,命令窗口出現提示符“K>>”,等待用戶鍵盤操作。用戶可查看已計算過的變量,也可增加代碼,輸入的所有MATLAB命令都是有效的,因此keyboar對于程序調試非常有幫助。要結束鍵盤模式,輸入指令return并按下回車鍵,程序繼續運行。【例12】按格式執行如下代碼,并在執行完keyboard語句后,將a的值改為:a=1:10(別忘了return),參照所給代碼和返回結果體會keyboard的用法。a=rand(1,10)keyboardb=a-1;disp(b)五、MATLAB編程3.pause指令pause語句能使當前運行的程序暫停,然后按任意鍵后繼續運行,合理利用該指令,可以方便用戶進行過程中觀察程序運行情況,或者程序演示,其調用格式為
pause:暫停運行中的程序,用戶按任意鍵后程序繼續執行;
pause(n):暫停運行中的程序,n秒之后程序繼續執行;pauseon:使程序后面的暫停命令予以執行;pauseoff:使程序后面的暫停命令不予以執行。五、MATLAB編程(四)m文件前面的相關操作均是在命令窗口完成的,但一些語句希望以程序的形式需要保存下來,以便后續重復使用,針對這種情況MATLAB提供了m文件編輯器(如圖1所示),稱為MATLAB編輯調試器(Editor/Debugger)。該編輯器方便用戶進行程序的編寫、調試、保存,其文件格式以.m保存,稱之為m文件。m文件有兩種形式:腳本文件和函數文件。腳本文件沒有輸入/輸出參數,只是一些函數和命令的組合。函數一般都需要輸入參數,并返回輸出參數。這兩種形式的m文件,無論是命令文件,還是函數文件,都是普通的ASCII文本文件,可選擇編輯或字處理文件來建立,最好用m文件編輯器編輯,較新版本的MATLAB都會給出編輯提示,便于及時更正書寫錯誤。五、MATLAB編程1.MATLAB腳本文件的創建如前所述,腳本文件沒有輸入/輸出參數,只是一些函數和命令的組合,只需在m文件編輯器中輸入所需函數和命令,并存成.m文件即可執行和調用。這里僅通過一個例子進行演示,不進行過多討論。【例13】在m文件編輯器中創建一個用于計算Fibonnaci數列的腳本文件,文件名fibo.m。%AnM-filetocalculateFibonnacinumbersf=[1,1];i=1;whilef(i)+f(i+1)<1000f(i+2)=f(i)+f(i+1);i=i+1;endplot(f)保存后,在MATLAB命令窗口中鍵入fibo命令,并回車執行,將計算出所有小于1000的Fibonnaci數,并繪出圖形。可以看出,創建的m文件一旦保存,就可以像使用MATLAB提供的其他命令、程序和函數一樣,執行自己的m文件了。五、MATLAB編程2.MATLAB函數的創建1)MATLAB函數基本框架MATLAB語言中提供的函數通常由以下五個部分組成。(1)函數定義行。以function開頭,函數名(必須與文件名相同)及函數輸入/輸出參數在此定義。該行是函數的第一個可執行行。(2)H1行。第一注釋行,供lookfor和Help在線幫助使用。(3)函數幫助文件。通常包括函數輸入/輸出參數的含義,調用格式說明。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國節能生活鍋爐行業市場發展前景及發展趨勢與投資戰略研究報告(2024-2030)
- 2024年中國交通鋁行業發展調查報告
- 2025年 南昌大學校內外招聘考試筆試試題附答案
- 2025年 河北軟件職業技術學院選聘工作人員考試試題附答案
- 桑蠶絲定位男長巾項目投資可行性研究分析報告(2024-2030版)
- 2025年 安康市審計局事業單位招聘考試筆試試題附答案
- 2023-2028年中國河南白酒行業市場深度分析及投資策略咨詢報告
- 2025年中國智慧商城建設市場前景預測及投資規劃研究報告
- 2025年中國屏山炒青茶行業市場發展監測及投資戰略規劃報告
- 寶雞醋項目可行性研究報告
- 關鍵工程施工進度計劃網絡圖及施工進度總體計劃網絡圖
- SB/T 10784-2012洗染服務合約技術規范
- GB/T 16940-2012滾動軸承套筒型直線球軸承外形尺寸和公差
- GB/T 15814.1-1995煙花爆竹藥劑成分定性測定
- 煤礦安全規程露天部分參考題庫(含答案)
- 紫銅材質證明
- 新產品評審管理辦法
- (參考)菲達公司國內電除塵器業績表
- 大學生職業生涯規劃與就業指導教案第5講:興趣探索
- 門店電表記錄表
- 七年級勞技 花卉種植 花卉用途 PPT學習教案
評論
0/150
提交評論