一个Matlab函数可以创建一个全局变量吗?

问题描述 投票:0回答:1

我正在使用Octave(或Matlab......我两者都有),并试图创建一个函数,以设置我的重要变量,在我的调查的其余部分使用。

然而,默认情况下,在函数中声明的变量只有该函数的有限范围。

有什么方法可以做到这一点吗?

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

以便在调用这个函数后,变量 GF 存在于全局命名的变量集中?

matlab global-variables octave
1个回答
1
投票

全局变量需要在使用它们的每个作用域中声明。例如,如果你有一个函数 M-file defineBasicTerms.m 包含。

function defineBasicTerms
global G = 9.807;
end

然后在基础工作区中你可以写。

defineBasicTerms
G   % produces error: variable doesn't exist
global G
G   % gives 9.807

接下来,在一个使用常量的函数中 G:

function out = computeSomethingImportant(m)
global G
out = G * m;
end

也就是说,每次我们想使用 G 我们要做 global G 要访问的全局变量 G.

请注意,这是一个非常危险的情况。有两种情况会出错。

  1. 一些函数将全局变量 G,改变其在当前会话剩余时间内的值。真的很难知道发生了这种情况,但是...。computeSomethingImportant 将会从这一点上返回错误的值,直到我们再次调用 defineBasicTerms.

  2. 我们称之为 computeSomethingImportant 呼叫前 defineBasicTerms 在会话中,MATLAB中(以及扩展到Octave中)定义常量的既定方法是通过函数。


在MATLAB中(扩展到Octave中),定义常量的既定方法是通过函数。可以将函数写成总是返回相同的值(MATLAB没有其他方法可以将一个变量声明为常量),而且函数在所有工作空间和所有上下文中都自动可用(当然只要函数在路径上)。

在你的例子中,我们会写一个M文件函数,即 G.m 包含。

function value = G
value = 9.807;
end

现在,在基本工作区,

G   % gives 9.807

使用常量的函数 G 现在看起来就像这样。

function out = computeSomethingImportant(m)
out = G * m;
end

请注意,常量如 pi 在MATLAB和Octave中是这样定义的。

你必须为每一个你要声明的常量写一个函数M文件。有一种替代方法,涉及到一个具有静态值的类,这样所有的常量都可以在一个文件中定义。然而,语法却变得不同,我们需要使用 constants.G,或类似的东西,来访问内容值。

© www.soinside.com 2019 - 2024. All rights reserved.