{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Инфраструктура Python. CAS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Символьная (и точная) математика в Python делается через библиотеку `sympy` (входит в Anaconda). Она несколько уступает CAS с многолетней историей вроде Maple или Mathematica, зато тесно интегрирована с Python http://docs.sympy.org/latest/index.html\n", "\n", "Попробовать `sympy` можно онлайн http://gamma.sympy.org/" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] } ], "source": [ "import networkx, PIL\n", "from io import BytesIO\n", "import itertools\n", "import os\n", "\n", "%pylab inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import sympy\n", "from sympy import *\n", "from sympy.solvers.diophantine import diophantine\n", "from sympy.ntheory.factor_ import digits\n", "\n", "from sympy.abc import h, k, n, t, x, y, z" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'1.1.1'" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.__version__" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Символьные вычисления" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Библиотека `sympy` предназначена для символьных вычислений. Она представляет математические выражения (переопределяя сотни имен `numpy`) в виде деревьев, над которыми может проводить различные операции, например, интегрирование." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "x - log(tanh(x) + 1)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expr = integrate(tanh(x), x)\n", "expr" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x - log(tanh(x) + 1)\n", "Add(Symbol('x'), Mul(Integer(-1), log(Add(tanh(Symbol('x')), Integer(1)))))\n" ] } ], "source": [ "print expr\n", "print srepr(expr)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Add: x - log(tanh(x) + 1)\n", "commutative: True\n", "+-Symbol: x\n", "| commutative: True\n", "+-Mul: -log(tanh(x) + 1)\n", " commutative: True\n", " +-NegativeOne: -1\n", " | algebraic: True\n", " | commutative: True\n", " | complex: True\n", " | composite: False\n", " | even: False\n", " | finite: True\n", " | hermitian: True\n", " | imaginary: False\n", " | infinite: False\n", " | integer: True\n", " | irrational: False\n", " | negative: True\n", " | noninteger: False\n", " | nonnegative: False\n", " | nonpositive: True\n", " | nonzero: True\n", " | odd: True\n", " | positive: False\n", " | prime: False\n", " | rational: True\n", " | real: True\n", " | transcendental: False\n", " | zero: False\n", " +-log: log(tanh(x) + 1)\n", " commutative: True\n", " +-Add: tanh(x) + 1\n", " commutative: True\n", " +-One: 1\n", " | algebraic: True\n", " | commutative: True\n", " | complex: True\n", " | even: False\n", " | finite: True\n", " | hermitian: True\n", " | imaginary: False\n", " | infinite: False\n", " | integer: True\n", " | irrational: False\n", " | negative: False\n", " | noninteger: False\n", " | nonnegative: True\n", " | nonpositive: False\n", " | nonzero: True\n", " | odd: True\n", " | positive: True\n", " | rational: True\n", " | real: True\n", " | transcendental: False\n", " | zero: False\n", " +-tanh: tanh(x)\n", " commutative: True\n", " +-Symbol: x\n", " commutative: True\n", "\n" ] } ], "source": [ "sympy.printing.tree.print_tree(expr)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "x - log(tanh(x) + 1)\n", "\n", "Mul(NegativeOne(), log(Add(One(), tanh(Symbol(x)))))_(1,)\r\n", "Symbol(x)_(1, 1, 0, 1, 0)\r\n", "NegativeOne()_(1, 0)\r\n", "Add(Symbol(x), Mul(NegativeOne(), log(Add(One(), tanh(Symbol(x))))))_()\r\n", "log(Add(One(), tanh(Symbol(x))))_(1, 1)\r\n", "tanh(Symbol(x))_(1, 1, 0, 1)\r\n", "Symbol(x)_(0,)\r\n", "One()_(1, 1, 0, 0)\r\n", "Add(One(), tanh(Symbol(x)))_(1, 1, 0)\n" ] }, { "data": { "image/png": "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\nRowYoXXr1unAAw9Uly5dNGPGDH5ZIUoSJQVAxpIHx15++eUMjjXkqKOO0sqVK3XTTTfpuuuu0znn\nnKOPP/7YdCygoCgpANJicKydgsGgbr75Zq1atUqbN29Wx44d9eyzz5qOBRQMJQVASgyOtV+XLl30\n9ttva9CgQbrwwgs1duxY7dixw3QsIG+UFACOGBzrL/vtt59mz56tuXPn6vnnn1fnzp21evVq07GA\nvFBSAOyDwbH+NXDgQK1fv17HHHOMunXrpl//+tdqaGgwHQvICSUFwF4YHOt/3/3ud/XSSy/pd7/7\nne666y6deeaZev/9903HArJGSQEgac/g2OHDhzM4tkQEAgFNmjRJq1ev1o4dO9S5c2c9/PDDpmMB\nWaGkAGgeHLt8+XIGx5aYk08+WatXr9bYsWN16aWXaujQofr6669NxwIyQkkByhiDY8tDixYtdPfd\nd2vRokV69dVXmwspYDtKClCmGBxbfnr16qX169frtNNOU69evXT99dertrbWdCzAFSUFKEMMji1f\n3/nOd/TMM89o9uzZuu+++/TjH/9Y77zzjulYgCNKClBGGByLJmPGjNHatWvVsmVLnXrqqbr33nv5\n/T+wDiUFKBMMjkWyY489Vq+88oquu+46TZo0SQMGDNCnn35qOhbQjJIClDgGxyKVUCik22+/XStX\nrtS7776rjh07av78+aZjAZIoKUBJY3AsMtW1a1e9/fbbOvfcc3X++edr/PjxqqmpMR0LZY6SApQo\nBsciWwceeKAeeughzZkzR0899ZROOeUU/c///I/pWChjlBSgxCQOjh09ejSDY5G1IUOGaN26dTrs\nsMN0xhlnaOrUqWpsbDQdC2UoEGc4N1AyVq1aperqatXW1uqhhx5i7Any0tjYqOnTp+vmm2/Wj3/8\nYz3yyCM64ogjTMdC+ZjAlRSgBDA4FsVQUVGha6+9Vq+//ro+//xzderUSXPmzDEdC2WEkgL4HINj\nUWw//OEPtWbNGlVXV2v48OGqrq7W9u3bTcdCGaCkAD7G4Fh4pVWrVvqv//ovzZ8/X8uWLVOnTp30\nyiuvmI6FEkdJAXyIwbEwpV+/flq/fr06deqkHj166KabblIsFjMdCyWKgbOAZeLxeMqrIQyOhS1m\nzZqlq6++Wh06dNCjjz6q9u3bm46E0sLAWcAmK1euVEVFhR577LF9pjE4FrYZN26c3nrrLTU2NuqU\nU07R7NmzHe/34IMPKhAIaO3atd4GhO9xJQWwRDQaVYcOHfTxxx8rEolo48aNOuqooyTtGRw7YsQI\nrV27VtOmTdP48eMZewJrxGIx3Xrrrfrtb3+rAQMG6P77728evP3+++/rxBNPVG1trY4//nitW7dO\nrVq1MpwYPsGVFMAW48eP1+effy5pz0F/6NChamhoYHAsrBcOhzVlyhStWLFC69atU8eOHfXSSy+p\noaFBF110UfN/BLd582Zdc801htPCT7iSAljg8ccfV3V19V63BYNBdejQQRs2bNC///u/a+rUqfzW\nYlhv+/btuvzyy/XEE0+oW7dueu2119TQ0NA8PRAIaN68eRowYIDBlPCJCZQUwLAPPvhAJ510knbu\n3Knkl2MgEND06dM1adIkM+GAHN1xxx26/fbb9/nv9CsqKlRVVaWNGzeqbdu2htLBJ/i4BzCpsbFR\nF198sWpra/cpKNKeA/q0adP0zTffGEgH5GbHjh164IEHHD+WbGxs1LfffqtRo0Y57vNAIkoKYNDd\nd9+tVatWuf4/Ew0NDfrss8/0i1/8wuNkQO4mTpyojz/+eK+PeRLFYjEtWbJEM2fO9DgZ/IaPewBD\n1q5dq9NOO0319fUZ3f/OO+/UzTffXORUQH7mzp2rQYMGZXTfcDist956SyeddFKRU8Gn+LgHMGHX\nrl0aMmRI2vtVVlY2/7vp68iAzT788ENJe8ZThcPhlPeNx+MaPHiwdu/e7UU0+BAlBTDguuuu0+bN\nm/e5ilJRUaFQKCRJOuaYYzRx4kQtXbpUtbW1GjFihImoQFYmTpyob7/9VnPnztWll16qQw89VNKe\nqybJY1Tq6+u1adMmXX/99Saiwgf4uAfw2Isvvqh+/fo1/xwOhxWLxVRZWamzzjpL5513nvr376+j\njz7aYEqgcDZs2KCXXnpJL7zwQvNXkkOh0F5jsV588UWdc845BlPCQnwFGfBSNBrVQQcd1Pxzu3bt\ndP7552vAgAHq0aOHIpGIwXRA8X377bdatGhRc2n59NNPm6d99dVXe70+UPbcS0p9fb3q6uq8DgSU\ntK+//lodO3bUmDFjNHjwYHXo0MF0JJSQYpfcYpwXNm7cqKefflrPPvusVqxYoYMPPrigy8celZWV\nzR8l+4h7SYnFYqqpqfE6EAAgR61bty7q8jkv+FckEkk7kNlCfLsHAADYiZICAACsREkBAABWoqQA\nAAArUVIAAICVKCkAAMBKlBQAAGAlSgoAALASJQUAAFiJkgIAAKxESQEAAFaipAAAACtRUgAAgJUo\nKQAAwEqUFAAAYCVKCgAAsJI1JaWqqiqj20yyLY+bxJy5ZC7k48xnWanmtWF/yXc7FyNHPvcptFzX\nmc9zm+m8+dyWa45izlfubNnXbJzP7wpWUqqqqvbZiE63ZbO8aDSadvnFlLz8xDyFWHY+2yfVchNz\nRqNRYzt3cpbE24v9uJPXZeN29up5cdo2idvF9oOf23PrxOl5KPRtuebNZDkmX6/FUk77Wi7Lz3Tb\nlOK+kYmQ6QDlyKmAFbIAYQ+2szO3AyXbpjjK8cTShH0tNY5R6RW0pDQ1veS/m2T6hLjdnrhcJ4nr\ncnphJC8r1XxNtzX9nbzudI/FLYtTfqdlu2XNdtlOy89WLts1k+fW7QCWSQ63Zaa6zabt7LR/pVtn\nIbMmS7cvp9pmme4f2Uxzy5IuX2KmYt7mxm2/a5qWiXxfr7Yr9X3NTSGe01LfN5yUzJWUdDt7pgf8\npvvmszOk27Ezkc1jKeYOm892LcS6MpmWD1Pb2W3/SndAzGWa27qT53PKlm3GTHPls33T5YM92NeQ\nr4KXlGI/mamWn+uJK5f50u28hTqJOinmsvEvJrazV+tMPIAn/uwXnDT8g30N+SiZKylSbju/F+/Q\nC82vL5ambZvqColNvM5VrH0xFbd3m0Chsa8hF0X5CnKxd8DES4huvDrAZ/KCS8zilD2fF62XV48K\nIfrPj9Ka/hRzPeW8nVPJJJPt7x4Tr2L6XSk8Bjfsa/mvu9x5eiUl0yc6l502ednJn1W6rTfTaYXK\nksn0XJed6qOnXA8A+W7XfB5bttP8tp2T969iHAidsjqtp1gniEz3Hbf1O+VP/Dnd9GLd5sYtT/K/\nUy3P5hN2tspxX3OTyWsx3bJKad/IVMFKSqonPpf75bKcVMtwO2hkM18268z28aSaluk2LJRs1pdq\nu6Zbbj7rypTN2zmbdaa6Xy65c31s2WyzXF8DhTgW2MT2fMXGvpZaue8f6QTi8XjcaUIsFlNNTY3X\nefZSyNaY6ztqP0rcboW+suK0riZOy/Sy+Xv9LsPL7ZyvbLPYlF3KPE+xr6KkKuLJ98slb77bvXXr\n1jnPm4linBdKZV+zfd+IRCIKh8M5z2/IBKtLCgAgc34sKfCGX0uKNb+7BwAAIBElBQAAWImSAgAA\nrERJAQAAVqKkAAAAK1FSAACAlSgpAADASpQUAABgJUoKAACwEiUFAABYiZICAACsREkBAABWoqQA\nAAArUVIAAICVKCkAAMBKlBQAAGAlSgoAALASJQUAAFgp5DYhGAwqEol4mQVlaM2aNVq7dq3Gjh1r\nOkpR1NXV6de//rWuueYatW7d2nQcIC+cF/wrGAyajpCTQDwej5sOgfL05JNP6tJLL1XPnj31wgsv\nKBAImI5UcH/729/Uo0cPVVVVad68eTr22GNNRwIAv5jAxz3wXDwe12233aZhw4Zp3Lhxev7550uy\noEhS+/bttXr1arVq1Uqnn366Vq5caToSAPgGJQWeqqmp0dChQzVlyhTNmjVL99xzj28vQ2bqe9/7\nnl5++WX17NlTvXv31h/+8AfTkQDAF1zHpACF9tFHH+lnP/uZtmzZosWLF6t79+6mI3kmEonoySef\n1K9+9SuNGzdO77zzjqZNm1byBQ0A8sGVFHjizTffVJcuXbRr1y698cYbZVVQmgQCAd1+++164okn\nNGvWLA0YMEDbt283HQsArEVJQdE9+eST6t69uzp27Ki//OUvZT94dOjQoVq5cqXWr1+vrl276r33\n3jMdCQCsRElB0SQPkJ0/fz5fw/2n0047jQG1AJAGJQVFUY4DZLPFgFoASI2Bsyi4ch4gmy0G1AKA\nO66koKAYIJs9BtQCgDNKCgqGAbL5YUAtAOyNkoK8MUC2cBhQCwD/QklBXhggW3gMqAWAPRg4i5w1\nDZD94IMPGCBbYAyoBQCupCBHiQNkX3/9dQpKETCgFkC5o6Qga3PmzFH37t3VqVMnBsh6gAG1AMoV\nJQUZaxogO3z4cI0bN04vvPACA2Q9woBaAOWIkoKM1NTUaMiQIZoyZYpmz57NAFkDGFALoNxQUpDW\ntm3bdOaZZ2rFihVavHixxo4dazpS2WoaUHvjjTdq3Lhxuuqqq9TQ0GA6FgAUBSUFKb355ps6/fTT\nGSBrEQbUAigXlBS4YoCs3RhQC6DUUVKwDwbI+gcDagGUMkoK9sIAWf9hQC2AUkVJQTMGyPoXA2oB\nlCJKCiQxQLYUMKAWQKmhpIABsiWGAbUASgUlpYwxQLZ0MaAWQCmgpJQpBsiWPgbUAvA7SkoZYoBs\n+WBALQA/o6SUGQbIlh8G1ALwK0pKGWGAbHljQC0Av6GklAEGyKIJA2oB+AklpcQxQBbJGFALwC8o\nKSWMAbJww4BaAH5ASfGxP//5z3rllVccpzFAFulkOqA2Ho/rwQcf1LZt2wykBFDOKCk+tXXrVvXv\n319nnnmm3njjjb2mMUAW2Ug3oPbWW2/V6NGjdf755xtKCKBcUVJ8atKkSQqHwwoGgzrvvPO0bds2\nBsgiZ24Dah9//HHdddddkqS3335bTz31lMmYAMpMIB6Px02HQHYWLVqkvn37Nv8cDof1/e9/X8cd\nd5wWLFige++9l/EnyElNTY0uueQSPffcc/qP//gPTZ06VbW1tZKkiooKHXLIIXrvvfe0//77G04K\noAxMoKT4TG1trTp06KAtW7bsNdAxHA7r+OOP17333quzzjrLXED4Xjwe17XXXqsHH3xQ33zzzV77\nWSgU0jXXXKOpU6caTAigTEzg4x6fueeee/YpKJIUi8X07rvvaunSpYaSoVTs2rVLixcv1o4dO/bZ\nz+rr6zVt2jS9++67htIBKCdcSfGRDz/8UO3bt9fu3btd7xMIBPToo49q+PDhHiZDqYjH47rgggv0\n5z//WbFYzPE+4XBY3bp10/Llyz1OB6DMcCXFTyZNmpT2/7KIx+Oqrq7WvHnzPEqFUnLttdfq+eef\ndy0o0p6rditWrNDTTz/tYTIA5YiS4hNLlizRs88+m/LkIe0ZMyBJn3zyiRexUGKWLFkiac/VklQq\nKio0ceJE7dixw4tYAMoUJcUHYrGYfvGLX7j+d/ZNJ5QjjjhCt956qz744AP9/Oc/9zIiSsTatWu1\ncuVKDR8+XK1atVJFRYXjftfY2Kgvvvii+evJAFAMjEnxgd/85je66aab9vqoJxgMKh6Pq2XLlho8\neLBGjx6tn/70pwoEAgaTopTs3LlTzz33nO6//36tXLlSoVBonyt54XBYGzZs0AknnGAoJYASxleQ\nbffRRx/p+OOP165duyTtOSnU19ere/fuGjt2rAYNGqRWrVoZTolSt3XrVj388MO6//77tXXrVoXD\nYcViMQWDQXXv3p1vlQEoBkqK7Q499FB99tlnkvZ8nDN27FiNGjVKRxxxhOFkKEfxeFyvvPKKHn74\nYT355JPauXOnJOmGG27QlClTDKcDUGImhJxuraurU319vddh4KBNmzZq27at7r77bp1xxhnNH+fU\n1NQYTuausrKyeQBvMbB/mnXqqafq1FNP1W9/+1vNmzdPo0ePVps2bazeJ1E6in18gV0cr6TU1NSk\n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\nLFmijRs36oILLlBtba3pSICvUFKAMvTggw/qyiuv1OTJkzVx4kTTcUraySefrIULF2r16tW68MIL\nVVdXZzoS4BuUFKDMPPnkk7rssst0880364YbbjAdpyx07txZCxcu1Kuvvqphw4apvr7edCTAFygp\nQBmZN2+eRo4cqYkTJ+qOO+4wHaesdOnSRQsWLNDChQtVXV2thoYG05EA61FSgDKxePFiDR48WJdc\nconuvvtu03HKUrdu3TR//nzNnz9fo0ePpqgAaYRMBwBQfC+//LIGDhyoiy66SL///e8VCARMRypb\nZ511lubOnavzzz9f4XBYf/jDH3g+ABeUFKDEvfHGGzr//PPVr18/PfDAA6qo4AKqaX369NEzzzyj\nQYMGqWXLlpo5cyZFBXBASQFK2Pr163XuuefqJz/5iR577DEFg0HTkfBP/fv315w5czR06FBVVlZq\n+vTppiMB1qGkACXq3XffVa9evdS5c2c9/fTTqqysNB0JSS644AI9+uijGj58uFq2bKnJkyebjgRY\nhZIClKBNmzapd+/eat++vV544QW1atXKdCS4GDJkiHbv3q3Ro0erRYsWuu2220xHAqxBSQF86m9/\n+5uOPPJItWjRYq/bt23bpt69e6tt27ZasGCBIpGIoYTI1MiRIxWLxXTZZZepsrJSN9544z73+fDD\nD7X//vvroIMOMpAQMIOSAvjQpk2bdMIJJ+jYY4/VW2+9pQMPPFCS9Omnn6pnz5464IAD9OKLL6p1\n69aGkyJTY8aM0e7du3XllVeqZcuWuuqqq5qnvfrqq/rpT3+qzp0766233jKYEvAWJQXwoXvuuUeS\n9MEHH6hHjx5asmSJGhoa1Lt3bwUCAS1evFiHHHKI4ZTI1hVXXKG6ujpdc801qqys1BVXXKHly5er\nX79+kqS3335b77zzjk488UTDSQFvBOLxeNx0CACZ++KLL/S9732v+XfAhMNhtW/fXpWVlYpGo3r5\n5Zd12GGHGU6JfEyZMkU33XSTJk2apPvuu0+xWEyNjY0Kh8MaNmyYHn74YdMRAS9MoKQAPnPnnXfq\nzjvvVCwWa74tHA7r4IMP1ty5c3XGGWcYTIdCqa6u1pw5cyRJjY2NzbeHQiFt3ryZIopyMIH/1Qnw\nkV27dmn69Ol7FRRJisVi+uqrrzR06FBt2bLFTDgUzLPPPqunnnpK8Xh8r4IiSYFAQDNmzDATDPAY\n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\nRK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import sympy.printing.dot\n", "dotstr = sympy.printing.dot.dotprint(expr)\n", "graph = networkx.nx_pydot.read_dot(BytesIO(dotstr))\n", "\n", "print expr\n", "print\n", "print '\\r\\n'.join(list(graph.nodes))\n", "\n", "A = networkx.nx_agraph.to_agraph(graph)\n", "for node in A.nodes():\n", " if not node.attr['fontname']:\n", " node.attr['fontsize'] = 8\n", " node.attr['fontname'] = 'Verdana'\n", " node.attr['shape'] = 'none'\n", " node.attr['style'] = 'filled'\n", " node.attr['color'] = '#F0F0F0'\n", "\n", "io = BytesIO()\n", "A.draw(io, format='png', prog='dot')\n", "PIL.Image.open(io)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ввести собственные символы (или распарсить выражение) можно, используя `Symbol`, `var` (`symbols`), `S` (`sympify`)." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "x**2" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Symbol('x') ** 2" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "a + b + c" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sum(var('a b c'))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{x_1: -sqrt(-x_2**2 + 1)}, {x_1: sqrt(-x_2**2 + 1)}]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x1, x2 = symbols('x_1 x_2')\n", "solve(x1 ** 2 + x2 ** 2 - 1)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[1, 1/2, 1/4, 1/8, 1/16]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[S('1/2') ** i for i in range(5)]" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[{x1: -sqrt(-x2**2 + 1)}, {x1: sqrt(-x2**2 + 1)}]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(S('x1 ** 2 + x2 ** 2 - 1'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Отображение выражений" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Выражения `sympy` можно просматривать в различных формах, конвертировать в код на разных языках программирования, впрочем, не всегда успешно." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\\frac{1}{x} \\left(\\sin^{2}{\\left (\\alpha \\right )} + 2 \\cos{\\left (\\beta \\right )}\\right)\n", "(pow(sin(alpha), 2) + 2*cos(beta))/x\n", "(Math.pow(Math.sin(alpha), 2) + 2*Math.cos(beta))/x\n", "(Sin[alpha]^2 + 2*Cos[beta])/x\n" ] } ], "source": [ "alpha, beta, x = var('alpha beta x')\n", "expr = (sin(alpha)**2 + 2*cos(beta)) / x\n", "print latex(expr)\n", "print ccode(expr)\n", "print jscode(expr)\n", "print mathematica_code(expr)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\\sigma\\left(n\\right)\n", "\n", "// Not supported in C:\n", "// divisor_sigma\n", "divisor_sigma(n)\n", "\n", "// Not supported in Javascript:\n", "// divisor_sigma\n", "n = divisor_sigma(n);\n", "\n", "divisor_sigma[n]\n" ] } ], "source": [ "print latex(divisor_sigma(n))\n", "print\n", "print ccode(divisor_sigma(n))\n", "print\n", "print jscode(divisor_sigma(n), n)\n", "print\n", "print mathematica_code(divisor_sigma(n)) # должно быть DivisorSigma[1,n]" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(sin(alpha)**2 + 2*cos(beta))/x\n" ] } ], "source": [ "print expr" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " 2 \n", "sin (α) + 2⋅cos(β)\n", "──────────────────\n", " x \n" ] } ], "source": [ "pprint(expr)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$\\frac{1}{x} \\left(\\sin^{2}{\\left (\\alpha \\right )} + 2 \\cos{\\left (\\beta \\right )}\\right)$" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import IPython\n", "display(IPython.display.Latex('$%s$' % latex(expr)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Оставить один из этих форматов вывода в качестве дефолтного в IPython можно одним из трех вызовов" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(sin(alpha)**2 + 2*cos(beta))/x" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "init_printing(use_latex=False, pretty_print=False)\n", "expr" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ " 2 \n", "sin (α) + 2⋅cos(β)\n", "──────────────────\n", " x " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "init_printing(use_latex=False, pretty_print=True)\n", "expr" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{1}{x} \\left(\\sin^{2}{\\left (\\alpha \\right )} + 2 \\cos{\\left (\\beta \\right )}\\right)$$" ], "text/plain": [ " 2 \n", "sin (α) + 2⋅cos(β)\n", "──────────────────\n", " x " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$$\\left [ 1, \\quad 2, \\quad 3\\right ]$$" ], "text/plain": [ "[1, 2, 3]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "init_printing(use_latex='mathjax')\n", "display(expr)\n", "display([1, 2, 3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Просматривать встроенные типы в виде $\\LaTeX$ может быть неудобно, так что стоит использовать" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{1}{x} \\left(\\sin^{2}{\\left (\\alpha \\right )} + 2 \\cos{\\left (\\beta \\right )}\\right)$$" ], "text/plain": [ " 2 \n", "sin (α) + 2⋅cos(β)\n", "──────────────────\n", " x " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "[1, 2, 3]" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "init_printing(use_latex='mathjax', print_builtin=False)\n", "display(expr)\n", "display([1, 2, 3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Стандартные операции над выражениями" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068\n", "3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068\n" ] } ], "source": [ "print N(pi, 100)\n", "print pi.evalf(100)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n" ] } ], "source": [ "print type(N(pi))\n", "print type(float(pi))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.207879576350762\n" ] } ], "source": [ "print N(I ** I)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{x + 2}{x + 3}$$" ], "text/plain": [ "x + 2\n", "─────\n", "x + 3" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "simplify((x**2 - 4)/((x+3)*(x-2)))" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left ( x + 3, \\quad 2\\right )$$" ], "text/plain": [ "(x + 3, 2)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "div(x**2 - 4 + x, x-2)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{x^{2}}{12} \\left(2 x - 1\\right) \\left(3 x + 4\\right)$$" ], "text/plain": [ " 2 \n", "x ⋅(2⋅x - 1)⋅(3⋅x + 4)\n", "──────────────────────\n", " 12 " ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "factor(x**4/2 + 5*x**3/12 - x**2/3)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{2}{x + 2} - \\frac{1}{x + 1}$$" ], "text/plain": [ " 2 1 \n", "───── - ─────\n", "x + 2 x + 1" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "apart(x/((x+2)*(x+1)), x)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{2 x + 3}{\\left(x + 1\\right) \\left(x + 2\\right)}$$" ], "text/plain": [ " 2⋅x + 3 \n", "───────────────\n", "(x + 1)⋅(x + 2)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "together(1/(x+2) + 1/(x+1))" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$a^{5} + 5 a^{4} \\sqrt{b} + 10 a^{3} b + 10 a^{2} b^{\\frac{3}{2}} + 5 a b^{2} + b^{\\frac{5}{2}}$$" ], "text/plain": [ " 5 4 3 2 3/2 2 5/2\n", "a + 5⋅a ⋅√b + 10⋅a ⋅b + 10⋅a ⋅b + 5⋅a⋅b + b " ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S('(a+sqrt(b))**5').expand()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$x^{5} + 5 x^{4} y + 10 x^{3} y^{2} + 10 x^{2} y^{3} + 5 x y^{4} + y^{5}$$" ], "text/plain": [ " 5 4 3 2 2 3 4 5\n", "x + 5⋅x ⋅y + 10⋅x ⋅y + 10⋅x ⋅y + 5⋅x⋅y + y " ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expand((x+y)**5)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$- 4 \\sin^{3}{\\left (x \\right )} + 3 \\sin{\\left (x \\right )}$$" ], "text/plain": [ " 3 \n", "- 4⋅sin (x) + 3⋅sin(x)" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expand_trig(sin(3*x))" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{2 \\tan{\\left (\\frac{3 x}{2} \\right )}}{\\tan^{2}{\\left (\\frac{3 x}{2} \\right )} + 1}$$" ], "text/plain": [ " ⎛3⋅x⎞ \n", " 2⋅tan⎜───⎟ \n", " ⎝ 2 ⎠ \n", "─────────────\n", " 2⎛3⋅x⎞ \n", "tan ⎜───⎟ + 1\n", " ⎝ 2 ⎠ " ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sin(3*x).rewrite(tan)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left(x + 2\\right)^{5}$$" ], "text/plain": [ " 5\n", "(x + 2) " ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "((x+y)**5).subs(y, 2)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$y^{\\frac{5}{2}} + 10 y^{\\frac{3}{2}} + 5 \\sqrt{y} + 5 y^{2} + 10 y + 1$$" ], "text/plain": [ " 5/2 3/2 2 \n", "y + 10⋅y + 5⋅√y + 5⋅y + 10⋅y + 1" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "((x+y)**5).subs([(x, 1), (y, sqrt(y))]).expand()" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]\n", "[(10, 0), (9, 1), (8, 2), (7, 3), (6, 4), (5, 5), (4, 6), (3, 7), (2, 8), (1, 9), (0, 10)]\n" ] } ], "source": [ "p = expand(Poly('x + y') ** 10)\n", "print p.coeffs()\n", "print p.monoms()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Выражение можно превратить в функцию" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "25\n", "t**3/3\n" ] } ], "source": [ "f = Lambda(x, x ** 2)\n", "print f(5)\n", "print integrate(f(t), t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## solve" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Функция `solve` это причина, по которой CAS вообще нужны" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 3]\n" ] } ], "source": [ "print solve(x ** 2 - 5 * x + 6)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left(-\\infty < x \\wedge x < 2\\right) \\vee \\left(3 < x \\wedge x < \\infty\\right)$$" ], "text/plain": [ "(-∞ < x ∧ x < 2) ∨ (3 < x ∧ x < ∞)" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(x ** 2 - 5 * x + 6 > 0)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{4}{\\left(- \\frac{1}{2} - \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{4887}{2} + \\frac{3 \\sqrt{2654409}}{2}}} - \\frac{1}{3} \\left(- \\frac{1}{2} - \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{4887}{2} + \\frac{3 \\sqrt{2654409}}{2}}$$" ], "text/plain": [ " ___________________\n", " ⎛ 1 √3⋅ⅈ⎞ ╱ 4887 3⋅√2654409 \n", " ⎜- ─ - ────⎟⋅3 ╱ ──── + ────────── \n", " 4 ⎝ 2 2 ⎠ ╲╱ 2 2 \n", "──────────────────────────────────── - ────────────────────────────────────\n", " ___________________ 3 \n", "⎛ 1 √3⋅ⅈ⎞ ╱ 4887 3⋅√2654409 \n", "⎜- ─ - ────⎟⋅3 ╱ ──── + ────────── \n", "⎝ 2 2 ⎠ ╲╱ 2 2 " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$$- \\frac{1}{3} \\left(- \\frac{1}{2} + \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{4887}{2} + \\frac{3 \\sqrt{2654409}}{2}} + \\frac{4}{\\left(- \\frac{1}{2} + \\frac{\\sqrt{3} i}{2}\\right) \\sqrt[3]{\\frac{4887}{2} + \\frac{3 \\sqrt{2654409}}{2}}}$$" ], "text/plain": [ " ___________________ \n", " ⎛ 1 √3⋅ⅈ⎞ ╱ 4887 3⋅√2654409 \n", " ⎜- ─ + ────⎟⋅3 ╱ ──── + ────────── \n", " ⎝ 2 2 ⎠ ╲╱ 2 2 4 \n", "- ──────────────────────────────────── + ────────────────────────────────────\n", " 3 ___________________\n", " ⎛ 1 √3⋅ⅈ⎞ ╱ 4887 3⋅√2654409 \n", " ⎜- ─ + ────⎟⋅3 ╱ ──── + ────────── \n", " ⎝ 2 2 ⎠ ╲╱ 2 2 " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$$- \\frac{1}{3} \\sqrt[3]{\\frac{4887}{2} + \\frac{3 \\sqrt{2654409}}{2}} + \\frac{4}{\\sqrt[3]{\\frac{4887}{2} + \\frac{3 \\sqrt{2654409}}{2}}}$$" ], "text/plain": [ " ___________________ \n", " ╱ 4887 3⋅√2654409 \n", " 3 ╱ ──── + ────────── \n", " ╲╱ 2 2 4 \n", "- ─────────────────────── + ───────────────────────\n", " 3 ___________________\n", " ╱ 4887 3⋅√2654409 \n", " 3 ╱ ──── + ────────── \n", " ╲╱ 2 2 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "map(display, solve(x**3 + 4*x + 181, x));" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left [ \\frac{\\pi}{4}, \\quad \\frac{3 \\pi}{4}\\right ]$$" ], "text/plain": [ "⎡π 3⋅π⎤\n", "⎢─, ───⎥\n", "⎣4 4 ⎦" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(sin(x) - S('1/sqrt(2)'))" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left\\{2 n \\pi + \\frac{3 \\pi}{4}\\; |\\; n \\in \\mathbb{Z}\\right\\} \\cup \\left\\{2 n \\pi + \\frac{\\pi}{4}\\; |\\; n \\in \\mathbb{Z}\\right\\}$$" ], "text/plain": [ "⎧ 3⋅π ⎫ ⎧ π ⎫\n", "⎨2⋅n⋅π + ─── | n ∊ ℤ⎬ ∪ ⎨2⋅n⋅π + ─ | n ∊ ℤ⎬\n", "⎩ 4 ⎭ ⎩ 4 ⎭" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solveset(sin(x) - S('1/sqrt(2)'))" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$- \\operatorname{LambertW}{\\left (e^{2} \\right )} + 2$$" ], "text/plain": [ " ⎛ 2⎞ \n", "- LambertW⎝ℯ ⎠ + 2" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve(exp(x) + x - 2)[0]" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left \\{ x : - \\frac{1}{2}, \\quad y : \\frac{11}{2}\\right \\}$$" ], "text/plain": [ "{x: -1/2, y: 11/2}" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "solve([x + y - 5, y - x - 6], (x,y))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Увы, пока что `sympy` не умеет решать системы неравенств, в отличие от Sage." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "ename": "NotImplementedError", "evalue": "\ninequality has more than one symbol of interest", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mNotImplementedError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0msolve\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mx\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m>\u001b[0m \u001b[1;36m5\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m \u001b[1;33m-\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m<\u001b[0m \u001b[1;36m6\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\site-packages\\sympy\\solvers\\solvers.pyc\u001b[0m in \u001b[0;36msolve\u001b[1;34m(f, *symbols, **flags)\u001b[0m\n\u001b[0;32m 846\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mi\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfi\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mas_expr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 847\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mbool\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mBooleanAtom\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mfi\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Relational\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 848\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mreduce_inequalities\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msymbols\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msymbols\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 849\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 850\u001b[0m \u001b[1;31m# rewrite hyperbolics in terms of exp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\site-packages\\sympy\\solvers\\inequalities.pyc\u001b[0m in \u001b[0;36mreduce_inequalities\u001b[1;34m(inequalities, symbols)\u001b[0m\n\u001b[0;32m 699\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 700\u001b[0m \u001b[1;31m# solve system\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 701\u001b[1;33m \u001b[0mrv\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_reduce_inequalities\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minequalities\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msymbols\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 702\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 703\u001b[0m \u001b[1;31m# restore original symbols and return\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32mC:\\Users\\User\\Anaconda2\\lib\\site-packages\\sympy\\solvers\\inequalities.pyc\u001b[0m in \u001b[0;36m_reduce_inequalities\u001b[1;34m(inequalities, symbols)\u001b[0m\n\u001b[0;32m 620\u001b[0m raise NotImplementedError(filldedent('''\n\u001b[0;32m 621\u001b[0m \u001b[0minequality\u001b[0m \u001b[0mhas\u001b[0m \u001b[0mmore\u001b[0m \u001b[0mthan\u001b[0m \u001b[0mone\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 622\u001b[1;33m symbol of interest'''))\n\u001b[0m\u001b[0;32m 623\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 624\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_polynomial\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mgen\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mNotImplementedError\u001b[0m: \ninequality has more than one symbol of interest" ] } ], "source": [ "solve([x + y > 5, y - x < 6], (x,y))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Матан" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Предел" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$1$$" ], "text/plain": [ "1" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit(sin(x) / x, x, 0)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$- \\frac{1}{2}$$" ], "text/plain": [ "-1/2" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "limit((cos(x) - 1) / x ** 2, x, 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Дифференцирование" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true }, "outputs": [], "source": [ "expr = sin(x)**2 + 2*cos(x)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$2 \\sin{\\left (x \\right )} \\cos{\\left (x \\right )} - 2 \\sin{\\left (x \\right )}$$" ], "text/plain": [ "2⋅sin(x)⋅cos(x) - 2⋅sin(x)" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expr.diff(x)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{1}{x} \\cos{\\left (x \\right )} - \\frac{1}{x^{2}} \\sin{\\left (x \\right )}$$" ], "text/plain": [ "cos(x) sin(x)\n", "────── - ──────\n", " x 2 \n", " x " ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(sin(x) / x)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{x \\left(- 2 x - 2\\right)}{\\left(x^{2} + 2 x + 1\\right)^{2}} + \\frac{1}{x^{2} + 2 x + 1}$$" ], "text/plain": [ " x⋅(-2⋅x - 2) 1 \n", "─────────────── + ────────────\n", " 2 2 \n", "⎛ 2 ⎞ x + 2⋅x + 1\n", "⎝x + 2⋅x + 1⎠ " ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diff(x / (x**2 + 2*x + 1), x)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left [ \\sin{\\left (2 x \\right )}, \\quad 2 \\cos{\\left (2 x \\right )}, \\quad - 4 \\sin{\\left (2 x \\right )}, \\quad - 8 \\cos{\\left (2 x \\right )}, \\quad 16 \\sin{\\left (2 x \\right )}\\right ]$$" ], "text/plain": [ "[sin(2⋅x), 2⋅cos(2⋅x), -4⋅sin(2⋅x), -8⋅cos(2⋅x), 16⋅sin(2⋅x)]" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[diff(sin(2 * x), x, u) for u in range(5)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Интегрирование" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{x}{2} - \\frac{1}{2} \\sin{\\left (x \\right )} \\cos{\\left (x \\right )} + 2 \\sin{\\left (x \\right )}$$" ], "text/plain": [ "x sin(x)⋅cos(x) \n", "─ - ───────────── + 2⋅sin(x)\n", "2 2 " ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "expr.integrate(x)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\log{\\left (x + 1 \\right )} + \\frac{1}{x + 1}$$" ], "text/plain": [ " 1 \n", "log(x + 1) + ─────\n", " x + 1" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(x / (x**2 + 2*x + 1), x)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\operatorname{Si}{\\left (x \\right )}$$" ], "text/plain": [ "Si(x)" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(sin(x)/x, x)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{\\operatorname{erf}{\\left (\\frac{\\sqrt{2} x}{2} \\sqrt{\\frac{1}{\\sigma^{2}}} \\right )}}{2 \\sigma \\sqrt{\\frac{1}{\\sigma^{2}}}}$$" ], "text/plain": [ " ⎛ ____⎞\n", " ⎜ ╱ 1 ⎟\n", " ⎜√2⋅x⋅ ╱ ── ⎟\n", " ⎜ ╱ 2 ⎟\n", " ⎜ ╲╱ σ ⎟\n", "erf⎜──────────────⎟\n", " ⎝ 2 ⎠\n", "───────────────────\n", " ____ \n", " ╱ 1 \n", " 2⋅σ⋅ ╱ ── \n", " ╱ 2 \n", " ╲╱ σ " ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sigma = var('sigma')\n", "integrate(exp(-x**2 / 2 / sigma ** 2) / sqrt(2 * pi) / sigma, x)" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\pi$$" ], "text/plain": [ "π" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(sin(x)/x, (x, -oo, oo))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ряд Тейлора" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$x + \\frac{x^{3}}{3} + \\frac{2 x^{5}}{15} + \\frac{17 x^{7}}{315} + \\frac{62 x^{9}}{2835} + \\frac{1382 x^{11}}{155925} + \\frac{21844 x^{13}}{6081075} + \\mathcal{O}\\left(x^{15}\\right)$$" ], "text/plain": [ " 3 5 7 9 11 13 \n", " x 2⋅x 17⋅x 62⋅x 1382⋅x 21844⋅x ⎛ 15⎞\n", "x + ── + ──── + ───── + ───── + ──────── + ───────── + O⎝x ⎠\n", " 3 15 315 2835 155925 6081075 " ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "series(tan(x), x, 0, 15)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ряды Фурье" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$- 4 \\cos{\\left (x \\right )} + \\cos{\\left (2 x \\right )} + \\frac{\\pi^{2}}{3} + \\ldots$$" ], "text/plain": [ " 2 \n", " π \n", "-4⋅cos(x) + cos(2⋅x) + ── + …\n", " 3 " ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ser = fourier_series(x**2, (x, -pi, pi))\n", "ser" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\sqrt{\\pi} e^{- \\pi^{2} k^{2}}$$" ], "text/plain": [ " 2 2\n", " -π ⋅k \n", "√π⋅ℯ " ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fourier_transform(exp(-x ** 2), x, k)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$e^{- x^{2}}$$" ], "text/plain": [ " 2\n", " -x \n", "ℯ " ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "inverse_fourier_transform(sqrt(pi)*exp(-(pi*k)**2), k, x)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "serfn = lambdify(x, ser.truncate(3))\n", "\n", "xx = linspace(-numpy.pi, numpy.pi)\n", "matplotlib.pyplot.plot(xx, xx ** 2);\n", "matplotlib.pyplot.plot(xx, serfn(xx));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Векторные поля" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sympy.vector import CoordSys3D, express, divergence, curl, gradient, scalar_potential" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$3 \\mathbf{{y}_{R}} + 2 \\mathbf{{z}_{R}}$$" ], "text/plain": [ "3⋅R_y + 2⋅R_z" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$$(- \\mathbf{{x}_{R}})\\mathbf{\\hat{k}_{R}}$$" ], "text/plain": [ "(-R_x) R_k" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "R = CoordSys3D('R')\n", "vector_field = R.x * R.y * R.i + R.y ** 2 * R.j + R.z ** 2 * R.k\n", "display(divergence(vector_field))\n", "display(curl(vector_field))" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$(\\mathbf{{y}_{R}})\\mathbf{\\hat{i}_{R}} + (\\mathbf{{x}_{R}} + 2 \\mathbf{{y}_{R}})\\mathbf{\\hat{j}_{R}} + (2 \\mathbf{{z}_{R}})\\mathbf{\\hat{k}_{R}}$$" ], "text/plain": [ "(R_y) R_i + (R_x + 2⋅R_y) R_j + (2⋅R_z) R_k" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scalar_field = R.x * R.y + R.y ** 2 + R.z ** 2\n", "gr = gradient(scalar_field)\n", "gr" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n", "False\n" ] } ], "source": [ "print sympy.vector.is_conservative(gr)\n", "print sympy.vector.is_solenoidal(gr)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\mathbf{{x}_{R}} \\mathbf{{y}_{R}} + \\mathbf{{y}_{R}}^{2} + \\frac{\\mathbf{{z}_{R}}^{2}}{2}$$" ], "text/plain": [ " 2\n", " 2 R_z \n", "R_x⋅R_y + R_y + ────\n", " 2 " ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "scalar_potential(R.y * R.i + (R.x + 2 * R.y) * R.j + R.z * R.k, R)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Дифференциальные уравнения" ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$y{\\left (t \\right )} = C_{2} e^{- t} + \\left(C_{1} + \\frac{t}{2}\\right) e^{t}$$" ], "text/plain": [ " -t ⎛ t⎞ t\n", "y(t) = C₂⋅ℯ + ⎜C₁ + ─⎟⋅ℯ \n", " ⎝ 2⎠ " ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dsolve(y(t).diff(t, t) - y(t) - exp(t), y(t))" ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left [ x{\\left (t \\right )} = 3 C_{1} e^{t} + 3 C_{2} e^{5 t}, \\quad y{\\left (t \\right )} = - C_{1} e^{t} + 3 C_{2} e^{5 t}\\right ]$$" ], "text/plain": [ "⎡ t 5⋅t t 5⋅t⎤\n", "⎣x(t) = 3⋅C₁⋅ℯ + 3⋅C₂⋅ℯ , y(t) = - C₁⋅ℯ + 3⋅C₂⋅ℯ ⎦" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dsolve((Eq(x(t).diff(t), 2 * x(t) + 3 * y(t)), Eq(y(t).diff(t), 1 * x(t) + 4 * y(t))))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Урчпы" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$f{\\left (x,y \\right )} = F{\\left (3 x - 2 y \\right )} e^{- \\frac{2 x}{13} - \\frac{3 y}{13}}$$" ], "text/plain": [ " 2⋅x 3⋅y\n", " - ─── - ───\n", " 13 13\n", "f(x, y) = F(3⋅x - 2⋅y)⋅ℯ " ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f = Function('f')\n", "u = f(x, y)\n", "u_x = u.diff(x)\n", "u_y = u.diff(y)\n", "pdsolve(Eq(1 + (2*(u_x/u)) + (3*(u_y/u))))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Линал" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Для вещественных чисел в `sympy` определены функции `sign Min Max`, для комплексных `re im arg conjugate Abs`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Матрицы, транспонирование, арифметика, определитель, след, обратная, характеристический полином, собственные значения, жорданова форма, канонический базис" ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 2 & 3 & 4\\\\2 & 4 & 6 & 8\\\\3 & 6 & 9 & 12\\\\4 & 8 & 12 & 16\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 2 3 4 ⎤\n", "⎢ ⎥\n", "⎢2 4 6 8 ⎥\n", "⎢ ⎥\n", "⎢3 6 9 12⎥\n", "⎢ ⎥\n", "⎣4 8 12 16⎦" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Matrix(4,4, lambda i,j: (i+1)*(j+1))" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 3\\\\2 & 4\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 3⎤\n", "⎢ ⎥\n", "⎣2 4⎦" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$$\\left[\\begin{matrix}7 & 10\\\\15 & 22\\end{matrix}\\right]$$" ], "text/plain": [ "⎡7 10⎤\n", "⎢ ⎥\n", "⎣15 22⎦" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 4\\\\9 & 16\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 4 ⎤\n", "⎢ ⎥\n", "⎣9 16⎦" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "M = Matrix([[1,2],[3,4]])\n", "display(M.T)\n", "display(M * M)\n", "display(M.multiply_elementwise(M))" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}\\frac{1}{2} & \\frac{1}{2} & 0\\\\\\frac{1}{2} & 0 & \\frac{1}{2}\\\\0 & \\frac{1}{2} & \\frac{1}{2}\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1/2 1/2 0 ⎤\n", "⎢ ⎥\n", "⎢1/2 0 1/2⎥\n", "⎢ ⎥\n", "⎣ 0 1/2 1/2⎦" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m = Matrix([[S('1/2'), S('1/2'), S('0')], [S('1/2'), S('0'), S('1/2')], [S('0'), S('1/2'), S('1/2')]])\n", "m" ] }, { "cell_type": "code", "execution_count": 74, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left ( - \\frac{1}{4}, \\quad 1\\right )$$" ], "text/plain": [ "(-1/4, 1)" ] }, "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ "det(m), trace(m)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 1 & -1\\\\1 & -1 & 1\\\\-1 & 1 & 1\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 1 -1⎤\n", "⎢ ⎥\n", "⎢1 -1 1 ⎥\n", "⎢ ⎥\n", "⎣-1 1 1 ⎦" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m.inv()" ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 1\\\\1 & 0\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 1⎤\n", "⎢ ⎥\n", "⎣1 0⎦" ] }, "execution_count": 76, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FiboM = Matrix([[1,1],[1,0]])\n", "FiboM" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}0 & 1\\\\1 & -1\\end{matrix}\\right]$$" ], "text/plain": [ "⎡0 1 ⎤\n", "⎢ ⎥\n", "⎣1 -1⎦" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FiboM ** (-1)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}34 & 21\\\\21 & 13\\end{matrix}\\right]$$" ], "text/plain": [ "⎡34 21⎤\n", "⎢ ⎥\n", "⎣21 13⎦" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FiboM ** 8" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-1 1\n" ] } ], "source": [ "print FiboM.det(), FiboM.trace()" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\operatorname{PurePoly}{\\left( \\lambda^{2} - \\lambda - 1, \\lambda, domain=\\mathbb{Z} \\right)}$$" ], "text/plain": [ "PurePoly(lamda**2 - lamda - 1, lamda, domain='ZZ')" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FiboM.charpoly(var('lamda'))" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{-sqrt(5)/2 + 1/2: 1, 1/2 + sqrt(5)/2: 1}" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FiboM.eigenvals()" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[(1/2 + sqrt(5)/2, 1, [Matrix([\n", " [-1/(-sqrt(5)/2 + 1/2)],\n", " [ 1]])]), (-sqrt(5)/2 + 1/2, 1, [Matrix([\n", " [-1/(1/2 + sqrt(5)/2)],\n", " [ 1]])])]" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FiboM.eigenvects()" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}\\frac{1}{2} + \\frac{\\sqrt{5}}{2} & 0\\\\0 & - \\frac{\\sqrt{5}}{2} + \\frac{1}{2}\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 √5 ⎤\n", "⎢─ + ── 0 ⎥\n", "⎢2 2 ⎥\n", "⎢ ⎥\n", "⎢ √5 1⎥\n", "⎢ 0 - ── + ─⎥\n", "⎣ 2 2⎦" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$$\\left[\\begin{matrix}\\frac{1}{2} + \\frac{\\sqrt{5}}{2} & - \\frac{\\sqrt{5}}{2} + \\frac{1}{2}\\\\1 & 1\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 √5 √5 1⎤\n", "⎢─ + ── - ── + ─⎥\n", "⎢2 2 2 2⎥\n", "⎢ ⎥\n", "⎣ 1 1 ⎦" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "kb, jf = simplify(FiboM.jordan_form())\n", "display(jf)\n", "display(kb)" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}1 & 1\\\\1 & 0\\end{matrix}\\right]$$" ], "text/plain": [ "⎡1 1⎤\n", "⎢ ⎥\n", "⎣1 0⎦" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "simplify(kb * jf * kb.inv())" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{2^{- k}}{5} \\sqrt{5} \\left(\\left(1 + \\sqrt{5}\\right)^{k} - \\left(- \\sqrt{5} + 1\\right)^{k}\\right)$$" ], "text/plain": [ " -k ⎛ k k⎞\n", "2 ⋅√5⋅⎝(1 + √5) - (-√5 + 1) ⎠\n", "───────────────────────────────\n", " 5 " ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "simplify(kb * (jf ** k) * kb.inv())[1,0]" ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([y1*z2 - y2*z1, -x1*z2 + x2*z1, x1*y2 - x2*y1], dtype=object)" ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x1, y1, z1, x2, y2, z2 = var('x1 y1 z1 x2 y2 z2')\n", "cross([x1,y1,z1], [x2,y2,z2])" ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\sqrt{\\left|{a_{0}}\\right|^{2} + \\left|{a_{1}}\\right|^{2} + \\left|{a_{2}}\\right|^{2}}$$" ], "text/plain": [ " _______________________\n", " ╱ 2 2 2 \n", "╲╱ │a₀│ + │a₁│ + │a₂│ " ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Matrix(symarray('a', (3,))).norm()" ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\sqrt{\\left|{x_{1}}\\right|^{2} + \\left|{y_{1}}\\right|^{2} + \\left|{z_{1}}\\right|^{2}}$$" ], "text/plain": [ " _______________________\n", " ╱ 2 2 2 \n", "╲╱ │x₁│ + │y₁│ + │z₁│ " ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Matrix([x1,y1,z1]).norm()" ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$X_{1, 0} Y_{0, 2} + X_{1, 1} Y_{1, 2} + X_{1, 2} Y_{2, 2}$$" ], "text/plain": [ "X₁₀⋅Y₀₂ + X₁₁⋅Y₁₂ + X₁₂⋅Y₂₂" ] }, "execution_count": 89, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X = MatrixSymbol('X', 3, 3)\n", "Y = MatrixSymbol('Y', 3, 3)\n", "(X * Y)[1, 2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Конкретная математика" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Суммирование" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{n^{3}}{3} + \\frac{n^{2}}{2} + \\frac{n}{6}$$" ], "text/plain": [ " 3 2 \n", "n n n\n", "── + ── + ─\n", "3 2 6" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "summation(k ** 2, (k, 1, n))" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\begin{cases} \\frac{1}{- x + 1} & \\text{for}\\: \\left|{x}\\right| < 1 \\\\\\sum_{k=0}^{\\infty} x^{k} & \\text{otherwise} \\end{cases}$$" ], "text/plain": [ "⎧ 1 \n", "⎪ ────── for │x│ < 1\n", "⎪ -x + 1 \n", "⎪ \n", "⎪ ∞ \n", "⎪ ___ \n", "⎨ ╲ \n", "⎪ ╲ k \n", "⎪ ╱ x otherwise \n", "⎪ ╱ \n", "⎪ ‾‾‾ \n", "⎪k = 0 \n", "⎩ " ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "summation(x ** k, (k, 0, oo))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Не все суммы поддаются движку sympy" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\sum_{\\substack{1 \\leq x \\leq A\\\\1 \\leq y \\leq B}} \\left|{x - y}\\right|$$" ], "text/plain": [ " B A \n", " ___ ___ \n", " ╲ ╲ \n", " ╲ ╲ │x - y│\n", " ╱ ╱ \n", " ╱ ╱ \n", " ‾‾‾ ‾‾‾ \n", "y = 1 x = 1 " ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A, B = var('A B', positive=True, integer=True)\n", "summation(Abs(x - y), (x, 1, A), (y, 1, B))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Решение рекуррентности (вывод формулы Бине)" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{\\sqrt{5}}{5} \\left(\\frac{1}{2} + \\frac{\\sqrt{5}}{2}\\right)^{n} - \\frac{\\sqrt{5}}{5} \\left(- \\frac{\\sqrt{5}}{2} + \\frac{1}{2}\\right)^{n}$$" ], "text/plain": [ " n n\n", " ⎛1 √5⎞ ⎛ √5 1⎞ \n", "√5⋅⎜─ + ──⎟ √5⋅⎜- ── + ─⎟ \n", " ⎝2 2 ⎠ ⎝ 2 2⎠ \n", "──────────── - ──────────────\n", " 5 5 " ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rsolve(y(n+2)-y(n+1)-y(n), y(n), {y(0): 0, y(1): 1})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Цепная дробь" ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left [ 0, \\quad 2, \\quad 1, \\quad 2\\right ]$$" ], "text/plain": [ "[0, 2, 1, 2]" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(continued_fraction_iterator(Rational(3, 8)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\frac{3}{8} = 0 + \\frac{1}{2 + \\frac{1}{1 + \\frac{1}{2}}}$$" ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left [ 3, \\quad \\frac{22}{7}, \\quad \\frac{333}{106}, \\quad \\frac{355}{113}, \\quad \\frac{103993}{33102}, \\quad \\frac{104348}{33215}, \\quad \\frac{208341}{66317}, \\quad \\frac{312689}{99532}, \\quad \\frac{833719}{265381}, \\quad \\frac{1146408}{364913}\\right ]$$" ], "text/plain": [ "⎡ 333 355 103993 104348 208341 312689 833719 1146408⎤\n", "⎢3, 22/7, ───, ───, ──────, ──────, ──────, ──────, ──────, ───────⎥\n", "⎣ 106 113 33102 33215 66317 99532 265381 364913⎦" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(itertools.islice(continued_fraction_convergents(continued_fraction_iterator(pi)), 0, 10))" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(q & r) | (r & ~p)\n", "[{p: False, r: True, q: True}, {p: False, r: True, q: False}, {p: True, r: True, q: True}]\n" ] } ], "source": [ "p, q, r = var('p q r')\n", "k2 = to_dnf((p >> q) & r)\n", "print k2\n", "print list(satisfiable(k2, all_models=True))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Теория чисел" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[2, 1, 1, 0, 1]" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "digits(13, 2)" ] }, { "cell_type": "code", "execution_count": 98, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "168\n", "[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]\n" ] } ], "source": [ "print primepi(1000)\n", "print list(primerange(1, 1000))" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "541\n", "True\n", "1000000007\n" ] } ], "source": [ "print prime(100)\n", "print isprime(2 ** 127 - 1)\n", "print nextprime(1000000000)" ] }, { "cell_type": "code", "execution_count": 100, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{2048953: 1, 3: 3, 1532117: 1}\n" ] } ], "source": [ "print factorint(84759364534527)" ] }, { "cell_type": "code", "execution_count": 101, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wall time: 298 ms\n" ] }, { "data": { "text/plain": [ "{193707721: 1, 761838257287L: 1}" ] }, "execution_count": 101, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%time\n", "factorint(2 ** 67 - 1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Профессор Коул к 1903 году потратил на это «все воскресенья в течение трех лет»." ] }, { "cell_type": "code", "execution_count": 102, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4 (-5, 18, 4) 4\n" ] } ], "source": [ "print gcd(244, 68), gcdex(244, 68), -5 * 244 + 18 * 68" ] }, { "cell_type": "code", "execution_count": 103, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "220 284\n" ] } ], "source": [ "print sum(divisors(284)[:-1]), sum(divisors(220)[:-1])" ] }, { "cell_type": "code", "execution_count": 104, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6 28\n", "[1, 2, 3, 4, 6, 12]\n", "4\n" ] } ], "source": [ "print divisor_count(12), divisor_sigma(12)\n", "print divisors(12)\n", "print totient(12)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Китайская теорема" ] }, { "cell_type": "code", "execution_count": 105, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(639985, 912285)\n", "49 76 65 912285\n" ] } ], "source": [ "from sympy.ntheory.modular import crt\n", "print crt([99, 97, 95], [49, 76, 65])\n", "print 639985 % 99, 639985 % 97, 639985 % 95, 99 * 97 * 95" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Проверка обращения Мёбиуса $G(n) = \\sum_{d|n} F(d) \\Leftrightarrow F(n) = \\sum_{d|n} \\mu(d) G(\\frac{n}{d})$" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{array}{cccccccccccccccccccc}1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\-1 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\-1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\0 & -1 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\-1 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\1 & -1 & -1 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\-1 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & -1 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\0 & 0 & -1 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\1 & -1 & 0 & 0 & -1 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\-1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\0 & 1 & 0 & -1 & 0 & -1 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\-1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\\\1 & -1 & 0 & 0 & 0 & 0 & -1 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\\\1 & 0 & -1 & 0 & -1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\\\0 & 0 & 0 & 0 & 0 & 0 & 0 & -1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\\\-1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\\\0 & 0 & 1 & 0 & 0 & -1 & 0 & 0 & -1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0\\\\-1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\\\0 & 1 & 0 & -1 & 0 & 0 & 0 & 0 & 0 & -1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1\\end{array}\\right]$$" ], "text/plain": [ "⎡1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0⎤\n", "⎢ ⎥\n", "⎢-1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢-1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢0 -1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢-1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢1 -1 -1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢-1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢0 0 0 -1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢0 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢1 -1 0 0 -1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢-1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢0 1 0 -1 0 -1 0 0 0 0 0 1 0 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢-1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢1 -1 0 0 0 0 -1 0 0 0 0 0 0 1 0 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢1 0 -1 0 -1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢0 0 0 0 0 0 0 -1 0 0 0 0 0 0 0 1 0 0 0 0⎥\n", "⎢ ⎥\n", "⎢-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0⎥\n", "⎢ ⎥\n", "⎢0 0 1 0 0 -1 0 0 -1 0 0 0 0 0 0 0 0 1 0 0⎥\n", "⎢ ⎥\n", "⎢-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0⎥\n", "⎢ ⎥\n", "⎣0 1 0 -1 0 0 0 0 0 -1 0 0 0 0 0 0 0 0 0 1⎦" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "j_divides_i = Matrix(fromfunction(lambda i,j: where((i+1) % (j+1) == 0, 1, 0), (20, 20)))\n", "inv_j_divides_i = j_divides_i.inv()\n", "inv_j_divides_i" ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 107, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mo = [[int(mobius((i + 1) / (j + 1))) if (i + 1) % (j + 1) == 0 else 0 for j in range(20)] for i in range(20)]\n", "Matrix(mo) == inv_j_divides_i" ] }, { "cell_type": "code", "execution_count": 108, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left\\{\\left ( 3 t_{0} - 5, \\quad - 2 t_{0} + 5\\right )\\right\\}$$" ], "text/plain": [ "set([(3⋅t₀ - 5, -2⋅t₀ + 5)])" ] }, "execution_count": 108, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diophantine(2*x + 3*y - 5)" ] }, { "cell_type": "code", "execution_count": 109, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{(2, 1), (5, 1)}" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diophantine(x**2 - 4*x*y + 8*y**2 - 3*x + 7*y - 5)" ] }, { "cell_type": "code", "execution_count": 110, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(7348655773126303755629132256340558924373328617090197171706667985290133761074361570679971146341442904888591341841287254965947859225905297999477796015919477067007270662755471894303543848700521290783297130156224163076157960251257693490144231567905196959807936667239827765383424517553637410148296202159548497638625891934215562498854803999087988746111891278525153998140276439504335166247691283287982071011L, 13368210114309858110490408377394654362940185298164216827948999032605862717288140668701831983256694918479543797066513434530829632365715334435258980969002310473634736670934466710096296555376044613951842365465867556366705263409477296458008936007006429171666426262499427073084651776609218709214727849066557411083083942753965341146350258607478649802267967135142551807477661688074367083808666023441349174043384L)\n", "Wall time: 20.1 s\n" ] } ], "source": [ "%%time\n", "a = 30741415699351712223222592216948664852787225938672761888182663459401433940293299920472821794247792558438137266179003170954852009167996\n", "b = 5493768938913164268735898548345740984062864198582915532893452862692397723477349340213609803716310002722689784104429402408034399680657214203589114662020419403506380275921075865806868813167390548527002018378296772011002830464813992537445273710373363121247809539380530302504021135339366740636410963119289644130568327436166142653219502858785723203265988729334812946807271940413511096470449043813939925759131485224930805050595388961884769573807597931344321170355620526497042548348665782820474459300583235597864519400688289208986957832681459966933968204573143630154199268824952951642924625108969237666308633980889261559554117298872683137210357137988177192697560524562835477922442010038014370796719316949327823897102946508453004777622812045656957796013010907193455701053005247975317200627083352360327185314875288693488759973999715297338413318230762734322668133288476183336301663326505090120348966948964517423252467946014780068274519231694498484297\n", "print max(list(diophantine(x**2 + a*(y**2) - b)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Перестановки" ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sympy.combinatorics import Permutation" ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1 3) (0 1 2 3)\n" ] } ], "source": [ "p = Permutation([0, 3, 2, 1])\n", "q = Permutation([1, 2, 3, 0])\n", "print p, q" ] }, { "cell_type": "code", "execution_count": 113, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "[0, 1, 3, 4, 2]\n" ] } ], "source": [ "print Permutation([0,1,2,4,3]).rank()\n", "print Permutation.unrank_lex(5, 3).array_form" ] }, { "cell_type": "code", "execution_count": 114, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3 {1: 2, 2: 1} {4: 1}\n" ] } ], "source": [ "print p.cycles, p.cycle_structure, q.cycle_structure" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3 False 1\n" ] } ], "source": [ "print p.inversions(), p.is_even, p.parity()" ] }, { "cell_type": "code", "execution_count": 116, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 3] [0, 1, 2, 3]\n" ] } ], "source": [ "print p.support(), q.support()" ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 4\n" ] } ], "source": [ "print p.order(), q.order()" ] }, { "cell_type": "code", "execution_count": 118, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[4, 0, 5, 1, 2, 3]" ] }, "execution_count": 118, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(Permutation.from_sequence('eafbcd'))" ] }, { "cell_type": "code", "execution_count": 119, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5 [1, 0, 2, 3]\n" ] } ], "source": [ "print p.rank(), p.next_lex().array_form" ] }, { "cell_type": "code", "execution_count": 120, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 0, 3, 2] [3, 2, 1, 0]\n" ] } ], "source": [ "print list(p * q), list(q * p)" ] }, { "cell_type": "code", "execution_count": 121, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[(0, 3), (0, 2), (0, 1)]" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q.transpositions()" ] }, { "cell_type": "code", "execution_count": 122, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 3, 0, 1] [2, 3, 0, 1] [[0, 2], [1, 3]] [2, 3, 0, 1]\n" ] } ], "source": [ "pp = Permutation(0, 2)(1, 3)\n", "print pp(range(4)), pp.list(), pp.cyclic_form, pp.array_form" ] }, { "cell_type": "code", "execution_count": 123, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, 2, 1, 3, 4]" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Permutation([[1,2]], size=5).list()" ] }, { "cell_type": "code", "execution_count": 124, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1, 2]] [[0], [1, 2], [3], [4]]\n" ] } ], "source": [ "print Permutation([[1,2]], size=5).cyclic_form, Permutation([[1,2]], size=5).full_cyclic_form" ] }, { "cell_type": "code", "execution_count": 125, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Permutation(0, 4) == Permutation([4, 1, 2, 3, 0])" ] }, { "cell_type": "code", "execution_count": 126, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2" ] }, "execution_count": 126, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p.length()" ] }, { "cell_type": "code", "execution_count": 127, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0, 3, 2, 1]" ] }, "execution_count": 127, "metadata": {}, "output_type": "execute_result" } ], "source": [ "[i ^ p ** 3 for i in range(4)]" ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "([3, 2, 1, 0], [1, 0, 3, 2])" ] }, "execution_count": 128, "metadata": {}, "output_type": "execute_result" } ], "source": [ "q(p(range(4))), (p * q)(range(4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Группы" ] }, { "cell_type": "code", "execution_count": 129, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Permutation(4), Permutation(0, 4)(1, 3), Permutation(0, 1, 2, 3, 4), Permutation(1, 4)(2, 3), Permutation(0, 2, 4, 1, 3), Permutation(0, 1)(2, 4), Permutation(0, 3, 1, 4, 2), Permutation(0, 2)(3, 4), Permutation(0, 4, 3, 2, 1), Permutation(4)(0, 3)(1, 2)]\n" ] } ], "source": [ "print list(sympy.combinatorics.dihedral(5))" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "symmetric 120\n", "cyclic 5\n", "alternating 60\n", "dihedral 10\n" ] } ], "source": [ "for gr in 'symmetric cyclic alternating dihedral'.split():\n", " print gr, len(list(getattr(sympy.combinatorics, gr)(5)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Мультипликативная группа, порядок элемента в $Z_n^*$, степень по модулю, корень по вычету, дискретный логарифм" ] }, { "cell_type": "code", "execution_count": 131, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "376" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pow(2, 100, 1000)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$2^{504} \\equiv 1 \\pmod{1009} \\\\\n", "2^{503} \\equiv 2^{-1} \\equiv 505 \\pmod{1009}$" ] }, { "cell_type": "code", "execution_count": 132, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 504 505 505\n" ] } ], "source": [ "print pow(2, 504, 1009), n_order(2, 1009), mod_inverse(2, 1009), pow(2, 504-1, 1009)" ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 503\n" ] } ], "source": [ "print nthroot_mod(505, 503, 1009), discrete_log(1009, 2, 505)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Комбинаторика" ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]\n" ] } ], "source": [ "print [fibonacci(k) for k in range(10)]" ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000\n", "34332795984163804765195977526776142032365783805375784983543400282685180793327632432791396429850988990237345920155783984828001486412574060553756854137069878601\n" ] } ], "source": [ "print factorial(100)\n", "print subfactorial(100)" ] }, { "cell_type": "code", "execution_count": 136, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1]\n" ] } ], "source": [ "print [binomial(10, k) for k in range(11)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Число Каталана — число правильных скобочных последовательностей длины $2n$" ] }, { "cell_type": "code", "execution_count": 137, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862]\n" ] } ], "source": [ "print [catalan(k) for k in range(10)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Числа Стирлинга 1-го рода $\\left[ n \\atop k \\right]$ — коэффициенты при $x^k$ разложения $x^{\\underline{n}} = x (x-1) \\ldots (x-n+1)$.\n", "\n", "Числа Стирлинга 2-го рода $\\left\\{ {n \\atop k} \\right\\}$ — коэффициенты при $x^{\\underline{k}}$ разложения $x^n$. Заодно число разбиений множества размера $n$ на $k$ непустых подмножеств." ] }, { "cell_type": "code", "execution_count": 138, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$x^{10} - 45 x^{9} + 870 x^{8} - 9450 x^{7} + 63273 x^{6} - 269325 x^{5} + 723680 x^{4} - 1172700 x^{3} + 1026576 x^{2} - 362880 x$$" ], "text/plain": [ " 10 9 8 7 6 5 4 3\n", "x - 45⋅x + 870⋅x - 9450⋅x + 63273⋅x - 269325⋅x + 723680⋅x - 1172700⋅x \n", "\n", " 2 \n", " + 1026576⋅x - 362880⋅x" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "k = var('k')\n", "expand(product(x-k, (k, 0, 9)))" ] }, { "cell_type": "code", "execution_count": 139, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 362880, 1026576, 1172700, 723680, 269325, 63273, 9450, 870, 45, 1]\n" ] } ], "source": [ "print [sympy.combinatorial.numbers.stirling(10, k, kind=1) for k in range(11)]" ] }, { "cell_type": "code", "execution_count": 140, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0, 1, 511, 9330, 34105, 42525, 22827, 5880, 750, 45, 1]\n" ] } ], "source": [ "print [sympy.combinatorial.numbers.stirling(10, k, kind=2) for k in range(11)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Число Белла — число разбиений множества размера $n$" ] }, { "cell_type": "code", "execution_count": 141, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147]\n" ] } ], "source": [ "print [sympy.combinatorial.numbers.bell(k) for k in range(10)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Числа Бернулли известны прежде всего из-за их роли в формуле Фаульхабера https://en.wikipedia.org/wiki/Faulhaber%27s_formula о закрытой форме суммы $\\sum_{k=1}^n k^p$." ] }, { "cell_type": "code", "execution_count": 142, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, -1/2, 1/6, 0, -1/30, 0, 1/42, 0, -1/30, 0]\n" ] } ], "source": [ "print [bernoulli(k) for k in range(10)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Число разбиений" ] }, { "cell_type": "code", "execution_count": 143, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "204226" ] }, "execution_count": 143, "metadata": {}, "output_type": "execute_result" } ], "source": [ "npartitions(50)" ] }, { "cell_type": "code", "execution_count": 144, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 1, 1, 1, 1, 1]\n", "[2, 1, 1, 1, 1]\n", "[2, 2, 1, 1]\n", "[2, 2, 2]\n", "[3, 1, 1, 1]\n", "[3, 2, 1]\n", "[3, 3]\n", "[4, 1, 1]\n", "[4, 2]\n", "[5, 1]\n", "[6]\n" ] } ], "source": [ "import sympy.combinatorics\n", "pa = sympy.combinatorics.partitions.IntegerPartition([1] * 6)\n", "while True:\n", " print pa.partition\n", " if len(pa.partition) == 1: break\n", " pa = pa.next_lex()" ] }, { "cell_type": "code", "execution_count": 145, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['0000', '0001', '0011', '0010', '0110', '0111', '0101', '0100', '1100', '1101', '1111', '1110', '1010', '1011', '1001', '1000']\n" ] } ], "source": [ "print list(sympy.combinatorics.subsets.GrayCode(4).generate_gray())" ] }, { "cell_type": "code", "execution_count": 146, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 []\n", "1 ['d']\n", "2 ['c', 'd']\n", "3 ['c']\n", "4 ['b', 'c']\n", "5 ['b', 'c', 'd']\n", "6 ['b', 'd']\n", "7 ['b']\n", "8 ['a', 'b']\n", "9 ['a', 'b', 'd']\n", "10 ['a', 'b', 'c', 'd']\n", "11 ['a', 'b', 'c']\n", "12 ['a', 'c']\n", "13 ['a', 'c', 'd']\n", "14 ['a', 'd']\n", "15 ['a']\n" ] } ], "source": [ "ss = sympy.combinatorics.Subset([], 'abcd')\n", "while True:\n", " print ss.rank_gray, ss.subset\n", " ss = ss.next_gray()\n", " if ss.subset == []: break" ] }, { "cell_type": "code", "execution_count": 147, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 []\n", "1 ['d']\n", "2 ['c']\n", "3 ['c', 'd']\n", "4 ['b']\n", "5 ['b', 'd']\n", "6 ['b', 'c']\n", "7 ['b', 'c', 'd']\n", "8 ['a']\n", "9 ['a', 'd']\n", "10 ['a', 'c']\n", "11 ['a', 'c', 'd']\n", "12 ['a', 'b']\n", "13 ['a', 'b', 'd']\n", "14 ['a', 'b', 'c']\n", "15 ['a', 'b', 'c', 'd']\n" ] } ], "source": [ "ss = sympy.combinatorics.Subset([], 'abcd')\n", "while True:\n", " print ss.rank_binary, ss.subset\n", " ss = ss.next_binary()\n", " if ss.subset == []:\n", " break" ] }, { "cell_type": "code", "execution_count": 148, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(sympy.combinatorics.subsets.ksubsets('abcd', 2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Геометрия" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Line2D(Point2D(1, 1), Point2D(2, 7/5))\n" ] } ], "source": [ "print Line(Point(1,1), slope=S('2/5'))" ] }, { "cell_type": "code", "execution_count": 150, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Point2D(1/2, 1/2)\n" ] } ], "source": [ "print Segment(Point(0,0), Point(1,1)).midpoint" ] }, { "cell_type": "code", "execution_count": 151, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "False\n", "True\n", "\n", "Triangle(Point2D(0, 0), Point2D(3, 0), Point2D(0, 4))\n", "6 12\n", "{Point2D(3, 0): acos(3/5), Point2D(0, 0): pi/2, Point2D(0, 4): acos(4/5)}\n", "\n", "Медианы\n", "{Point2D(3, 0): Segment2D(Point2D(0, 2), Point2D(3, 0)), Point2D(0, 0): Segment2D(Point2D(0, 0), Point2D(3/2, 2)), Point2D(0, 4): Segment2D(Point2D(0, 4), Point2D(3/2, 0))}\n", "True\n", "Point2D(1, 4/3)\n", "\n", "Высоты\n", "{Point2D(3, 0): Segment2D(Point2D(0, 0), Point2D(3, 0)), Point2D(0, 0): Segment2D(Point2D(0, 0), Point2D(48/25, 36/25)), Point2D(0, 4): Segment2D(Point2D(0, 0), Point2D(0, 4))}\n", "True\n", "[Point2D(0, 0)]\n", "\n", "Биссектрисы\n", "{Point2D(3, 0): Segment2D(Point2D(0, 3/2), Point2D(3, 0)), Point2D(0, 0): Segment2D(Point2D(0, 0), Point2D(12/7, 12/7)), Point2D(0, 4): Segment2D(Point2D(0, 4), Point2D(4/3, 0))}\n", "True\n", "[Point2D(1, 1)]\n", "Вписанная окружность Point2D(1, 1) 1 Circle(Point2D(1, 1), 1)\n", "\n", "{Point2D(3/2, 2)}\n", "Описанная окружность Point2D(3/2, 2) 5/2 Circle(Point2D(3/2, 2), 5/2)\n", "\n", "(0, 0, 3, 4)\n" ] } ], "source": [ "A = Point(0,0)\n", "B = Point(3,0)\n", "C = Point(0,4)\n", "print Point.is_collinear(A, B, C)\n", "print Line(A, B).is_perpendicular(Line(A, C))\n", "print\n", "\n", "t = Triangle(A, B, C)\n", "print t\n", "print t.area, t.perimeter\n", "print t.angles\n", "print\n", "\n", "print 'Медианы'\n", "print t.medians\n", "print Line.are_concurrent(t.medians.values())\n", "print t.centroid # intersection(t.medians.values()[0], t.medians.values()[1])\n", "print\n", "\n", "print 'Высоты'\n", "print t.altitudes\n", "print Line.are_concurrent(t.altitudes.values())\n", "print intersection(t.altitudes.values()[0], t.altitudes.values()[1])\n", "print\n", "\n", "print 'Биссектрисы'\n", "print t.bisectors()\n", "print Line.are_concurrent(t.bisectors().values())\n", "print intersection(t.bisectors().values()[0], t.bisectors().values()[1])\n", "print 'Вписанная окружность', t.incenter, t.inradius, t.incircle\n", "print\n", "\n", "AB = Segment(A, B)\n", "AC = Segment(A, C)\n", "print AB.perpendicular_line(AB.midpoint).intersect(AC.perpendicular_line(AC.midpoint))\n", "print 'Описанная окружность', t.circumcenter, t.circumradius, t.circumcircle\n", "print\n", "\n", "print t.bounds" ] }, { "cell_type": "code", "execution_count": 152, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\operatorname{acos}{\\left (- \\frac{3}{5} \\right )}$$" ], "text/plain": [ "acos(-3/5)" ] }, "execution_count": 152, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Line(A, B).angle_between(Line(B, C))" ] }, { "cell_type": "code", "execution_count": 153, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Point2D(-3*t + 3, 4*t)\n" ] } ], "source": [ "print Line(B, C).arbitrary_point()" ] }, { "cell_type": "code", "execution_count": 154, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$4$$" ], "text/plain": [ "4" ] }, "execution_count": 154, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Line(A, B).distance(Point(C))" ] }, { "cell_type": "code", "execution_count": 155, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$5$$" ], "text/plain": [ "5" ] }, "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Segment(B, C).length" ] }, { "cell_type": "code", "execution_count": 156, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\sqrt{2}$$" ], "text/plain": [ "√2" ] }, "execution_count": 156, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Ray(A, B).distance(Point(-1,1))" ] }, { "cell_type": "code", "execution_count": 157, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{12}{5}$$" ], "text/plain": [ "12/5" ] }, "execution_count": 157, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Segment(B, C).distance(A)" ] }, { "cell_type": "code", "execution_count": 158, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Line2D(Point2D(5, 5), Point2D(8, 1))\n", "Line2D(Point2D(5, 5), Point2D(9, 8))\n", "Segment2D(Point2D(33/25, 56/25), Point2D(5, 5))\n" ] } ], "source": [ "print Segment(B, C).parallel_line(Point(5,5))\n", "print Segment(B, C).perpendicular_line(Point(5,5))\n", "print Segment(B, C).perpendicular_segment(Point(5,5))" ] }, { "cell_type": "code", "execution_count": 159, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Point2D(33/25, 56/25)\n" ] } ], "source": [ "print Line(B, C).projection(Point(5,5))" ] }, { "cell_type": "code", "execution_count": 160, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Segment2D(Point2D(6/5, 12/5), Point2D(33/25, 56/25))\n" ] } ], "source": [ "print Line(B, C).projection(Segment(Point(5,5), Point(6,6)))" ] }, { "cell_type": "code", "execution_count": 161, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Line2D(Point2D(3/2, 0), Point2D(3/2, 1))\n" ] } ], "source": [ "print AB.perpendicular_bisector()" ] }, { "cell_type": "code", "execution_count": 162, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Triangle(Point2D(0, 0), Point2D(3/2, 3*sqrt(3)/2), Point2D(-2*sqrt(3), 2))\n" ] } ], "source": [ "print t.rotate(pi/3)" ] }, { "cell_type": "code", "execution_count": 163, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4*x + 3*y - 12 (4, 3, -12)\n", "{Point2D(3, 0)}\n" ] } ], "source": [ "L = Line(C, B)\n", "L2 = Line(A, B)\n", "print L.equation(), L.coefficients\n", "print L.intersect(L2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Задача с тестового тура ПВГ: В равнобедренном треугольнике известно основание $b=126$ и медиана $m_a = \\frac{\\sqrt{35997}}{2}$, проведенная к боковой стороне. Найдите расстояние между центрами вписанной и описанной окружностей." ] }, { "cell_type": "code", "execution_count": 164, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "h = 16\n", "3965/32\n" ] } ], "source": [ "h = var('h')\n", "A = Point(0, 0)\n", "B = Point(63, h)\n", "C = Point(126, 0)\n", "T = Triangle(A, B, C)\n", "hh = max(solve(T.medians[A].length - sqrt(35977) / 2))\n", "print 'h =', hh\n", "B = Point(63, hh)\n", "T = Triangle(A, B, C)\n", "print Segment(T.incircle.center, T.circumcircle.center).length" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\left(x - 5\\right)^{2} + \\left(\\frac{y}{2} - \\frac{5}{2}\\right)^{2} - 1$$" ], "text/plain": [ " 2 \n", " 2 ⎛y 5⎞ \n", "(x - 5) + ⎜─ - ─⎟ - 1\n", " ⎝2 2⎠ " ] }, "execution_count": 165, "metadata": {}, "output_type": "execute_result" } ], "source": [ "el = Ellipse(Point(5,5), 1, 2)\n", "el.equation()" ] }, { "cell_type": "code", "execution_count": 166, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(Point2D(-5, 5), 2, 1)\n" ] } ], "source": [ "print el.rotate(pi/2, Point(0,0))" ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Point2D(-32*sqrt(5)/89 + 430/89, -40*sqrt(5)/89 + 493/89), Point2D(32*sqrt(5)/89 + 430/89, 40*sqrt(5)/89 + 493/89)]\n" ] } ], "source": [ "print intersection(el, Line(Point(2,2), Point(6,7)))" ] }, { "cell_type": "code", "execution_count": 168, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\emptyset$$" ], "text/plain": [ "∅" ] }, "execution_count": 168, "metadata": {}, "output_type": "execute_result" } ], "source": [ "el.intersect(L)" ] }, { "cell_type": "code", "execution_count": 169, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$- \\frac{2 \\sqrt{5}}{5} + 5$$" ], "text/plain": [ " 2⋅√5 \n", "- ──── + 5\n", " 5 " ] }, "execution_count": 169, "metadata": {}, "output_type": "execute_result" } ], "source": [ "list(el.intersect(Line(Point(0,0), Point(5,5))))[0].x" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$2 \\pi$$" ], "text/plain": [ "2⋅π" ] }, "execution_count": 170, "metadata": {}, "output_type": "execute_result" } ], "source": [ "el.area" ] }, { "cell_type": "code", "execution_count": 171, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$8 \\int_{0}^{1} \\sqrt{\\frac{- \\frac{3 x^{2}}{4} + 1}{- x^{2} + 1}}\\, dx$$" ], "text/plain": [ " 1 \n", " ⌠ \n", " ⎮ ____________ \n", " ⎮ ╱ 2 \n", " ⎮ ╱ 3⋅x \n", " ⎮ ╱ - ──── + 1 \n", " ⎮ ╱ 4 \n", "8⋅⎮ ╱ ────────── dx\n", " ⎮ ╱ 2 \n", " ⎮ ╲╱ - x + 1 \n", " ⌡ \n", " 0 " ] }, "execution_count": 171, "metadata": {}, "output_type": "execute_result" } ], "source": [ "el.circumference" ] }, { "cell_type": "code", "execution_count": 172, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{\\sqrt{3}}{2}$$" ], "text/plain": [ "√3\n", "──\n", "2 " ] }, "execution_count": 172, "metadata": {}, "output_type": "execute_result" } ], "source": [ "el.eccentricity" ] }, { "cell_type": "code", "execution_count": 173, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(Point2D(5, -sqrt(3) + 5), Point2D(5, sqrt(3) + 5))\n" ] } ], "source": [ "print el.foci" ] }, { "cell_type": "code", "execution_count": 174, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Line2D(Point2D(5, 3), Point2D(3, 3))]\n" ] } ], "source": [ "print el.tangent_lines(Point(5,3))" ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Triangle(Point2D(0, 0), Point2D(3, 0), Point2D(0, 4))\n" ] } ], "source": [ "print t" ] }, { "cell_type": "code", "execution_count": 176, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$2 \\sqrt{3}$$" ], "text/plain": [ "2⋅√3" ] }, "execution_count": 176, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Plane(Point(1,2,3), normal_vector=(1,1,1)).distance(Point(0,0,0))" ] }, { "cell_type": "code", "execution_count": 177, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$- 3 x + 5 y - 6 z + 5$$" ], "text/plain": [ "-3⋅x + 5⋅y - 6⋅z + 5" ] }, "execution_count": 177, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pi1 = Plane(Point(1,2,2), Point(2,5,4), Point(3,2,1))\n", "pi1.equation()" ] }, { "cell_type": "code", "execution_count": 178, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$- \\operatorname{asin}{\\left (\\frac{11 \\sqrt{35}}{210} \\right )}$$" ], "text/plain": [ " ⎛11⋅√35⎞\n", "-asin⎜──────⎟\n", " ⎝ 210 ⎠" ] }, "execution_count": 178, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pi1.angle_between(Line(Point(1,2,3), Point(5,1,2)))" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\operatorname{acos}{\\left (\\frac{73 \\sqrt{14630}}{14630} \\right )}$$" ], "text/plain": [ " ⎛73⋅√14630⎞\n", "acos⎜─────────⎟\n", " ⎝ 14630 ⎠" ] }, "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pi2 = Plane(Point(1,2,2), Point(2,5,4), Point(3,2,1))\n", "pi3 = Plane(Point(1,2,3), Point(5,1,2), Point(-1,2,0))\n", "pi2.angle_between(pi3)" ] }, { "cell_type": "code", "execution_count": 180, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "73 (-3, 5, -6) (3, 14, -2)\n" ] } ], "source": [ "print dot(pi2.normal_vector, pi3.normal_vector), pi2.normal_vector, pi3.normal_vector" ] }, { "cell_type": "code", "execution_count": 181, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Point3D(3/14, -5/14, 3/7)\n" ] } ], "source": [ "print pi2.projection(Point(0,0,0))" ] }, { "cell_type": "code", "execution_count": 182, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6\n" ] }, { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "numpy.random.seed(0)\n", "xy = numpy.random.rand(12, 2)\n", "points = [Point(x,y) for x,y in xy]\n", "\n", "poly = convex_hull(*points)\n", "print len(poly.vertices)\n", "\n", "xx = list([float(pt.x) for pt in poly.vertices])\n", "yy = list([float(pt.y) for pt in poly.vertices])\n", "\n", "matplotlib.pyplot.gca().set_aspect('equal')\n", "matplotlib.pyplot.scatter([pt.x for pt in points], [pt.y for pt in points]);\n", "matplotlib.pyplot.plot(xx + xx[0:1], yy + yy[0:1]);" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Графики" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Библиотека `sympy` умеет рисовать графики, используя библиотеку `matplotlib`, немного оборачивая ее для автоматического выбора диапазона, адаптивного числа точек, перенесения осей в 0, а заодно и затрудняя использование возможностей `matplotlib`, для которых обертки нет. Манки-патч в функции `plot_plus` немного решает эту проблему для самых вопиющих вещей." ] }, { "cell_type": "code", "execution_count": 183, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def plot_plus(plot_fn, *args, **kwargs):\n", " parse_args = {'set_aspect', 'figsize'}\n", " if set(kwargs.keys()) & parse_args:\n", " kw = {k:v for k,v in kwargs.items() if k not in parse_args}\n", " kw['show'] = False\n", " p = plot_fn(*args, **kw)\n", " p._backend = p.backend(p)\n", " if 'figsize' in kwargs:\n", " p._backend.fig.set_size_inches(kwargs['figsize'])\n", " if 'set_aspect' in kwargs:\n", " p._backend.ax.set_aspect(kwargs['set_aspect'])\n", " p._backend.show()\n", " return p\n", " else:\n", " return plot_fn(*args, **kwargs)\n", "\n", "import functools\n", "for fn in 'plot plot_parametric plot3d plot3d_parametric_line plot3d_parametric_surface plot_implicit'.split():\n", " globals()[fn] = functools.partial(plot_plus, getattr(sympy.plotting, fn))" ] }, { "cell_type": "code", "execution_count": 184, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x, y, t, u = var('x y t u')" ] }, { "cell_type": "code", "execution_count": 185, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nj14AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(x**2);" ] }, { "cell_type": "code", "execution_count": 186, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(sin(x));" ] }, { "cell_type": "code", "execution_count": 187, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nhKYVAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(x, x**2, x**3, (x, -2, 2));" ] }, { "cell_type": "code", "execution_count": 188, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(x ** 2, xlim=(-2,2), ylim=(0,2), set_aspect='equal', figsize=(12,6));" ] }, { "cell_type": "code", "execution_count": 189, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot(1/x, x, (x, -5, 5), ylim=(-5, 5), set_aspect='equal', figsize=(8,8));" ] }, { "cell_type": "code", "execution_count": 190, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAOQAAADuCAYAAAApzKvrAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXlclNX+x9/Dvgi4oggqIogLIiq4i6moiF68are0n+lN\ny6VS28PM0tyoblfLvJVlpS1amkYFLqjgkgui4oYLLqggoIAoi2zD/P54hkFkm4FnGITzfr14vWDm\nec5zhpnPnPOc8/1+vgqVSoVAIKgbGBm6AwKBoAQhSIGgDiEEKRDUIYQgBYI6hBCkQFCHEIIUCOoQ\nQpACQR1CCFIgqEMIQQoEdQgTHY8XYT0CQfVQaHOQGCEFgjqEEGQ1mDZtGvb29nh4eJT7vEqlYu7c\nubi6uuLp6cmJEyc0z+3YsQN3d3dcXV0JDg6urS4LHhdUKpUuPwKVSrVv3z7V8ePHVV27di33+dDQ\nUJW/v7+qqKhIdfjwYVXv3r1VKpVKVVhYqHJxcVFduXJFlZeXp/L09FSdO3euNrsuMBxaaUyMkNXA\n19eXpk2bVvh8SEgIU6ZMQaFQ0LdvXzIyMkhKSiIqKgpXV1dcXFwwMzNj4sSJhISE1GLPBXUdIUg9\nkJiYSJs2bTR/Ozk5kZiYWOHj5bF27Vq8vb3x9vama9eueu+zoG4gBFlHmTFjBtHR0URHR2NpaWno\n7ghqCV23PQRa4OjoyM2bNzV/JyQk4OjoSEFBQbmPCwTFiBFSDwQGBrJhwwZUKhVHjhzBzs4OBwcH\nfHx8iIuL49q1a+Tn57Np0yYCAwMN3d0KyczMNHQXGhxihKwGkyZNIjIyktTUVJycnFi8eDEFBQUA\nzJo1i4CAAMLCwnB1dcXKyorvvvsOABMTEz7//HNGjhyJUqlk2rRpde7+cOb6KMLP36Ho0ccHtmX+\nmG4G6VNDQqHSzVNHROoYAG9vb6Kjo/V6jYjYWzy34WSlx/RrZ8vG2YP02o96jFaROmKEFPD25hh+\nOS6t9iqAj8Z35V+9nTXPv7z+MH+dT+fw9fusP3CZqYNcDdPRBoC4h2zgTFl3WCNG1xaWXAseXUqM\nAJ9P7ccAZzsAFoVerO0uNiiEIBswL/10nP1x6QD8q6cDu18fWuGxP80aCEj3LCEnbtRG9xokQpAN\nlG/2XyH0TDIAE30c+fipnlWe08tJGiXf+zNWr31ryAhBNkCu3clkadgFAPq6NCZ4gpdW5/38gg8A\n9x4o9da3ho4QZANk2H/3A9DY0oRNMwZofZ65ubm+uiRQIwTZwBj2n0iK1JtXMe+P1Pl8Y/Xi/ekb\n6TL2SlCMEGQDIvJiCldSswHYOrtvtdqwNjcGYMNhsbCjD4QgGxD//k4KLujuaEvPds2q1UYTK1MA\nLqTck61fghKEIBsIk785ovk9ZE71o22aN5LuIzMeFNa4T4KyCEE2APLz8zl4OQ2AzyZqt6JaEXaW\nZlKbBY9GuwrkQAiyAdD/o30AWJkZE+hVs3QvhXpRRwQ16wchyHrOzbRMUrPyAdj35hM1bi8nX9qD\nNFZoFSst0BEhyHqO/6d/A9DK1pwWNhY1bu9ujiTu4tVWgbwIQdZjbqRmka0e0fa/4StLm/dypLzP\nZo1EkIA+EIKsxwSsPghAaztzzMzMZGkzM08SZIcW1rK0JyiNEGQ9JTsnn6w8aXTc84o8oyNArnp1\nNcCzpWxtCkoQgqwGVbmPf/zxx3h5eeHl5YWHhwfGxsakp0uhZs7OznTr1g0vLy+8vb311ke/VVK8\nqp2lCZaW8oyOAIXq3Y5Bbq1ka1NQgnAM0BGlUslLL71EeHg4Tk5O+Pj4EBgYSJcuXTTHvPnmm7z5\n5psA/Pnnn6xcubKUsXJERATNmzfXWx+LiopIup8HwI552gePCwyPGCF1RFf38Y0bNzJp0qRa7CE8\n8/VRAMyNFTg0blSr1xbUDCFIHdHFfTwnJ4cdO3YwYcIEzWMKhQI/Pz969erF2rVrK7zOw87ld+7c\n0amPR65J0+PPn+mh03lVcfqm1K6R2ILUG2LKqkf+/PNPBgwYUGq6evDgQRwdHbl9+zbDhw+nU6dO\n+PqWXXSZMWMGM2bMANDpXnPn6Vua34d3dahB78vy312XgJIAc4H8iBFSRypyJS+PTZs2lZmuFh9r\nb2/PuHHjiIqKkrV/8zafAqC3c2NZ2wU4cTMDAG/nJrK3LZAQgtQRbd3H7927x759+xg7dqzmsezs\nbI0beHZ2Nrt27aqwxmR1UCqVmm2Jn5/vI1u7xWTmStsoCwI6y962QEJMWXWkIvfxL7/8EpCcywG2\nbdvGiBEjsLYu2UBPSUlh3LhxABQWFvLMM8/g7+8vW9+e3yDlO5qbKDAxkf+tLQ4ob9tMLBTpC+Fc\n/higrXO5c1AoACv+6cGkvu1k7UPKvQf0WbEXBXAteLSsbTcQtFoKE1PWekJGVp7md7nFCPDarzGA\nFGgg0B9CkPWEp78+DEATK/0I5li8tOXxpLeTXtoXSAhB1hMupkjmVV9N7qWX9tVJI8z376SX9gUS\nQpD1gOtpJXUce7vIH5J35/4Dze/GxiIPUp8IQdYDpn57DICWNvrJUXzxZ6lMnQgI0D9CkPWA+DRp\nBPv23/qZrp68IQUEzBsmytDpGyHIx5xstaUGQFdH/UTQFKqtzv89wEUv7QtK0Psa9s9HrrL7XAr3\n84qwtTCmf4cWTOnXRrYM9obOtB+k/Ulbc/28lQcupgBabqIJaoxe3sVdZ27w8s9nyC8njGDvpTSW\nbpcqLymAtk2tWPkvD3q2b6GPrtR7jsXfBeBtf3e9tP/a5tMAuNoLy47aQHZBvrvlFD9GJ2j+NjWS\nNpPNjI3IKywiO7+IXHXauQq4np7D+K+kAOvmjcz44TkfOjvKHxhdXykunPN//Zz10v4dtYXkt1P1\n524gKEFWQSak3deIsWNTU3a9NaLS44/F3+H1X09zIz0XgNSsfEat/hsFMN6rNZ9MlDefr77x4+Fr\nABjrKUHxRmqW5vc2In61VpBVkJO/lkY6GxOqFCOAj3ML9r81DIA793J48qvDXE/PRQX8FnOL32Ju\n4dbCirC5AzE1FUvuj7IyPA4AL3VlY7mZ/K30frayFZaPtYWsq6wJ96R4ypA5/XU+t4WdFfveGkZ8\n8GjeG91JU4cw7k4Obgt3MSB4D3l5eZU30sBIU3uk6is650a6ejtlio9e2heURVZBFt/PuLSs2fL7\ntEEduLJiNGFzBmBpKnUxMSMX9/d3M+az/TXtZr1AqSwpK97ctuaO5I9yJaUk+qeLnkZgQVn0sg+Z\nmZ0rSztdHBtzfskoDrw5WCPMs7cycQ4K5ZVNJ2W5xuPKJ+GSnYapsX7uHyd/KxllOdrJL3ZBxcgq\nSDtLKc7xFXWqjly0adaI80tG8evMPpioFzB+j7mFc1Ao28/cquLs+snPR6UKxr31ZKeRpL79+OmF\n3nppX1A+sgpyYm/JjS3yUpqczWro3b45l5cHsHBMiYXE7J9O0n3xTnJz8ys5s/5RXDD1kye7y972\n0aupmt+dm9vI3r6gYmQV5NujugKgVMG9THmmreUxfaAL8cGj6e8iubnde1BIp0XhLNh6Wm/XfJiq\nnMsjIyOxs7PTuJd/8MEHWp+rDQ+7PLRqYlWtNipjxg/HAejUSmx11Day30PamktNDvh4r9xNl+Hn\nGf04tdAPC/X95U9RN3FbEEbaff19GRQ7l2/fvp3Y2Fg2btxIbGxsmeMGDRpETEwMMTExvPfeezqd\nWxW/HpOmq/raf7ynHn1/ndFPL+0LKkZ2QYaqreuz8lXcSLsvd/NlsLM258KSUcwd0gGAAqWKXsv3\nMG/jCb1cT1fncrnOfZjVey4D4NxM/tFxUchZAIwVYGsl4o1rG9kF2aapLXYW0uLOkI8PyN18hbw2\nshNxS0ZgZyHFOoScSsL93e1kPSiQ9TraOpcfOnQIT09PRo0axblz53Q6Fyp3Lk9SzwDeGSV/9v6G\nI9cBmDVYZHYYAr1se0TNHwKAEnjtl9rbnjA1NeXUopG8NaIjAHmFRXgs3sUXkXG11geAnj17cuPG\nDU6fPs2cOXP45z//qXMbM2bMIDo6mujoaFq0KB14r1TfQg7tLG9JuJvp2Zq95Df9hfeqIdCLIM3N\nzZnkI5khbT15i+S7Ofq4TIW8ONSNC4uHY6W+t/xwxyUGfSTPPa02zuW2trY0aiQtiAQEBFBQUEBq\naqpOrucVcS+7JFpJoZD3HvKfa6Ty563F3qPB0FuC8ooJ3TWLLf0+jNDXZSrEwtyM2CWjGNVVGkVu\npj/AZX4oiXezqjizcrRxLk9OTtashEZFRVFUVESzZs20dj2vjA/+khaBLE3lX9BJy5am93+9JErY\nGQq9Ogacec8PkNKsei0J1+elKuSLZ735fXZfQArtG/DhPj4Lv1jt9h52Lu/cuTNPPfWUxrm82L18\ny5YteHh40L17d+bOncumTZtQKBQVnqsL4edvA9CvvbxmVnPVi2AmRtBUD6F4Au3Qu3P5gbjbPLtO\nMmEa6NqUH583zFK6SqWi+6Kd3FeX+XZpbsXeN4YYpC+68rBzefugUFRA5Bu+sm7aF7f73phOTBvY\nQbZ2BRrqhnP5IDd7Jnm3BuDg5XQ+2XFB35csF4VCwenF/ozykKawV1NzcH0njByZV2H1TfE3opxi\n3B2bpGlXiNGw1IrJ1Yone+DRWvoArY68wh8nE6o4Q398MdmbDc9J2e+FRSq6LN5F9DX9hPrJTWaO\nfsIDX/pJWgn3aSecGgxNrbnO/TXXlxbW0kbz3F9OcfBSSm1dugy+7i05t8hPE6j+5FdH+GzPJYP1\nR1s+3Stt35ibyPe2JaRlk6feR9n4gvwl7AS6Uas2kMcWDsfaTAoamPxtNIfibtfm5UthbWFO3LJR\ntLSRviT+Gx7Hs98cMVh/tGHHuWQAOrSQL0JnzJqDANjbmOmlhJ1AN2rdl/XcB/5YmEgj0zPrjrEn\nNqm2u6BBoVBwdMFwfN2kFcsDl9Pou2y3wfpTFSn3pT3IKTJVt8p+kEdGjhS3unNe2bLqgtrHIEbJ\nF5YGYKmedk3fcILNUdcN0Q0NG6b34Y0Rkit3cmYeHReEUViorOKs2qdAPbX8Z482VRypHaM+kwIB\nrM2MaNJI+ObUBQzmXH5+6Shs1Oa+b249y392nDdUVwB4eag7m2dI91D5ShVu7+4g7aEiM3UJC7Oa\nF7xRFqm4cVd6fSEv6e6BJNAPBi0lcGbxSFpYS25yn0deZfp3UYbsDj4uzTn+zlAUqIMZlu8lNvGe\nQftUzH2ZV1gn/E8aHU2NFbi2FJ45dQWD1/Y4tnAEnVtJWyJ7Lt5h0Id7DNqfZraWxC3113jVBKw+\nSNhpw9uE/BYjZYWYyeCho1KpiEmQvmjWTu5Z4/YE8mFwQQJsf8WXQM9WANy8m4v7gjCD9sfExJi4\nZQHYqlO5Xvz5JGv21m7GyKNsOy7t3TaX4V5vitrAylgBQzq3qnF7AvmoE4IE+OyZXqwY5wFAnlKF\nc1AoyRnZBu3T6UUjadfMEoCPd11i4e9nDNaXq6nS/6Jfh2Y1butAnBQI8enT8vvxCGpGnREkwKQ+\n7Yh8o2T5vW9wJN/+fcWAPYJ9bw7Fu53k7PbDkRvM3BBtkH7kqGuKzx7cvkbtTFbvtRorYIyXU437\nJZCXOiVIkGI0Ly8dqbmH++DPC4z5rPacB8pjy+z+DO9sD8DO2BQmf3O41vtQnDhckwWYoqIiDl6W\nRsfPJ4m6KXWROidIkFKc4pYF0MVBWuw5e+s+ru+E8eCB4UoJfD3Vh4nqpOuDl9N5+qvaF2VNGfOZ\nFJVjYqRglGdrA/dGUB51UpDFhM3zZeFoyTemsEhF58W72XjUcEEEwRO68/wAZwCOXktn4mMkytz8\nQmKTpfIAP04XtTrqKnVakADTB3Xg9Lt+mmSy+dvOMiDYcFsj7/6jK9MHSqFrR66lM3HtIb1f836u\nlCJmUgPbR9+PIgGwNDOibwdRHLeuUucFCWDbyJxrwaPpqp7CJmbk4hwUyumbhkmb8jFJgEsRoFJx\n5Go6k9aWHil/+uknPD096datG/379+fUqVOa55ydnenWrRteXl54e2tXBDVdXTTVzqJ6Jflu3c3m\ndpY03d/76uBqtSGoHR4LQRYTOs+Xb6eWlF4LXHOE8eqIk9qi2Ox4739e5P96O4EKDl9N57mHooza\nt2/Pvn37OHPmDAsXLmTGjBml2oiIiCAmJkbjAlAVuQXSCmv7FpbV6vOw/0qLYvY2ZjjowelcIB+P\nlSABhnZuRXzwaJpYSaPFiRsZtA8KLVU+TZ88bHa8bIIX7qapgIqIi3d46SfJgr9///40aSJtlfTt\n25eEhJolZCvVNiu+rrr76By+cocHakFHvi5Gx7rOYyfIYk6+N4J3/N0BKe502Mr9jFfn9umTR82O\nJ7sb0ypfCq0LPZPM25tLV/5at24do0aN0vytUCjw8/OjV69erF27VqtrFm95jOup+77h5G+kkbtb\naxusLIQTeV3nsRUkwIwnXLmyzF8T4nbi5j2cg0I5cuVOFWfKi3f+aQZ3lEavX44n8skuydUuIiKC\ndevW8eGHH2qOPXjwIDExMWzfvp01a9awf3/5BWgfdi4vxqmptU79WrvvssZU+Y85g3Q6V2AYHmtB\nAhgbG3N60UgW/aPEaXvi11H0WRaOjo56WlGR2fH6aX3o2VbypFm99zIf//Y3zz//PCEhITRr1qzU\n+QD29vaMGzeOqKjyM1wedi4vRldj5OXbpS+G8T1ay26qLNAPj70gi/n3AKlEXbHrdkpmPu3nh8me\nZ1mZ2fHWFwfg0lwaxdZE3eX1j7+hY8eOmnOzs7PJzMzU/L5r1y48PDxk7V8xL/5YIuT/Pi2ich4X\n6o0gizk0fxjbXuyr+fvzyKu4BIVyKTlDlvarMkre+8YTmClzQKHgo6PZdOnvp5l2pqSkMHDgQLp3\n707v3r0ZPXo0/v7+svTrYYqKigg7K5mILQkUNToeJ/RulGxIpn8fxZ4LJfeTTaxMiZo/DFPTmmfc\nV4XH+zvIUpsyH3l7MK2aVL/4qbmDGw5TVxEfPFqr4wd+uIeEu7mYGSu4tCyg2tcVyErdMEo2JOv+\n3ZvLS0fSVL1FcjenALeFO5j4pf6ja84u9tckE/f9cB95edUzZL52R5riGmv5Tl1Kvk/CXalc3fZ5\nA6t1TYHhqNeCBGmKeeK9Eex8ZQDFyfZH4u/iHBRKcJju1Yt14cISf4qj3bos3lWtNnack6aepkba\nvVUB6gByp8aWdLC3rdY1BYaj3guyGPdWjbmyYjQLA0qKnH65/xrOQaFsO35DL9c0MjLi7PvDAVAW\ngef7O3Ru4/j1uwBYm1ftmfrOb6coVG9a7n/rCZ2vJTA8DUaQxUz37UB88GhGdLHXPPbq5jO0nx9K\n+Fn5PWKtLMyIeF1Kur6fp8R/1T6dzr+eJjkFFE+7K+JBbj4/H5Migl7y7YCRliOqoG7RYN+1tVN8\nuLLMny4tpcUWlQpe+PEELvND2X9RXkf19i1sNHYZF5KzCNpyqoozSshQFwNq3bjyOFbv5VJBWgsT\nI94MkL/UuaB2aLCCBCmoIOzVwVxdPgpXe2n/sEgFU747Rof5oRy4JJ8wx/Zw4ml1gvOm6ARCYrSL\nb81Wr9S6t6q42tVX+y6Trbb4OBo0tIY9FRiSBi3IYoyMjNj92hNcXT5KY2qlVMGz3x6jw/wwIs7L\nUxjowwnd6agekedtOsWNtKoD4guVRQB4V1CZSqlUskIdkTO2uwN2woH8sUYI8iGMjIzY9+ZQLi7x\np7Wd9MFWqlQ8tz6a9kGhGivGmrDr1cFYmUn/9sEf76ewsLDS44sXaTwdyxdkv2BpqmpiBJ9OEh6r\njzv1OjCgpuTmFzJi1T5upOeWevzN4R15aZhbtdtVKotwXbAdFWBlZkTsB6MqPLZ9UCi31r/CvRsX\nsHgkoOHPmATmbJLuRyNfH4xzi+oHH9QWt+89YPf52xy6fIfLd7JJzc4nO6+QfKUKZVHNP17GCjA1\nMcLG3ATnZlYM6dSCid5ONLUxeB6oVoEBQpBaUFRUxD8+O8i55NJTzMDuDnxWzVEp8W4WAz6UVlw9\nWtvy19zyszGcg0JJWv8KubculQoQLyoqwuWd7QD4ODdh8yzD1+fIzSvgp6ibbD2RwPX0HB7kKzXZ\nJnUJIwU0sTYjoGsrFo52x8ysVtLShCDlpqioiGe/ieLvq6WtQ9zsrQmdMxAzU93qK/567AZv/SaZ\nL7/u58Ycv45ljikWZF5Saef0Yf+J4EpqDgrgmpYhdXJQWFjEvospfB55mQvJWTwoKNK5DWOFVFPE\n0syYZtZmtGtmhU+7pgx0a0675o1oZG5SreyUjKwH7Dl/mz0X73A+6T6pWfnkFBRpNfIaKaBtU0v+\nN6knXZz0UklaCFKfLAo5y/eHSzvgWZoa8dusfnSp4H6vPJ777igRF1MBCJ83EDeH0r6r5Qny8JU7\nTPpaStv6aboPA9zs0Qc3U7NYuTuO3RdSyMxVavXmGynAxtwEN3trJvRqQ2D31lhX0wtIH6hUKtYf\nusr3f1/nZsYDlBV8n5gZK5jv785zgzrIdWkhyNrgz5MJvLr5tGbxpZip/dqyeGw3rdrwWryTjAfS\n4s61FQGlRofyBOkcFApAh+bW7HnjiRq+Aon0zFwW/nGOiAu3yali1FMAVubGdHe0Y66fG72dm2FU\nA0e8usC6A1f5dE8c93PLLrK1tDFnzyuDaGRdoxVsIcja5G5WLiNW7edOVukg8la2Fmyf258mjSre\n2FepVLjMD0MF2JqbcHrxSM1zjwpy9Kr9mnvZq8tHVSsiR6VS8WVkHGsPXONuTuWrvKZGClyaW/PG\nCDf8ujo0iETn3NxcnvommtMJpUsRWpsqOPz2MGyrt7UkBGkoXtl0gt9jSofhGSlglm973hrVpdxz\nEtOzGaD2Tn2iY3O+nyYVj31YkFFX03hqrVSb4+tnezC8q3bu4w/yCnl1cwwR52+TV8kqi6mxAo/W\nNiwO7Ipnm6ZatV3fiU3IYPxXh8l9aNbg3daWLS/qbIkiBGlooq6mMuXbY+QWlp4C2pqbsGG6D15t\nS3/ov9l/haVhFwD49KnujO3pVEqQxVNVlxZW7H19SIXXLSgoZGHIObaevEV+BTdJRgpwbGzJwtHu\nDO8qLD6q4n5WHr2D95BbKEnA3BguLtNpMU0Isq6gVCp57vtj7I8ra+zsZm/NbzP7YmstWY8Efn5Q\nM1U6s3AY3ZbsIWn9Kwx4fS1XK1lVDTuTyIJtZyucgpoYKejfoQmrnupBUxsL+V5cA+N/ey/y0a7L\nABgDV7Rf4RaC1Bc7duxg3rx5KJVKnn/+eYKCgko9r1KpmDdvHmFhYVhZWfH999/Ts6e0X/nd5lAW\nH7gHlrbqt0h6nxTAEx1b8M1Ub7q8v4O8QhUmRgoKi1QkrX8Fh6mrAPjlBR/6dLAnN6+AGT8e5+/L\naeXu9RkrpHC7//1fL5oJAcpKYlomAz6W3AJbWhtzdKFWNixCkPpAqVTSsWNHwsPDcXJywsfHh40b\nN9KlS8m9YVhYGKtXryYsLIyjR48yb948jh49WuZcjzHTUXlP5NFFTQWl/9HFguzm0Ii0nAJu3Su/\nClgrW3NWPd1d1O6oBaIup/DUN5KR2OkFQ7G1qdJVXitB6raTLSjlXA4wceJEQkJCSgkyJCSEKVOm\noFAo6Nu3LxkZGSQlJREfH1/q3OeGdAFOM3/+fBb9cYYNh29QpKr4W+9MUlapv02MFEzo0Zpl4zwx\nMRFhybVJb9eWGANK4IUfjvHLi75VnaIVQpA68qhzuZOTE0ePHq3ymMTExErPXRTYjUWB3VAqlTz5\nxSFOJtwv9/rGwJr/645/N1H92NA42hlx414RV1NzZGtTpymrv7+/KjU1VbaL64s7d+7QooV+pm13\n797l/v37tGsnlaRLS0sjOzubtm3bao65fPkyrVq1olEjKdj70qVLODk5kZeXV+G5D/KVXEvN1tTx\nADRDZUHaTUyblwi5GFMjBe2aWWFp9nh9r+rz/alNzibeQwWYUERnxyaVHnv8+PGdKpWqypvNenkP\n6e3trXVlKV05fPgwixYtYufOnQCsWLECgPnz52uOmTlzJk888QSTJk0CwN3dncjISOLj40udu+iD\nFWx74MY9VeX3H0nfv4LDv1fh3NSCm3dzy13EMTVSENCtFR9N6Ia5Wd0JVSsPfb4/tcW9+zl0Xx4B\ngHnkR1w8UqU1i7iH1AcPO5c7OjqyadMmfv7551LHBAYG8vnnnzNx4kSOHj2KnZ0dDg4OtGjRgotx\ncTzzRSSHr2ejUnWDh/b/mliZ8uO03jz99RGy8pQYKUoK7QDEp+dyeuEwbK0t2HH6FvO3neGuOuSu\noEhFyKkkQk5JAQl2FiYEjXJnYu92Yo9RDxSL0UIBjQqzZWtXCFJHHnYuVyqVTJs2TeNcDjBr1iwC\nAgIICwvD1dUVKysrvvvuOyLPJzPzpxPw1GoOXVe/gQowMzYieLwH43tJU9Lp30c9ZLA8lN7qBGQr\nMyNy8ovwXr6XS8sC8Pdsjb+nFKmTlVvIyz8f58DlNE1mw73cQuZvO8f8bedQAA62ZgSP74Zvp1a1\n+N+qf8QlZTD805KapKcW+TEg/H3Z2q+XU9a1a9eWKZJqCIqKipj09RGOXrtb6nEF8JSPIyvGeZaK\nRd0dm8zzG6Qak0Gj3Jk12FUTqZN5/Twd35OmuqM9W7HmmV5URNSVVF7dfIrEjNwKj2liZcqswR14\nYVD7Wneoqyvvj64M/ySSuDslo+Gx+UNoYWel7esR+5CG4tjVVJ79LorcgtL/LsfGFvz+Un9alLNn\n9SC/kM5qwXVs2Yhd6tLjD4fOfRERx4c7LwGw/w1f2jav2PiqGJVKxYZD11i55zIZORW7p5saKXC1\nb8SiMV3oU43CsPWZMZ/t5+ytkuT0xpbGxLyvc00WIcjaZs7PJ/jzdNmg8jeHuzN7qGul57ovCCNP\nqcLECC4vLwnHejTbo+cHu0jPKcBIAVdXVC8xOfzsLRaHXiDx7oNK31ATI2jTxIq5Q1wZ29PpsU+x\n0oXNx653vj8PAAAbK0lEQVSz4Pdz5D+ygrZmohejvRyr02TDEWR6ejpPP/008fHxODs78+uvv2pK\nij+Ms7MzNjY2GBsbY2JiIstKX3p2LiNWHiA1K7/U4w625uycNwhbLXLoNN/AKhX8/jaznntWE473\nsIXHvHnz+CtsB0UT/gsKBT7OdmyeVfP6HemZuSzbfp6d51I0968VoQAamRvTs21jXh3mRvd2Tctd\nNKoqvDAyMpKxY8fSvn17AMaPH897771X49dSXfLy8nh54ykiL90pEzllBLhlHObk1rXY29tz9uzZ\nMudXFi6ppuGssgYHBzNs2DCCgoIIDg4mODi4VNXih4mIiKB585pPyY5cvc2UdcfIf+jzq0BKTF6k\nZWIywJo9lzRifHuwA9OXnMTHx4fAwMBS0T/bt28nLi6OK3EXWbFxL2tPPeBY/D3OJtzFw6nyPbCq\naGpjwSdP9eCThx67c/8Bq3bHEXY2mYycAs03sQrIzFOyLy6NfY8Ey5sYQWMrU3o42RH++ceEh4bS\nrm3bcl8PwKBBg/jrr79q1PfqoFKp+N/eS/xw5Ca3s/KoyOGjU0trQl7sh7m5Ofv329BoxnimTJlS\n7rHF709cXBxHjx5l9uzZZQJGtKFejJDF+3wODg4kJSXxxBNPcPHixTLHOTs7Ex0dXSNBfnfwCh/8\ndaHUP8LCxIhNM/vgpWMO4aWUe4xYKRXHscy4yvkv5wCl9zaLR8ipgUMZ8tDepvOcH8C6aY2mrrqi\nUqnYeS6JNRFXiEvJKpNWVsmZAChQYGoMjcxNsTYq4F58LMtenoSPSzOaW5tjom2Jryr6mJmTz47Y\nZLafTeF80n3u5uSTr1RR1Ufd1EiBX+fmrJ7UExOTsmNVfHw8Y8aMKXeErGjv2cHBofiQhjNCpqSk\naF54q1atSEkp39hYoVDg5+eHsbExM2fO1Gml7/2QM6w/XLooT2s7C8JfHYS1he6uZYWFhRoxWhkX\n0b+wpLxAeeF4CbeSS4XdtY9dzzWfVylSSb483z3XR+c+6IpCocDfozX+HmUTo+9m5fL1watsP5tC\nQloWBUrg4dVbFagUkK+E9JwC0gGad9HYWNY2xgpoaWvBC4Pa89xAlxq3V1G45EOC1IrHRpB+fn4k\nJyeXeXzZsmWl/lYoFBVuhB88eBBHR0du377N8OHD6dSpE76+lQcFv/xTNH+dKS1wn3aN+WVm/xot\ncnR5PxyQFn0Wdc9jVwXV6oovUWBcemXWCBXPeVrz3elsIi6mkpaVS7NGhkuzatLIgrf8u/CWfxe2\nbNnCjh07+OabbwD44YcfOHT0KJPnvc+2kwmcSbxPyr1ccgqUFBappCmjSlUqSKImKJCaMjcxpqm1\nKZ6Odkzp15Z+rvoxA5OTx0aQu3fvrvC5li1bkpSUpJmy2tuX/493dJRWx+zt7Rk3bhxRUVEVCnLK\nuqPsjysdt1sTH9aH8f1oryaTP+bdYZw7fZKbN29qnk9ISND0tViQ1o5uZY6ZMcSdzRdPkZWnZEBw\nBBeWVmy4XJs4OjqW6WtbR0cGuLVggFv5Maxy3E4YkvJec/F7qAv1ImcnMDCQ9evXA7B+/XrGjh1b\n5pjs7GwyMzM1v+/atQsPD48yx0368hDOQaGlxDh9QDvig0fLIsZ5m05wI/0BAD9O642ttUWpcLz8\n/Hw2bdpEYGAggOa+qnWXvmzYsAGVSsWRI0c04XhR84cBkFtYxMrwsvfNhqCy11NMcnIyxesXUVFR\nFBUV0axZM0N0VxYCAwPLfX905bEZISsjKCiIp556inXr1tGuXTt+/fVXAG7dusXzzz9PWFgYKSkp\njBs3DpDu35555hn8/Us2d2f/GM32s6Wnpq+PcGXOUHfZ+vnD4XhC1OZXz/V3ZmBHabSoLBxPUSi9\nqYU29ri4uJQKxwOwsjDlqZ6O/HoikU/3XGbOUDdZFkdqgjbhhVu2bOGLL77AxMQES0tLNm3aVKdj\nbidNmkRkZCSpqak4OTmxePFiCgqkQIuKwiWrQ71YZa0JS/88xzd/x5d6bP4od2YOrnwjX1dO3Uhn\n7P8OA+DZ2pY/Kigd8CiDP9rLkZUzGRb0DWHzBld4XId3wlAWqXCwNefwO36y9FkgKw1nlbU6bIy6\nzvytpZevX3zChbf8O8t+rXvZeRoxNrM21VqMIK0EAqRlVxz2BrD95QGM+OwgSffz+PvSbQZ0rPsL\nGIKyNDhBXk/NZNh/D5RyGv+nV2tWTeyhl+splUq8lkgLUqbGCo4vHKHT+W72UrxqdhURNB1b2+He\nshEXU7KY/O2xWq33IZCPerGoow0FBYX4LA1n8H/2a8TY3cmOaysC9CZGgC7v7dLM8y8u0Tkgmd7t\npToh+YWVCxJgxyvSirEKmP3D450A3FBpECPkzA3H2BlbUp7c1sKEo/OHYGmu3zJk3kt3kafe3jg6\nf0i10px6tJPC4h6tHVIeCoWCd0e7szT0ItvPpfAgtwDLOlToRlA19XqE3Hs+GeegUI0YjYCQl/px\netFIvYvR75NIUtV1PjY+34eWdtUrGOrUWDpP21qmzw9yxVy9yjrw48hqXVNgOOqlIPPzC+i+eCfT\n1h/XPPb8wHZcDR5N91qoWfHkF4e4rE5kXRrYhX41yC+szqga8YY0dU3LzifqWt03JROUUO8E+eaW\nGDq+t4t7aq+ZNk0tubp8FO+OKRsEoCvp6ekMHz4cNzc3hg8fzt27d8scM/nLfUTHp4NKhdGFXaQd\n+0Pz3KJFi3B0dMTLywsvLy/CwsJq3KfyaN3EGveWkuPdpLW6ZxwIDEe9EWR8aiYu80PZHJ0ISCFn\ne18bxIG3hspmUVGc5hUXF8ewYcMIDg4u9fzbW2I4GJ8FCgXP9GnLqR+WsmbNGmJjYzXHvPrqq8TE\nxBATE0NAQIAs/SqP4gUepQoWhZzR23UE8lIvBPmP1Qd54j/7NfdZk3ycuLpiNC72trJeJyQkhKlT\npwIwdepUfv/9d81zH24/zy/qL4NRHi1ZPt4TGxsbOnfuTGJioqz90AaFQsEsXyn59/tHslQEdZfH\nWpCxCRk4B4VyJlGqFmVjYczlpSNZMaG7Xq5XUZrXugNX+WLfVQD6uTTli8negJQ/d/LkSfr0KUmN\nWr16NZ6enkybNq3cKW9lZD+oPDjgUYICumje4Ce/+LvSYwV1g8dWkE99eYiAz0s+ZB+O9+DMIv9y\nE0t1wc/PDw8PjzI/ISEhpY4rTvP6LfomS0LPA9DVwZaNM/oBkJWVxYQJE1i1ahW2ttJIPXv2bK5e\nvUpMTAwODg68/vrrFfZj7dq1eHt74+3trYm52nIiQefXs26q5E4XfT2DvLz8Ko4WGJrHLpb1blYe\nvZbt1kxPm1iZcPK9kZWfJBOPOhP0+9dsGPgCAG2bWLH/bamIakFBAWPGjGHkyJG89tpr5bZVWfb5\no1g7dqTFsyvp59JUI3id+v3udvIKi3BqbMnBoKE6ny+QBa1iWR+rEXLxH2fpsbREjPNHudeaGKF0\nmtf7a7fAgOcBsG9kphGjSqVi+vTpdO7cuYwYk5JKHOm2bdtWbvpXeViYGgNw+XZWFUeWT+ic/gAk\nZDzgfk75pewEdYPHRpA9Fu/ku0PXATAzVnDpg+GyZ2RURVBQEOHh4Tj7TmBXTntQKGhmbcrv07pq\nVkz//vtvfvjhB/bu3Vtme+Ott96iW7dueHp6EhERwcqVK7W6bhMrKdqmMl/VynBtaYetuTSVH/LJ\n/mq1Iagd6vyU9dqdzFIfIv+u9nz5rE9td0PDxiPXmP+7tI1h38iMqHeH6/2avXp5kzZ8MQDx1Qwa\nT7mfQx91PYpj7wylhW2VBUYF8vL4T1k/2XmhlBhDXuxnUDGu3XdZI0anxpa1IkaQx2qmpa2VZqT1\nWylGybpKnRXk0E8iWB1xBQBLUyOurQige1v9h71VxEfbY1m+XbLIcGlh/Vgujux5TTJVvvegkIR0\n+So2CeSjzgkyPz8f13fCuHpHqkrb27kJ55eMMqi9wxubTvC/fdcA6Oxgw97Xn6j1PhS/+vg7mZUe\nVxlNG1nRvJEUVO//6QEZeiWQmzolyAtJGXR8L1yTavThOA9+ndXfoH2a/M0Rtqh9cLzbNWb7PHlq\nyetK8Urrj1E1i7rZ/arkVpCVp+Tq7fLLpgsMR50R5O8nEvB/qO5ezAI/nu7TzoA9ksqPHbws2eUH\neLRky+wBBuuLU2PJymPv+dtVHFk5ja0taGkj1RsZu+ZwjfslkJc6Icjloed45VfJwdrCVEF88Gga\n21RdpEaf9PwgXFMLcPpAZ/6nDoczFMO6SA51tyqp+agt4a9Jo3xmXiHJGeJesi5hcEG+sCGKtQfi\nAbC3MePCEv1lQGhDUVERHReEkZ4jhZmtGNeVhWO6GrRPANMHSIHieVrX06gYW0szmlpLK66jPhMx\nrnUJgwryH5/tJzz2DgAerW2IWlA72wgVcT87jw7vbNfUBNw6qy+T+jgbtE/FtLCVnAPk2gjerU7P\nuptTwIO86gUcCOTHYIIc9p8Izqir0vp3seevuYZZLCkm9lYGnkt2o0Ja0YxeMJSeznXTSVvHYI5y\naWpjgbWZtFA0XOxL1hkMIsgnPtrLlVRpW2PagHZ8OcVwm/0APx+5ToB66masgEtLRtK8nLLjhsZY\nvfdxMO6OLO39/nJxjGsuhTJMhQU1p9YF6fdJJPHq2hYvDnHhvX/U3FqjJszaEM07v0sZF40tTbmy\nYjSmpnXTjK840mZN5GVZ2nOzt8VMrfJ/fSVWXOsCtSrICf87qDF/munrzFsj5XcJ14W+y3ezI1ZK\nMu7Rxo6Y93UzMa5tfNWVo84myrd/uOYZyZP25M0M2doUVJ9aE+Q7W09x/IaU2T+5txPzAwy3cpmZ\nnYfL/FCS70upSC8PdWXbSwMN1h9teWd0J6BqF3NdGN61pELTRzsuyNauoHrUiiB/O36Dn6OkbPcB\nHZqydLx+LDa04Y+TCXRbUpJTGfJSP94YIV+FK31SfF8rd8rN1L5SAMaXkVdkblmgK3oX5O17uby+\nWXI9a21nwU8v6J7xLhdPfXmIub+oAxBMjLi8dGSt+LTqg5xc+ew4Fv9Tuo8vAmJu6ObzI5AXvQuy\nz4o9AJgYwSF1cdHaJi8vH/d3txMVL33Yera148LSUTX23zEElqbSW/bhTnmnl6721gBMXid8XA2J\nXgXZb/luzfTqkoHKbW89fgP398M1ES6fPNmNrS/W/fvFiujhJNX6+CMmqYojdeOPF6U43aw8JYVa\nFPYR6Ae9CXLjkWskqRdNfpzWSzazYl0Y8d9IXlNPl02NFZxfNJwJ3m2r3Z42zuUAzs7OdOvWDS8v\nL7y9vXU+vzIWj5VWpjPUzuxyYWVhioWJ9B7966tDsrYt0B69qaQ4s76bow0DO7bS12XKJTYhg/ZB\noVy6LW2x9G3fhLhlAVha1KzATlXO5Q8TERFBTEwM0dHR1Tq/Itxa2QH68VL5XLMFItKyDIVeBDn8\nP5Ga3/+cU7shcc98fZiAz//WfGB/mu7Dppny5FRW5lxeG+cXU5ysHJso7wKMX5eSL84dZ+WdEgu0\nQ3ZB5uXlEZcqjUxfP6u/QqiPcuHWPVzmh3LoSjoAbZpYEh88mgFu8pX2rsi5/FEUCgV+fn706tWL\ntWvX6nw+lDZKvnOndKhcM3XW/4Lfz9Xo9ZRHjzbSCPzaLzGyty2oGtmXGQd+FAmAqREM79pa7ubL\nZfRn+zl3q8Ta4rOJngR6talWW35+fiQnJ5d5fNmyZaX+LnYuL4+DBw/i6OjI7du3GT58OJ06dcLX\n11fr8wFmzJjBjBkzAErdhwJM7tOGVXuucO6W/FPLTTP64r5wJzkFIrbVEMguyDvZ0mLD77Wwkvnt\nwat88Nd5zd9tmlhy4O2amU/t3r27wudatmxJUlKSxrnc3r780dfR0REAe3t7xo0bR1RUFL6+vlqf\nXxUvD3Fj1Z4rmjQxOTE3NcHESEFhkYo3fj3Jf56qvVmOQOYp66ajkhGUAujqZCdn06W4fieTjgvC\nNGI0UsDG53vXWIxV8bBz+fr16xk7dmyZY7Kzs8nMzNT8vmvXLo1DuTbna4OJibHm96wH8tfrmDtU\nMqDeevKW7G0LKkdWQa7cLWUheDo2krNZDfn5+fRbvpvBn+zXjA7jvFpzdcVo+rm20Ms1H6bYudzN\nzY3du3cTFBQEwK1btzTO5SkpKQwcOJDu3bvTu3dvRo8ejb+/f6XnV4fiAIHFf8l/HznXryMglVHP\nyHoge/uCipHVubzD/FCUKjj09mBaN5FPlEqlEv9V+4lTW0MCONiZc/CtIRgbG1dyZv3A29u71PYJ\nwJyfj/Pn6WSszIyJ/cBf9mt6Ld5FxoMC3OytCH9tiOztN0C08jGV9R6yWNtyibGwsBD/T0tStgAs\nTI0InzeANs3lLcb6uBE8rht/nk4mJ18/UTXfTOnBk19FEXc7p+qDBbIh76KOAlBJtREbNaq+KG+m\nZ/PPNX+Tll3i9WJurGDL7H50U4eONXSsLUuCHLJycmlkZSFr+97tS24BkjNyaNXYStb2BeUj6z1k\nc0tp+uj/6cFqnf/Bn+dwmR/KoI8iNWK0NDVi+9yBXFwWIMT4CI3Mpf/3y+oMFrkpdjmf8u0xvbQv\nKIusgvx0ohcACZlKFmyOruJoiUUhZ+i4IAznoFC+/Ttek6foYGvO8QXDOL9kFJ1b62/F9nHmBV8X\nAA7Gpeml/dXq9/NSNetSCnRH1ilrv46t8HGy4VhCJj8dT+Gn46G0sjHF08kWB1tLku7ncjElh5T7\nD8gtLLs+ZGIEzw1ox4LRhvXZeVyYN6wjK8PjNKUX5ObhlevcvEIszB+/dLXHDdn/w5tf9uXdLSf4\nMVqKhUzOLCD5fMXf4ObGCsZ4OvDxv7obJCPkcUd9287u2ORSsahyYW1mRHZ+EbN+Os730/rI3r6g\nNHr5ylv6ZE+WPgmHLyXz0c7LJGRkU1CkwsTYmBY25gR0a8XMgc6YmdUs+0IAnRxsOJ+Uydu/nea4\nHgT54pAOfLwzjoOXU2VvW1AWvc5B+nVsxbZaTr1qaHw31Ye+wXtLrUjLyYtPuPHxzjiEbWvtIOaI\njzmtGpcYOt9Iq37tyIpQKBSaD8kfJxNkb19QGiHIekArW6lS2JR1+tmecG9lA8DSMGETqW+EIOsB\nX0/pCaBxhJebNZOljI/bmXl6aV9QghBkPaCbU4mV5Y00+fcMXZrbyN6moHyEIOsJxdPW//smSi/t\nm6prgKzZe0kv7QskhCDrCeunSRXEbt7Vz7S1uzq/9btD8XppXyAhBFlPcG9VEl4YfU3+ULrgcd0A\nSMsSxV31iRBkPcK9pZRhM229/Kutrq2kdDf9BOkJihGCrEdsmyXVTbmfq1/n8awcsdqqL4QgdUAb\n5/GLFy/i5eWl+bG1tWXVqlUALFq0CEdHR81zYWFhsvbPytJMU2U56Df5bRytzKSPy/IdF2VvWyAh\nBKkD2jiPu7u7ExMTQ0xMDMePH8fKyopx48Zpnn/11Vc1zxf78MjJvGGSQdUvxxJlb9vTsTEAu86V\ntckUyIMQpA7o6jy+Z88eOnToQLt27WqjewDM9ZNqXaqAkzfSZW17/iip7bs5YmFHXwhB6oAuzuMA\nmzZtYtKkSaUeW716NZ6enkybNq3SYjuVOZdXRUd7aXFH7j3J7m2lAAQ92MEK1MjqOlcfqMy5fOrU\nqWRkZGgea9KkSYWiys/Pp3Xr1pw7d46WLVsCkqCbN2+OQqFg4cKFJCUl8e2331bZp/Jc5yojPz+f\nju+FA3Dpg+Gyprk5B4UCEB88WrY2Gwi17zpXH5DDuRxg+/bt9OzZUyPG4vOLeeGFFxgzZow8nX4E\nMzMzrM2Myc5XMvLTv4l4U9g4Pi6IKasO6OI8vnHjxjLT1aSkkopS27Zt0zia64PfZvcF4FpaDjrO\ngirFWP2JuZB4T7Y2BSUIQeqANs7lIJUQCA8PZ/z48aXOf+utt+jWrRuenp5ERESwcuVKvfW1k0Nj\nTI2kWdK4NX/L1q6FuozBn2dFmQF9IO4hHwN0vYcs5tDlOzyjXti5tiKg0mpb2tJ7aTi3s/IZ2KEp\nP77Qr8btNSC0+ueLEbIe09+1hWaUDPh0vyxtNrGSFohSRG6kXhCCrOf8OlMaxc4nZ5GfX/NKWY2t\nTAHIyi2scVuCsghB1nN6tGuiqZQ1QF1MtyZYqd3SlXrygm3oCEE2ACJel6o338kq4EINqy4b1/w2\nVFAJQpANgFaNrXFpJhXLGb36QI3aylRnkpiYiI+OPhD/1QbCXnVwgFIFr286Ue12bmfmAmBnIWJK\n9IEQZAPiNT8pE+S3mCTSs6q3wFMcWO5mL4yv9IEQZANirp87thbSoozPsvBqtZGpXl19skdr2fol\nKEEIsoER/c5QQJq6VmdvsjjTw7ezKBGhD4QgGxhmZmasnSzVfYxNymT5X+cM3CPBwwhBNkBGeDgy\nxkMa4dYejGdL9A2tzpvzo2SeZWUqPjb6QvxnGyifT+5Fh+bSVsgbW87wW/T1Ks/58+xtAGYPbq/X\nvjVkhCAbMHveGIJTYwsAXt9ylqAtJys8Njj0jOb3OX6d9N63hooQZAPnYNAwOrW0BmBT9C26LAwl\n9X5p9/M/TtzgywPStPZZH8da72NDQqRfPQZUN/1KF5b8dYZ1B0vuJY0AKzPIzi950x1sTTn8zgi9\n9qMeI9KvBNqzcEw3zi4cSstGUjZHEZD1kBh7OjUSYqwFRPyTQEMja0uOviuJbu+5RPZcSKFjS2um\nDnQ3cM8aDmKE1IHNmzfTtWtXjIyMKp1C7tixA3d3d1xdXUuZKWvjfF5XGNrVkWUTegox1jJCkDrg\n4eHB1q1b8fX1rfAYpVLJSy+9xPbt24mNjWXjxo3ExsYC2jmfCxo2QpA60LlzZ9zdKx8xoqKicHV1\nxcXFBTMzMyZOnEhISAigu/O5oOEhBCkziYmJtGnTRvO3k5MTiYlSnQ1dnM8fdi5/8EA/RVgFdQ+x\nqPMIlTmXV+bDqisKhaJSF7gZM2YwY8YM2a4neDwQgnyEypzLtcHR0ZGbN29q/k5ISMDRUdpM18X5\nXNAwEVNWmfHx8SEuLo5r166Rn5/Ppk2bCAwMBHRzPhc0UFQqlS4/DZqtW7eqHB0dVWZmZip7e3vV\niBEjVCqVSpWYmKgaNWqU5rjQ0FCVm5ubysXFRbV06VLN46mpqaqhQ4eqXF1dVcOGDVOlpaXV+msQ\nGAytNKZr6JxAINAjYsoqENQhhCAFgjqEEKRAUIcQghQI6hBCkAJBHUIIUiCoQwhBCgR1CCFIgaAO\nIQQpENQhhCAFgjrE/wPnAkKmi2ASgQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_parametric(cos(t * 5) * cos(t), cos(t * 5) * sin(t), set_aspect='equal');" ] }, { "cell_type": "code", "execution_count": 191, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot3d(sin(x**2 + y**2), (x, -2, 2), (y, -2, 2), nb_of_points_x=200, nb_of_points_y=200);" ] }, { "cell_type": "code", "execution_count": 192, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot3d_parametric_surface(cos(t), sin(t) * sin(u), sin(t) * cos(u), set_aspect='equal');" ] }, { "cell_type": "code", "execution_count": 193, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_implicit(x + y < 2, line_color='yellow', set_aspect='equal');" ] }, { "cell_type": "code", "execution_count": 194, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAO4AAADuCAYAAAA+7jsiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAEYxJREFUeJzt3X9QVWX+B/D3wau4rDgmqCiKJaBeQES4TjJrupQ/8Wdi\n1GbuH+qUM9akzdZMo9Mf20gtI1N8N3fauzPWCGbZrq2FiJSKu1Gt3nInybaslV2wUUBxAV0Q8Hz/\neLJyE7yXe+55zufyfs3c4YfnnvNRefOc85znPI9hmiaISJYI3QUQUeAYXCKBGFwigRhcIoEYXCKB\nGFwigRhcIoEYXCKBGNwQMAzjMcMwbtNdB4WvQINr8nXr1+bNm/8vMTHxYn5+vllRUWGaania7a8F\nCxZo/7fgK+CXX4wAhzwGtHF/ZpomKisr8corr8Dn8yE/Px9r165FYmKibTV4PB74fD7bjkeWMPzZ\niKfKIWIYBuLi4hAXFweXy4Xm5masXLkSTz31lO7SKAywxQ2B4uJi7Ny5E7GxsVi3bh2WL1+OgQMH\n4tq1a0hOTsbXX39tSx1scUXyq8V1hbqK/ujixYvYu3cvxo8ff8P3IyIiUFZWpqkqCidsccMYW1yR\neI1LFK4YXCKBGFwigRhcIoEYXCKBGFwigRhcIoEYXCKBGFwigRhcIoEYXCKBGFwigRhcYbq7uzFt\n2jQsXrxYdymkEYMrTHFxMdxut+4ySDMGV5D6+nrs378f69at010KacbgCrJx40YUFhYiIoL/bf0d\nfwKEKCsrw8iRI5GVldXrdl6vFx6PBx6PB42NjTZVR3bjDBhCPP300ygpKYHL5UJ7eztaWlqwYsUK\nlJaW9vgezoAhkl8zYDC4AlVVVWHbtm23nL+KwRWJU9cQhSu2uGGMLa5IbHGJwhWDSyQQg0skEINL\nJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0sk\nEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQ\ng0skEINLJBCDSyQQgytIXV0dcnJykJKSgtTUVBQXF+suiTRx6S6A/OdyuVBUVITMzEy0trYiKysL\nc+fORUpKiu7SyGZscQUZPXo0MjMzAQDR0dFwu904e/as5qpIB7a4QtXW1uLEiRO48847b/i+1+uF\n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\n6RJQVQXExMCzaZOep4O6ulRnVHw8sG2b/ceXjU8H9UvDhqnhkqmpatCD3aOuurqAX/5SrU74m1ue\n8VEfMbjhavhwde07ZQpQWqp6oG/yILulvvhCLbUybBjg9bJDKoS0rx1EITZ8OPDQQ2qN3oMHVXjH\njVMzL1p17dnWBmzfDuzYoU6NlyyxZr/UIwa3vxg8WD0uCKgZF0tLVYhHjFAhTkoKrIXs7la3od58\nU/1CWLlSzeAR4GLW1DfsnApjfk1dc/488P77ahhla6t6pacDhqE+Dv72luI33wD19cC//qVOiWtr\ngUmTgPvuU8uqcByyVfzqnGJww1if5py6cgVoalLr2ra2Ap9//v2fpaWpYZfTpqnOJxdP2ELAr+Dy\nX55uFBWlRmVdX8PJqSve93PsVSYSiMElEojBJRKIwRUiqMW0KewwuEIEtZg2hR0GV4igF9OmsMLg\nCtTbYtperxcejwcejweNjY02V0Z24QAMB/F3MW2fz4e9e/fecl1eRy36Rf7iAAxpbFlMm8ICgytE\nRUUFCgsLcfToUURFRekuhzTjqbIQSUlJ6OjoQExMDADVQfXyyy/3+h6eKovEU+Vw8pW0SdAppNir\nTCQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINL\nJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0sk\nEINLJBCDSyQQg0skEINLJBCDSyQQgytMUVERDMNAU1OT7lJIIwZXkLq6OlRWViIhIUF3KaQZgyvI\npk2bUFhYCMMwdJdCmjG4Quzbtw/x8fGYOnWq7lLIAVy6C6DvzZkzB+fOnfvR97du3YqCggJUVlbe\nch9erxderxcA0NjYaHmN5AyGaZqBbB/QxmSNkydP4p577kFUVBQAoL6+HmPGjMGxY8cQFxfX4/s8\nHg98Pp9dZZI1/LoOYosrwJQpU9DQ0PDd17fffjt8Ph9iY2M1VkU68RqXSCC2uALV1tbqLoE0Y4tL\nJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0skEINLJBCDSyQQg0sk\nEINLJFCgc06RIIZhVJimuUB3HWQ9BpdIIJ4qEwnE4BIJxOASCcTgEgnE4BIJxOASCcTgEgnE4BIJ\nxOASCfT/SIqg6ZMsSZMAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plot_implicit(x ** 2 + y ** 2 + x * y - 2, line_color='red', set_aspect='equal');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Статистика" ] }, { "cell_type": "code", "execution_count": 195, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import sympy.stats\n", "from sympy.stats import Normal, Die, P, E, variance, std, cdf, density, sample" ] }, { "cell_type": "code", "execution_count": 196, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$p^{5} e^{5 t} + 5 p^{4} \\left(- p + 1\\right) e^{4 t} + 10 p^{3} \\left(p - 1\\right)^{2} e^{3 t} - 10 p^{2} \\left(p - 1\\right)^{3} e^{2 t} + 5 p \\left(p - 1\\right)^{4} e^{t} - \\left(p - 1\\right)^{5}$$" ], "text/plain": [ " 5 5⋅t 4 4⋅t 3 2 3⋅t 2 3 2⋅t \n", "p ⋅ℯ + 5⋅p ⋅(-p + 1)⋅ℯ + 10⋅p ⋅(p - 1) ⋅ℯ - 10⋅p ⋅(p - 1) ⋅ℯ + 5⋅p\n", "\n", " 4 t 5\n", "⋅(p - 1) ⋅ℯ - (p - 1) " ] }, "execution_count": 196, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p, t = symbols('p t', positive=True, real=True)\n", "x = sympy.stats.Binomial('x', 5, p)\n", "simplify(E(exp(t*x)))" ] }, { "cell_type": "code", "execution_count": 197, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Twodices = Die('X', 6) + Die('Y', 6)" ] }, { "cell_type": "code", "execution_count": 198, "metadata": { "collapsed": false }, "outputs": [], "source": [ "throws = [int(sample(Twodices)) for i in range(1000)]" ] }, { "cell_type": "code", "execution_count": 199, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{5}{36}$$" ], "text/plain": [ "5/36" ] }, "execution_count": 199, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P(Eq(Twodices, 6))" ] }, { "cell_type": "code", "execution_count": 200, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/latex": [ "$$\\left \\{ 2 : \\frac{1}{36}, \\quad 3 : \\frac{1}{18}, \\quad 4 : \\frac{1}{12}, \\quad 5 : \\frac{1}{9}, \\quad 6 : \\frac{5}{36}, \\quad 7 : \\frac{1}{6}, \\quad 8 : \\frac{5}{36}, \\quad 9 : \\frac{1}{9}, \\quad 10 : \\frac{1}{12}, \\quad 11 : \\frac{1}{18}, \\quad 12 : \\frac{1}{36}\\right \\}$$" ], "text/plain": [ "{2: 1/36, 3: 1/18, 4: 1/12, 5: 1/9, 6: 5/36, 7: 1/6, 8: 5/36, 9: 1/9, 10: 1/12\n", ", 11: 1/18, 12: 1/36}" ] }, "execution_count": 200, "metadata": {}, "output_type": "execute_result" } ], "source": [ "twodices = density(Twodices)\n", "twodices" ] }, { "cell_type": "code", "execution_count": 201, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nJDXu/wCHjUayMJ9SKgAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "hist(throws, range=(0.5, 12.5), bins=12);\n", "bar(range(13), [1000 * float(twodices.get(i, 0)) for i in range(13)], color='r', alpha=0.3);" ] }, { "cell_type": "code", "execution_count": 202, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 15 225\n", "0.000429060333196837\n" ] }, { "data": { "text/latex": [ "$$\\frac{\\sqrt{2}}{30 \\sqrt{\\pi}} e^{- \\frac{1}{450} \\left(x - 100\\right)^{2}}$$" ], "text/plain": [ " 2 \n", " -(x - 100) \n", " ────────────\n", " 450 \n", "√2⋅ℯ \n", "────────────────\n", " 30⋅√π " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/latex": [ "$$\\frac{1}{2} \\operatorname{erf}{\\left (\\frac{\\sqrt{2}}{30} \\left(x - 100\\right) \\right )} + \\frac{1}{2}$$" ], "text/plain": [ " ⎛√2⋅(x - 100)⎞ \n", "erf⎜────────────⎟ \n", " ⎝ 30 ⎠ 1\n", "───────────────── + ─\n", " 2 2" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "[100.684456640200, 105.223444284671, 95.7518849755922, 70.4066286794701, 94.4170395543877, 55.4158027715594, 102.657052714370, 116.717820255803, 102.557040346538, 101.089898912479]\n" ] } ], "source": [ "iq = sympy.stats.Normal('iq', 100, 15)\n", "print E(iq), std(iq), variance(iq)\n", "print N(P(iq > 150))\n", "display(density(iq)(x))\n", "display(simplify(cdf(iq)(x)))\n", "print [sample(iq) for i in range(10)]" ] }, { "cell_type": "code", "execution_count": 203, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "111.96826841204297" ] }, "execution_count": 203, "metadata": {}, "output_type": "execute_result" } ], "source": [ "float(E(iq, iq > 100))" ] }, { "cell_type": "code", "execution_count": 204, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\frac{5 \\sqrt{2}}{6 \\sqrt{\\pi}} \\left(- \\frac{3 \\sqrt{2}}{10} \\sqrt{\\pi} \\operatorname{erf}{\\left (\\frac{5 \\sqrt{2}}{3} \\right )} + \\frac{3 \\sqrt{2}}{10} \\sqrt{\\pi}\\right)$$" ], "text/plain": [ " ⎛ ⎛5⋅√2⎞ ⎞\n", " ⎜ 3⋅√2⋅√π⋅erf⎜────⎟ ⎟\n", " ⎜ ⎝ 3 ⎠ 3⋅√2⋅√π⎟\n", "5⋅√2⋅⎜- ───────────────── + ───────⎟\n", " ⎝ 10 10 ⎠\n", "────────────────────────────────────\n", " 6⋅√π " ] }, "execution_count": 204, "metadata": {}, "output_type": "execute_result" } ], "source": [ "P(iq > 150).rewrite(Integral)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Физика" ] }, { "cell_type": "code", "execution_count": 205, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sympy.physics import units" ] }, { "cell_type": "code", "execution_count": 206, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9.80665*meter/second**2\n" ] } ], "source": [ "print units.acceleration_due_to_gravity.convert_to(units.m / units.s ** 2)" ] }, { "cell_type": "code", "execution_count": 207, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "31556925.216*second\n" ] } ], "source": [ "print units.year.convert_to(units.second)" ] }, { "cell_type": "code", "execution_count": 208, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.3558179483314*joule\n" ] } ], "source": [ "print units.convert_to(1 * units.pound * units.acceleration_due_to_gravity * 1 * units.foot, units.joule).n()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Третий закон Кеплера" ] }, { "cell_type": "code", "execution_count": 209, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "6.28318530717959*venus_a**(3/2)/(sqrt(gravitational_constant)*sqrt(solar_mass))\n", "224.662800523082*day\n" ] } ], "source": [ "T = symbols(\"T\")\n", "a = units.Quantity('venus_a', units.length, 108208000e3 * units.meter)\n", "M = units.Quantity('solar_mass', units.mass, 1.9891e30 * units.kilogram)\n", "\n", "G = units.gravitational_constant\n", "eq = Eq(T**2 / a**3, 4*sympy.pi**2 / G / M)\n", "q = solve(eq, T)[1]\n", "print q\n", "print units.convert_to(q, units.day).n()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Интероп с Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Выражение, результат символьного вычисления, можно сунуть в питон-функцию" ] }, { "cell_type": "code", "execution_count": 210, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def naive_sum_of_squares(n):\n", " result = 0\n", " for i in range(1, n + 1):\n", " result += i ** 2\n", " return result" ] }, { "cell_type": "code", "execution_count": 211, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 loops, best of 3: 983 ms per loop\n" ] } ], "source": [ "%timeit naive_sum_of_squares(1000000)" ] }, { "cell_type": "code", "execution_count": 212, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def fast_naive_sum_of_squares(n):\n", " return sum(arange(1, n + 1) ** 2)" ] }, { "cell_type": "code", "execution_count": 213, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 4.08 ms per loop\n" ] } ], "source": [ "%timeit fast_naive_sum_of_squares(1000000)" ] }, { "cell_type": "code", "execution_count": 214, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "55.0\n" ] } ], "source": [ "k, n = var('k n')\n", "sum_of_squares = lambdify(n, summation(k ** 2, (k, 1, n)))\n", "print sum_of_squares(5)" ] }, { "cell_type": "code", "execution_count": 215, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100000 loops, best of 3: 2.41 µs per loop\n" ] } ], "source": [ "%timeit sum_of_squares(1000000)" ] }, { "cell_type": "code", "execution_count": 216, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.54993124494467\n" ] } ], "source": [ "print lambdify(x, Si(x), modules='sympy')(5.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Интероп с Maple" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Иногда вызов внешней CAS удобнее или быстрее дает ответ" ] }, { "cell_type": "code", "execution_count": 217, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def eval_maple(expr):\n", " import os, delegator\n", " cmaple_dir = 'c:\\\\Program Files (x86)\\\\Maple 15\\\\bin.win'\n", " cmaple_exe = 'c:\\\\Program Files (x86)\\\\Maple 15\\\\bin.win\\\\cmaple.exe'\n", " cd = os.getcwdu()\n", " os.chdir(cmaple_dir)\n", " maple = delegator.run([cmaple_exe], block=False)\n", " maple.expect('>')\n", " maple.send('interface(prettyprint=0);')\n", " maple.expect('>')\n", " maple.send(expr)\n", " maple.expect('>')\n", " maple.send('quit();')\n", " os.chdir(cd)\n", " return '\\r\\n'.join(maple.out.splitlines()[3:-2])" ] }, { "cell_type": "code", "execution_count": 218, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\int \\sin{\\left (e^{x} \\right )}\\, dx$$" ], "text/plain": [ "⌠ \n", "⎮ ⎛ x⎞ \n", "⎮ sin⎝ℯ ⎠ dx\n", "⌡ " ] }, "execution_count": 218, "metadata": {}, "output_type": "execute_result" } ], "source": [ "integrate(sin(exp(x)), x)" ] }, { "cell_type": "code", "execution_count": 219, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/latex": [ "$$\\operatorname{Si}{\\left (e^{x} \\right )}$$" ], "text/plain": [ " ⎛ x⎞\n", "Si⎝ℯ ⎠" ] }, "execution_count": 219, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S(eval_maple('int(sin(exp(x)), x);'))" ] }, { "cell_type": "code", "execution_count": 220, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{2: 2, 173558250066979L: 1, 29: 1, 49041759323L: 1}\n", "Wall time: 2.9 s\n" ] } ], "source": [ "%%time\n", "print sympy.factorint(987345823683476598732645172)" ] }, { "cell_type": "code", "execution_count": 221, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "``(2)^2*``(29)*``(49041759323)*``(173558250066979)\n", "Wall time: 126 ms\n" ] } ], "source": [ "%%time\n", "print eval_maple('ifactor(987345823683476598732645172);')" ] }, { "cell_type": "code", "execution_count": 222, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def parse_ifactor_output(s):\n", " result = {}\n", " import re\n", " s = re.sub('\\s+', '', s)\n", " for item in s.split('*'):\n", " m = re.match('^``\\((\\d+)\\)(?:\\^(\\d+))?$', item)\n", " if not m:\n", " raise Exception('ifactor says ' + s + ', item = ' + item)\n", " base = int(m.groups()[0])\n", " power = int(m.groups()[1]) if m.groups()[1] is not None else 1\n", " result[base] = power\n", " return result\n", "\n", "def maple_factorint(n):\n", " output = eval_maple('ifactor(%d);' % n)\n", " return parse_ifactor_output(output)" ] }, { "cell_type": "code", "execution_count": 223, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{2: 2, 173558250066979L: 1, 29: 1, 49041759323L: 1}\n", "Wall time: 124 ms\n" ] } ], "source": [ "%%time\n", "print maple_factorint(987345823683476598732645172)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "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.12" } }, "nbformat": 4, "nbformat_minor": 2 }