From eb4d201afa780b4467a9498f9535f708c326fc0f Mon Sep 17 00:00:00 2001 From: kikocorreoso Date: Thu, 14 Mar 2019 13:14:32 +0100 Subject: [PATCH] add light article on Pi Day --- ...etro-y-el-diametro-de-la-circunferencia.md | 10 + ...o_y_el_diametro_de_la_circunferencia.ipynb | 763 ++++++++++++++++++ 2 files changed, 773 insertions(+) create mode 100644 content/articles/2019-03-14-La-proporcion-entre-el-perimetro-y-el-diametro-de-la-circunferencia.md create mode 100644 content/downloads/notebooks/La_proporcion_entre_el_perimetro_y_el_diametro_de_la_circunferencia.ipynb diff --git a/content/articles/2019-03-14-La-proporcion-entre-el-perimetro-y-el-diametro-de-la-circunferencia.md b/content/articles/2019-03-14-La-proporcion-entre-el-perimetro-y-el-diametro-de-la-circunferencia.md new file mode 100644 index 00000000..291d809d --- /dev/null +++ b/content/articles/2019-03-14-La-proporcion-entre-el-perimetro-y-el-diametro-de-la-circunferencia.md @@ -0,0 +1,10 @@ +--- +title: La proporcion entre el perimetro y el diametro de la circunferencia +date: 2019-03-14T11:19:00+00:00 +author: Kiko Correoso +slug: proporcion-perimetro-diametro-circunferencia-pi +tags: pi,programación recreativa,matemáticas + + +{% notebook downloads/notebooks/La_proporcion_entre_el_perimetro_y_el_diametro_de_la_circunferencia.ipynb + cells[:] %} diff --git a/content/downloads/notebooks/La_proporcion_entre_el_perimetro_y_el_diametro_de_la_circunferencia.ipynb b/content/downloads/notebooks/La_proporcion_entre_el_perimetro_y_el_diametro_de_la_circunferencia.ipynb new file mode 100644 index 00000000..efc0c396 --- /dev/null +++ b/content/downloads/notebooks/La_proporcion_entre_el_perimetro_y_el_diametro_de_la_circunferencia.ipynb @@ -0,0 +1,763 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "El número $\\pi$ no es más que la proporción entre el perímetro y el diámetro de la circunferencia:\n", + "\n", + "$$ perímetro \\thinspace de \\thinspace la \\thinspace circunferencia = (2 R) \\pi $$\n", + "\n", + "donde:\n", + "\n", + "$$ diámetro \\thinspace de \\thinspace la \\thinspace circunferencia = 2 R $$\n", + "\n", + "Por tanto:\n", + "\n", + "$$ \\pi = \\frac{perímetro}{diámetro} $$\n", + "\n", + "Celebramos el día de $\\pi$ (14 de marzo, 03/14) mostrando unas cuantas formas que se han usado en el pasado para calcular este número irracional tan fascinante." + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Calculando $\\pi$ usando el método de Viete" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Referencias:\n", + "\n", + "https://en.wikipedia.org/wiki/Vi%C3%A8te%27s_formula" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "def viete(n):\n", + " inv_pi = 1 / 2\n", + " ai = 2 ** (1 / 2)\n", + " inv_pi *= ai / 2\n", + " for i in range(2, n, 2):\n", + " ai = (2 + ai) ** (1 / 2)\n", + " inv_pi *= ai / 2\n", + " return 1 / inv_pi" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1403311569547525" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "viete(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1415926535897927" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "viete(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1415926535897927" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "viete(1_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1415926535897927" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "viete(10_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1415926535897927" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "viete(100_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1415926535897927" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "viete(1_000_000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Calculando $\\pi$ usando el método de Wallis" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Referencias:\n", + "\n", + "https://en.wikipedia.org/wiki/Wallis_product" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "def wallis(n):\n", + " _pi = 2\n", + " for i in range(2, n, 2):\n", + " _pi *= i * i / ((i - 1) * (i + 1))\n", + " return _pi" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.972154195011337" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wallis(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1257662923253897" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wallis(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1400206785767817" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wallis(1_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141435562175548" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wallis(10_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141576945508733" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wallis(100_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141591082792245" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wallis(1_000_000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Calculando $\\pi$ usando el método de Gregory-Leibniz" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Referencias:\n", + "\n", + "https://crypto.stanford.edu/pbc/notes/pi/glseries.html\n", + "\n", + "https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [], + "source": [ + "def gregory_leibniz(n):\n", + " _pi = 0\n", + " pos = True\n", + " for i in range(1, n, 2):\n", + " if pos:\n", + " _pi += 4 / i\n", + " pos = False\n", + " else:\n", + " _pi -= 4 / i\n", + " pos = True\n", + " return _pi" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.3396825396825403" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gregory_leibniz(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.121594652591011" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gregory_leibniz(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.139592655589785" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gregory_leibniz(1_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141392653591791" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gregory_leibniz(10_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1415726535897814" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gregory_leibniz(100_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141590653589692" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "gregory_leibniz(1_000_000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Calculando $\\pi$ usando el método de Nilakantha" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "El mismo método fue aplicado por Leibniz y Gregory de forma independiente (ver sección anterior) pero parece que este es más antiguo.\n", + "\n", + "Referencias:\n", + "\n", + "https://pdfs.semanticscholar.org/5cb2/4ef31a09a66625a26a74de59273dff5bb232.pdf" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [], + "source": [ + "def nilakantha(n):\n", + " _pi = 3\n", + " pos = True\n", + " for i in range(2, n, 2):\n", + " if pos:\n", + " _pi += 4 / (i * (i + 1) * (i + 2))\n", + " pos = False\n", + " else:\n", + " _pi -= 4 / (i * (i + 1) * (i + 2))\n", + " pos = True\n", + " return _pi" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1396825396825396" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nilakantha(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1415946525910106" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nilakantha(100)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141592655589784" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nilakantha(1_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141592653591801" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nilakantha(10_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141592653589789" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nilakantha(100_000)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141592653589787" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "nilakantha(1_000_000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Calculando $\\pi$ usando una fracción" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "def f355_113():\n", + " return 355 / 113" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.1415929203539825" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f355_113()" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "def f22_7():\n", + " return 22 / 7" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "3.142857142857143" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f22_7()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sin duda, esta última es la más eficiente para dar un número aproximado de $\\pi$ ;-)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "¿Conocéis otros métodos simples para calcular el número $\\pi$?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "¿Alguien quiere picar el [método de Arquímedes](https://en.wikipedia.org/wiki/Pi#Polygon_approximation_era) para calcular $\\pi$?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "¡¡Un poco de programación recreativa!!" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.7.1" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}