{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[x1, x2, x3, x4, x5, x6, x7, x8, x9]\n" ] } ], "source": [ "# 1. Define a function f which takes on input a list of variables\n", "# [x_1, x_2, ..., x_n] and an index k.\n", "# The function f([x_1, x_2, .., x_n], k) returns the expression\n", "# x_k ( - x_k^2 + x_1^2 + x_2^2 + .. + x_n^2 ) - x_k + 1.\n", "reset()\n", "X = [var('x' + str(k)) for k in range(1,10)]\n", "print X" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(x2^2 + x3^2 + x4^2 + x5^2 + x6^2 + x7^2 + x8^2 + x9^2)*x1 - x1 + 1\n", "(x1^2 + x3^2 + x4^2 + x5^2 + x6^2 + x7^2 + x8^2 + x9^2)*x2 - x2 + 1\n", "(x1^2 + x2^2 + x4^2 + x5^2 + x6^2 + x7^2 + x8^2 + x9^2)*x3 - x3 + 1\n", "(x1^2 + x2^2 + x3^2 + x5^2 + x6^2 + x7^2 + x8^2 + x9^2)*x4 - x4 + 1\n", "(x1^2 + x2^2 + x3^2 + x4^2 + x6^2 + x7^2 + x8^2 + x9^2)*x5 - x5 + 1\n", "(x1^2 + x2^2 + x3^2 + x4^2 + x5^2 + x7^2 + x8^2 + x9^2)*x6 - x6 + 1\n", "(x1^2 + x2^2 + x3^2 + x4^2 + x5^2 + x6^2 + x8^2 + x9^2)*x7 - x7 + 1\n", "(x1^2 + x2^2 + x3^2 + x4^2 + x5^2 + x6^2 + x7^2 + x9^2)*x8 - x8 + 1\n", "(x1^2 + x2^2 + x3^2 + x4^2 + x5^2 + x6^2 + x7^2 + x8^2)*x9 - x9 + 1\n" ] } ], "source": [ "f = lambda L,k: L[k-1]*(-L[k-1]^2 + sum([x^2 for x in L])) - L[k-1] + 1\n", "for k in range(1,10): print f(X,k)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 1, 2, 5, 14, 42, 132, 429, 1430]\n", "57\n" ] } ], "source": [ "# 2. The number of ways to put parentheses in a chain of multiplications\n", "# of n matrices of compatible dimension equals f(n).\n", "# For n = 1, f(1) = 1.\n", "# For n > 1, the recursive formula for f(n) is\n", "# is the sum of f(k)*f(n-k), for k from 1 to n-1.\n", "# Write an efficient recursive definition of the function f.\n", "# How many decimal places does the number f(100) have?\n", "def f(n, D={}):\n", " if D.has_key(n):\n", " return D[n]\n", " else:\n", " if n == 1:\n", " result = 1\n", " else:\n", " result = sum([f(k)*f(n-k) for k in range(1,n)])\n", " D[n] = result\n", " return result\n", "\n", "print [f(k) for k in range(1,10)]\n", "print len(str(f(100)))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-y^3 - x^2 + x*y + 1\n", "0\n" ] } ], "source": [ "# 3. Consider the curve defined by the equation x y - x^2 - y^3 + 1 = 0\n", "# and the point (1, 1). \n", "# Compute the equation of the tangent line to the curve at the point. \n", "# What is the slope of the tangent line?\n", "reset()\n", "x, y = var('x, y')\n", "f = x*y - x^2 - y^3 + 1\n", "print f\n", "print f(x=1,y=1)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-x - 2*y + 3" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "taylor(f, (x, 1), (y, 1), 1)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "# We see that the slope is -1/2." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "optimize x^2 + y^2 subject to -y^3 - x^2 + x*y + 1\n" ] } ], "source": [ "# 4. Write the commands to set up the system that needs to be solved\n", "# to compute the point on the curve x y - x^2 - y^3 + 1 = 0 closest to (0,0).\n", "# Do not solve the system.\n", "reset()\n", "x, y, L = var('x, y, L')\n", "constraint = x*y - x^2 - y^3 + 1\n", "target = x^2 + y^2\n", "print 'optimize', target, 'subject to', constraint" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(-2*x + y, -3*y^2 + x)\n", "(2*x, 2*y)\n" ] } ], "source": [ "gc = constraint.gradient()\n", "gt = target.gradient()\n", "print gc\n", "print gt" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-2*L*x - 2*x + y, -2*L*y - 3*y^2 + x, -y^3 - x^2 + x*y + 1]\n" ] } ], "source": [ "eqs = [gc[0] - L*gt[0], gc[1] - L*gt[1], constraint]\n", "print eqs" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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aElJkXJzC/88Pp+NWi1YIB15pHTyydLw4VYYAUCS/K4DIP5dc40d5jx0qC0cvu4614kQa+bPt3P/XnrJ9prq3l0aM8b2pyrsWqqCSk31plztkZFhi+zvuEP6179sBHf8eKlaNe9eA0B8olzBE/fea0eLDB5sC5OHDSu6H5qITTk5NnX2zDNWro4+WrrpJhv1qV696POkpVkmL5UoYUfnnH66rT087jhb/H7GGd6+DoD4wrQgPOHz2dTIAw/YouTevSO/7B3xLz9fmjVLuuQSG8G5+mq7nzpVWrHCRnlcFCvJDnH+7bfoPHenTtKiRVauzjxTuv12LvIAklncjVwFAgH5/X4Fg0EFg0HXcfAnPp908812jEjfvnZl1cSJdmQOEtvy5TYlNn68lag6daTbbrOSlZ7uOp2pUMFGVaOlcmXb5HT4cCtXH38shUJSlSrRe00A0RUKhRQKhZS3/6nvh+ALh+Njz+Hc3FylpaUpJydHqampruPgEBYtknr2lNautQXvl13GNGGi2bDByvOECdKnn9qC8Z49pUsvLdq1VAV1//3So48Wzb5ss2ZJwaC9B6++euizDwHEtkg7CNOCiIrmzW2dzQUX2BqbLl1sRAPxbdMm6fnnbeqrenVbY3fUUTZCs3699OyzUvv2sVesJMu5aVPRXNV36qnSl1/aqG3HjnaFZHz8GgvAC5QrRE1Kiv2wffNNOwi3USPprrukbdtcJ0MksrPt77FLF5viuvxyaccOadQou0r0zTelQEAqU8Z10r9XsaIVq2itu9pftWp2bM8119gVtL17870PJAvKFaKua1crV9deK913n20QOWaMtGuX62Q4mB9/tOncjh2tUPXrZxcoPPqolJVl014DBthoULyoVMnui/JswBIlbA+4UMiOzzn5ZOmnn4ru9QG4QblCkTjiCOnBB6Vvv7X1J/362UaSzz5royBwKy/Pzs27+WY7O69OHds2oWxZ259q3TorVIMGxe8+Tns2KHVx8HIgYOvSfvtNatVKmj276DMAKDqUKxSpOnVs76OFC21d1hVX2NWF99/PAdBFbfVqK7cXXGCjOu3b227prVpJr71m04HTplkRjubO6UVlz1V769e7ef1mzaQvvrADqTt1kkaPdpMDQPRRruBE8+Z2MO+SJTZteM89tsnkRRdJH3zAUSLRsHGjvecDB0oNGkg1a0pX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\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 5. Consider the curve defined by (x^2+y^2)*(y^2 + x*(x+1)) - 4*x*y^2 = 0.\n", "# (a) Make a plot of the curve for x and y both in [-3/2,3/2].\n", "# Choose sufficiently many points to obtain a smooth plot.\n", "# (b) Convert the formulation of the curve into polar coordinates.\n", "# (c) Write the command to make the plot in polar coordinates.\n", "# How many times does the curve pass through the origin?\n", "reset()\n", "x, y = var('x, y')\n", "f = (x^2+y^2)*(y^2 + x*(x+1)) - 4*x*y^2\n", "implicit_plot(f,(x,-3/2,3/2),(y,-3/2,3/2),plot_points=1000)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[\n", "r == -(cos(t)^3 - 3*cos(t)*sin(t)^2)/(cos(t)^4 + 2*cos(t)^2*sin(t)^2 + sin(t)^4),\n", "r == 0\n", "]\n" ] } ], "source": [ "r, t = var('r, t')\n", "g = f(x=r*cos(t), y=r*sin(t))\n", "s = solve(g,r)\n", "print s" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "the curve in simplified form : (2*sin(t) + 1)*(2*sin(t) - 1)*cos(t)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "Graphics object consisting of 1 graphics primitive" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rt = s[0].rhs()\n", "print 'the curve in simplified form :', factor(factor(rt).trig_simplify())\n", "polar_plot(rt,(t,0,2*pi))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# The curve passes three times through the origin,\n", "# the origin is a six-fold solution." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ideal (x^3*y + 2*x*y - 3*y^2 + 1, 2*x*y^2 - 5*y^2 + 7*y - 3) of Multivariate Polynomial Ring in x, y over Rational Field\n", "[x - 56/9*y^6 + 373/9*y^5 - 2509/18*y^4 + 4019/18*y^3 - 5335/27*y^2 + 1715/18*y - 39/2, y^7 - 55/8*y^6 + 191/8*y^5 - 41*y^4 + 973/24*y^3 - 24*y^2 + 63/8*y - 9/8]\n" ] } ], "source": [ "# 6. Consider p = x^3 y + 2 x y - 3 y^2 + 1 and\n", "# q = 2 x y^2 - 5 y^2 + 7 y - 3\n", "# as polynomials with rational coefficients.\n", "# Write all relevant commands to\n", "# compute a Groebner basis for a lexicographical term order.\n", "# How many solutions with complex coordinates do you expect? Explain!\n", "reset()\n", "R. = PolynomialRing(QQ, order='lex')\n", "p = x^3*y + 2*x*y - 3*y^2 + 1\n", "q = 2*x*y^2 - 5*y^2 + 7*y - 3\n", "J = ideal(p,q)\n", "print J\n", "print J.groebner_basis()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "# The triangular structure of the Groebner basis shows there are 7 roots of the\n", "# 7 degree polynomial in y. The first equation writes x as a function of y.\n", "# For every y value, there is one x value. So there are 7 solutions." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 0 0 0 0 0 0 0 0 0]\n", "[1 1 0 1 0 1 0 1 0 1]\n", "[1 1 0 0 1 0 0 1 0 0]\n", "[1 1 0 0 0 1 0 0 0 1]\n", "[1 1 0 0 0 0 1 0 0 0]\n", "[1 1 0 0 0 0 0 1 0 0]\n", "[1 1 0 0 0 0 0 0 1 0]\n", "[1 1 0 0 0 0 0 0 0 1]\n", "[1 1 0 0 0 0 0 0 0 0]\n", "[1 1 0 0 0 0 0 0 0 0]\n" ] } ], "source": [ "# 7. The (i,j)-th entry in an n-dimensional Redheffer matrix,\n", "# for i and j both ranging between 1 and n,\n", "# is one if i divides j or if j = 1, and zero otherwise.\n", "# Write all commands for the following.\n", "# (a) Define a 10-by-10 Redheffer matrix stored as a matrix A.\n", "# (b) Define a right hand side vector $b$ of all ones.\n", "# Solve the linear system A x = b.\n", "# Compute the residual vector and its norm.\n", "reset()\n", "f = lambda i,j: (1 if j==0 else (1 if j%(i+1) == 1 else 0))\n", "A = Matrix(10, 10, f)\n", "print A" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)\n" ] } ], "source": [ "b = vector([1 for _ in range(10)])\n", "print b" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 0, 0, 0, 0, 0, 0, 0, 0, 0)\n" ] } ], "source": [ "x = A\\b\n", "print x" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)\n", "0\n" ] } ], "source": [ "r = b - A*x\n", "print r\n", "print norm(r)" ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 8.3", "language": "", "name": "sagemath" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.15" } }, "nbformat": 4, "nbformat_minor": 2 }