Matlab函数能否创建全局变量?
我正在使用Octave(或Matlab…,我都有),并试图创建一个函数,该函数将设置我在其余调查中使用的重要变量 但是,默认情况下,函数中声明的变量仅具有该函数的有限范围 有办法做到这一点吗Matlab函数能否创建全局变量?,matlab,global-variables,octave,Matlab,Global Variables,Octave,我正在使用Octave(或Matlab…,我都有),并试图创建一个函数,该函数将设置我在其余调查中使用的重要变量 但是,默认情况下,函数中声明的变量仅具有该函数的有限范围 有办法做到这一点吗 function defineBasicTerms() global G = 9.807; global F = [exp(1) 0; 0 1/exp(1)]; endfunction 这样,在调用此函数后,变量G和F存在于全局命名变量集中?全局变量需要在使用它们的每个范围内声明。例如
function defineBasicTerms()
global G = 9.807;
global F = [exp(1) 0; 0 1/exp(1)];
endfunction
这样,在调用此函数后,变量
G
和F
存在于全局命名变量集中?全局变量需要在使用它们的每个范围内声明。例如,如果您有一个函数M-filedefineBasicTerms.M
包含:
函数定义术语
全球G=9.807;
结束
然后在基本工作区中,您可以编写:
definebasic术语
G%产生错误:变量不存在
全球G
G%为9.807
接下来,在将使用常量G
的函数中:
function out=computeSomethingImportant(m)
全球G
out=G*m;
结束
也就是说,每次我们想要使用G
时,我们都需要执行global G
来访问全局变量G
请注意,这是一种非常危险的情况。有两件事可能出错:
G
,在当前会话的其余部分更改其值。很难知道是否发生了这种情况,但是从这一点开始,computeSomethingImportant
将返回错误的值,直到我们再次调用defineBasicTerms
defineBasicTerms
之前,我们先调用computeSomethingImportant
在MATLAB中(扩展到倍频程)定义常数的既定方法是通过函数。函数可以编写为始终返回相同的值(MATLAB没有其他方法将变量声明为常量),并且函数在所有工作空间和所有上下文中都自动可用(当然,只要函数在路径上) 在您的示例中,我们将编写一个M-file函数
G.M
,其中包含:
函数值=G
数值=9.807;
结束
现在,在基本工作区中:
G%给出9.807
使用常量G
的函数现在看起来很简单:
function out=computeSomethingImportant(m)
out=G*m;
结束
请注意,pi
等常数在MATLAB和倍频程中是这样定义的
您必须为每个要声明的常量编写一个函数M-file。还有一种替代方法涉及一个具有静态值的类,因此可以在单个文件中定义所有常量。但是语法会有所不同,需要使用
constants.G
或类似的东西来访问内容值。是的,请参阅。问题是什么?我建议不要使用global
variables,而是将struct与所有这些标准变量一起使用,然后将它们交给每个函数。这将使代码不太容易因局部定义而意外掩盖全局变量,并避免在定义变量之前使用它。。。加上它通常更快=)