二维值函数迭代:Matlab中的矢量化

时间:2016-02-09 16:25:07

标签: matlab optimization vectorization

我想解决二维动态规划问题。我在TxT上的某个对称网格网格上使用值函数迭代。我知道我在(t_i,t_j)中遍历每个州TxT并找到最佳控件(I_i,I_j)。然而,该过程相当耗时。我想摆脱for循环。是否可以在objective网格上定义TxT,提供初始矩阵I0并在一步中找到所有(I_i,I_j)

[...]

% vfi loop
while(iterate < max_iter & error > error_tol)
    w_fit = fit([t1, t2], w, 'poly23');
    % maximizing objective function for every possible state
    for i = 1:length(w)
        objective = @(I) -(h*1/6*((t1(i) + t2(i))/(2*c)...
            - (a*(t1(i).^2 + t2(i).^2) + b*(I(1).^2 + I(2).^2)))...
            +(1-r*h)*w_fit(t1(i) + h*(I(1) - d*t1(i)), t2(i) + h*(I(2) - d*t2(i))));
        I_star =fminsearch(objective,[I1_0(i), I2_0(i)]);
        pi_1(i) = I_star(1);
        pi_2(i) = I_star(2);
        Tw(i) = -objective(I_star);
    end
    iterate = iterate + 1
    error = max(abs(Tw - w))
    w = Tw;
    I1_0 = pi_1;
    I2_0 = pi_2;
end

1 个答案:

答案 0 :(得分:2)

我不相信循环的“矢量化”会给你带来很多好处(而且我不知道你是如何做这样的矢量化的)。计算密集度最高的部分将是fminsearch,它将多次调用存储在objective中的匿名函数。因此,目标是优化 功能的执行。最好的技巧:只计算一次不依赖于匿名函数输入的术语和因子(在函数定义之外),并使用anon函数定义中的预计算值。

可以通过调整fminsearch本身来完成其他优化:放宽容差,减少配置的迭代次数或功能评估,抑制诊断消息和图。请参阅此处的帮助:http://www.mathworks.com/help/matlab/ref/fminsearch.html