{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Python Exam\n", "\n", "This Python exam covers the following topics:\n", "\n", "* Problem 1: Variable types and formats\n", "* Problem 2: Debugging\n", "* Problem 3: Functions, Conditionals, and Loops\n", "* Problem 4: Solve Linear Equations\n", "* Problem 5: Solve Nonlinear Equations\n", "* Problem 6: Integration\n", "* Problem 7: Differentiate\n", "* Problem 8: Interpolation\n", "* Problem 9: Polynomial Regression\n", "* Problem 10: General Nonlinear Regression\n", "* Problem 11: Solve Differential Equation\n", "* Problem 12: Optimization\n", "\n", "A template for each problem is provided with instructions on what is needed. In some cases, the problem is to debug a section of code to produce a specific result. In other cases, the problem is to import a module and produce a result. This exam allows open access to any online resources, prior homework solutions, or other files." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Current conda install:\n", "\n", " platform : win-64\n", " conda version : 4.3.30\n", " conda is private : False\n", " conda-env version : 4.3.30\n", " conda-build version : 3.0.27\n", " python version : 3.6.3.final.0\n", " requests version : 2.18.4\n", " root environment : C:\\Anaconda3 (writable)\n", " default environment : C:\\Anaconda3\n", " envs directories : C:\\Anaconda3\\envs\n", " C:\\Users\\John Hedengren\\AppData\\Local\\conda\\conda\\envs\n", " C:\\Users\\John Hedengren\\.conda\\envs\n", " package cache : C:\\Anaconda3\\pkgs\n", " C:\\Users\\John Hedengren\\AppData\\Local\\conda\\conda\\pkgs\n", " channel URLs : https://repo.continuum.io/pkgs/main/win-64\n", " https://repo.continuum.io/pkgs/main/noarch\n", " https://repo.continuum.io/pkgs/free/win-64\n", " https://repo.continuum.io/pkgs/free/noarch\n", " https://repo.continuum.io/pkgs/r/win-64\n", " https://repo.continuum.io/pkgs/r/noarch\n", " https://repo.continuum.io/pkgs/pro/win-64\n", " https://repo.continuum.io/pkgs/pro/noarch\n", " https://repo.continuum.io/pkgs/msys2/win-64\n", " https://repo.continuum.io/pkgs/msys2/noarch\n", " config file : C:\\Users\\John Hedengren\\.condarc\n", " netrc file : None\n", " offline mode : False\n", " user-agent : conda/4.3.30 requests/2.18.4 CPython/3.6.3 Windows/10 Windows/10.0.17134 \n", " administrator : False\n" ] } ], "source": [ "!conda info" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: gekko in c:\\anaconda3\\lib\\site-packages (0.0.4rc3)\n", "Requirement already satisfied: numpy>=1.8 in c:\\anaconda3\\lib\\site-packages (from gekko) (1.13.3)\n", "Requirement already satisfied: flask in c:\\anaconda3\\lib\\site-packages (from gekko) (0.12.2)\n", "Requirement already satisfied: Werkzeug>=0.7 in c:\\anaconda3\\lib\\site-packages (from flask->gekko) (0.12.2)\n", "Requirement already satisfied: Jinja2>=2.4 in c:\\anaconda3\\lib\\site-packages (from flask->gekko) (2.9.6)\n", "Requirement already satisfied: itsdangerous>=0.21 in c:\\anaconda3\\lib\\site-packages (from flask->gekko) (0.24)\n", "Requirement already satisfied: click>=2.0 in c:\\anaconda3\\lib\\site-packages (from flask->gekko) (6.7)\n", "Requirement already satisfied: MarkupSafe>=0.23 in c:\\anaconda3\\lib\\site-packages (from Jinja2>=2.4->flask->gekko) (1.0)\n" ] } ], "source": [ "# install new packages with \"!pip install module-name\"\n", "!pip install gekko" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, World!\n", "Hello, BYU Student!\n" ] } ], "source": [ "print('Hello, World!')\n", "\n", "myName = 'BYU Student' # input('Name: ')\n", "print('Hello, ' + myName + '!')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 1: Variable types and formats\n", "\n", "#### Part A\n", "Add **x=5** and **y='4'** together to produce a string (54) in addition to the example code of below of adding them as integers (9). In addition to printing the results, show the type of variable with **type()** to confirm that the result is a string.\n", "\n", "Hint: An integer is converted to a string with **str()** and a string is converted to an integer with **int()**." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5\n", "\n", "23\n", "\n" ] } ], "source": [ "x = 2\n", "y = '3'\n", "\n", "# adding two integers together (5)\n", "z = x + int(y)\n", "# show the result of adding 2+3\n", "print(z)\n", "# show that z is an integer\n", "print(type(z))\n", "\n", "# add strings\n", "z = str(x)+y\n", "print(z)\n", "print(type(z))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Part B\n", "\n", "Show the result of $y = exp(0.0)$ and $z = 1.0$ to 20 decimal places. Is there a difference in the results?" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NumPy version:\n", "1.13.3\n" ] } ], "source": [ "import numpy as np\n", "print('NumPy version:')\n", "print(np.__version__)\n", "\n", "y = np.exp(0.0)\n", "z = 1.0" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "y = 1.00000000000000000000\n", "z = 1.00000000000000000000\n", "Another way to format numbers\n", "z = 1.00000000000000000000\n", "Difference\n", "0.00000000000000000000e+00\n" ] } ], "source": [ "#### Solution\n", "print('y = {:.20f}'.format(y))\n", "print('z = {:.20f}'.format(z))\n", "\n", "print('Another way to format numbers')\n", "print('z = %.20f' %z)\n", "\n", "# difference\n", "print('Difference')\n", "print('{:.20e}'.format(y-z))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plots" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n99YAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "\n", "x = np.linspace(0,10)\n", "y = np.sin(x)\n", "z = np.cos(x)\n", "\n", "plt.figure(1)\n", "plt.plot(x,y,'r--',label='sine')\n", "plt.plot(x,z,'b-.',label='cosine')\n", "plt.legend(loc='best')\n", "\n", "plt.figure(2)\n", "plt.subplot(2,1,1)\n", "plt.plot(x,y,'r--',linewidth=5)\n", "plt.legend(['sin(x)'],loc='best')\n", "plt.ylabel('sin(x)')\n", "plt.subplot(2,1,2)\n", "plt.plot(x,z,'bo',markersize=5)\n", "plt.legend(['cosine(x)'],loc='best')\n", "plt.xlabel('x')\n", "plt.ylabel('cos(x)')\n", "plt.savefig('myPlot.png')\n", "plt.savefig('myPlot.eps')\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 2: Read / Write Files" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Writing to a text file \n", "\n", "Second lineThird line?\n" ] }, { "data": { "text/plain": [ "Text(0,0.5,'cos(x)')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# write messages or data to file\n", "fid = open('msg.txt','w')\n", "fid.write('Writing to a text file \\n')\n", "fid.write('Second line')\n", "fid.write('Third line?')\n", "fid.close()\n", "\n", "# read one line at a time\n", "fid = open('msg.txt','r')\n", "text = fid.readline()\n", "print(text)\n", "text = fid.readline()\n", "print(text)\n", "fid.close()\n", "\n", "x = np.linspace(0,2*np.pi,20)\n", "y = np.cos(x)\n", "\n", "#--- stack rows together from (x,y) to produce data \n", "#--- then transpose data to convert rows into columns\n", "data = np.vstack((x,y))\n", "data = data.T\n", "\n", "#--- save data to data.txt\n", "np.savetxt('data.txt',data)\n", "#--- load text file\n", "z = np.loadtxt('data.txt')\n", "#print(z)\n", "\n", "#--- create plot of y = sin(x)\n", "plt.plot(x,y,linewidth=3)\n", "plt.plot(z[:,0],z[:,1],'ro')\n", "plt.xlabel('x')\n", "plt.ylabel('cos(x)')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 3: Functions, Conditionals, and Loops" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5,0,'y')" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def f(x):\n", " y = x**2\n", " if y>=20:\n", " y = np.nan # nan = not a number\n", " return y\n", "\n", "x = np.linspace(0,5,100)\n", "y = np.empty_like(x)\n", "\n", "# calculate with loop\n", "i = 0\n", "for xi in x:\n", " y[i] = f(xi)\n", " i = i + 1\n", "\n", "# plot result\n", "plt.plot(x,y)\n", "# optional to make plot look better\n", "plt.xlim([0,5])\n", "plt.ylim([0,30])\n", "plt.title('Clipped Function')\n", "plt.ylabel('x')\n", "plt.xlabel('y')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 4: Matrices, Solve Linear Equations" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A matrix\n", "[[3 2]\n", " [1 2]]\n", "b vector\n", "[1 0]\n", "[ 0.5 -0.25]\n", "[ 0.5 -0.25]\n", "{(1/2, -1/4)}\n", "{(1/2, -1/4)}\n" ] }, { "data": { "text/plain": [ "{(1/2, -1/4)}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "A = np.array([[3,2],[1,2]])\n", "print('A matrix')\n", "print(A)\n", "\n", "# b in matrix form\n", "b = np.array([1,0])\n", "print('b vector')\n", "print(b)\n", "\n", "#### Solution 1\n", "x = np.dot(np.linalg.inv(A),b)\n", "print(x)\n", "\n", "#### Solution 2\n", "x = np.linalg.solve(A,b)\n", "print(x)\n", "\n", "#### Solution 3\n", "import sympy as sym\n", "from IPython.display import display\n", "x, y = sym.symbols('x y')\n", "ans = sym.linsolve([3*x + 2*y - 1, x + 2*y], (x, y))\n", "# 3 ways to display answer (ans)\n", "print(ans)\n", "sym.pprint(ans)\n", "display(ans)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 5: Solve Nonlinear Equations" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[-0.89442719 0.4472136 ]\n" ] }, { "data": { "image/png": "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\nOuvOjAQ4VV8AAAAASUVORK5CYII=\n", "text/latex": [ "$$\\left\\{\\left ( - \\frac{2 \\sqrt{5}}{5}, \\quad \\frac{\\sqrt{5}}{5}\\right ), \\left ( \\frac{2 \\sqrt{5}}{5}, \\quad - \\frac{\\sqrt{5}}{5}\\right )\\right\\}$$" ], "text/plain": [ "⎧⎛-2⋅√5 √5⎞ ⎛2⋅√5 -√5 ⎞⎫\n", "⎨⎜──────, ──⎟, ⎜────, ────⎟⎬\n", "⎩⎝ 5 5 ⎠ ⎝ 5 5 ⎠⎭" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.optimize import fsolve\n", "import sympy as sym\n", "sym.init_printing()\n", "\n", "#### Solution with fsolve\n", "def f(z):\n", " x = z[0]\n", " y = z[1]\n", " return [x + 2*y, x**2+y**2-1]\n", "\n", "zguess = [0,1]\n", "z = fsolve(f,zguess)\n", "print(z)\n", "\n", "#### Solution with Sympy\n", "ans = sym.nonlinsolve([x + 2*y, x**2+y**2-1], [x,y])\n", "display(ans)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 6: Integration" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "SciPy Solution\n", "2.666666666666667\n", "2.6666666666666665\n", "SymPy Solution\n", "x**3/3\n", " 3\n", "x \n", "──\n", "3 \n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAABYAAAAvBAMAAAAV7ydtAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHarIkSJZt3NVLsy\nme8Q6PJIAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA1klEQVQoFWNggICkywJQFgNvAe8GODuB/QOM\nzcCAEGdgkDsAF2eaBGeiqmH5BZOQO8DyHcbmcGB6CGQLKbuqKfAkJTswMDAmsDdxTIDIswmwfeQC\nioEAIwMn3CUMDPwKYEEwcf4AjM0loM/AJADhxS/Yz+AOlRBWErpeAFNEY/o/AlBsk1vaLpgZLBcY\n1sO8wPSLgb8BKsH6lEF+AkwRA0INMMDa4MIsGRfhbAaGvAAEhw8U+iDA4sDADYsh/o8INt8GBo4v\nECUM7AUM6xWgbIbYu1tBTABGZDQhWVh3aAAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\frac{x^{3}}{3}$$" ], "text/plain": [ " 3\n", "x \n", "──\n", "3 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.integrate import quad\n", "import sympy as sym\n", "\n", "#### Solution (scipy)\n", "print('SciPy Solution')\n", "def f(x):\n", " return x**2\n", "print(quad(f,0,2)[0])\n", "print(8/3)\n", "\n", "#### Solution (sympy)\n", "print('SymPy Solution')\n", "x = sym.Symbol('x')\n", "f = sym.integrate(x**2,x)\n", "print(f)\n", "sym.pprint(f)\n", "display(f)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 7: Differentiate" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "11.0\n", "10.0000008274\n", "10.00000082740371\n", "10.0000000000000\n", " 2 \n", "3⋅x + 4.0⋅x + 3.0\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJMAAAAWBAMAAAA2trNNAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAIom7VJlmdt1E7xDN\nqzIhoty3AAAACXBIWXMAAA7EAAAOxAGVKw4bAAACQ0lEQVQ4EaWSz2sTQRTHv7tdkk2mJmtBwdtS\nKRUVDGgPRSQreBNMUerFHqKHIiK4CFKwlGpBehEMggge7MFT/cXipV7EgB485FBPnkrzHySVaJVY\n48y8edtNUC87h5n33uf7vjNvWSCxxiaiRJYmtL099TT9iV7XK2wl0jShW7N+punv63W6fWmaxA3T\ndGNk9ETcPxZHHBSmVCTOX2lyJXlaowcDlRO3plCpqlSujO6j2OxuSQXDgbjbVzbJPjjfd3m2g+Id\nQx7iKUVOPOhtbXUNOGo0+mC+GOCHKhDPreJ9XXMUPp45SRFLYV3XVqeASkRI78yf1MQvVYg5D5jv\n9dqkZynsYW21A6wEhPQeczMgc7EErC0cuBnuamPpZW0lvkmrUMx9fjxOmpjjrS8rxAHr0CUIP7Ps\n1kmmdpaKUFtZX4GW/wZXw/ukYY6Re2pu4godrtmR3XU8kqmdpTbISr6q5R/Bseg0aZgD9qqsWJor\nlH8hqIV0dqPx6WWjsS6zc1SnASJ80IIEl/lz+SwzoOVhqAMUQ/Kh3dwqfHOF/KyVANhmDb9qL1CW\ndRAvdrVVq8kydRqps7Gx+UrdcRy4EaHwmzVs1YvIini+BHfLiRaRlS/lxVI5fEnV5C84g7PZNuZJ\nwfwZ8MBjjkwVlXAlKGM/qfTOUjl4Sf3BbiBe5zpDbatKIuazcLaZS/JoehLv5tYuGpXWshR2eafq\nrkOMLzTFl/lbs+TEHwC56Qs1GG7Q4BFbDYIBq3/gZFmoD/Cf9Vf+BwnwlyDJF4htAAAAAElFTkSu\nQmCC\n", "text/latex": [ "$$3 x^{2} + 4.0 x + 3.0$$" ], "text/plain": [ " 2 \n", "3⋅x + 4.0⋅x + 3.0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.misc import derivative\n", "import sympy as sym\n", "\n", "# numeric method 1\n", "def f(x):\n", " return x**3 + 2.0*x**2 + 3.0*x + 1.0\n", "print(derivative(f,1))\n", "print(derivative(f,1,dx=1e-10))\n", "der = (f(1.0+1e-10) - f(1.0-1e-10))/2.e-10\n", "print(der)\n", "#help(derivative)\n", "\n", "# analytic solution with sympy\n", "x = sym.Symbol('x')\n", "f=sym.diff(x**3 + 2.0*x**2 + 3.0*x + 1.0,x)\n", "print(f.subs(x,1))\n", "sym.pprint(f)\n", "display(f)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 8: Interpolation\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.5\n", "0.5\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.interpolate import interp1d\n", "x = np.array([0,1,2,3,4,5])\n", "y = np.array([0.1,0.2,0.3,0.5,1.0,0.9])\n", "plt.plot(x,y,'bo')\n", "\n", "xp = np.linspace(0,5,100)\n", "y1 = interp1d(x,y,kind='linear')\n", "print(y1(3))\n", "plt.plot(xp,y1(xp),'g-')\n", "\n", "y2 = interp1d(x,y,kind='quadratic')\n", "print(y2(3))\n", "plt.plot(xp,y2(xp),'r--')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 9: Linear and Polynomial Regression" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0.04166667 -0.2 0.33690476 0.07857143]\n" ] }, { "data": { "text/plain": [ "Text(0,0.5,'y')" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.array([0,1,2,3,4,5])\n", "y = np.array([0.1,0.2,0.3,0.5,0.8,2.0])\n", "\n", "#### Solution\n", "# linear\n", "p1 = np.polyfit(x,y,1)\n", "# quadratic\n", "p2 = np.polyfit(x,y,2)\n", "# cubic\n", "p3 = np.polyfit(x,y,3)\n", "print(p3)\n", "\n", "# plot fit\n", "plt.plot(x,y,'ko',markersize=10)\n", "xp = np.linspace(0,5,100)\n", "plt.plot(xp,np.polyval(p1,xp),'b--',linewidth=2)\n", "plt.plot(xp,np.polyval(p2,xp),'r--',linewidth=3)\n", "plt.plot(xp,np.polyval(p3,xp),'g:',linewidth=2)\n", "plt.legend(['Data','Linear','Quadratic','Cubic'],loc='best')\n", "plt.xlabel('x')\n", "plt.ylabel('y')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 10: Nonlinear Regression" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a = [ 0.58628748]\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n0WHkSloAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.optimize import curve_fit\n", "\n", "x = np.array([0,1,2,3,4,5])\n", "y = np.array([0.1,0.2,0.3,0.5,0.8,2.0])\n", "\n", "## Solution\n", "def f(x,a):\n", " return 0.1 * np.exp(a*x)\n", "\n", "aopt, pcov = curve_fit(f,x,y)\n", "print('a = '+str(aopt))\n", "\n", "plt.plot(x,y,'bo')\n", "xp = np.linspace(0,5)\n", "plt.plot(xp,f(xp,aopt),'r-')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 11: Solve Differential Equation\n", "\n", "Solve the following differential equation with initial condition $y(0) = 5$:\n", "\n", "$ k \\, \\frac{dy}{dt} = -t \\, y$\n", "\n", "where $k=10$. The solution of $y(t)$ should be reported from an initial time $0$ to final time $20$. Create of plot of the result for $y(t)$ versus $t$. " ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0,0.5,'y')" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nrveUmtyplEcAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.integrate import odeint\n", "\n", "def dydt(y,t,k):\n", " return -t*y/k\n", "\n", "k = 10.0\n", "t = np.linspace(0,20)\n", "y0 = 5.0\n", "y = odeint(dydt,y0,t,args=(k,))\n", "plt.plot(t,y)\n", "plt.xlabel('time')\n", "plt.ylabel('y')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem 12: Nonlinear Optimization\n", "\n", "Solve the following nonlinear optimization problem:\n", "\n", "$\\min x_1 x_4 \\left(x_1 + x_2 + x_3\\right) + x_3$\n", "\n", "$\\mathrm{s.t.} \\quad x_1 x_2 x_3 x_4 \\ge 25$\n", "\n", "$x_1^2 + x_2^2 + x_3^2 + x_4^2 = 40$\n", "\n", "$1\\le x_1, x_2, x_3, x_4 \\le 5$\n", "\n", "with initial conditions:\n", "\n", "$x_0 = (1,5,5,1)$\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Initial Objective: 16.0\n", "Final Objective: 17.0140172456\n", "Solution\n", "x1 = 1.0\n", "x2 = 4.74299609688\n", "x3 = 3.82115462341\n", "x4 = 1.37940764508\n" ] } ], "source": [ "import numpy as np\n", "from scipy.optimize import minimize\n", "\n", "def objective(x):\n", " return x[0]*x[3]*(x[0]+x[1]+x[2])+x[2]\n", "\n", "def constraint1(x):\n", " return x[0]*x[1]*x[2]*x[3]-25.0\n", "\n", "def constraint2(x):\n", " sum_eq = 40.0\n", " for i in range(4):\n", " sum_eq = sum_eq - x[i]**2\n", " return sum_eq\n", "\n", "# initial guesses\n", "n = 4\n", "x0 = np.zeros(n)\n", "x0[0] = 1.0\n", "x0[1] = 5.0\n", "x0[2] = 5.0\n", "x0[3] = 1.0\n", "\n", "# show initial objective\n", "print('Initial Objective: ' + str(objective(x0)))\n", "\n", "# optimize\n", "b = (1.0,5.0)\n", "bnds = (b, b, b, b)\n", "con1 = {'type': 'ineq', 'fun': constraint1} \n", "con2 = {'type': 'eq', 'fun': constraint2}\n", "cons = ([con1,con2])\n", "solution = minimize(objective,x0,method='SLSQP',\\\n", " bounds=bnds,constraints=cons)\n", "x = solution.x\n", "\n", "# show final objective\n", "print('Final Objective: ' + str(objective(x)))\n", "\n", "# print solution\n", "print('Solution')\n", "print('x1 = ' + str(x[0]))\n", "print('x2 = ' + str(x[1]))\n", "print('x3 = ' + str(x[2]))\n", "print('x4 = ' + str(x[3]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Use Python GEKKO\n", "\n", "See [GEKKO documentation](http://gekko.readthedocs.io/en/latest/overview.html) and [example problems](https://apmonitor.com/wiki/index.php/Main/GekkoPythonOptimization). GEKKO is a Python package developed in the [BYU PRISM Lab](https://apm.byu.edu/prism) by [Logan Beal](https://www.linkedin.com/in/logan-beal-2461ba57). Logan is supported by the National Science Foundation, [Grant #1547110](https://nsf.gov/awardsearch/showAward?AWD_ID=1547110), EAGER: Cyber-Manufacturing with Multi-echelon Control and Scheduling." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Final Objective: 17.0140171\n", "Solution\n", "x1: [1.0]\n", "x2: [4.743]\n", "x3: [3.82115]\n", "x4: [1.379408]\n" ] } ], "source": [ "from gekko import GEKKO\n", "\n", "# Initialize Model\n", "m = GEKKO()\n", "\n", "# initialize variables\n", "x1,x2,x3,x4 = [m.Var(lb=1, ub=5) for i in range(4)]\n", "\n", "# initial values\n", "x1.value = 1\n", "x2.value = 5\n", "x3.value = 5\n", "x4.value = 1\n", "\n", "# Equations\n", "m.Equation(x1*x2*x3*x4>=25)\n", "m.Equation(x1**2+x2**2+x3**2+x4**2==40)\n", "\n", "# Objective\n", "m.Obj(x1*x4*(x1+x2+x3)+x3)\n", "\n", "# Solve\n", "m.solve(disp=False)\n", "\n", "# show final objective\n", "print('Final Objective: ' + str(m.options.objfcnval))\n", "\n", "# print solution\n", "print('Solution')\n", "print('x1: ' + str(x1.value))\n", "print('x2: ' + str(x2.value))\n", "print('x3: ' + str(x3.value))\n", "print('x4: ' + str(x4.value))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" } }, "nbformat": 4, "nbformat_minor": 1 }