from __future__ import division
from sympy import *
Maximização da Utilidade em Python
Resolvendo o problema do consumidor com Python
Introdução
O problema do consumidor é assim definido:
\[ \begin{aligned} \max_{x_1, x_2} &\quad u(x_1, x_2) \\ \text{s.a.} &\quad p_1 x_1 + p_2 x_2 \leq m \\ \end{aligned} \]
Neste exercício utilizaremos a função utilidade Cobb-Douglas: \(u(x_1, x_2) = x_1^\alpha x_2^{1-\alpha}\).
Utilizando o Sympy
O Sympy é uma biblioteca de computação simbólica para Python. Com ela podemos resolver o problema do consumidor de forma analítica. O sympy irá resolver o lagrangiano do problema e encontrar a demanda marshalliana dos bens 1 e 2.
# Definindo os simbolos
= symbols("x1 x2 p1 p2", positive=True)
x1, x2, p1, p2 = symbols("alpha mu", Real=True) # alpha, multiplicador de lagrange
alpha, mu = symbols("u m e v") # utilidade, renda, despesa, utilidade indireta u, m, e, v
# Definindo a função utilidade
= x1**alpha * x2 ** (1 - alpha)
utilidade utilidade
\(\displaystyle x_{1}^{\alpha} x_{2}^{1 - \alpha}\)
# Definindo a restrição orçamentária
= p1 * x1 + p2 * x2
ro ro
\(\displaystyle p_{1} x_{1} + p_{2} x_{2}\)
# Definindo o lagrangiano
=utilidade + mu * (m - ro)
L L
\(\displaystyle \mu \left(m - p_{1} x_{1} - p_{2} x_{2}\right) + x_{1}^{\alpha} x_{2}^{1 - \alpha}\)
# Condicoes de primeira ordem
= diff(L, x1)
foc1 = diff(L, x2)
foc2 = diff(L, mu) foc3
# Resolvendo o sistema de equações
= solve([foc1, foc2, foc3], [x1, x2, mu], dict=True)
solucao solucao
[{mu: alpha*(alpha*m*p2)**(alpha - 1)*(-alpha*m + m)**(1 - alpha)/p1**alpha,
x1: alpha*m/p1,
x2: m*(1 - alpha)/p2}]
# Extraindo as demandas marshallianas
= solucao[0][x1]
x1_mar x1_mar
\(\displaystyle \frac{\alpha m}{p_{1}}\)
= solucao[0][x2]
x2_mar x2_mar
\(\displaystyle \frac{m \left(1 - \alpha\right)}{p_{2}}\)
= utilidade.subs({x1: x1_mar, x2: x2_mar})
utilidade_indireta utilidade_indireta
\(\displaystyle \left(\frac{\alpha m}{p_{1}}\right)^{\alpha} \left(\frac{m \left(1 - \alpha\right)}{p_{2}}\right)^{1 - \alpha}\)
Qual a maior utilidade que o consumidor pode obter com renda \(m=100\) e os preços \(p_1=1\) e \(p_2=2\)? Considere \(\alpha=0.8\).
100, p1: 1, p2: 2, alpha: 0.8}) utilidade_indireta.subs({m:
\(\displaystyle 52.7803164309158\)
Nas condições acima, qual o consumo dos bens 1 e 2?
= x1_mar.subs({m: 100, p1: 1, p2: 2, alpha: 0.8})
x1_sol x1_sol
\(\displaystyle 80.0\)
= x2_mar.subs({m: 100, p1: 1, p2: 2, alpha: 0.8})
x2_sol x2_sol
\(\displaystyle 10.0\)
Confira que a utilidade gerada pelo consumo destas quantidades dos bens 1 e 2 é igual à utilidade indireta.
0.8}) utilidade.subs({x1: x1_sol, x2: x2_sol, alpha:
\(\displaystyle 52.7803164309158\)