优化目标为终生效用最大化,贝尔曼方程为V(K(t))=max(ln(c(t))+ln(K(t))+0.95V(K(t+1))),约束条件为:y(t)=k(t)^0.7,K(t+1)=y(t)+0.8K(t)-c(t),遍历c(t)在0.05至K(t)之间的所有值,资本K取值0.1到17,设定t+1期各K取值的家庭终生效用贴现值V(K(t+1))初始值均为0,第t期家庭终生效用贴现值V(K(t)),并将V(K(t+1))赋值为对应K的V(K(t)),以此迭代贝尔曼方程直到收敛,,利用fminbnd函数求解最优的c(t),利用插值法计算各K取值的t期家庭终生效用贴现值V(K(t))的matlab代码
时间: 2023-08-09 18:10:20 浏览: 124
以下是可以参考的 Matlab 代码:
```matlab
% 初始值设定
K_min = 0.1;
K_max = 17;
K_num = 500; % K 取值个数
K = linspace(K_min, K_max, K_num)';
V = zeros(K_num, 1); % 初始 t+1 期各 K 取值的家庭终生效用贴现值
% 迭代贝尔曼方程
epsilon = 1e-6; % 收敛误差
diff = Inf;
while diff > epsilon
V_next = zeros(K_num, 1);
for i = 1:K_num
y = K(i)^0.7;
K_next = y + 0.8 * K(i) - K;
K_next(K_next < K_min) = K_min;
K_next(K_next > K_max) = K_max;
c_min = 0.05;
c_max = K(i);
c = fminbnd(@(x) -ln(x) - ln(K(i) - x) - 0.95 * interp1(K, V, K_next, 'linear', 'extrap'), c_min, c_max);
V_next(i) = -1 * (ln(c) + ln(K(i)) + 0.95 * interp1(K, V, K_next, 'linear', 'extrap'));
end
diff = max(abs(V_next - V));
V = V_next;
end
% 使用插值法计算 t 期各 K 取值的家庭终生效用贴现值
V_func = griddedInterpolant(K, V, 'linear');
```
此时,`V_func` 就是一个可以根据 K 值计算 t 期家庭终生效用贴现值的函数。例如,要计算当 t=1,K=10 时的家庭终生效用贴现值,可以使用 `V_func(10)`。
阅读全文