1. 程式人生 > >【matlab】MATLAB基礎知識

【matlab】MATLAB基礎知識

 

2018年06月21日 01:26:39 桂哥317 閱讀數:483更多

個人分類: MATLAB

版權宣告:轉載時打個招呼。 https://blog.csdn.net/qq_15971883/article/details/80587780

專題一   MATLAB基礎知識

目錄

1. MATLAB系統環境

2. MATLAB數值資料

3. 變數及其操作

4. MATLAB矩陣的表示

5. 矩陣元素的引用

6. MATLAB基本運算

7. 字串處理

--------------------------------------------------------------------------------------------------------

一、MATLAB系統環境

1. MATLAB操作介面的組成

操作介面:MATLAB主視窗+命令列視窗+當前資料夾視窗+工作區視窗

MATLAB主視窗:功能區+快速訪問工具欄+當前資料夾工具欄

命令列視窗:用於輸入命令並顯示命令的執行結果。

續行符:用...表示,把下一個物理行看做是當前行的邏輯繼續。

當前資料夾視窗:

如何設定當前資料夾呢?

1>. 在當前資料夾工具欄或當前資料夾視窗中選擇某資料夾為當前資料夾;

2>. 使用 cd 命令。

>> cd e:\work   % 將e盤下的資料夾work設定為當前資料夾(注:必須先建立資料夾work,才能設定)

工作區視窗(也叫工作空間視窗):

工作空間是用於儲存各種變數和結果的記憶體空間。

2. MATLAB的搜尋路徑

命令物件的搜尋順序:

當在MATLAB中輸入一個命令物件,MATLAB首先檢測它是否是已存在的變數,如果不是,則檢測它是否是內部函式,如果不是,則檢測它是否是程式檔案,先檢測它是否是當前資料夾下的程式檔案,再檢測它是否是檔案搜尋路徑資料夾中的程式檔案。如下圖:

舉個例子:先用內部函式sin()計算弧度為1時的x值,再定義變數sin為[1 2 3 4 5],再次使用命令物件sin時,輸出的結果是變數中的值。

如果這時需要呼叫函式sin(),該如何操作呢?可以在工作區視窗刪除定義的sin變數,那麼再次使用命令物件sin則表示內部函數了。所以在給變數取名的時候,儘量不要與內部函式等重名。

如何設定檔案搜尋路徑?

1>. 用path命令設定檔案搜尋路徑

例如:>> path(path, 'e:\work');      % 將e盤下的work資料夾納入到檔案搜尋路徑中

2>. 用對話方塊設定檔案搜尋路徑

MATLAB主視窗->功能區->環境塊->設定路徑,點選設定路徑,彈出對話方塊,設定檔案搜尋路徑。

如果使用者建立的檔案既沒有儲存在當前資料夾下,也沒有儲存在檔案搜尋路徑中,那麼MATLAB就找不到這個檔案,系統會給出錯誤提示資訊。

--------------------------------------------------------------------------------------------------

二、MATLAB數值資料

1. 數值資料型別的分類

整型、浮點型、複數型

(1) 整型

無符號整型(8位、16位、32位、64位)和有符號整型(8位、16位、32位、64位)。

無符號8位整型資料的範圍:00000000~11111111(0~2^8 - 1)

有符號8位整型資料的範圍:10000000~01111111(-2^7 ~ 2^7 -1)

舉個例子:

>> x=int8(129)   % int8是有符號8位整型資料,範圍是-128~127,因為129超出了範圍,所以輸出為127

>> x=uint8(129)  % uint8是無符號8位整型資料,範圍是0~255,因為129沒有超出範圍,所以輸出仍是129

(2) 浮點型

single()函式:將其他型別的資料轉換為單精度型

double()函式:將其他型別的資料轉換為雙精度型,double型別在記憶體中佔用8個位元組。

舉個例子:在MATLAB中輸入數值4,呼叫函式class()判斷數值的型別,返回的型別是double,說明了MATLAB預設的數值型別是double型;呼叫函式single()將double型的數值4轉換為single型,再呼叫函式class(),返回的型別是single。如下圖所示:

(3) 複數型

複數型資料包括實部和虛部兩個部分,實部和虛部均預設為是double型別,虛數單位用i或者j來表示。

real()函式:求複數的實部

imag()函式:求複數的虛部

2. 數值資料的輸出格式

採用format命令設定數值資料的輸出格式,format命令的呼叫格式如下:

format  格式符        % 該命令只是影響輸出的格式,並不影響資料的計算以及儲存,預設的輸出格式是short

舉個例子:

3. 常用數學函式

(1) 函式的呼叫格式為: 函式名(函式自變數的值)

如果函式自變數的值是一個矩陣,那麼函式在運算時是將函式逐項作用於矩陣的每個元素上,所以最後運算的結果就是一個與自變數同型的矩陣。

(2) 常用函式的應用

1>. 三角函式有以弧度為單位的函式和以角度為單位的函式,如果是以角度為單位的函式就在函式名後面加“d”,以示區別。

例如: >> sin(pi/2),結果為1;>> sind(90),結果也是為1

2>. 函式abs()可以求實數的絕對值、複數的模、字串的ASCII碼值。如下圖所示:

3>. 用於取整的函式

函式round()是按照四捨五入的規則進行取整

函式ceil()是向上取整,取大於等於這個數的第一個整數

函式floor()是向下取整,取小於等於這個數的第一個整數

函式fix()是向靠近0的方向進行取整

舉個例子:

     

4>. 函式應用舉例

分別求一個三位正整數的各位數字、十位數字、百位數字。如下:

求1~100之間的所有素數。如下:

------------------------------------------------------------------------------------------------

三、變數及其操作

主要包括:變數與賦值語句、預定義變數、變數的管理

1. 變數從本質上來講是記憶體單元的一個抽象。

2. 在MATLAB中,變數名是以字母開頭,後接字母、數字或下劃線的字元序列,最多63個字元。

例如,在命令列視窗輸入12my和_my這兩個字串,系統會返回輸入錯誤的提示,如下圖所示。

3. 在MATLAB中,變數名區分字母的大小寫。

4. MATLAB提供的標準函式名以及命令名必須用小寫字母。

5. 預定義變數

預定義變數是由系統本身定義的變數。例如,ans是預設賦值變數;i和j表示虛數單位;pi表示圓周率。

6. 變數的管理

(1) 記憶體變數的刪除與修改,可以在工作空間中進行

(2) who和whos命令用於在命令列視窗中顯示已經在工作空間中駐留的變數名清單

(3) 記憶體變數檔案

    用於儲存MATLAB工作空間中變數的檔案叫做記憶體變數檔案,其副檔名為.mat,也叫MAT檔案。是一種二進位制格式的檔案。

使用save命令建立記憶體變數檔案;使用load命令裝入記憶體變數檔案。

>> save mydata a x;   % 將工作空間中的變數a和x儲存在記憶體變數檔案mydata中

>> load mydata;  % 將記憶體變數檔案mydata裝入到當前工作空間中

------------------------------------------------------------------------------------------------

四、MATLAB矩陣的表示

矩陣是MATLAB中最基本的資料物件,MATLAB的大部分運算或者是命令都是在矩陣計算的意義下執行的。

1. 矩陣的建立

(1) 利用直接輸入法建立矩陣。將矩陣的元素用中括號括起來,按矩陣行的順序輸入各元素,同一行的各元素之間用逗號或者空格分隔,不同行的元素之間用分號分隔。

(2) 利用已經建好的矩陣建立更大的矩陣:一個大矩陣可以由已經建立好的小矩陣拼接而成。

(3) 可以用實部矩陣和虛部矩陣構建複數矩陣。

2. 冒號表示式,產生一個行向量,格式如下

e1 : e2 : e3,其中e1是初始值,e2是步長,e3是終止值。如果省略步長e2,則步長預設為1。

3. 在MATLAB中,還可以使用函式linspace()產生一個行向量。

linspace(a,b,n)     % a是生成向量的第一個元素,b是生成向量的最後一個元素,n是向量的元素總數。當省略n時,自動產生100個元素

4. 結構矩陣和單元矩陣

(1) 結構矩陣

格式為: 結構矩陣元素.成員名=表示式   % 對結構矩陣中每個元素的每個成員進行賦值

在工作空間中的結構矩陣為

(2) 單元矩陣

建立單元矩陣和一般矩陣相似,直接輸入就可以了,只是單元矩陣的元素是用大括號括起來。矩陣中的元素可以是不同型別的資料。

-----------------------------------------------------------------------------------------------------------

五、矩陣元素的引用

1. 矩陣元素的引用方式

(1) 通過下標來引用矩陣的元素

例如:A(4,5)表示矩陣A的第4行第5列的元素。

(2) 通過序號來引用矩陣的元素

在MATLAB中,矩陣元素按列儲存在記憶體中,即首先儲存矩陣的第1列元素,然後儲存矩陣的第2列元素,……,一直到矩陣的最後一列元素。矩陣元素的序號,就是矩陣元素在記憶體中的排列順序。如下例:

序號與下標是一一對應的,以m×n矩陣A為例,矩陣元素A(i,j)的序號是(j-1)×m+i。

矩陣元素的序號與下標可以利用函式sub2ind()和函式ind2sub()實現相互轉換。

函式sub2ind()將矩陣中指定元素的行、列下標轉換為儲存的序號。呼叫格式為:D=sub2ind(S,I,J),其中,S是矩陣行數和列陣列成的向量,通常用函式size()獲取,I是待轉換矩陣元素的行下標,J是待轉換矩陣元素的列下標,D為對應下標的序號。

函式ind2sub()將矩陣元素的序號轉換成對應的下標。呼叫格式為:[I,J]=ind2sub(S,D),引數的意義與函式sub2ind()相同。

2.  利用冒號表示式獲得子矩陣

子矩陣是指由矩陣中的一部分元素構成的矩陣。

A(i, :)    %  矩陣A第i行的全部元素

A(:, j)    %  矩陣A第j行的全部元素

A(i:i+m, j:j+n)   %  矩陣A第i~i+m行的且在第j~j+n列的所有元素

A(i:i+m, :)    %   矩陣A第i~i+m行的全部元素

end運算子:表示某一維的末尾元素的下標。如下例子:

3.  利用空矩陣來刪除矩陣的元素

空矩陣是指沒有任何元素的矩陣。

4.  改變矩陣的形狀

reshape(A,m,n)    %  在矩陣總元素保持不變的前提下,將矩陣A重新排列成m×n的二維矩陣。

reshape()函式只是改變原矩陣的行數和列數,但並不改變原矩陣元素的個數以及儲存順序。如下例子:

A(:)  % 將矩陣A的每一列元素堆疊起來,成為一個列向量。如下例子:

---------------------------------------------------------------------------------------------------

六、MATLAB的基本運算

包括算術運算、關係運算、邏輯運算。

1. 算術運算

(1) 基本算術運算

基本算術運算子有6個:+(加)    -(減)    *(乘)     /(右除)     \(左除)     ^(乘方)

MATLAB的算術運算是在矩陣意義下進行的。單個數據的算術運算只是矩陣運算的一種特例。

加減運算

  • 若兩矩陣同型,則運算時兩矩陣的相應元素相加減。
  • 若兩矩陣不同型,則MATLAB將給出錯誤資訊。
  • 一個標量也可以和矩陣進行加減運算,這時把標量和矩陣的每一個元素進行加減運算。

乘法運算

  • 矩陣A和B進行乘法運算,要求A的列數和B的行數相等,此時稱A、B矩陣是可乘的,或稱A和B兩矩陣維數和大小是相容的。
  • 如果兩者的維數或大小不相容,則將給出錯誤資訊,提示使用者兩個矩陣是不可乘的。

除法運算

  • 右除(/):A/B表示矩陣A乘以矩陣B的逆,即A/B等效於A*inv(B)
  • 左除(\):A\B表示矩陣A的逆乘以矩陣B,即A\B等效於inv(A)*B

乘方運算

  • 一個矩陣的乘方運算可以表示為A^x,要求A為方陣,x為標量。

(2) 點運算

點運算子有4個:   .*(點乘)   ./(點右除)   .\(點左除)   .^(點乘方),兩矩陣進行點運算是指它們的對應元素進行相關運算,要求兩個矩陣同型。

  • 點右除(./):A./B表示矩陣A中的每個元素除以矩陣B中對應的元素
  • 點左除(.\):A.\B表示矩陣B中的每個元素除以矩陣A中對應的元素

 

 

2. 關係運算

關係運算符有6個:  <(小於)、 <=(小於或等於)、 >(大於)、 >=(大於或等於)、 ==(等於)、 ~=(不等於)

  • 當兩個比較物件是標量時,直接比較兩者的大小。若關係成立,關係表示式結果為1;若關係不成立,關係表示式結果為0。

  • 當兩個比較物件是兩個同型矩陣時,比較是對兩矩陣相同位置的元素按標量關係運算規則逐個進行,最終的關係運算結果是一個與原矩陣同型的矩陣,它的元素由0或1組成。
  • 當兩個比較物件中一個是標量,一個是矩陣時,則把標量與矩陣的每一個元素按標量關係運算規則逐個比較,最終的關係運算結果是一個與原矩陣同型的矩陣,它的元素由0或1組成。

3. 邏輯運算

邏輯運算子:  &(與)   |(或)   ~(非)

3.1 設參與邏輯運算的是兩個標量a和b,那麼運算規則是:

  • a & b        a和b全為非零時,結果為1;只要a和b中有一個為0,那麼結果為0
  • a | b          a和b中只要有一個為非零,結果為1
  • ~a            當a為零時,結果為1;當a為非零時,結果為0

3.2 若參與邏輯運算的是兩個同型矩陣,那麼將對矩陣相同位置上的元素按標量規則逐個進行運算,最終得到的運算結果是一個與原矩陣同型的矩陣,它的元素由1或0組成。

3.3 若參與邏輯運算的一個是標量,一個是矩陣,那麼將標量與矩陣每個位置上的元素按標量規則逐個進行運算,最終得到的運算結果是一個與原矩陣同型的矩陣,它的元素由1或0組成。

--------------------------------------------------------------------------------------------------

七、字串處理

MATLAB中兩種基本的資料型別:數值型資料和字元型資料。

1. 字串的表示

 

  • 在MATLAB中,字串是用單引號括起來的字元序列。

 

  • 若字串中的字元含有單引號,則該單引號字元要用兩個單引號來表示。

 

  • 建立多行字串,形成字串矩陣。

舉例。建立一個字串向量,然後對該向量做如下處理:①取第1~5個字元組成的子字串;②將字串倒過來重新排列;③將字串中的小寫字母變成相應的大寫字母,其餘字元不變;④統計字串中小寫字元的個數。

 
  1. >> ch = 'ABc123d4e56Fg9'

  2.  
  3. ch =

  4.  
  5. 'ABc123d4e56Fg9'

  6.  
  7. >> % 第1問

  8. >> sub_ch = ch(1:5)

  9.  
  10. sub_ch =

  11.  
  12. 'ABc12'

  13.  
  14. >> % 第2問

  15. >> rev_ch = ch(end : -1 : 1)

  16.  
  17. rev_ch =

  18.  
  19. '9gF65e4d321cBA'

  20.  
  21. >> % 第3問

  22. >> k = find(ch >= 'a' & ch <= 'z')

  23.  
  24. k =

  25.  
  26. 3 7 9 13

  27.  
  28. >> ch(k) = ch(k) - ('a' - 'A')

  29.  
  30. ch =

  31.  
  32. 'ABC123D4E56FG9'

  33.  
  34. >> % 第4問

  35. >> length(k)

  36.  
  37. ans =

  38.  
  39. 4

2. 字串的操作

(1) 字串的執行

格式: eval(s)   % 把引數字串中的內容作為對應的matlab命令來執行

(2) 字串與數值之間的轉換

 

  • 字串是以ASCII碼值儲存的。函式abs()和函式double()都可以用來獲取字串所對應的ASCII碼值。
  • 函式char()可以把ASCII碼值轉換為字串。

(3) 字串的比較

字串的比較有兩種方法:利用關係運算符或字串比較函式。

 

  • 關係運算符比較:當兩個字串的長度相同時,兩個字串裡的每個字元依次按照ASCII碼值大小逐個進行比較,比較的結果是一個數值向量。該數值向量的元素由1或0組成。

 

  • 字串比較函式用於判斷字串是否相等,有4種比較方式,函式如下:

strcmp(s1, s2):用來比較字串s1和s2是否相等,如果相等,返回結果為1,否則返回0。

strncmp(s1, s2, n):用來比較兩個字串前n個字元是否相等,如果相等,返回結果1,否則返回0。

strcmpi(s1, s2):在忽略字母大小寫的前提下,比較字串s1和s2是否相等,如果相等,返回結果為1,否則返回0。

strncmpi(s1, s2, n):在忽略字母大小寫的前提下,比較字串s1和s2前n個字元是否相等,如果相等,返回結果為1,否則返回0。

(4) 字串的查詢與替換

findstr(s1, s2):返回短字串在長字串中開始的位置。

strrep(s1, s2, s3):將字串s1中的所有字串s2替換為字串s3。