%本部分旨在将写出的贝尔曼方程中的值函数进行不断迭代,从而求解消费与资本的政策函数c(k);k'(k)
clear all

%设置参数

alpha=0.3;

beta=0.6;

delta=0.3;

epsi=0.00001;

%创建grid

k_min=0.04;

k_max=0.20;

K=linspace(k_min,k_max,1000);

%初始化

v_last=zeros(1,length(K));

v_new=ones(1,length(K));

v_order=zeros(1,length(K)); %在k' j循环的时候记录rhs,便于后续选出最大的rhs赋给v_new

C_op=zeros(1,length(K));

K_op=zeros(1,length(K));

KI_op=zeros(1,length(K));

%迭代过程

while max(abs(v_last-v_new))>epsi %判断误差

v_last=v_new; %更新值函数

for i =1:length(K)

for j =1:length(K)

  if K(i)^alpha+(1-delta)*K(i)-K(j)>=0

    rhs=log(K(i)^alpha+(1-delta)*K(i)-K(j))+beta*v_last(j);

    v_order(j)=rhs; %把每一次j循环的rhs录入v_oder,便于后续排序。

  end 

end

[M,I] = max(v_order); % M是rhs的最大值,I是rhs最大时j的索引,以便于求出K_op&C_op。

v_new(i)=M;%选出最大的rhs赋给v_new

C_op(i)=K(i)^alpha+(1-delta)*K(i)-K(I); %使用I:rhs最大时的j取值

K_op(i)=K(I); %使用I:rhs最大时的j取值

KI_op(i)=I;%记录不同K取值时的rhs最大时的j,便于画图。

end

end

subplot(2,2,1)

plot(K,v_new)

title('值函数迭代')

xlabel('K')

x = linspace(0.04,0.20);

ylabel('v new')

subplot(2,2,2)

plot(K,K_op);

title('资本变量的政策函数图像')

xlabel('K')

x = linspace(0.04,0.20);

ylabel('K’')

subplot(2,2,3)

plot(K,C_op);

title('消费变量的政策函数图像')

xlabel('K')

x = linspace(0.04,0.20);

ylabel('C')

subplot(2,2,4)

plot(K,KI_op);

title('给定K,K’的j取值')

xlabel('K')

x = linspace(0.04,0.20);

ylabel('K’的j取值')

结果: