MATLAB 在進行各種運算時,會將變數儲存在記憶體內,這些儲存變數的記憶體空間稱為基本工作空間(Base Workspace)或簡稱工作空間(Workspace)。當每次 MATLAB 呼叫執行某一函數時,即進入該函數的暫時工作空間(或可視為是相對於基本工作空間的下層暫時工作空間),函數可在此暫時工作間內產生各種變數並進行運算,而不會影響到基本工間空間內的變數。當函數執行結束時,MATLAB 會同時刪除函數的暫時工作空間(當然也會刪除儲存於其內的所有變數),並回到 MATLAB 的基本工作空間。以下簡述幾個有關工作空間的指令。
若要檢視現存於工作空間(Workspace)的變數,可鍵入 who:
>> who Your variables are: A ans s x z B i t y 在上例中,只顯這些是由使用者定義的變數的名稱。若要知道這些變數更詳細的資料(例如:變數占用的記憶體大小、及其儲存的資料型態別),則可使用 whos 指令,例如:
>> whos Name Size Bytes Class A 2x4 64 double array B 1x3 24 double array ans 1x18 36 char array i 1x1 8 double array s 1x4 32 double array t 1x5 40 double array x 1x6 48 double array y 1x1 8 double array z 1x1 16 double array (complex) Grand total is 47 elements using 276 bytes
同時也可以使用 clear 指令來清除或刪除工作空間內的某一特定或所有變數,以避免記憶體的閒置與浪費:
>> clear A % 刪除工作空間內的變數 A >> clear all % 刪除工作空間內的所有變數 值得注意的是,MATLAB 有些永久常數(Permanent Constants),雖然在工作空間中看不 到,但使用者可直接取用,例如:
>> pi ans = 3.1416 常使用到的 MATLAB 的永久常數,可列出如下:
常數 說明 i 或 j 基本虛數單位(即 $\sqrt{-1}$) eps 系統的浮點(Floating-point)精確度 inf 無限大(即 $\infty$), 例如:1/0 nan 或 NaN 非數值(Not A Number),例如:0/0 pi 圓周率(= 3.1415926...) realmax 系統所能表示的最大數值 realmin 系統所能表示的最小數值 nargin 函數的輸入引數個數 nargout 函數的輸出引數個數 在大量長時間執行 MATLAB 運算中,使用者通常希望能將計算所得各變數內容儲存在檔案中(一般會暫時儲存在工作空間內),以便將來可重新載入以進行其他處理。此時,使用者可用 save 指令儲存變數內容到檔案,而後再用 load 指令將檔案的內容載入到工作空間以進行其他處理,以下依次分述之。
在不加任何選項(Options)時,save 指令會將工作空間內的變數以二進制(Binary)的方式儲存至副檔名為 mat 的檔案:
- save:將工作空間的所有變數儲存到名為 matlab.mat 的二進制檔案。
- save filename:將工作空間所有變數儲存到名為 filename.mat 的二進制檔案。
- save filename x y z:將變數 x、y、z 儲存到名為 filename.mat 的二進制檔案。
首先我們先跳到本章的範例目錄:
>> cd 'd:\matlabBook\MATLAB程式設計:入門篇\02-初探MATLAB' 以下為使用 save 指令的一個例子:
>> clear all % 清除工作空間內的所有變數 >> x = 10; y = [1, 2, 3]; % x, y 為新變數 >> whos % 列出工作空間內所有變數 Name Size Bytes Class x 1x1 8 double array y 1x3 24 double array Grand total is 4 elements using 32 bytes >> save test x y % 將變數 x 與 y 儲存至 test.mat >> dir *.mat % 列出目前工作目錄中的所有 MAT 檔案 test.mat >> delete test.mat % 刪除檔案 test.mat 以二進制的方式儲存工作空間的變數,通常檔案會比較小,而且在載入時速度較快,缺點是無法用普通的文書軟體(例如:MS Word 或記事本)來檢視檔案內容。
若想看到檔案內容,則必需以 ASCII 的檔案格式來儲存工作空間的變數:
- save filename x -ascii:將工作空間中的變數 x 以八位元組大小(8 bytes)儲存到名為 filename 的 ASCII 檔案。
- save filename x -ascii -double:將工作空間中的變數 x 以十六位元組大小(16 bytes)儲存到名為 filename 的 ASCII 檔案(注意:此時並不會自動加上副檔名)。
- save filename -ascii -tabs:將工作空間中的所有變數以八位元組大小(8 bytes)儲存到名為 filename 的 ASCII 檔案,並將同一列相鄰的變數以定位鍵(即 Tab 鍵)隔開。
在 save 指令使用 –ascii 選項後,會有下列現象:
- save 指令就不會在檔案名稱後加上 mat 的副檔名。因此以副檔名 mat 結尾的檔案通常是 MATLAB 的二進位資料檔。
- 通常只儲存一個變數。若在 save
- 指令列中加入多個變數,仍可執行,但所產生的檔案則無法以簡單的 load 指令載入。有關 load 指令的用法,詳見下述。
- 原有的變數名稱消失。因此在將檔案以 load 載入時,會取用檔案名稱為變數名稱。
- 對於複數,只能儲存其實部,而虛部則會消失。
- 對於儲存相同的變數,ASCII 檔案通常比二進制檔案大。
一般而言,以二進制所儲存的檔案,在讀取時會比較快,所佔的空間也比較小,所以我們應該盡量以二進制方式儲存資料。
在將工作空間的變數儲存於檔案後,使用 load 指令可將該檔案所儲存之變數載入工作空間,其格式如下:
- load filename:load 指令會尋找名稱為 filename.mat 的檔案,並以二進制格式載入。若找不到 filename.mat,則尋找名稱為 filename 的檔案,並以 ASCII 格式載入。
- load filename -ascii:load 指令會尋找名稱為 filename 的檔案,並以 ASCII 格式載入。
若以 ASCII 格式載入,則變數名稱即為檔案名稱(但不包含副檔名)。若以二進制載入,則可保留原有的變數名稱,例如:
>> clear all; % 清除工作空間中的變數 >> x = 1:10; >> save testfile.dat x -ascii % 將 x 以 ASCII 格式存至名為 % testfile.dat 的檔案 >> load testfile.dat % 載入 testfile.dat >> who % 列出工作空間中的變數 Your variables are: testfile x 注意在上述過程中,由於是以 ASCII 格式儲存與載入,所以產生了一個與檔案名稱相同的變數 testfile,此變數的值和原變數 x 完全相同。
有關 MATLAB 對於檔案的讀寫功能,讀者可詳見第十八章「檔案輸出及輸入」。
MATLAB程式設計:入門篇