MATLAB: How to stop matlab automatically converting a normal variable into a global variable that I defined previously but deleted.


I am having a strange problem. I had defines a variable as global variable with name 'mog'. Steps are following,(1)I ran the code/function with global variable definitions.(2)I then deleted the lines in my code where the global variable was defined.(3)I then cleared the global variable using 'clear global' and/or 'clearvars -global mog' as well (According to me, i do not need to do this probably because if i deleted the definition of the global variable it should not exist in my work space)(4)Then I closed and restated matlab. (5)Then I started writing a new function and defined a normal variable with name 'mog', but matlab for some reason makes it a global variable automatically… And I do not understand why? And how can I stop this variable 'mog' to be automatically converted into a global variable.

Best Answer

  • Variables declared in a script exist in the base workspace. However, variables declared inside a function only exist in the function workspace. In other words, they are destroyed when the function returns and you shouldn't see them in the base workspace unless:
    1. The variables are declared global (using global is a bad practice, you should not declare global variables);
    2. You are using the debugger and stopped during the execution of the function (in that case what you see is the function workspace);
    3. The variables are outputted by the function into a script as in the following:
    % Function file foo.m
    function c = foo(a,b)
    c = a + b;
    % Script file script.m
    clear all
    close all
    c = foo(10, 12); % c is in the base workspace, because it was declared in a script
    Could you copy and paste your function where you declare mog? If you want to learn more about functions and the scope of a variable, you can refer to the online documentation on functions .