MATLAB 中的工作区何时更改?

When does the workspace change in 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. Matlab 将工作区更改为当前范围。

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

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

此外,由于 m for 循环存在于您的基础工作区范围内,您可以清除 m for 循环中的 m 任何您想要的,循环将始终可以访问它。这就是为什么,如果你删除 clearvars 行,当你 return 到基础工作区时,你可以看到 mn 分别等于 somethingsomethingelse .

我认为您正在寻找的是对 Matlab 内存管理的更好解释,您可以在此处找到:MATLAB's Garbage Collector?

在MATLAB中一般有两种类型的工作空间:the base workspace and function workspaces. The base workspace is what you use when you enter commands at the command line, or when you run scripts (all of which share the base workspace). Conversely, each function有自己独特的工作空间。与 C 或 C++(或许多其他语言)不同,您在循环或条件结构中没有任何变量范围,每个函数实例只有一个唯一的工作区。

您在示例中看到的问题与此无关,它只是 for loops behave in MATLAB. Taken from the "Tips" section:

Avoid assigning a value to the index variable within the loop statements. The for statement overrides any changes made to index within the loop.

换句话说,一旦循环迭代完成并 returns 开始,MATLAB 将忽略对循环变量的任何更改并简单地将其递增到下一个值。

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