Matlab 调用函数中的函数

Matlab 调用函数中的函数,matlab,function,Matlab,Function,我已经定义了一个名为CARE_SAV的函数,它包含一个递归过程,代码是 function [miu_tau_c,miu_tau] = CARE_SAV(beta,Yt,t,miu_1) global miu_tau global t global miu_1 if t > 1 miu_tau_c = beta(1)+beta(2) * ... [CARE_SAV(beta, Yt, t-1, miu_1)]+beta(3)*abs(Yt(t-1));

我已经定义了一个名为CARE_SAV的函数,它包含一个递归过程,代码是

function [miu_tau_c,miu_tau] = CARE_SAV(beta,Yt,t,miu_1)
global miu_tau
global t
global miu_1
if  t > 1  
    miu_tau_c = beta(1)+beta(2) * ...
             [CARE_SAV(beta, Yt, t-1, miu_1)]+beta(3)*abs(Yt(t-1));
    miu_tau  = [miu_tau;miu_tau_c];  

else 
    miu_tau_c = miu_1;
    miu_tau  = [miu_tau;miu_tau_c];
end
函数本身运行良好。然而,当我定义另一个函数(ALS)并调用这个CARE_SAV时,错误不断地冒出来,表示局部变量可能已更改为匹配局部变量值。因此ALS第6行有错误。ALS代码如下所示

function sum = ALS(tau,Yt,beta,miu_1,CARE_SAV)
s = 0;                                          % set the initial value for the ALS sum
global t
global miu_1
t = size(Yt,1);                                 % indicate the length of the simulated data 
[~,miu_tau]=CARE_SAV(beta,Yt,t,miu_1);          % call the CARE_SAV function to get miu_tau value
for i = 1:size(Yt,1)                            % conduct the ALS summation process for each t
    if Yt(i) < miu_tau(i)                       % set the indicator function
        s = s+abs(tau-1)*(Yt(i) - miu_tau(i))^2;
    else
        s = s+abs(tau-0)*(Yt(i) - miu_tau(i))^2;
    end 
end 
sum = s;
function sum=ALS(tau、Yt、beta、miu\u 1、CARE\u SAV)
s=0;%设置ALS和的初始值
全球t
全球miu__1
t=尺寸(Yt,1);%指示模拟数据的长度
[~,miu_头]=CARE_SAV(beta,Yt,t,miu_1);%调用CARE_SAV函数以获取miu_tau值
对于i=1:size(Yt,1)%t,对每个t执行ALS求和过程
如果Yt(i)

有人能解释一下我在这里发生了什么吗?非常感谢。

在CARE\u SAV,您有:

miu_头c=miu_1-是一个全局变量

然后,在另一个函数中,您再次将
作为输入miu\u 1
,并再次调用
全局miu\u 1
。这就是问题所在


尝试从第二个函数的输入中删除miu_1。它可能会工作,但不建议在这样的函数中使用globals。

在CARE\u SAV中,您有:

miu_头c=miu_1-是一个全局变量

然后,在另一个函数中,您再次将
作为输入miu\u 1
,并再次调用
全局miu\u 1
。这就是问题所在


尝试从第二个函数的输入中删除miu_1。它可能会工作,但不建议在这样的函数中使用全局变量。

您不应该混合全局变量和函数参数。在
CARE\u SAV
中,将
t
定义为函数输入和全局变量。它应该只是一个函数参数。(miu_1的情况也一样)。一般来说,使用全局变量不是Matlab编码的最佳实践,而是使用函数参数。嗨,大卫,谢谢你。我想我现在的问题不是关于全局变量。我之所以把它设为全局函数,是因为我希望CARE_SAV函数可以使用我在ALS中调用它时在ALS中定义的参数。我想我真正的问题是,当我在ALS中调用CARE_SAV时,我应该如何设置参数值?谢谢!如果希望
ALS
具有由
CARE\u SAV
生成的值,请将它们设置为
CARE\u SAV
的输出值。如果您在
ALS
中定义了某个内容,并希望在
CARE\u SAV
中使用它,则将其设置为
CARE\u SAV
的输入。如果要在
CARE\u SAV
中更改该值,它必须是
CARE\u SAV
的输入和输出。不应混合使用全局变量和函数参数。在
CARE\u SAV
中,将
t
定义为函数输入和全局变量。它应该只是一个函数参数。(miu_1的情况也一样)。一般来说,使用全局变量不是Matlab编码的最佳实践,而是使用函数参数。嗨,大卫,谢谢你。我想我现在的问题不是关于全局变量。我之所以把它设为全局函数,是因为我希望CARE_SAV函数可以使用我在ALS中调用它时在ALS中定义的参数。我想我真正的问题是,当我在ALS中调用CARE_SAV时,我应该如何设置参数值?谢谢!如果希望
ALS
具有由
CARE\u SAV
生成的值,请将它们设置为
CARE\u SAV
的输出值。如果您在
ALS
中定义了某个内容,并希望在
CARE\u SAV
中使用它,则将其设置为
CARE\u SAV
的输入。如果要在
CARE\u SAV
中更改该值,它必须是
CARE\u SAV
的输入和输出。您好,谢谢。我定义全局变量的原因是,如果我不这样做,当我在ALS函数中使用CARE_SAV时,Matlab无法找到足够的参数。所以我想我的主要问题是,当我想在另一个函数中调用CARE_SAV时,如何定义它的参数?谢谢!听着,你把CARE_SAV作为ALS函数的输入。这没有任何意义。您正在“调用”一个函数作为其他函数的输入。。。你可以在里面调用另一个函数,你不需要把它作为输入!你好,谢谢你。我定义全局变量的原因是,如果我不这样做,当我在ALS函数中使用CARE_SAV时,Matlab无法找到足够的参数。所以我想我的主要问题是,当我想在另一个函数中调用CARE_SAV时,如何定义它的参数?谢谢!听着,你把CARE_SAV作为ALS函数的输入。这没有任何意义。您正在“调用”一个函数作为其他函数的输入。。。你可以在里面调用另一个函数,你不需要把它作为输入!