{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# ============================================================\n",
    "#         Четвърта национална студентска Олимпиада \n",
    "#     по Компютърна Математика \"акад. Стефан Додунеков\"\n",
    "#              Бургаски Свободен Университет\n",
    "#                 13-15 ноемвери 2015 г.\n",
    "# ============================================================"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# ------------------------------------------------------------\n",
    "#   Работа с програмни модули в Python\n",
    "# ------------------------------------------------------------\n",
    "# import math           # math.sin(math.pi/5)\n",
    "# import math as m      # m.sin(m.pi/5)\n",
    "# from math import sin, cos, exp, log, pi, e # sin(pi/5)\n",
    "# from math import *    # използваме ДИРЕКТНО имената \n",
    "                        # на ВСИЧКИ обекти от модула math.\n",
    "# ------------------------------------------------------------\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Populating the interactive namespace from numpy and matplotlib\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING: pylab import has clobbered these variables: ['ldexp', 'isclose', 'isnan', 'degrees', 'pi', 'tanh', 'modf', 'nan', 'log10', 'floor', 'log', 'trunc', 'copysign', 'sqrt', 'cosh', 'fmod', 'tan', 'isfinite', 'ceil', 'cos', 'gamma', 'exp', 'log2', 'inf', 'fabs', 'hypot', 'isinf', 'expm1', 'log1p', 'radians', 'sinh', 'sin', 'e', 'frexp']\n",
      "`%matplotlib` prevents importing * from pylab and numpy\n"
     ]
    }
   ],
   "source": [
    "#   Задачи за група Б\n",
    "# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n",
    "from math  import * \n",
    "import pylab as pl\n",
    "import scipy as sp\n",
    "import numpy as np\n",
    "import sympy as sy\n",
    "%pylab inline   \n",
    "#-------------------------------------------------------------"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.4263636316651169"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 1\n",
    "sqrt(5 + (3)**(1/3)) + (5 + sqrt(3))**(1/3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.5322601508095928"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 2\n",
    "# Вариант 1 - директно като формула (хамалско решение)\n",
    "1 + (1/(sqrt(2) + 1/(sqrt(3) + 1/(sqrt(4) + \n",
    "                  1/(sqrt(5) + 1/sqrt(6))))))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.5322601508095928"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Вариант 2 - с for-цикъл\n",
    "z = sqrt(5) + 1/sqrt(6)\n",
    "for n in range(4,0,-1):\n",
    "    z = sqrt(n) + 1/z\n",
    "z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.5321825076095439"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Обобщение за произволна стойност на n\n",
    "n = 1001\n",
    "z = sqrt(n+1) + 1/sqrt(n+2)\n",
    "for i in range(n,0,-1):\n",
    "    z = sqrt(i) + 1/z\n",
    "z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8.0646600508771371e-11"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 3\n",
    "# Вариант 1 - директно заместване\n",
    "n = 2015; s = sqrt\n",
    "s(n + s(n + s(n + s(n + s(n + s(n + s(n))))))) - \\\n",
    "      s(n + s(n + s(n + s(n + s(n + s(n))))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8.0646600508771371e-11"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Вариант 2 - с for-цикъл\n",
    "sq = sqrt(2015)\n",
    "for i in range(5):\n",
    "    sq = sqrt(2015 + sq)\n",
    "sqrt(2015 + sq) - sq"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.2912859970626636"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 4\n",
    "s = 0\n",
    "for i in range(1,51):\n",
    "    s = s + 1/i**i\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2.792117542621514 2.718281828459045\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.07383571416246903"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 5\n",
    "s = 0\n",
    "for i in range(1,2015):\n",
    "    n1 = i\n",
    "    n2 = i + 1\n",
    "    s = s + (n1/n2)**n1/n2\n",
    "print(s, e)\n",
    "s - e\n",
    "# Забележка: Тъй като при директно прилагане на формулата\n",
    "# за i-тия член n1**n1/n2**n2 се получава препълване, тя бе\n",
    "# преобразувана в еквивалентния вид ((n1/n2)**n1)/n2.\n",
    "# Така се избягна препълването!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 6\n",
    "n = sy.Symbol('n')\n",
    "sy.Sum(1/n**2, (n, 1, sy.oo)).evalf() < sqrt(e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1.64493406684823, 1.6487212707001282)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sy.Sum(1/n**2, (n, 1, sy.oo)).evalf(), sqrt(e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.00378720385190179"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sqrt(e) - sy.Sum(1/n**2, (n, 1, sy.oo)).evalf() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "x"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 7\n",
    "x = sy.Symbol('x')\n",
    "expr = (x**4 + 7*x**3 + 21*x**2 + 63*x + 108)/ \\\n",
    "       (x**5 + 4*x**4 - 81*x - 324) *          \\\n",
    "       (3*x**5 + 10*x**4 - 81*x**2 - 270*x)/   \\\n",
    "       (3*x**3 + 19*x**2 + 57*x + 90)\n",
    "sy.simplify(expr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(n**2 + 3*n + 1)**2"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 8\n",
    "n = sy.Symbol('n', integer = True)\n",
    "sy.factor(n*(n+1)*(n+2)*(n+3) + 1) # Факторизация на изразза"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2, -1 + sqrt(2), -sqrt(2) - 1]"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 9\n",
    "x = sy.Symbol('x')\n",
    "sy.solve(x**3 - 5*x + 2, x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 5]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 10\n",
    "x = sy.Symbol('x')\n",
    "eq = sy.sqrt(1 + x*sy.sqrt(x**2 + 24)) - x - 1\n",
    "sol = sy.solve(eq, x); sol"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 0)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Проверка\n",
    "eq.subs(x,sol[0]), eq.subs(x,sol[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n+4jBoPP8HN8AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x57e3b00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 11\n",
    "from numpy import *\n",
    "x = arange(0, pi/2, pi/500)\n",
    "y = 100*cos(10*x**2) - x**4 - 1\n",
    "pl.plot(x, y); pl.grid()\n",
    "# Графиката пресича 8 пъти абсцисната ос --> 8 корена"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 7.72525184])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# ------------------------------------------------------------\n",
    "# Задача 12\n",
    "# За избягване на безкрайните нараствания на tan(x)\n",
    "# преобразуваме уравнението, като умножим двете му\n",
    "# части на cos(x) --> x*cos(x) - sin(x) = 0\n",
    "from scipy.optimize import fsolve # Зареждаме функцията fsolve\n",
    "f = lambda x: x*cos(x) - sin(x)\n",
    "fsolve(f, 8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n",
      "7\n",
      "11\n",
      "13\n",
      "21\n",
      "33\n",
      "37\n",
      "39\n",
      "77\n",
      "91\n",
      "111\n",
      "143\n",
      "231\n",
      "259\n",
      "273\n",
      "407\n",
      "429\n",
      "481\n",
      "777\n",
      "1001\n",
      "1221\n",
      "1443\n",
      "2849\n",
      "3003\n",
      "3367\n",
      "5291\n",
      "8547\n",
      "10101\n",
      "15873\n",
      "37037\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "30"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 13\n",
    "n  = 0   # брояч на делителите\n",
    "nn = 2   # числото, проверявано за делител\n",
    "# N = 1691146334800   # Защо се задават такива астрономически числа???\n",
    "                      # Компютърът работи над 3 часа безрезултатно!\n",
    "N = 111111\n",
    "while nn <= N/2:\n",
    "    if N % nn == 0:\n",
    "        print(nn)\n",
    "        n = n + 1\n",
    "    nn = nn + 1\n",
    "n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n",
      "7\n",
      "11\n",
      "13\n",
      "21\n",
      "33\n",
      "37\n",
      "39\n",
      "77\n",
      "91\n",
      "111\n",
      "143\n",
      "231\n",
      "259\n",
      "273\n",
      "407\n",
      "429\n",
      "481\n",
      "777\n",
      "1001\n",
      "1221\n",
      "1443\n",
      "2849\n",
      "3003\n",
      "3367\n",
      "5291\n",
      "8547\n",
      "10101\n",
      "15873\n",
      "37037\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "30"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Вариант с for-цикъл\n",
    "n  = 0   # брояч на делителите\n",
    "N = 111111\n",
    "N2 = N//2 + 1 # Горна граница на делителите\n",
    "for nn in range(2, N2):\n",
    "    if N % nn == 0:\n",
    "        print(nn)\n",
    "        n = n + 1\n",
    "n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "97"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 14\n",
    "n_prime = 0  # брояч на простите числа\n",
    "for n in range(1,2016):\n",
    "    if sy.isprime(3*n**5 + 11):\n",
    "        n_prime += 1\n",
    "n_prime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[183, 213, 208, 189, 197, 207, 202, 199, 203, 214]\n"
     ]
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 15\n",
    "Pi = int(sy.N(sy.pi,2020)*(10**2019))//10**5 \n",
    "nn = [0,0,0,0,0,0,0,0,0,0] # Списък с начални стойности на броячите\n",
    "for i in range(2015):\n",
    "    n = Pi % 10 # извличаме последната цифра\n",
    "    nn[n] += 1\n",
    "    Pi = Pi//10 # премахвме последната цифра\n",
    "print(nn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[183, 212, 207, 189, 197, 206, 202, 199, 203, 213]\n"
     ]
    }
   ],
   "source": [
    "# Вариант 2 ***???***\n",
    "Pi2020 = str(sy.N(sy.pi,2014))\n",
    "nn = [0,0,0,1,0,0,0,0,0,0] # Списък с начални стойности на броячите\n",
    "for i in range(2,2012):\n",
    "    nn[int(Pi2020[i])-int('0')] += 1\n",
    "print(nn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "x**6 - 9*x**5 + 33*x**4 - 65*x**3 + 74*x**2 - 46*x + 12"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 16\n",
    "x = sy.Symbol('x')\n",
    "sy.expand((x-2)*(x-3)*(x-1-sy.I)*(x-1+sy.I)*(x-1)**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[0, 0, 0],\n",
       "        [0, 0, 0],\n",
       "        [0, 0, 0]], dtype=object)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 17\n",
    "A = np.matrix([[2,0,0],[5,-3,-15],[-1,1,5]]); \n",
    "A**2015 - 2**71*A**1944"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-a**3*b/(a**3 + b**3) + a**3*c/(a**3 + c**3) + a*b**3/(a**3 + b**3) - a*c**3/(a**3 + c**3) - b**3*c/(b**3 + c**3) + b*c**3/(b**3 + c**3)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 18\n",
    "a, b, c = sy.symbols('a,b,c')\n",
    "A = sy.Matrix([[a, b, c],[a**3, b**3, c**3],[1/(b**3 + c**3), \\\n",
    "            1/(a**3 + c**3), 1/(a**3 + b**3)]]); A\n",
    "sy.det(A)\n",
    "# Невъзможност за опростяване до израз, позволяващ  \n",
    "# бързо и лесно определяне на знака му ;=("
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{x: 3/(a - 1), y: -6/(a - 1)}"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 19\n",
    "x, y, a = sy.symbols('x,y,a')\n",
    "eq1 = 2*x + (2-a)*y - 6\n",
    "eq2 = (a+1)*x + y - 3\n",
    "sol = sy.solve([eq1, eq2], [x, y]); sol"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Проверка\n",
    "eq1.subs(x, sol[x]).subs(y, sol[y]).simplify() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2.subs(x, sol[x]).subs(y, sol[y]).simplify()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Вариант с еднократно викане на метода subs\n",
    "eq1.subs([(x,sol[x]),(y,sol[y])]).simplify() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "eq2.subs([(x,sol[x]),(y,sol[y])]).simplify()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Едновременна проверка на двете уравнения\n",
    "a, b = sy.symbols('a b') \n",
    "(a*eq1 + b*eq2).subs([(x,sol[x]),(y,sol[y])]).simplify()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Полученото решение е в сила само за а различно от 0 и 1 !\n",
    "#\n",
    "# При а = 0 получяваме системата:\n",
    "# 2*x + 2*y = 6\n",
    "# x + y = 3\n",
    "# Уравненията са линейно зависими.\n",
    "# От второте уравнение получаваме безброй много решения:\n",
    "# x = t, y = 3 - t\n",
    "# където t е произволен параметър.\n",
    "#\n",
    "# При а = 1 получаваме системата:\n",
    "# 2*x + y = 6\n",
    "# 2*x + y = 3,\n",
    "# която няма решение - уравненията са несъвместими!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(1, -2, -1, -7), (1, -2, -1, 7)]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 20\n",
    "x,y,z,xc,yc,zc,r = sy.symbols('x,y,z,xc,yc,zc,r')\n",
    "sf = (x - xc)**2 + (y - yc)**2 + (z - zc)**2 - r**2\n",
    "eq1 = sf.subs([(x, 3),(y, 1),(z, 5)])\n",
    "eq2 = sf.subs([(x, 4),(y,-8),(z, 1)])\n",
    "eq3 = sf.subs([(x,-5),(y, 1),(z,-3)])\n",
    "eq4 = 2*xc + yc - zc - 1\n",
    "sol = sy.solve([eq1,eq2,eq3,eq4],[xc,yc,zc,r]); sol"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(x - 1)**2 + (y + 2)**2 + (z + 1)**2 - 49  = 0\n"
     ]
    }
   ],
   "source": [
    "print (sf.subs([(xc, 1),(yc,-2),(zc,-1),(r,7)]),' = 0')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "8\n",
      "188\n",
      "106028\n",
      "33725810348\n"
     ]
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 21\n",
    "f = 2\n",
    "print(f)\n",
    "for i in [1,2,3,4]:\n",
    "    f = 3*f**2 - 4\n",
    "    print(f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2  8  188  106028  33725810348  "
     ]
    }
   ],
   "source": [
    "# Вариант с извеждане на числата на 1 ред\n",
    "f = 2\n",
    "print(f, end = '  ')\n",
    "for i in [1,2,3,4]:\n",
    "    f = 3*f**2 - 4\n",
    "    print(f, end = '  ')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-oo*sign(a**n - exp(n*log(a)))"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 22\n",
    "x = sy.Symbol('x')\n",
    "a = sy.Symbol('a', real = True)\n",
    "n = sy.Symbol('n', integer = True)\n",
    "n = sy.Symbol('n', positive = True)\n",
    "sy.limit((x**n - a**n - n*a**(n-1)*(x-a))/(x-a)**2, x, a)\n",
    "# Не може да я реши ;=(   \n",
    "# Maxima я решава, без никакви assumptions за a и за n."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Екстремална точка x =  2.00000000000000\n",
      "f_min = f(2) =  -4.76220315590460\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x86a4390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 23\n",
    "x = sy.Symbol('x')\n",
    "def f(x):\n",
    "    X = abs(x)\n",
    "    return sign(x)*X**(5./3) - 5*X**(2./3)\n",
    "def fp(x):\n",
    "    return sy.diff(x**(5./3) - 5*x**(2./3), x)\n",
    "sol = sy.solve(fp(x), x)\n",
    "print('Екстремална точка x = ', sol[0])\n",
    "xx = np.linspace(-5,5,200)\n",
    "y = f(xx)\n",
    "pl.plot(xx, y); pl.grid() \n",
    "f_min = f(sol[0])\n",
    "print ('f_min = f(2) = ', f_min)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Расте в интервалите (-оо,0] и [2, oo). Намалява в инт. [0,2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2001"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 24\n",
    "fmax = -1.e100\n",
    "for n in range(100000):\n",
    "    f = n**2/1.001**n\n",
    "    if f > fmax:\n",
    "        fmax = f\n",
    "        nmax = n\n",
    "nmax"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.0, 2000.99983341683]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Вариант с нулиране на производната\n",
    "n = sy.Symbol('n')\n",
    "fp = sy.diff(n**2/1.001**n, n)\n",
    "sol = sy.solve(fp, n); sol"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "541882.383856011\n",
      "541882.519191272\n"
     ]
    }
   ],
   "source": [
    "# Проверка за съседните две цели числа:\n",
    "print((n**2/1.001**n).subs(n, 2000))\n",
    "print((n**2/1.001**n).subs(n, 2001))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x9d05978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f = lambda n: n**2/1.001**n\n",
    "x = arange(1990, 2010)\n",
    "pl.plot(x, f(x)); grid()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Стойност на производната \n",
      "-2.22044604925031e-16\n",
      "0\n",
      "0\n",
      "0\n",
      "0\n",
      "0\n",
      "-1.11022302462516e-16\n",
      "0\n",
      "2.22044604925031e-16\n",
      "0\n",
      "0\n",
      "-1.11022302462516e-16\n",
      "1.11022302462516e-16\n",
      "-1.11022302462516e-16\n",
      "-1.11022302462516e-16\n",
      "-2.22044604925031e-16\n",
      "-2.22044604925031e-16\n",
      "-1.11022302462516e-16\n",
      " Стойност на функцията \n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448  =  pi/4\n"
     ]
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 25\n",
    "x = sy.Symbol('x')\n",
    "def f(x):\n",
    "    return sy.atan(sy.sqrt((1+x)/(1-x))) - 1./2*sy.asin(x)\n",
    "sy.diff(f(x), x).simplify() # Не може да го упрости до 0\n",
    "print (' Стойност на производната ')\n",
    "for n in np.arange(-0.9,0.9,0.1):\n",
    "    print (sy.diff(f(x),x).subs(x, n))\n",
    "print (' Стойност на функцията ')\n",
    "for n in np.arange(-0.9,0.9,0.1):\n",
    "    print (f(x).subs(x, n))\n",
    "print (sy.N(sy.pi/4), ' = ', sy.pi/4 )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-2.22044604925031e-16\n",
      "0\n",
      "0\n",
      "0\n",
      "0\n",
      "0\n",
      "-1.11022302462516e-16\n",
      "0\n",
      "2.22044604925031e-16\n",
      "0\n",
      "0\n",
      "-1.11022302462516e-16\n",
      "1.11022302462516e-16\n",
      "-1.11022302462516e-16\n",
      "-1.11022302462516e-16\n",
      "-2.22044604925031e-16\n",
      "-2.22044604925031e-16\n",
      "-1.11022302462516e-16\n"
     ]
    }
   ],
   "source": [
    "for n in np.arange(-0.9,0.9,0.1):\n",
    "    print sy.diff(f(x),x).subs(x, n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Първата производна в интервала (-1,1) е нула => f = const"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n",
      "0.785398163397448\n"
     ]
    }
   ],
   "source": [
    "# Пресмятаме функцията за точки в интервала (-1,1)\n",
    "for n in np.arange(-0.9,0.9,0.1):\n",
    "    print f(x).subs(x, n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.785398163397448  =  pi/4\n"
     ]
    }
   ],
   "source": [
    "print sy.N(sy.pi/4), ' = ', sy.pi/4 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Наистина в указания интервал f = const = pi/4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 26\n",
    "# x = sy.Symbol('x')\n",
    "# sy.integrate(x/(sy.sin(x) + 2015), (x, 0, 2015))\n",
    "# Невъзможност за аналитично решение. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1007.4996731118351\n",
      "0.004238078663433953\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Yordan Yordanov\\Anaconda3\\lib\\site-packages\\scipy\\integrate\\quadpack.py:357: IntegrationWarning: The maximum number of subdivisions (50) has been achieved.\n",
      "  If increasing the limit yields no improvement it is advised to analyze \n",
      "  the integrand in order to determine the difficulties.  If the position of a \n",
      "  local difficulty can be determined (singularity, discontinuity) one will \n",
      "  probably gain from splitting up the interval and calling the integrator \n",
      "  on the subranges.  Perhaps a special-purpose integrator should be used.\n",
      "  warnings.warn(msg, IntegrationWarning)\n"
     ]
    }
   ],
   "source": [
    "# Числено решение:\n",
    "from scipy.integrate import quad\n",
    "f = lambda x: x/(sin(x) + 2015)\n",
    "val, abserr = quad(f, 0.00001, 2015)\n",
    "print (val)\n",
    "print (abserr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Не много точно решение."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1.1269280110429725, 1.2511414249549407e-14)"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 27\n",
    "# x = sy.Symbol('x')\n",
    "# yp = sy.diff(sy.log((sy.exp(x) + 1)/(sy.exp(x)-1)), x).simplify(); yp\n",
    "# sy.integrate(sy.sqrt(1 + yp**2), (x,1,2))\n",
    "# Системата не може да реши интеграла аналитично ;=()\n",
    "# Прилагаме числено решение\n",
    "f = lambda x: sqrt(1 + (-2*exp(x)/(exp(2*x) - 1))**2)\n",
    "val, abserr = quad(f, 1, 2)\n",
    "val, abserr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Изключително точно решение!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "16.9266441708756"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 28\n",
    "# Уравнението на окръжността: (x - 6)**2 + y**2 = 9,\n",
    "# откъдето следва y = sqrt(9 - (x - 6)**2)\n",
    "# 2*sy.integrate(sy.sqrt(9 - sy.expand((x - 6)**2)), (x, 5, 8))\n",
    "# Системата не може да реши интеграла аналитично.\n",
    "# Следва числено решение:\n",
    "# Вариант 1\n",
    "2*sy.N(sy.integrate(sy.sqrt(9 - sy.expand((x - 6)**2)), (x, 5, 8)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(16.926644170875566, 3.9894480080224267e-13)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Вариант 2\n",
    "f = lambda x: 2*sqrt(9 - (x - 6)**2)\n",
    "val, abserr = quad(f, 5, 8)\n",
    "val, abserr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[-1]"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 29\n",
    "x = sy.Symbol('x')\n",
    "# Функцията log(x+2) пресича оста x в точка с координата xA:\n",
    "xA = sy.solve(sy.log(x + 2), x); xA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Функцията 2*log(x) пресича оста x в точка с координата xB:\n",
    "xB = sy.solve(2*sy.log(x), x); xB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2]"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Определяме координатата xC, в която се пресичат двете криви:\n",
    "xC = sy.solve(sy.log(x + 2) - 2*sy.log(x), x); xC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "F =  -1 + log(16)  =  1.77258872223978\n"
     ]
    }
   ],
   "source": [
    "F = sy.integrate(sy.log(x+2), (x,xA,xC)) - \\\n",
    "    sy.integrate(2*sy.log(x), (x,xB,xC));\n",
    "print ('F = ', F.simplify(), ' = ', sy.N(F))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[-1.47168783648703, -0.0283121635129678]\n",
      "[-2.36374306091976, 0.863743060919757]\n"
     ]
    }
   ],
   "source": [
    "# -------------------------------------------------------------\n",
    "# Задача 30\n",
    "b, x = sy.symbols('b,x')\n",
    "fun = lambda x: (x + 2)*(0.5 - x)\n",
    "S = sy.integrate(fun(x), (x,-2,0.5)); S\n",
    "print (sy.solve(2.5*fun(b) - S, b))\n",
    "print (sy.solve(-2.5*fun(b) - S, b))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Задачата има 4 реални решения."
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python [Root]",
   "language": "python",
   "name": "Python [Root]"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
