2017-06-12 397 views
1

我有一個關於MATLAB工作區幾個問題:工作區在MATLAB中何時更改?

  1. 什麼時候MATLAB決定改變工作空間和什麼條件提示呢?

  2. 在下面的例子中發生了一些奇怪的事情。我在第4行用斷點運行它,然後使用F10來觀察工作區變量。顯然,我發現m在內循環的第一次迭代中被刪除,但是不知怎麼的,MATLAB仍然知道要在外循環中進行下一次迭代!

例子:

something = 2; 
somethingelse = 3; 
for m = 1 : something 
    for n = 1 : somethingelse 
     %do something 
     clearvars -except n something somethingelse % This clears m, but it still functions 
    end 
end 

我能想到的唯一的事情就是MATLAB可能尚未更新鑑於變量不顯示列表中的存儲位置。

+1

每個功能都有自己的工作區。清除'for'變量:WTF。另外,for被定義,因此即使清除變量,for也已知道如何迭代。 –

+0

因此,要帶回家:當您在for循環中聲明'm'時,它與for循環之外的'm'不同。但請,爲什麼你想要刪除循環變量?這隻會導致災難性的代碼。 –

+0

看起來他是爲了舉例清理它,並不是因爲他是一個瘋狂的白癡。 – toshiomagic

回答

3

在MATLAB中通常有兩種類型的工作區:the base workspace and function workspaces。基本工作空間是您在命令行輸入命令或運行scripts(均共享基礎工作空間)時使用的內容。相反,每個function都有其獨特的工作區。與C或C++(或許多其他語言)不同,您不必在循環或條件結構中對變量進行任何範圍界定,只需爲每個函數實例提供一個唯一的工作空間。

您在示例中看到的問題與此無關,它只是for loops在MATLAB中的行爲方式的人爲因素。從"Tips" section摘自:

避免值分配給循環語句中的指數變量。 for語句將覆蓋循環內對索引所做的任何更改。

換句話說,一旦循環迭代完成並返回到開始,MATLAB將忽略對循環變量的任何更改,並簡單地將其增加到下一個值。

如果您想了解MATLAB工作區和範圍的詳細信息,我想請查看以下鏈接:

1
  1. Matlab的改變工作空間以當前範圍。

  2. 您只在第二個循環的範圍內清除了m的值。

嘗試第二環路內的clearvars命令之後加入p = m+n。由於您僅在n循環範圍內清除了m,因此無法使用它。但是,您並未從m循環的範圍中刪除m

此外,由於m for循環存在於您的基工作區範圍內,因此您可以在所有您想要的循環內清除m for循環,循環將始終有權訪問它。這就是爲什麼,如果您刪除clearvars行,當您返回到基本工作區時,您可以看到mn分別等於somethingsomethingelse

我想你要找的是Matlab的內存管理,你可以在這裏找到一個更好的解釋:MATLAB's Garbage Collector?