Matlab中的全局变量,保留旧值并赢得';不变

Matlab中的全局变量,保留旧值并赢得';不变,matlab,function,variables,data-structures,global-variables,Matlab,Function,Variables,Data Structures,Global Variables,我在Matlab中创建了一个函数,并使用下面的run.m文件来运行它 global kanasta EEG_multitaper_autocor_SO_maheen_final(ALLEEG_LANCE_POST,'All','Cz-CPz',3,1,1,1) POST=kanasta; 其中,kanasta是从函数EEG\u multiteper\u autocor\u SO\u maheen\u final生成的变量,ALLEEG\u LANCE\u POST是一个数据结构 从运行此命令得

我在Matlab中创建了一个函数,并使用下面的run.m文件来运行它

global kanasta
EEG_multitaper_autocor_SO_maheen_final(ALLEEG_LANCE_POST,'All','Cz-CPz',3,1,1,1)
POST=kanasta;
其中,
kanasta
是从函数
EEG\u multiteper\u autocor\u SO\u maheen\u final
生成的变量,
ALLEEG\u LANCE\u POST
是一个数据结构

从运行此命令得到的
kanasta
(这是一个数组),我将其存储在
POST
中,如图所示

然后更改代码,以便运行以下命令:

global kanasta
EEG_multitaper_autocor_SO_maheen_final(ALLEEG_LANCE_PRE,'All','Cz-CPz',3,1,1,1)
PRE=kanasta;
我使用的
ALLEEG\u LANCE\u PRE
也是一个具有相同结构但只是不同数据的数据结构,其他所有内容都与
ALLEEG\u LANCE\u POST
完全相同

我发现当我这样做的时候,有一些预先存储的
kanasta
版本是不正确的,而且
pre
POST
结果完全一样。我猜在run.m文件和函数中声明为全局的
global kanasta
可能存在某种问题。我不知道为什么会发生这种情况(在…我的Matlab昨晚崩溃之前是很好的,在那之后就发生了)。它把我需要在
PRE
POST
上做的任何进一步分析都搞砸了。我还尝试将
PRE
保存到另一个变量,然后运行
POST
的代码并保存该变量,但它似乎不起作用。我已经多次清除了工作区,清除了所有变量和命令历史记录,并重新启动了,但没有任何效果


也许有人对“重置”有什么建议吗?或者关于全局变量,或者为什么会发生这种情况

在Matlab中,全局变量实际上是全局的,而不仅仅是一个脚本或程序中的全局变量。它们对于matlab并不完全是全局的,但除非清除,否则它们将保持其值,直到matlab会话结束。解决办法是写:

clear global;

当您要清除全局变量时。但是,在旧版本的matlab中,变量将保持作为局部变量存在。以与平常相同的方式清除。您的意思是重新启动了matlab?在那种情况下,我的答案行不通。如果你重新启动了Matlab,并且所有资源都没有被清除,那么我们讨论的是一个bug。不,我没有重新启动Matlab..谢谢你的回复。。。我这样做了,但是现在我正在运行run.m,变量现在再次显示为空。。。我试图声明一些新的变量,但它们都是空的。。。不知道发生了什么事,所以在一切变得愚蠢、混乱和不可靠之后,我退出了matlab并重新启动它,现在一切正常,恢复正常。变量变为空有什么问题?对我来说这是有道理的。在C++中,全局变量具有文件范围。这意味着它们在程序启动之前启动(在
int main()
之前),并在程序结束时销毁。此外,除非给变量一个值(或
null
),否则它们将作为
0
启动,或者如果没有基本类型,例如
int、double、
,则可以稍后启动。我想说,在Matlab中初始化为空是对此的一种适应。@MaheenSiddiqui将变量返回到工作区的方法有很多。一个用于你的功能。您还可以将数据保存到外部、或。这也是一种选择。在不知道自己想做什么的情况下,很难推荐一个选项。@MaheenSiddiqui您不需要那么多空间来解释程序是如何运行的。从OP中,我不明白为什么不能将
kanasta
声明为
EEG\u multiteper\u autocor\u SO\u maheen\u final()
的输出,并完全消除全局变量。