標籤:

解析Matlab的workspace(2)

之前介紹了workspace的基本結構(解析Matlab的workspace(一)):

還是接著這種圖往下說,

主要說說,global persistent對於workspace的影響。

當你在func1中申明一個變數a,並且聲明persistent

-persistent a

說明在func1這個workspace中佔有一個空間:

當-persistent a執行之後,a會變成一個空變數,在workspace中,a就是一個[]的空變數。

但是上文(解析Matlab的workspace(一))曾經提到過:

當func 1運行完成以後,消除掉func 1這個workspace。

但是如果func1 workspace存在persistent,那麼func1中的persistent會被保留,當下一次再進入func1時,執行到func1後,查找func1 workspace中存在的a,那麼這一次a就不是一個空變數而是上一次func1執行完畢是的值,那麼就完成了局部變數的任務。

那麼關於global?

假設我們還是在func1 中有個語句是:

global b

那麼在基workspace建立一個空間,執行會在基workspace空間查找有沒有名為b變數,更persistent一樣,當存在的時候,使用存在的,不存在時,建立一個新的空變數

這裡有個問題,注意下:所謂的基workspace是什麼?

其實就是除了所有空間之外的空間:

在來講講下一個問題

什麼是存在?

剛才經常提到的一個東西就是「當存在的時候,使用存在的,不存在時,建立一個新的空變數」

就是只要執行一次persistent/global,那麼就會在「某個」位置佔據一定的空間,這個空間對於當前程序是有效的,那麼就是存在!

這個「存在」其實是一種隱式的存在,就是在workspace窗口沒有顯示,意味著不能直接調用,matlab的變數定義聲明是採用的一種聲明即定義的方法,這裡正好可以加深理解。

又來了一個問題!當你進入一個空間以後,你想清除掉以前遺留在這個workspace或者其他workspace的persistent或者global變數怎麼辦?

clear指令!在這裡可以詳見clear的官方文檔(Remove items from workspace, freeing up system memory)。


推薦閱讀:

研究電力電子化電力系統穩定性的利器——阻抗法
如何快速重寫一份你不了解 組織較差的代碼?(算是代碼整理吧)
XML和MATLAB交互的基本操作[2]:寫入XML
如何優雅地使用gams、matlab、AIMMS、LINGO?

TAG:MATLAB |