贝尔曼方程为:V(K(t))=ln(c(t))+0.9*V(K(t+1)),c(t)=K(t)^0.9+0.8*K(t)-K(t+1),且c(t)的取值范围为0.05至K(t),设定资本K介于0.1至5之间,设定t+1期各K取值的家庭终生效用贴现值V(K(t+1))初始值均为0,利用插值法计算各K取值的t期家庭终生效用贴现值V(K(t)),并将V(K(t+1))赋值为对应K的V(K(t)),以此迭代贝尔曼方程,直到收敛计算效用最大化条件下各K取值的t期家庭终生效用贴现值V(K(t))的matlab代码
时间: 2023-08-13 14:07:19 浏览: 79
以下是基于插值法的贝尔曼方程迭代的Matlab代码:
```matlab
% 参数设定
K_min = 0.1;
K_max = 5;
N = 1000; % K点数
tol = 1e-6; % 收敛容差
beta = 0.9; % 折现率
gamma = 0.9; % 参数
V = zeros(1,N); % 初始化V(K)为0
% 离散化K,计算初始值
K = linspace(K_min,K_max,N);
C = zeros(N,N); % 存储C(K,K')
for i=1:N
for j=1:N
if K(j) <= 0.05*K(i)
C(i,j) = 0;
else
C(i,j) = K(i)^gamma + 0.8*K(i) - K(j);
end
end
end
U = log(C); % 效用函数
U(C<=0) = -Inf;
V_new = max(U + beta * repmat(V,N,1),[],2); % 初始值
% 迭代求解V(K)
while norm(V_new - V) > tol
V = V_new;
V_new = max(U + beta * repmat(V,N,1),[],2);
end
% 根据V(K)计算最优政策
[~,index] = max(U + beta * repmat(V,N,1),[],2);
K_policy = K(index);
% 绘制结果
figure;
plot(K,V);
xlabel('Capital');
ylabel('Value');
title('Value Function');
figure;
plot(K,K_policy);
xlabel('Capital');
ylabel('Policy');
title('Policy Function');
```
需要注意的是,这里使用了矩阵运算来加速计算,同时为了避免效用函数在C<=0时出现非法值,将其赋值为负无穷。
阅读全文