我有几个关于 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 可能没有更新内存位置。
在 MATLAB 中,通常有两种类型的工作空间:基本工作空间和函数工作空间。在命令行输入命令或运行脚本(所有这些脚本共享基本工作区)时,可以使用基本工作区。相反,每个功能都有自己独特的工作区。与 C 或 C++(或许多其他语言)不同,您在循环或条件结构中没有任何变量范围,每个函数实例只有一个唯一的工作区。
您在示例中看到的问题与此无关,它只是 for 循环在 MATLAB 中的行为方式的工件。摘自"提示"部分:
避免在循环语句中为索引变量赋值。
for
语句将覆盖对循环中的索引所做的任何更改。
换句话说,一旦循环的迭代完成并返回到开头,MATLAB 就会忽略对循环变量的任何更改,而只是将其递增到下一个值。
如果您想了解有关 MATLAB 工作区和范围界定的更多详细信息,请查看以下链接:
- 在工作区之间共享数据
- 嵌套函数
- 本地函数
global
变量persistent
变量- 功能句柄
-
Matlab 将工作区更改为当前范围。
-
您只清除了第二个循环范围内的
m
值。
尝试在第二个循环中的clearvars
命令后添加p = m+n
。由于您仅在n
循环的范围内清除了 m,因此无法使用它。但是,您没有从m
循环的范围中删除m
。
此外,由于m
for 循环存在于基本工作区的范围内,因此您可以根据需要清除 for 循环m
中的m
,循环将始终可以访问它。这就是为什么,如果删除 clearvars 行,当您返回到基本工作区时,您可以看到m
和n
分别等于something
和somethingelse
。
我认为您正在寻找的是关于 Matlab 内存管理的更好解释,您可以在此处找到:MATLAB 的垃圾收集器?