{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Continued fractions\n", "==========\n", "\n", "The continued fraction is a current way of working with [Computable numbers](https://en.wikipedia.org/wiki/Computable_number) in Sage. We demonstrate how to create an infinite precision real numbers using them.\n", "\n", "Ideally, it should also be possible to construct real numbers by specifying a sequence of digits." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Finite continued fractions\n", "-----------------------------" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "cf = continued_fraction([1,3,5,2])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[1; 3, 5, 2]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cf" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ " 1 \n", "1 + -------------\n", " 1 \n", " 3 + --------\n", " 1 \n", " 5 + ---\n", " 2 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ascii_art(cf)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ " 1 \n", "1 + ─────────────\n", " 1 \n", " 3 + ────────\n", " 1 \n", " 5 + ───\n", " 2 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "unicode_art(cf)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[1; 3, 5, 2]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show(cf)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "46/35" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cf.value()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "deletable": true, "editable": true }, "source": [ "The infinite continued fraction of $\\pi$\n", "----------------------------------------------\n", "\n", "(and how to make $\\pi$ rational)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "cf = continued_fraction(pi)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[3; 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 2, 1, 1, 2, 2, 2, 2, ...]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cf" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "21053343141/6701487259" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q = cf.convergent(20)\n", "q" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "6701487259*pi == 21053343141" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q.denominator() * pi == q.numerator()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bool(q.denominator() * pi == q.numerator())" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Infinite continued fraction from its partial quotients\n", "--------------------------------------------------------------" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "word: 1221211221121221211212211221211221121221..." ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w = words.ThueMorseWord([1,2])\n", "w" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "+Infinity\n", "1\n" ] } ], "source": [ "# this is infinite!\n", "print w.length()\n", "print w[50000]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "cf = continued_fraction(w)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "[1; 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2...]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cf" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "[1; 2, 2, 1, 2, 1, 1, 2, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, 2...]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "show(cf)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "1.42238873688279" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cf.numerical_approx()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "1.422388736882785488341547116024565825306879108991711829311892452916456747272565883312455412962072042226606967679904037159431326605680066290294756419660969443220651128672311900870593124765036005848752451417402875509238361488916056683245083779963278963073049824070267758174990646158642585370813046524000086661581243905914906466003480703677023988615413570757644054813334700990677584289660372246342067253682726799807316685676587324505731847814147678154763726265196083992824826205539242840653906301830047049949941490640600259543135552560543324529462257730233755441729446405530416084412196084379684103121790395824553467675132545822205187603381043855096192401585880866807466062392883291660702054525802116711752401774733106497248611622752095300633013168704626946014915935101135318893652966213803997804572239974078697408433608054397773769223121127633507405297280741404627010499828312222703809518876103719105033725301867525867401597920130098069394633478942716767612347563203010252967938432767020528414899976767" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cf.numerical_approx(digits=1000)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "Real Lazy Field" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "parent(cf.value()) # not ideal..." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "deletable": true, "editable": true, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "1.422388736882786?" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cf.value()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "SageMath 8.1.beta3", "language": "", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 2 }