我对MATLAB工作空间有几个问题:
MATLAB何时决定更改工作区以及提示它的条件是什么?
以下示例中发生了一些奇怪的事情。我在第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可能还没有更新内存位置。
答案 0 :(得分:3)
在MATLAB中,通常有两种类型的工作空间:the base workspace and function workspaces。基本工作空间是在命令行输入命令时或运行scripts(所有共享基础工作空间)时使用的工作空间。相反,每个function都有自己独特的工作空间。与C或C ++(或许多其他语言)不同,您在循环或条件结构中没有任何变量范围,对于函数的每个实例只有一个唯一的工作空间。
您在示例中看到的问题与此无关,它只是for loops在MATLAB中表现的工件。取自"Tips" section:
避免在循环语句中为 index 变量赋值。
for
语句会覆盖循环中对 index 所做的任何更改。
换句话说,一旦循环的迭代完成并返回到开头,MATLAB将忽略对循环变量的任何更改,并简单地将其递增到下一个值。
如果您想了解有关MATLAB工作空间和范围界定的更多详细信息,请查看以下链接:
答案 1 :(得分:1)
Matlab将工作空间更改为当前范围。
您只清除了第二个循环范围内m
的值。
尝试在第二个循环中的p = m+n
命令后添加clearvars
。由于您仅在n
循环范围内清除了m,因此无法使用它。但是,您没有从m
循环的范围中删除m
。
此外,由于m
for循环存在于基础工作区的范围内,因此您可以在m
for循环中清除m
所有循环,循环将始终具有访问权限它。这就是为什么,如果删除clearvars行,当您返回基础工作区时,您可以看到m
和n
分别等于something
和somethingelse
我认为您正在寻找的是对Matlab内存管理的更好解释,您可以在此处找到:MATLAB's Garbage Collector?