Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab函数能否创建全局变量?_Matlab_Global Variables_Octave - Fatal编程技术网

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存在于全局命名变量集中?全局变量需要在使用它们的每个范围内声明。例如

我正在使用Octave(或Matlab…,我都有),并试图创建一个函数,该函数将设置我在其余调查中使用的重要变量

但是,默认情况下,函数中声明的变量仅具有该函数的有限范围

有办法做到这一点吗

function defineBasicTerms()
    global G = 9.807;
    global F = [exp(1)  0;  0 1/exp(1)];
endfunction

这样,在调用此函数后,变量
G
F
存在于全局命名变量集中?

全局变量需要在使用它们的每个范围内声明。例如,如果您有一个函数M-file
defineBasicTerms.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与所有这些标准变量一起使用,然后将它们交给每个函数。这将使代码不太容易因局部定义而意外掩盖全局变量,并避免在定义变量之前使用它。。。加上它通常更快=)