MATLAB中的工作空间何时发生变化?

时间:2017-06-12 16:02:43

标签: matlab for-loop workspace

我对MATLAB工作空间有几个问题:

  1. MATLAB何时决定更改工作区以及提示它的条件是什么?

  2. 以下示例中发生了一些奇怪的事情。我在第4行用断点运行它,然后使用 F10 来查看工作区变量。很明显,我看到在内循环的第一次迭代中删除了m,但不知怎的,MATLAB仍然知道在外循环中进行下一次迭代!

  3. 示例:

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

2 个答案:

答案 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)

  1. Matlab将工作空间更改为当前范围。

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

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

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

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