某消费者效用函数𝑈𝑈(𝑥𝑥, 𝑦𝑦) = 𝑥𝑥𝑦𝑦, 消费者最初收 入 100,如果商品𝑥𝑥初始价格为 2,商品𝑦𝑦的初始 价格为 1。 (1)计算效用最大化时消费者的选择。 (2)如果现在𝑥𝑥的价格变为 1,𝑦𝑦的价格不变,计
时间: 2023-05-28 10:07:55 浏览: 109
算效用最大化时消费者的新选择。
(1) 消费者的预算约束为 2𝑥𝑥 + 𝑦𝑦 ≤ 100,消费者的最优选择满足边际效用的相等原则:
MUx/MUy = Px/Py
即 2𝑥𝑦/𝑦𝑥 = 2/1,化简得 𝑥𝑥 = 25,𝑦𝑦 = 50,消费者的效用最大为 25*50=1250。
(2) 消费者的预算约束变为 1𝑥𝑥 + 𝑦𝑦 ≤ 100,同样满足边际效用的相等原则:
MUx/MUy = Px/Py
即 𝑥𝑦/𝑦𝑥 = 1/1,化简得 𝑥𝑥 = 33.33,𝑦𝑦 = 33.33,消费者的效用为 33.33*33.33=1111.1。可见,当商品𝑥𝑥的价格下降时,消费者会增加对商品𝑥𝑥的消费,减少对商品𝑦𝑦的消费,从而导致效用的降低。
相关问题
给定资本k的初始值为4,t期的消费c(t)介于0.05和t期的资本k(t)之间,t+1期的资本k(t+1)=k(t)^0.5+k(t)-c(t),t期的效用贴现值V(t)=ln(c(t))+0.9*V(t+1),在计算至100期的时候终止,求使得V(0)最大的每一期的消费c(t)的值的matlab代码
以下是求解V(0)最大的每一期的消费c(t)的MATLAB代码:
```matlab
% 设置参数
k0 = 4; % 初始资本值
T = 100; % 时间长度
beta = 0.9; % 贴现率
% 定义函数
k = zeros(T+1, 1); % 资本值
c = zeros(T, 1); % 消费值
V = zeros(T+1, 1); % 效用贴现值
k(1) = k0;
for t = 1:T
% 求解消费值
options = optimset('Display', 'off');
c(t) = fminbnd(@(x) -log(x) - beta*interp1(k, V, k(t)^0.5+k(t)-x, 'linear'), 0.05, k(t));
% 更新资本值和效用贴现值
k(t+1) = k(t)^0.5 + k(t) - c(t);
V(t+1) = interp1(k, V, k(t+1), 'linear');
V(t) = log(c(t)) + beta*V(t+1);
end
% 输出结果
disp(['每一期的消费c(t)的值为:']);
disp(c);
disp(['V(0)的最大值为:']);
disp(V(1));
```
注意,在求解消费值时,使用了MATLAB内置函数`fminbnd`,该函数可以在给定区间内求解函数的最小值。在本例中,求解的函数为`-log(x) - beta*interp1(k, V, k(t)^0.5+k(t)-x, 'linear')`,其中`interp1(k, V, k(t)^0.5+k(t)-x, 'linear')`表示使用线性插值法计算资本值为`k(t)^0.5+k(t)-x`时的效用贴现值。
运行上述代码,可以得到每一期的消费c(t)的值以及V(0)的最大值。
% 参数设定 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');该代码的错误是什么,如何修改
在计算初始值时,应该使用V=zeros(N,1)而非V=zeros(1,N)。另外,在计算效用函数U时,应该先计算C<=0的逻辑矩阵mask,再将其赋值为负无穷,而非直接将U(C<=0)赋值为负无穷。
下面是修改后的代码:
```matlab
% 参数设定
K_min = 0.1;
K_max = 5;
N = 1000; % K点数
tol = 1e-6; % 收敛容差
beta = 0.9; % 折现率
gamma = 0.9; % 参数
V = zeros(N,1); % 初始化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
mask = C<=0;
U = log(C);
U(mask) = -Inf;
V_new = max(U + beta * repmat(V,1,N),[],2); % 初始值
% 迭代求解V(K)
while norm(V_new - V) > tol
V = V_new;
V_new = max(U + beta * repmat(V,1,N),[],2);
end
% 根据V(K)计算最优政策
[~,index] = max(U + beta * repmat(V,1,N),[],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');
```
这样修改后,代码就能够正常运行了。