matlab中的全局变量 让我们考虑下面的代码,在Matlab函数中声明全局变量 function[y] = myfun2(x) global b a = 3; y = x.^4.*sqrt(a*x+5)./(x.^2+b); b = 4;

matlab中的全局变量 让我们考虑下面的代码,在Matlab函数中声明全局变量 function[y] = myfun2(x) global b a = 3; y = x.^4.*sqrt(a*x+5)./(x.^2+b); b = 4;,matlab,global-variables,Matlab,Global Variables,然后执行以下命令 global b; >> b=1 b = 1 >> y=myfun2(3) 返回我的值 y = 30.3074 我有第一个问题,为什么有必要再次声明全局变量?在函数中声明它还不够吗?还有我的第二个问题 跟随命令 y=myfun2(3) y = 23.3134 这是否意味着第二次使用数字4?我如何确定第一次使用的是哪个b?我是指1还是4?提前感谢dato datuashvili 您与全局变量混淆了 通常,每个MAT

然后执行以下命令

global b;
>> b=1

b =

     1

>> y=myfun2(3)
返回我的值

 y =

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

跟随命令

y=myfun2(3)

y =

   23.3134
这是否意味着第二次使用数字4?我如何确定第一次使用的是哪个b?我是指1还是4?提前感谢dato datuashvili

您与全局变量混淆了

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

看看这一页,这也是我答案的来源

除此之外,

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

function test1()
  global x;
  x = 5;
end
以上答案的来源是。
如果这对您没有帮助,请通知我。

在我的情况下,它第一次使用哪个变量1?因为有声明的全局变量b,然后将i分配到工作空间,正如我提到的,您需要在每个范围中声明全局变量,另一方面,它会被视为局部变量,值会有所不同。有可能会收到警告。还有一个问题,如果我不在函数中将b分配给4,结果会是什么?不,即使我不分配b=1,它也会将空矩阵作为输入,对吗?实际上你正在覆盖,例如:当b=4//b现在是4时;b=1//现在b是1;//这里的b=1,不是第二次的平均值,它总是1