为什么自定义Matlab函数返回空矩阵

时间:2014-08-08 02:37:16

标签: matlab

该函数应该返回一个值。但是,当我输入:

    val(1d4) 

它返回

    ans =

    []

但是,如果我逐行复制,并设置所有参数(V eps_today等),并在命令窗口中运行,它工作正常......不知道问题出在哪里。感谢:)

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %This function calculates the value function of both small and big%
    %investment                                                       %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    function negval=val(k_next)

    global V eps_today k_today eps_gv k_gv z_today delta xi

    theta=0.5327; beta=0.95; rho=0.7675; sigma_eta=0.7704;

    %identify the grid point that falls just below
    klo=max(sum(k_next>k_gv),1);
    %above
    khi=klo+1;

    %Linear Interpolation, effectively only on the dimension of k
    if klo<size(k_gv,2)
        V_temp=V(:,klo)+(k_next-k_gv(klo))/(k_gv(khi)-k_gv(klo))*(V(:,khi)-V(:,klo));
    else
       %when k_next> maximum point of k_gv 
        V_temp=V(:,size(k_gv,2));
    end

    EV=mean(V_temp,1);

    negval=-(exp(z_today+eps_today)*k_today^theta-xi*k_today-(k_next-(1-delta)*k_today)+beta*EV);
    end

1 个答案:

答案 0 :(得分:2)

我试图复制你的问题,但我做不到。如果我没有设置全局变量Matlab喊叫并拒绝继续该功能。将其中一些设置为空值是相同的(没有尝试所有)。如果我设置全局变量,那么函数总是给我一个值。

但是我强烈怀疑它与全局变量有关(你可以显示它们被初始化的代码吗?)。正如我在评论中提到的,我会摆脱它们,代码看起来像这样

主程序

%set parameters
Pars.beta = beta=0.95;
Pars.theta = 0.5327;
Pars.rho=0.7675; 
Pars.sigma_eta=0.7704;
Pars.delta = ...;
Pars.xi = ...;

%set grid
eps_gv = ...
k_gv = ...
ne = length(eps_gv);
nk = length(k_gv);

V = zeros(ne,nk);
k_next = ...;

value = val(k_next,V,eps_gv,k_gv,Pars);

Val功能

negval = function val(k_next,V,eps_gv,k_gv,Pars)

theta=Pars.theta; beta=Pars.beta; rho=Pars.rho; etc.

您甚至不需要eps_todayk_today,因为它们应该是网格上的值(即eps_gvk_gv)。我不知道z_today是什么,但应该是zz_today的网格应该是参数,在这种情况下它应该在Pars中。当然,如果您使用eps_gvk_gv而不是eps_todayk_today,则需要修改negval = ...行以将其视为数组而不是标量。

最后一条评论,EV=mean(V_temp,1);行有一个错误。 mean函数计算V的(列)的平均值。要计算预期值,您需要进行加权平均,其中您按V eps eps_gv(1)的概率对sum(V(i,:)*prob_eps(i))的每一行进行加权,即总和超过{ {1}})。只有当所有冲击具有相同的概率时,您所做的才有效。指出,因为我不确定你是否意识到这一点。