【问题标题】:Global variable in matlabmatlab中的全局变量
【发布时间】:2014-02-02 08:29:07
【问题描述】:

让我们考虑以下在 matlab 函数中声明全局变量的代码

function[y] = myfun2(x)
global b

a = 3;
y = x.^4.*sqrt(a*x+5)./(x.^2+b);
b = 4;

然后执行命令

global b;
>> b=1

b =

     1

>> y=myfun2(3)

返回值

 y =

   30.3074

我有第一个问题,为什么必须第二次声明全局变量?在函数内部声明它还不够吗?还有我的第二个问题

以下命令

y=myfun2(3)

y =

   23.3134

这是否意味着它第二次使用数字 4?我如何确定第一次使用哪个 b?我的意思是 1 或 4?提前谢谢

【问题讨论】:

    标签: matlab global-variables


    【解决方案1】:

    @dato datuashvili,

    您对全局变量感到困惑。

    通常,每个 MATLAB® 函数都有自己的局部变量,这些局部变量与其他函数的局部变量以及基础工作区的局部变量是分开的。但是,如果多个函数(可能还有基础工作区)都将特定名称声明为全局名称,则它们都共享该变量的单个副本。在任何函数中对该变量的任何赋值都可用于所有声明它为全局的函数。 如果第一次发出 global 语句时全局变量不存在,则将其初始化为空矩阵。 如果当前工作区中已存在与全局变量同名的变量,MATLAB 会发出警告并更改该变量的值以匹配全局变量。

    看看这个页面,这也是我的答案的来源。

    http://www.mathworks.in/help/matlab/ref/global.html

    除此之外,

    您需要在希望共享 x 的每个范围(即函数/工作区)中将 x 声明为全局变量。因此,您需要将 test1 编写为:

    function test1()
      global x;
      x = 5;
    end
    

    以上答案的来源是Declaring a global variable in MATLAB。 如果这对您没有帮助,请通知我。

    【讨论】:

    • 所以在我的情况下,它第一次使用哪个变量 1?因为声明了全局变量 b 然后将 i 分配给工作区
    • 正如我提到的,您需要在每个范围内声明全局,否则它将被视为局部变量并且值会有所不同。可能会收到警告。
    • 还有一个问题,如果我在函数中不将 b 分配给 4,会是什么结果?
    • 不,即使我不会分配 b=1,它需要空矩阵作为输入对吗?
    • 实际上你正在覆盖,例如:when b=4 //b is now 4; b=1 //现在 b 为 1; // 这里是自己的 b=1 ,不是第二次的意思,它总是 1
    猜你喜欢
    • 2013-05-06
    • 2014-12-13
    • 2013-10-22
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多