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 可能没有更新内存位置。

在 MATLAB 中,通常有两种类型的工作空间:基本工作空间和函数工作空间。在命令行输入命令或运行脚本(所有这些脚本共享基本工作区)时,可以使用基本工作区。相反,每个功能都有自己独特的工作区。与 C 或 C++(或许多其他语言)不同,您在循环或条件结构中没有任何变量范围,每个函数实例只有一个唯一的工作区。

您在示例中看到的问题与此无关,它只是 for 循环在 MATLAB 中的行为方式的工件。摘自"提示"部分:

避免在循环语句中为索引变量赋值。for语句将覆盖对循环中的索引所做的任何更改。

换句话说,一旦循环的迭代完成并返回到开头,MATLAB 就会忽略对循环变量的任何更改,而只是将其递增到下一个值。

如果您想了解有关 MATLAB 工作区和范围界定的更多详细信息,请查看以下链接:

  • 在工作区之间共享数据
  • 嵌套函数
  • 本地函数
  • global变量
  • persistent变量
  • 功能句柄
  1. Matlab 将工作区更改为当前范围。

  2. 您只清除了第二个循环范围内的m值。

尝试在第二个循环中的clearvars命令后添加p = m+n。由于您仅在n循环的范围内清除了 m,因此无法使用它。但是,您没有从m循环的范围中删除m

此外,由于mfor 循环存在于基本工作区的范围内,因此您可以根据需要清除 for 循环m中的m,循环将始终可以访问它。这就是为什么,如果删除 clearvars 行,当您返回到基本工作区时,您可以看到mn分别等于somethingsomethingelse

我认为您正在寻找的是关于 Matlab 内存管理的更好解释,您可以在此处找到:MATLAB 的垃圾收集器?

最新更新