Matlab 的 diary 內建指令除了可以輸出數值之外, 還可以輸出產生那些數值的 Matlab 工作流程,這是 diary 的妙用。 但是,diary 輸出的數值是 ASCII 字碼, 純文字的數據資料雖然方便轉入其他程式做後續處理, 但是比較浪費磁碟空間。 例如一個雙精度浮點數
7.38905609893065如果以 IEEE 數值資料型態儲存, 只需要 8 拜;如果以 ASCII 字碼儲存, 則每個數目字需要一個 ASCII 碼,加上小數點, 共要 16 拜。如果在這個數目字的前面寫四個空格,後面寫一個折列記號, 則又要加上 5 拜或 6 拜 (LF 或者 LF CR)。
Matlab 的 save 指令就是以 IEEE 數值資料型態, 將工作環境內的變數數值存入檔案,以備日後使用。 這樣儲存的檔案,副檔名一律是 MAT,故又稱為 MAT-file。 這種檔案不是純文字檔案,以 FTP 傳輸的時候必須指定為 binary 檔案。 MAT-file 可以被 Matlab 讀入工作環境, 也可以被 C, FORTRAN 或 Java 語言寫的程式讀取。 以後再說。
最簡單的用法就是
save它將目前 Matlab 環境內的所有變數都儲存到目前工作檔案夾內的 matlab.mat。 如果目前工作環境內有 100 個 double 型態的變數,則每個變數佔有 8 拜的資料量, 總共 800 拜。 所以 MAT 檔案的大小,差不多就是 800 拜。 但是其實會稍微大一點,因為要加上 MAT-file 的檔頭和變數名這些資料。例如
所有變數的資料含量是 64,146 拜, 而儲存後的 matlab.mat 檔案含量是 64,344 拜。>> whos Name Size Bytes Class A 80x100 64000 double array s 1x13 26 char array x 1x15 120 double array Grand total is 8028 elements using 64146 bytes >> save Saving to: matlab.mat
以下略為解釋 save 指令的其他用法。
save 指令其實可以用 ASCII 格式輸出變數的數值, 不過這個功能並不特別好用。請讀者覺得有需要的話自己學習。
Matlab 也提供非常一般性的檔案輸出功能, 例如它有類似 C 語言的 fopen(), fclose() 和 fwrite() 函式, 這些函式的用法與 C 語言的同名函式如出一轍, 讀者如果能使用 C 語言,就能使用這些函式, 因此我們就不在此介紹了。
習題