{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Spacial Equilibrium Model\n", "\n", "**Randall Romero Aguilar, PhD**\n", "\n", "This demo is based on the original Matlab demo accompanying the Computational Economics and Finance 2001 textbook by Mario Miranda and Paul Fackler.\n", "\n", "Original (Matlab) CompEcon file: **demslv14.m**\n", "\n", "Running this file requires the Python version of CompEcon. This can be installed with pip by running\n", "\n", " !pip install compecon --upgrade\n", "\n", "Last updated: 2022-Sept-05\n", "
" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "## About\n", "\n", "* See textbook page 56 for description" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Demand and supply equations\n", "\n", "| Country | Demand | Supply |\n", "| :------: | ------------- | ------------- |\n", "| 1 | p = 42 - 2q | p = 9 + 1q |\n", "| 2 | p = 54 - 3q | p = 3 + 2q |\n", "| 3 | p = 51 - 1q | p = 18 + 1q |\n", "\n", "* Transportation costs:\n", "\n", "| From | To country 1 | To country 2 | To country 3 |\n", "| :-------- | :----------: | :----------: | :----------: | \n", "| Country 1 | 0 | 3 | 9 |\n", "| Country 2 | 3 | 0 | 3 | \n", "| Country 3 | 6 | 3 | 0 |\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from compecon import MCP\n", "np.set_printoptions(precision=4, suppress=True)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "A = np.array\n", "as_ = A([9, 3, 18])\n", "bs = A([1, 2, 1])\n", "ad = A([42, 54, 51])\n", "bd = A([2, 3, 1])\n", "c = A([[0, 3, 9], [3, 0, 3],[6, 3, 0]])" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def market(x):\n", " quantities = x.reshape((3,3))\n", " ps = as_ + bs * quantities.sum(0)\n", " pd = ad - bd * quantities.sum(1)\n", " ps, pd = np.meshgrid(ps, pd)\n", " fval = (pd - ps - c).flatten()\n", " return fval" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "a = np.zeros(9)\n", "b = np.full(9, np.inf)\n", "Market = MCP(market, a, b)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "x0 = np.zeros(9)\n", "x = Market.zero(x0, transform='minmax')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Quantities = \n", " [[ 9. -0. 0. ]\n", " [ 1.6347 7.3653 0. ]\n", " [ 4.3653 4.6347 12. ]]\n", "Prices = \n", " [24. 27. 30.]\n", "Net exports =\n", " [ 6. 3. -9.]\n" ] } ], "source": [ "quantities = x.reshape(3,3)\n", "prices = as_ + bs * quantities.sum(0)\n", "exports = quantities.sum(0) - quantities.sum(1)\n", "print('Quantities = \\n', quantities)\n", "print('Prices = \\n', prices)\n", "print('Net exports =\\n', exports)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## In autarky" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "quantities = (ad - as_) / (bs + bd)\n", "prices = as_ + bs * quantities" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Quantities = \n", " [11. 10.2 16.5]\n", "Prices = \n", " [20. 23.4 34.5]\n" ] } ], "source": [ "print('Quantities = \\n', quantities)\n", "print('Prices = \\n', prices)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.7 ('base')", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" }, "vscode": { "interpreter": { "hash": "ad2bdc8ecc057115af97d19610ffacc2b4e99fae6737bb82f5d7fb13d2f2c186" } } }, "nbformat": 4, "nbformat_minor": 1 }