MATLAB變量


 序言

  在Matlab中,變量名由A~Z、a~z、數字和下划線組成,且變量的第一個字符必須是字母. 盡管變量名可以是任意長度, 但是Matlab只識別名稱的前N=namelengthmax個字符, 這里namelengthmax函數給出Matlab所能考慮的最大變量名長度. Matlab是區分大小寫的,如a和A是不同的兩個變量,Matlab自帶的命令通常都是由小寫字母組成,例如abs(A)是計算出A的絕對值.

       Matlab中的語法不同於Java、C,其變量的定義和創建可以直接通過賦值來實現,而不需要單獨聲明,也不需要指定其數據類型.  如果需要使用一個矩陣,可以直接給其元素賦值,不需要指定它的具體維度.

 正文

變量賦值

  Matlab的基本數據結構是矩陣,矩陣中的元素可以是數、字符、邏輯表達式(logic states)、true或false、甚至是Matlab結構體. 基於這個前提,Mathlab能夠處理非常多種類的數據。例如一個單獨的數即一個標量在Matlab中是一個1×1的矩陣,一個行向量為1×N的矩陣,一個列向量為N×1的矩陣,一個多項式也是用一個向量來表示等等。Matlab也支持二維以上的矩陣,稱為多維數組(arrays),例如一個三維數組的元素可以用三維坐標值來定位.

  不管用戶使用什么類型的數據(數、字符、邏輯true或false),Matlab都會將這些數據以矩陣或數組的形式存放. 例如字符串’Hello World’是一個1×11的矩陣,其矩陣元素是一個個單獨的字符.

1 數值賦給變量

  (1) 標量的賦值. 一個1×1的變量a的賦值可以直接用 a=3 這種形式。如果這個賦值語句是寫在命令窗口中,則回車之后Matlab會默認將賦值后的結果輸出在命令窗口中. 如果不希望它將賦值結果輸出,則在賦值語句的末尾添上一個分號

  

  (2) 行向量的賦值. 對行向量賦值時,用b=[1,2,3]b=[1 2 3] 這種形式,行向量的每個分量值之間用空格或一個逗號分隔,整體分量值被包含在一個方括號里.

  

  (3) 列向量的賦值. 對列向量賦值時,用 c=[1;2;3] 這種形式,列向量的每個分量值之間用回車鍵或一個分號分隔.

   

  (4) 二維矩陣的賦值. 對二維矩陣賦值時,一般用 d=[1,2,3;4,5,6;7,8,9] 的形式,其行內元素用逗號或空格隔開,行與行之間用分號或回車鍵分隔.

   

  另外,還可以用指定矩陣下標的方法給矩陣賦值,下標從1開始,如代碼 d(1,1)=1; d(2,2)=2 將得到如下結果,這里d(x,y)表示d矩陣的第x行第y列元素 . 對於沒有賦值的數組元素,其默認值為0.(ps: 在命令窗口中,一行可以輸入多條語句,語句之間用分號隔開,但如果最后一條語句后面也有分號,則運行或賦值結果不輸出)

  

2 變量賦給變量

  在編程過程中,一個非常普遍的操作是將一個變量的值賦給另外一個變量,這在Matlab中也是必須支持的,前提是作為值的變量要是預先定義或者使用過的。例如,我們可以先定義兩個行向量,然后把這兩個行向量作為分量賦值給另一個變量:

  

  這里用到了一個重要的操作符,即冒號算符(colon operator),格式是first:last它用於生成一個行向量,這個向量的元素默認是一個增量為1的有序數列,其第一個元素為first,最后一個元素為last. 例如 a=10:15相當於a=[10,11,12,13,14,15]. 另外還有一種帶步長的冒號操作符,形如first:step:last,它生成的以first開頭以last結尾的行向量,且行向量中元素的增量是step,即后一個元素比前一個元素大step. 例如a=3:0.2:3.8相當於a=[3,3.2,3.4,3.6,3.8]. 如果希望生成一個元素遞減的行向量,則只須將步長設置為復數.

  因此,前面兩個向量賦值給一個矩陣的例子中,f(1,:)表示f 矩陣中第一行的所有元素, f(2,:)表示第二行的所有元素.

 3 生成單位陣

  Matlab提供了eye(n) 函數用以方便地生成一個n×n的單位陣,如

  

 4 生成對角陣

  Matlab中可以用diag 函數生成一個對角陣,如

     

MATLAB預定義變量

  Matlab中有一些預定變量,這些預定義變量具有相應的初始值,其中比較常用的包括:

  1. pi:    返回π,即3.141592653589793.
  2. i,j:    定義為,虛數單位. 如果用戶給這兩個變量賦了其他的值,則它們不再是預定義常數.如果賦值之后希望恢復這其虛數單位值,可以通過clear命令恢復.
  3. inf:   定義為1/0. 當出現被0除時, Matlab就會返回inf,且不中斷執行而繼續計算.
  4. NaN:       定義為”Not a Number”,表示不是一個合法的數.
  5. eps:  返回機器的精度,定義為與1最接近的可代表的浮點數之間的差. 被用戶賦值后不能由clear恢復.

刪除自定義變量和恢復預定義變量

  在Matlab中,可以通過一些命令進行變量的刪除和內存的重組,主要包括以下幾個命令:

  1. clear: 刪除所有用戶自定義變量並恢復除eps外的所有預定義變量.
  2. clear variable1: 僅刪除名為變量variable1的變量.
  3. clear variable1 variable2 … : 刪除變量variable1 variable2 …
  4. clear a*: 刪除所有以a開頭的變量.
  5. pack: 重組和壓縮已分配的內存碎塊. 當Matlab 的內存滿后,可以利用這個命令實現在不清除任何變量的情況下得到更多的空間.
  6. pack filename: 用名為filename的文件作為臨時文件,重組和壓縮已分配的內存.

變量類型(作用域) 

  Matlab中的變量類型(Types of Variables)分為局部變量(Local Variable), 全局變量(Global Variable)和局部靜態變量(Persistent Variables).

  1. 局部變量: 如果一個函數內的變量沒有特別聲明, 那么這個變量只在函數內部使用, 即為局部變量. 
  2. 全局變量: 全局變量可以被多個不同的函數和基本工作空間(base workspace)共享. 如果一個函數需要使用全局變量a , 則必須在函數中(一般在函數的開始部分)聲明該a為global: global a. 如果這個函數包含若干個子函數, 且子函數也需要訪問全局變量a, 那么各個子函數中也都要加上global a. 如果某個函數更改了a的值, 那么之后其他所有聲明了a的函數都可以得到這個新值. 如果某個函數需要訪問Matlab命令行中的一個變量b, 那么需要在命令行中聲明b為global.
  3. 局部靜態變量: 局部靜態變量只能在某個M文件中聲明和使用, 且使用它的函數內需要有聲明. 只要包含局部靜態變量的函數存在於內存中(沒有通過clear命令刪除, 沒有重新編輯), 該局部靜態變量就一直存在.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM