MATLAB基礎與實例進階-02_第1頁
MATLAB基礎與實例進階-02_第2頁
MATLAB基礎與實例進階-02_第3頁
MATLAB基礎與實例進階-02_第4頁
MATLAB基礎與實例進階-02_第5頁
已閱讀5頁,還剩126頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

2023/2/4機械工業(yè)出版社Page1第2章基礎知識與基本運算【學習目標】熟悉MATLAB的基本數據類型熟悉MATLAB的基本運算符掌握MATLAB的數組及基本運算掌握MATLAB的矩陣及基本運算2023/2/4機械工業(yè)出版社Page2第2章基礎知識與基本運算MATLAB數據類型2.1MATLAB基本運算符1.2MATLAB數組及其運算1.3MATLAB矩陣及其運算1.42023/2/4機械工業(yè)出版社Page32.1MATLAB數據類型2.1.1數值類型2.1.2邏輯類型2.1.3字符和字符串2.1.4函數句柄2.1.5結構體2.1.6單元數組2023/2/4機械工業(yè)出版社Page4MATLAB數值類型包括整數、單精度浮點數和雙精度浮點數。默認情況下,MATLAB用雙精度浮點數來保存所有數值類型數據。2.1.1數值類型2023/2/4機械工業(yè)出版社Page5有符號整數int8:1字節(jié),-27-27-1int16:2字節(jié),-215-215-1int32:3字節(jié),-231-231-1int64:4字節(jié),-263-263-12.1.1數值類型——整數2023/2/4機械工業(yè)出版社Page6無符號整數uint8:1字節(jié),0-28-1uint16:2字節(jié),0-216-1uint32:3字節(jié),0-232-1uint64:4字節(jié),0-264-12.1.1數值類型——整數2023/2/4機械工業(yè)出版社Page7整數轉換函數int8:創(chuàng)建有符號8bit整數int16:創(chuàng)建有符號16bit整數int32:創(chuàng)建有符號32bit整數int64:創(chuàng)建有符號64bit整數uint8:創(chuàng)建無符號8bit整數uint16:創(chuàng)建無符號16bit整數uint32:創(chuàng)建無符號32bit整數uint64:創(chuàng)建無符號64bit整數2.1.1數值類型——整數2023/2/4機械工業(yè)出版社Page8整數運算原則相同整型數據之間的運算,結果為同種類型的整數;不同類型整數之間不能進行運算;整數可以和雙精度標量進行數值運算,結果為整數;整數不能與不是標量的雙精度數組進行運算2.1.1數值類型——整數2023/2/4機械工業(yè)出版社Page9整數最大值與最小值MATLAB提供了intmax和intmin兩個函數來查詢各種類型整數的最大值和最小值。當數據的值超出了所要轉換類型的表示范圍時,MATLAB會自動將它們設置成對應整數類型的最大值或最小值。2.1.1數值類型——整數2023/2/4機械工業(yè)出版社Page10【例2-1】創(chuàng)建一個int16類型的整數275,并將包含小數的浮點數275.49轉換為整數。2.1.1數值類型——整數>>x=int16(275)x=275>>y=275.49;>>int16(y)

ans=275>>y=y+0.01;>>int16(y)

ans=2762023/2/4機械工業(yè)出版社Page11【例2-2】利用intmax和intmin函數獲取整數最大值與最小值示例。2.1.1數值類型——整數>>intmax('int16')

ans=32767>>intmin('int8')

ans=-128>>x=int16(33000)x=32276>>x=int8(-350)x=-1282023/2/4機械工業(yè)出版社Page12單精度浮點數——32bit雙精度浮點數——64bit2.1.1數值類型——浮點數字節(jié)位代表功能31符號位(0代表正數,1代表負數)30-23指數位

0-27-122-01.f中的小數位f字節(jié)位代表功能63符號位(0代表整數,1代表負數)62-52指數位0-210-151-01.f中的小數位f2023/2/4機械工業(yè)出版社Page13創(chuàng)建浮點數

MATLAB默認是以雙精度浮點數來保存數據的,所以我們可以使用賦值操作來創(chuàng)建一個double數據,而創(chuàng)建單精度浮點數則必須使用single轉換函數。對于大于3.4028×1038或與小于-1.1755×1038的數,需要用雙精度浮點數來表示。2.1.1數值類型——浮點數2023/2/4機械工業(yè)出版社Page14浮點數運算原則單精度浮點數與float、double、char或logical類型數據運算,結果為float;單精度浮點數不能int/uint類型數據運算;雙精度浮點數與float類型數據運算,結果為float類型;雙精度浮點數與int/uint類型數據運算,結果為int/uint類型;雙精度浮點數與double、char、logical類型數據運算,結果為double2.1.1數值類型——浮點數2023/2/4機械工業(yè)出版社Page15浮點數最大值與最小值MTALAB提供了realmax和realmin函數用于查詢單精度和雙精度浮點數所能表示的最大和最小值,函數參數指明查詢浮點數的類型,對于雙精度浮點數,realmax和realmin函數可以不用指定參數。2.1.1數值類型——浮點數2023/2/4機械工業(yè)出版社Page16【例2-3】創(chuàng)建單精度和雙精度浮點數。2.1.1數值類型——浮點數>>x=single(120.45);>>whosxNameSizeBytesClassAttributesx1x14single

>>x=120.45;>>whosxNameSizeBytesClassAttributesx1x18double2023/2/4機械工業(yè)出版社Page17【例2-4】查詢浮點數最大值和最小值。2.1.1數值類型——浮點數>>realmax('single')%查詢單精度浮點數的最大值

ans=3.4028e+038>>realmin('single')%查詢單精度浮點數的最小值

ans=1.1755e-038>>realmax %查詢雙精度浮點數的最大值

ans=1.7977e+308>>realmin %查詢雙精度浮點數的最小值

ans=2.2251e-3082023/2/4機械工業(yè)出版社Page18MATLAB用“0”和“1”分別代表邏輯“假”和邏輯“真”。邏輯類型常以標量形式出現,但也可以是邏輯數組。MATLAB程序中,用戶在使用各種控制語句的時候,經常需要使用返回的邏輯值作為控制語句的判斷條件。2.1.2邏輯類型2023/2/4機械工業(yè)出版社Page19識別邏輯數據函數五個函數可用于邏輯數據的判斷:whos(x):顯示數據x的數值和數據類型;islogical(x):若x是邏輯數組則返回“真”;isa(x,‘logical’):若x是邏輯數組返回“真”;class(x):若x是邏輯數組返回“真”;cellfun(‘islogical’,x):檢查數組x的元素是否是邏輯數據。2.1.2邏輯類型2023/2/4機械工業(yè)出版社Page20返回結果為邏輯數據的函數及運算符true:設置數據值為邏輯“真”;false:設置數據值為邏輯“假”;logical:將數據轉換為邏輯值;&、|,~,xor,any、all、&&和||;=,~=,<,>,<=和>=:關系運算;所有is*函數:測試運算函數;strcmp,strncmp,strcmpi和strncmpi:字符串比較操作函數。2.1.2邏輯類型2023/2/4機械工業(yè)出版社Page21【例2-5】利用關系運算符以及isstrprop和xor函數創(chuàng)建邏輯數組。2.1.2邏輯類型>>[20,30,40,50,60]>35

ans=00111>>A=isstrprop('abc123def','alpha') A=111000111>>xor([10'ab'2.4],[00'ab',0])

ans=100012023/2/4機械工業(yè)出版社Page22構造字符和字符串用char表示MATLAB字符;用2字節(jié)的Unicode統(tǒng)一字符編碼來存儲,一般用單引號來定義一個字符變量;用string表示MATLAB字符串;可以用字符數組或字串單元來創(chuàng)建字符串;字符串用一對單引號將多個字符括起來構建2.1.3字符和字符串>>str='Hello,MATLAB!';>>whos

strNameSizeBytesClassAttributes

str1x1326char2023/2/4機械工業(yè)出版社Page23格式化字符串sprintf:按照指定格式將數據寫入輸出字符串;fprintf:按照指定格式將數據寫入輸出文件或命令窗口;warning:在警告信息中顯示格式化數據;error:在錯誤信息中顯示格式化的數據;assert:在條件不滿足時,生成錯誤信息;MException:捕獲錯誤信息。2.1.3字符和字符串2023/2/4機械工業(yè)出版社Page24格式化字符串——函數語法形式

2.1.3字符和字符串functionname(…,format_string,value1,value2,…,valueN)format_string:包含輸出字符串的基本內容和需要轉換的輸出格式字符(如%d、%s等);value1,value2,valueN:對應format_string

中第一個至第N個需要轉換格式的數值。>>sprintf('Average%sscoreof%dindividualis%2.fpoints.','english',60,83.5)ans=Averageenglishscoreof60individualis83.50points.2023/2/4機械工業(yè)出版社Page25字符串比較MATLAB提供了三種字符串比較方法:比較兩個字符串是否完全相同或部分相同;逐字符比較兩個字符串是否相同;檢查字符串中的單個字符的類別歸屬。2.1.3字符和字符串2023/2/4機械工業(yè)出版社Page26字符串比較——比較字符串strcmp:比較兩個字符串是否完全相同;strncmp:比較兩個字符串的前n個字符是否相同;strcmpi:與strcmp類似,但strcmpi會忽略字母大小寫的區(qū)別;strcnmpi:與strcnmp類似,但strcnmpi會忽略字母大小寫的區(qū)別;2.1.3字符和字符串2023/2/4機械工業(yè)出版社Page27【例2-6】利用字符串比較函數判斷字符串是否相同。2.1.3字符和字符串>>str1='hello';str2='help';>>strcmp(str1,str2)

ans=0>>strncmp(str1,str2,3)

ans=1>>str3='Help';>>strcmpi(str2,str3)

ans=12023/2/4機械工業(yè)出版社Page28字符串比較——比較字符串中字符MATLAB利用關系運算符“==”來實現兩個字符串逐個字符的比較;待比較的兩個字符串長度必須相等,或者其中有一個是單字符。

2.1.3字符和字符串2023/2/4機械工業(yè)出版社Page29【例2-7】比較兩個字符串里的字符是否相同。2.1.3字符和字符串>>str1='hello';str2='help';str3='Help';>>str1==str2%對長度不相等的字符進行比較???Errorusing==>eq

%錯誤信息Matrixdimensionsmustagree.>>str2==str3

ans=0111>>str4='h';>>str1==str4%字符串與單個字符比較

ans=100002023/2/4機械工業(yè)出版社Page30字符串比較——判別字符串中字符類別isletter:判斷字符串中的每個字符是否為英文字母;isspace:判斷字符串中的字符是否屬于格式字符(空格、制表符、回車和換行等);isstrprop:逐字符檢測字符串里的字符是否屬于指定范圍(字母、字母和數字、大寫或小寫、十進制數、十六進制數等)。2.1.3字符和字符串2023/2/4機械工業(yè)出版社Page31字符串查找strfind(str,pattern):在字符串str中查找pattern子串,返回字串出現位置;findstr(str1,str2):查找字符串str1和str2,返回較短字符串在較長字符串中出現的位置;strmatch(str,strarray):從字符串數組strarray中查找所有以字符串str開頭的字符串Strtok(str,char):返回字符串str中由char指定的字符前的部分和之后的部分,默認的char為空格、制表符或換行符。后兩個函數在MATLAB將來版本中將移除!2.1.3字符和字符串2023/2/4機械工業(yè)出版社Page32【例2-8】利用strfind函數在字符串'himatlab2010!'中查找字符串'mat',并利用strtok函數將該字符串以空格分隔。2.1.3字符和字符串>>str1='himatlab2010!';>>str2='mat';>>strfind(str1,str2)

ans=4>>[token,remain]=strtok(str1)token=hiremain=matlab2010!2023/2/4機械工業(yè)出版社Page33字符串替換strrep(str1,str2,str3):函數將字符串str1中所有str2字串用str3來替換;strrep對字母的大小寫敏感,只能替換str1中與str2完全一致的字串。2.1.3字符和字符串2023/2/4機械工業(yè)出版社Page34【例2-9】將字符串'himatlab2010!'中的子字符串'mat'替換為‘Mat’。2.1.3字符和字符串>>str1='himatlab2010!';>>str2='mat';>>str3='Mat';>>strrep(str1,str2,str3)

ans=hiMatlab2010!2023/2/4機械工業(yè)出版社Page35函數句柄(Functionhandle)是MATLAB的一種數據類型,他實際上提供了一種間接調用函數的方法。使用函數句柄,方便了實現函數間互相調用,可以拓寬子函數的使用范圍,提高函數調用的可靠性,減少程序設計中的冗余和提高重復執(zhí)行的效率。2.1.4函數句柄2023/2/4機械工業(yè)出版社Page36創(chuàng)建函數句柄創(chuàng)建函數句柄的語法形式如下:h=@functionname其中:h:為保存函數句柄的變量;@:是句柄創(chuàng)建操作符;

functionname:MATLAB內部函數名稱或函數所對應的M文件的名稱。2.1.4函數句柄2023/2/4機械工業(yè)出版社Page37使用函數句柄創(chuàng)建函數句柄并保存變量后,就可以通過函數句柄變量來調用句柄所關聯的函數。通過函數句柄調用函數時,也需要指定函數的輸入參數;沒有輸入參數的函數,在使用句柄調用時,要在句柄變量后加上空的圓括號;內部函數名稱或函數所對應的M文件的名稱。2.1.4函數句柄2023/2/4機械工業(yè)出版社Page38函數句柄處理函數functions:返回函數句柄的描述信息;func2str:將函數句柄轉換為函數名稱字符串str2func:將字符串代表的函數轉換為函數句柄;save:保存函數句柄到MAT文件中;load:從MAT文件中讀入函數句柄到當前工作空間;isa:判斷一個變量是否包含和一個函數句柄isequal:判斷兩個函數句柄是否指向同一個函數。2.1.4函數句柄2023/2/4機械工業(yè)出版社Page39【例2-10】創(chuàng)建cos函數的句柄,并利用該函數句柄計算數組的余弦值。2.1.4函數句柄>>h=@cos;>>v=0:0.2*pi:pi;>>h(v)ans=1.00000.80900.3090-0.3090-0.8090-1.00002023/2/4機械工業(yè)出版社Page40結構體相當于一個數據容器,把多個相關聯的不同類型的數據封裝在一個結構體對象中。結構體是利用域而非下標索引來對結構元素進行尋址;用點號來訪問域中的數據。2.1.5結構體2023/2/4機械工業(yè)出版社Page41賦值語句創(chuàng)建結構體賦值表達式左邊代表了結構體的字段變量名,右邊是給變量所賦予的值。在對結構體的字段進行賦值時,該字段會自動創(chuàng)建。借助圓括號和索引,用戶可輕松創(chuàng)建擁有相同結構的結構體數組對象。2.1.5結構體2023/2/4機械工業(yè)出版社Page42【例2-11】利用賦值語句創(chuàng)建結構體示例。2.1.5結構體>>='Tom';>>person.sex='male';>>person.age=20;>>personperson=name:'Tom'sex:'male'age:20>>person(2).name='Jack';>>person(2).sex='male';>>person(2).age=18;>>personperson=1x2structarraywithfields:namesexage2023/2/4機械工業(yè)出版社Page43struct函數創(chuàng)建結構體函數的語法形式如下

:sArray=struct('field1',values1,'field2',values2,...)其中:filed1、field2:結構體包含的第一個和第二個字段value1、value2:結構體第一個字段和第二個字段的數值sArray:所創(chuàng)建的結構體對象名sArray2.1.5結構體2023/2/4機械工業(yè)出版社Page44【例2-12】struct函數創(chuàng)建結構體示例。2.1.5結構體>>person=struct('name','Tom','sex','male','age',20)person=name:'Tom'sex:'male'age:202023/2/4機械工業(yè)出版社Page45增加結構體字段當為結構體數組中的任意一個元素定義一個新的字段時,該數組中的所有元素都會增加一個新的字段。刪除結構體字段rmfield函數來刪除結構體的字段;strArray2=rmfield(strArray,'field')參數分別為結構體對象和待刪除字段;2.1.5結構體2023/2/4機械工業(yè)出版社Page46【例2-13(14)】修改結構體示例。2.1.5結構體>>person(2).height=175;>>person(1)ans=name:'Tom'sex:'male'age:'20'height:[]>>person(2)ans=name:'Jack'sex:'male'age:18height:175>>newperson=

rmfield(person,'sex')newperson=1x2structarraywithfields:nameageheight2023/2/4機械工業(yè)出版社Page47訪問結構體MATLAB中對結構體成員字段的訪問與C、C++和Java中對結構體成員變量的訪問很類似,他們都是在結構體數組對象后通過“.”運算符和字段名來實現對字段的訪問。MATLAB是通過圓括號()與索引下標來訪問結構體數組元素。2.1.5結構體2023/2/4機械工業(yè)出版社Page48【例2-15】利用圓括號和點運算符訪問結果體數組person中的元素及字段。2.1.5結構體>>person(1).name

ans=Tom>>person(2).height

ans=175>>fori=1:length(person)

disp(person(i).name);endTomjack

2023/2/4機械工業(yè)出版社Page49結構體嵌套

結構體可以包含多個字段,并且每個字段都可以存儲不同類型的數據,包括結構體類型的數據。當結構體的字段也是結構體時,就是這里所介紹的結構體嵌套。

2.1.6結構體2023/2/4機械工業(yè)出版社Page50【例2-16】為結構體數組person增加一個結構體類型的字段parent,該字段包含father和mother兩個字段。2.1.5結構體>>person(1).parent.father='Joson';>>person(1).parent.mother='Jerry';>>person(1)ans=name:'Tom'sex:'man'age:'20'height:[]parent:[1x1struct]>>person(1).parentans=father:'Joson'mother:'Jerry'2023/2/4機械工業(yè)出版社Page51單元數組是MATLAB中的一種特殊數據結構。與結構體類型類似,單元數組也可以存儲不同類型、不同大小的數據。不同的是,單元數組的一個單元既可以包含一個整數數組或浮點數數組,也可以包含一個字符數組或是復數數組。2.1.6單元數組2023/2/4機械工業(yè)出版社Page522.1.6單元數組cell1,1cell1,2cell2,1cell2,22023/2/4機械工業(yè)出版社Page53賦值語句創(chuàng)建單元數組內容下標索引賦值:花括號出現在賦值語句左側A{1,2}=[241;563;789];

單元下標索引賦值:花括號出現賦值語句右側時,左側用圓括號來標識索引

A(2,1)={[1+i*2-2;4-i*5i*6]};

2.1.6單元數組2023/2/4機械工業(yè)出版社Page54【例2-17】賦值語句創(chuàng)建單元數組示例。2.1.6單元數組>>A{1,1}=char('Hello,MATLAB!','IloveMATLAB.','WelcometoMATworld!');>>A{1,2}=[241;563;789];>>A(2,1)={[1+i*2-2;4-i*5i*6]};A(2,2)={[]};

A=[3x21char][3x3double][2x2double] []>>A(1,2)ans=[3x3double]>>A{1,2}ans=2415637892023/2/4機械工業(yè)出版社Page55cell函數創(chuàng)建結構體函數的語法形式如下

cellarrName=cell(m,n)該語句創(chuàng)建了一個包含m行n列的單元數組,將其保存在cellarrName中。說明:利用cell函數創(chuàng)建單元數組后,還需對數組的每一個單元進行賦值。

2.1.6單元數組2023/2/4機械工業(yè)出版社Page56【例2-18】cell函數創(chuàng)建單元數組示例。2.1.6單元數組>>B=cell(2,2);>>B{1,1}=rand(2,2);>>BB=[2x2double][][][]>>B{1,1}ans=0.81470.12700.90580.91342023/2/4機械工業(yè)出版社Page57擴展單元數組利用賦值語句給單元數組中的單位賦值,如果這個單元不存在,MATLAB會自動創(chuàng)建對應的單元。刪除結構體字段如果要刪除單元數組中的部分元素,只要將空值賦給這一部分元素即可;若要刪除單元數組的所有元素,調用clear命令即可。2.1.6單元數組2023/2/4機械工業(yè)出版社Page58【例2-19】擴展和刪除單元數組示例。2.1.6單元數組>>A{3,3}=rand(2,2);>>AA=[3x21char][3x3double] [][2x2double] [] [][] [][2x2double]>>A(3,:)=[];>>AA=[3x21char][3x3double][][2x2double][][]2023/2/4機械工業(yè)出版社Page59訪問單元數組利用花括號標識的內容下標索引能夠直接訪問單元數據內的數據。利用圓括號標識的單元下標索引只能定位單元數組中單元的位置,其返回結果仍然是一個單元類型的數組若想得到單元數組中某個單元內容的子集,可通過兩套下標來達到目的。2.1.6單元數組2023/2/4機械工業(yè)出版社Page60【例2-20】訪問單元數組內部數據示例。2.1.6單元數組>>A{1,1}=char('Hello,MATLAB!','IloveMATLAB.','WelcometoMATworld!');>>A{1,2}=[241;563;789];>>A(2,1)={[1+i*2-2;4-i*5i*6]};A(2,2)={[]};>>A{1,2}(1,2)

ans=4>>B=A(1,2)B=[3x3double]%B的大小為1×1>>B{1,1}

%返回B(1,1)中的內容

ans=241;563;789>>B{1,1}(3,3)

%返回B(1,1)中(3,3)位置的內容

ans=92023/2/4機械工業(yè)出版社Page61結構體嵌套和結構體類型類似,單元數組也支持嵌套。嵌套單元數組的創(chuàng)建及各種操作與一般單元數組類似,都是通過花括號來指定單元內容。2.1.6單元數組2023/2/4機械工業(yè)出版社Page62【例2-21】創(chuàng)建嵌套單元數組示例。2.1.6單元數組>>A{1,1}=char('Hello,MATLAB!','IloveMATLAB.','WelcometoMATworld!');>>A{1,2}=[241;563;789];A{2,1}=[1+i*2-2;4-i*5i*6];>>A{2,2}(1,1)={‘Hi,Everyone!’};A{2,2}(1,2)={rand(2,2)};>>A{2,2}(2,2)={cell(2,2)};A=[3x21char][3x3double][]{2x2cell}>>A{2,2}ans='Hi,Everyone!'[2x2double][]{2x2cell}2023/2/4機械工業(yè)出版社Page632.2基本運算符2.2.1算術運算符2.2.2關系運算符2.2.3邏輯運算符2.2.4運算符優(yōu)先級2023/2/4機械工業(yè)出版社Page64算術運算符用于實現數值的計算,按作用對象的不同,可以將MATLAB算符運算符可分為數組運算符和矩陣運算符兩類。2.2.1算術運算符2023/2/4機械工業(yè)出版社Page65數組運算符+:數組相加運算符;-

:數組相減運算符;.*

:數組相乘運算符;./:數組右除運算符;.\:數組左除運算符;.^

:數組乘方運算符;.’

:數組轉置運算符;2.2.1算術運算符算術運算,是兩個同維數組對應元素之間的運算。當一個標量與數組進行算術運算,標量與數組每個元素都進行運算。2023/2/4機械工業(yè)出版社Page66矩陣運算符+:矩陣相加運算符;-

:矩陣相減運算符;*:矩陣相乘運算符;/:矩陣右除運算符;\

:矩陣左除運算符;^

:矩陣乘方運算符;’:矩陣轉置運算符;::矩陣索引運算符,用于增量操作。2.2.1算術運算符

MATLAB矩陣運算是按線性代數的規(guī)則進行運算,利用矩陣運算符對矩陣進行操作時矩陣的維數要滿足相關運算條件。。2023/2/4機械工業(yè)出版社Page67關系運算符用于比較兩個同維數組或同維向量的對應元素,結果為與操作數同維的邏輯數組,數組的每個元素為邏輯真或邏輯假。

2.2.2關系運算符2023/2/4機械工業(yè)出版社Page68小于運算符<

,當左操作數小于右操作數時返回邏輯真,否則返回邏輯假;小于等于運算符<=:當左操作數小于等于右操作數時返回邏輯真,否則返回邏輯假大于運算符>

:當左操作數大于右操作數時返回邏輯真,否則返回邏輯假;2.2.2關系運算符2023/2/4機械工業(yè)出版社Page69大于等于運算符>=:當左操作數大于等于右操作數時返回邏輯真,否則返回邏輯假;等于操作符==

:當左操作數與右操作數相等時返回邏輯真,否則返回邏輯假;不等于操作符~=:當左操作數與右操作數不相等時返回邏輯真,否則返回邏輯假。2.2.2關系運算符2023/2/4機械工業(yè)出版社Page70【例2-22】關系運算符使用示例。2.2.2關系運算符>>A=rand(3,3)A=0.42180.95950.84910.91570.65570.93400.79220.03570.6787>>B=rand(3,3)B=0.75770.65550.03180.74310.17120.27690.39220.70600.0462>>A>Bans=0111111012023/2/4機械工業(yè)出版社Page71

MATLAB包含三種類型的邏輯運算:逐元素邏輯運算、捷徑邏輯運算和逐位邏輯運算,其中前面兩類以運算符的形式提供。2.2.3邏輯運算符2023/2/4機械工業(yè)出版社Page72逐元素邏輯運算符邏輯與&

:當左操作數和右操作數都為邏輯“真”時,返回邏輯“真”,否則返回邏輯“假”;邏輯或|:當左操作數或右操作數為邏輯“真”時,返回邏輯“真”,否則返回邏輯“假”邏輯非~

:單目運算符,當操作數為邏輯“真”或非零時,返回邏輯“假”,否則返回邏輯“真”。2.2.3邏輯運算符2023/2/4機械工業(yè)出版社Page73捷徑邏輯運算符邏輯與&&:當左操作數為邏輯“假”時,不再對右操作數進行判斷,直接返回邏輯“假”,否則同逐元素邏輯與(&);邏輯或||:當左操作數為邏輯“真”時,不再對右操作數進行判斷,直接返回邏輯“真”,否則同逐元素邏輯或(|)。2.2.3邏輯運算符2023/2/4機械工業(yè)出版社Page74同C、C++等高級編程語言一樣,MATLAB對各種運算符的優(yōu)先級也作了規(guī)定。在進行運算時,遵循高優(yōu)先級的運算符先于低優(yōu)先級運算符的計算,相同優(yōu)先級的運算符的計算遵從左到右的原則。

MATLAB的運算符共有11個優(yōu)先級。2.2.4運算符優(yōu)先級2023/2/4機械工業(yè)出版社Page751.小括號(());2.轉置和乘冪(.’、.^、’、^);3.一元加/減運算(+、-)和邏輯非(~);4.乘(*),除(/、\),點乘(.*)、點除(./、.\);5.加(+)、減(-);6.冒號運算(:);7.關系運算(>、>=、<、<=、==、~=);

2.2.4運算符優(yōu)先級2023/2/4機械工業(yè)出版社Page768.逐元素邏輯與(&);9.逐元素邏輯或(|);10.捷徑邏輯與(&&);11.捷徑邏輯或(||)。2.2.4運算符優(yōu)先級在所有運算符中,括號運算符優(yōu)先級最高,其次是各種算術運算符,然后是關系運算符,優(yōu)先級最低的是邏輯運算符。2023/2/4機械工業(yè)出版社Page772.3數組及其運算2.3.1數組的創(chuàng)建2.3.2數組元素的訪問2.3.3數組操作2.3.4數組運算2.3.5多維數組2023/2/4機械工業(yè)出版社Page78按照數組排列方式和元素個數的不同,可以將MATLAB數組分為空數組、一維數組、二維數組和多維數組。MATLAB一般使用方括號、逗號、空格和分號來創(chuàng)建數組。方括號中給出數組的所有元素,不同行之間用分號分隔,同一行不同元素之間用逗號和空格分隔。2.3.1數組的創(chuàng)建2023/2/4機械工業(yè)出版社Page79創(chuàng)建空數組A=[]創(chuàng)建一維數組創(chuàng)建一維行向量,把所有用空格或逗號分隔的元素用方括號括起來;創(chuàng)建一維列向量,把所有用分隔分隔的元素用方括號括起來;利用轉置運算符將行向量轉換為列向量。2.3.1數組的創(chuàng)建2023/2/4機械工業(yè)出版社Page80創(chuàng)建一維數組通過冒號運算符(:)來創(chuàng)建等差向量

varName=startVal

:step:stopVal通過linspace函數創(chuàng)建等差向量;通過logspace函數創(chuàng)建等比向量;2.3.1數組的創(chuàng)建2023/2/4機械工業(yè)出版社Page81創(chuàng)建二維數組二維數組的創(chuàng)建與一維數組類似,也是利用方括號、分號、逗號和空格將元素進行分隔和組合來構成數組。其中,方括號中包含所有元素,不同行元素之間用分號分隔,同一行元素之間用逗號或空格間隔。可以利用冒號和函數來創(chuàng)建二維數組。2.3.1數組的創(chuàng)建2023/2/4機械工業(yè)出版社Page82【例2-23】創(chuàng)建一維數組示例。2.3.1數組的創(chuàng)建>>A=[]%創(chuàng)建空數組A=[]>>A=[1357]%創(chuàng)建一維行向量A=1357>>A=[1;3;5;7]%創(chuàng)建一維列向量A=1357>>A=1:2:7A=13572023/2/4機械工業(yè)出版社Page83【例2-24】創(chuàng)建二維數組示例。2.3.1數組的創(chuàng)建>>A=[123;456;789]A=123456789>>B=[135;4:2:8;linspace(2,10,3)]B=13546826102023/2/4機械工業(yè)出版社Page84給定一個一維數組A,可以用A(n)來訪問數組A的第n個元素,若要同時訪問數組A的多個元素,可以利用冒號操作符(:),如A(1:3)會返回數組第1至第3個元素。對于二維數組,MATLAB提供了雙下標索引和單下標索引兩種方式來訪問數組元素。2.3.2數組元素的訪問2023/2/4機械工業(yè)出版社Page85雙下標索引用兩個數字來定位元素的位置,第一個數字指定元素所在的行,第二個數字指定元素所在的列單下標索引只用一個數字來指定數組元素的位置

2.3.2數組元素的訪問2023/2/4機械工業(yè)出版社Page86單雙下標索引轉換函數

ind=sub2ind(size,x,y)[x,y]=ind2sub(size,ind)其中:size:一個1行2列的數組,指定數組的尺寸大小;x、y:雙下標索引值;ind:單下標索引值。2.3.2數組元素的訪問2023/2/4機械工業(yè)出版社Page87【例2-25】二維數組訪問示例。2.3.2數組元素的訪問>>A=rand(3,4)%隨機生成一個3行4列的數組A=0.09710.31710.43870.79520.82350.95020.38160.18690.69480.03440.76550.4898>>A(2,3)

ans=0.3816%訪問第2行第3列元素>>A(8)

ans=0.3816%訪問下標為8的元素>>ind=sub2ind([3,4],2,3)%雙->單下標索引

ind=8>>[x,y]=ind2sub(size(A),8)%單->雙下標索引x=2y=32023/2/4機械工業(yè)出版社Page88數組的基本操作包括數組的載入與保存、獲取數組屬性、改變數組結構(伸縮數組)、改變數組形狀、數組排序和數組查找等。2.3.3數組操作2023/2/4機械工業(yè)出版社Page89數組載入與保存save<filename><var1><var2>…<varN>將工作區(qū)中的變量var1、var2…varN保存到filename指定的mat文件中l(wèi)oad<filename><var1><var2>…<varN>將存儲在filename.mat文件中的var1、var2…varN載入到工作區(qū)中。2.3.3數組操作2023/2/4機械工業(yè)出版社Page90獲取數組排列結構isempty:判斷某個數組是否是空數組;isscalar:判斷某個數組是否是單元素的標量數組;isvector:判斷某個數組是否是一維向量數組issparse:判斷某個數組是否是稀疏矩陣。2.3.3數組操作2023/2/4機械工業(yè)出版社Page91獲取數組大小size:獲取數組行列數,返回值是一個1行2列的一維向量;length:獲取數組的長度,當數組是一維數組時,返回值為數組中包含元素的個數;若數組是二維數組,返回行數與列數中較大的那一個值;numel:返回數組元素的總個數,對于一個m行n列的二維數組,函數返回值為m×n。2.3.3數組操作2023/2/4機械工業(yè)出版社Page92獲取數組數據類型isnumeric:判斷數組元素是否是數值型;isreal:判斷數組元素是否是實數型;isfloat:判斷數組元素是否是浮點型;isinteger:判斷數組元素是否是以整型;islogical:判斷數組元素是否是邏輯型;ischar:判斷數組元素是否是字符型;isstruct:判斷數組元素是否是結構體型;iscell:判斷數組元素是否是單元數組型;iscellstr:判斷是否是字符串單元數組型;2.3.3數組操作2023/2/4機械工業(yè)出版社Page93改變數組結構利用變量編輯器改變數組結構利用下標索引擴展數組:當超過下標索引取值范圍來定位數組元素,并對其賦值,就可以實現數組尺寸的擴張利用cat函數擴展數組:cat

horzcat

vertcat

利用塊操作函數擴展數組:repmat

blkdiag

利用[]裁剪數組:對指定位置的元素賦值為空方括號[],即可完成數組元素的刪除2.3.3數組操作2023/2/4機械工業(yè)出版社Page94【例2-26】數組擴展和裁剪示例。2.3.3數組操作A=0.44560.75470.65510.64630.27600.16260.70940.67970.1190>>A(3,4)=0.9%利用下標索引擴展數組A=0.44560.75470.655100.64630.27600.162600.70940.67970.11900.9000>>A(3,:)=[];A(:,4)=[]

%利用[]裁剪數組A=0.44560.75470.65510.64630.27600.16262023/2/4機械工業(yè)出版社Page952.3.3數組操作>>repmat(A,2,2)%利用repmat函數擴展數組ans=0.44560.75470.65510.44560.75470.65510.64630.27600.16260.64630.27600.16260.44560.75470.65510.44560.75470.65510.64630.27600.16260.64630.27600.1626>>B=[13;42];>>blkdiag(A,B)%利用blkdiag函數擴展數組ans=0.44560.75470.6551000.64630.27600.1626000001.00003.00000004.00002.00002023/2/4機械工業(yè)出版社Page96改變數組形狀——轉置轉置操作符(’):實現數組的共軛轉置;點轉置操作符(.’):實現數組的非共軛轉置transpose:實現數組的非共軛轉置,功能同點轉置操作符(.’);ctanspose:實現數組的共軛轉置,功能同轉置操作符(’)。2.3.3數組操作2023/2/4機械工業(yè)出版社Page97改變數組形狀——數組翻轉fliplr:左右翻轉數組;flipud:上下翻轉數組;flipdim:按指定方向翻轉數組,當方向參數值為1時,等同flipup,當方向參數值為2時,等同fliplr;rot90:將數組逆時針旋轉90度的整數倍。2.3.3數組操作2023/2/4機械工業(yè)出版社Page98改變數組形狀——reshape函數reshape函數的語法形式如下:B=reshape(A,a,b)A:輸入數組;a、b:調整之后的行數與列數;B:調整之后的數組。2.3.3數組操作調整前后,數組元素個數不會改變。若A的行列數分別為m和n,調正后的行列數分別為a和b,則有

m*n=a*b2023/2/4機械工業(yè)出版社Page99【例2-27】改變數組形狀示例。2.3.3數組操作A=0.49840.58530.25510.89090.95970.22380.50600.95930.34040.75130.69910.5472>>B=A'%對數組進行轉置操作B=0.49840.95970.34040.58530.22380.75130.25510.50600.69910.89090.95930.54722023/2/4機械工業(yè)出版社Page1002.3.3數組操作%對數組A進行左右翻轉>>C=fliplr(A)C=0.89090.25510.58530.49840.95930.50600.22380.95970.54720.69910.75130.3404%將數組A的行數變?yōu)?,列數變?yōu)?>>D=reshape(A,4,3)D=0.49840.22380.69910.95970.75130.89090.34040.25510.95930.58530.50600.54722023/2/4機械工業(yè)出版社Page101數組排序sort函數的語法形式如下所示:B=sort(A)B=sort(A,dim)B=sort(...,mode)[B,IX]=sort(A,...)2.3.3數組操作dim=1對每一列排序,dim=2對每一行排序;mode=’ascend’時,升序排序,mode=’descend’時,降序排序;sort(A)實現對一維或二維數組進行升序排序,并返回排序后的數組,當A為二維數組時,對數組的每一列進行排序。

2023/2/4機械工業(yè)出版社Page102【例2-28】數組排序示例。2.3.3數組操作A=0.13860.84070.24350.19660.14930.25430.92930.25110.25750.81430.35000.6160>>sort(A)%對數組A按列升序排列ans=0.13860.25430.24350.19660.14930.81430.35000.25110.25750.84070.92930.6160>>sort(A,2,'descend')%對數組A按行降序排列ans=0.84070.24350.19660.13860.92930.25430.25110.14930.81430.61600.35000.25752023/2/4機械工業(yè)出版社Page103數組查找find函數的語法形式如下所示:ind=find(X)ind=find(X,k)[row,col]=find(X,...)2.3.3數組操作find(X)返回數組A中非零元素的單下標索引。find(X,k)返回數組A中最多k個非零元素的單下標索引[row,col]=find(X,...)返回數組A的雙下標索引。2023/2/4機械工業(yè)出版社Page104數組的運算包括標量-數組運算和數組-數組運算。本書的數組運算限定為元素對元素的運算,矩陣運算則是遵循線性代數運算規(guī)則的運算,詳見2.4.3。2.3.4數組運算2023/2/4機械工業(yè)出版社Page105數組-數組運算數組-數組運算要求參與運算的兩個數組具有相同的尺寸;一個數組中的元素只與另一個數組中對應位置的元素進行運算;數組-數組運算的乘法、除法和乘方運算為點運算。2.3.4數組運算2023/2/4機械工業(yè)出版社Page106標量-數組運算標量與數組的運算,就是將標量作用與數組的每個元素上。常見的運算包括加(+)、減(-)、乘(*)、除(\)和乘方等運算。2.3.4數組運算2023/2/4機械工業(yè)出版社Page107【例2-29】標量-數組運算示例。2.3.4數組運算A=816357492>>A-2ans=6-14135270>>A*2ans=162126101481842023/2/4機械工業(yè)出版社Page108【例2-30】數組-數組運算示例。2.3.4數組運算A=0.26300.74820.22900.65410.45050.91330.68920.08380.1524B=0.82580.07820.96190.53830.44270.00460.99610.10670.7749>>A–Bans=-0.56280.6700-0.73290.11580.00780.9087-0.3069-0.0229-0.6225>>A.*Bans=0.21720.05850.22030.35210.19940.00420.68660.00890.1181>>A.\Bans=3.14030.10454.20090.82310.98250.00511.44531.27245.0854>>A.^2ans=0.06920.55970.05240.42780.20300.83420.47500.00700.02322023/2/4機械工業(yè)出版社Page109多維數組是指維數超過兩維的數組,它實際上是二維數組的擴展。對于二維數組,習慣上將第一維稱為行,第二維稱為列,二維數組就是一個由行和列所確定的“面”,多維數組實際上是在多維空間中對這個“面”的擴展。2.3.5多維數組2023/2/4機械工業(yè)出版社Page110創(chuàng)建多維數組通過指定索引將二維數組擴展成多維數組;利用MATLAB內聯函數創(chuàng)建多維數組:reshaperepmat

利用cat函數創(chuàng)建多維數組;通過擴展二維數組創(chuàng)建三維數組,一般先創(chuàng)建三維數組每一頁上的二維數組,然后將它們賦值給三維數組第三維的指定位置。2.3.5多維數組2023/2/4機械工業(yè)出版社Page111【例2-31】擴展二維數組來創(chuàng)建三維數組。2.3.5多維數組A=0.81730.08440.25990.86870.39980.8001>>A(:,:,2)=ones(2,3)%給數組A增加一頁A(:,:,1)=0.81730.08440.25990.86870.39980.8001A(:,:,2)=1111112023/2/4機械工業(yè)出版社Page112【例2-32】利用MATLAB內聯函數創(chuàng)建多維數組示例

。2.3.5多維數組A=0.35100.40180.23990.18390.41730.90270.51320.07600.12330.24000.04970.9448%將數組A變形為一個2行3列2頁的三維數組>>B=reshape(A,2,3,2)

B(:,:,1)=0.35100.40180.23990.51320.07600.1233B(:,:,2)=0.18390.41730.90270.24000.04970.94482023/2/4機械工業(yè)出版社Page1132.3.5多維數組A=0.35100.40180.23990.18390.41730.90270.51320.07600.12330.24000.04970.9448C=111111%將數組B和C連接成一個新的多維數組D>>D=cat(3,B,C)

D(:,:,1)=0.35100.40180.23990.51320.07600.1233D(:,:,2)=0.18390.41730.90270.24000.04970.9448D(:,:,3)=1111112023/2/4機械工業(yè)出版社Page114多維數組訪問多維數組也是通過下標索引實現對多維數組元素的訪問,包括多下標索引和單下標索引對于n維數組,多下標索引方法通過指定n個下標索引來訪問指定位置的元素單下標索引方法則是通過一個下標來定位多維數組的元素多下標索引與單下標索引之間也可以相互轉換2.3.5多維數組2023/2/4機械工業(yè)出版社Page115多維數組訪問MATLAB是按照行-列-頁的順序將多維數組的所有元素線性存儲起來;即:先存儲第1頁第1列第1行的元素,然后存儲第1頁第1列第2行的元素,存儲完第1列后,再存儲第2列,完成第1頁的存儲再存儲第2頁,直至最后一頁最后一個元素。2.3.5多維數組2023/2/4機械工業(yè)出版社Page116【例2-33】多維數組訪問示例

。2.3.5多維數組A(:,:,1)=0.49090.33770.36920.48930.90010.1112A(:,:,2)=0.78030.24170.09650.38970.40390.1320>>A(1,3,1)

ans=0.3692>>A(5)

ans=0.3692>>A(9)=0.99

%對數組中下標索引為9的元素賦值A(:,:,1)=0.49

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論