{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains course material from [CBE20255](https://jckantor.github.io/CBE20255)\n", "by Jeffrey Kantor (jeff at nd.edu); the content is available [on Github](https://github.com/jckantor/CBE20255.git).\n", "The text is released under the [CC-BY-NC-ND-4.0 license](https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode),\n", "and code is released under the [MIT license](https://opensource.org/licenses/MIT).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Jupyter Notebooks, Python, and Google Colaboratory](http://nbviewer.jupyter.org/github/jckantor/CBE20255/blob/master/notebooks/00.01-Getting-Started-with-Jupyter-Notebooks-and-Python.ipynb) | [Contents](toc.ipynb) | [Units, Quantities, and Engineering Calculations](http://nbviewer.jupyter.org/github/jckantor/CBE20255/blob/master/notebooks/01.00-Units-Quantities-and-Engineering-Calculations.ipynb) >

" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "_2f41lKN8h-2" }, "source": [ "# Solving Linear Equations with Simpy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "This notebook shows how to solve linear equations corresponding to material balances on chemical processes using the {ython symbolic algebra library [Sympy](http://sympy.org/en/index.html). The example is adapted with permission from [learnCheme.com](http://learncheme.ning.com/), a project at the University of Colorado funded by the National Science Foundation and the Shell Corporation." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "-Sh63cOr8h-4" }, "source": [ "## Problem Statement" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "colab_type": "code", "id": "NxcCYNjd8h-5", "outputId": "f55ae53a-c7db-482e-e8a5-93e25a4b4dd8" }, "outputs": [ { "data": { "image/jpeg": "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\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo(\"KrrZB5LvXF4\",560,315,start=0,end=144,rel=0)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "QIvjEFKI8h-_" }, "source": [ "Before going further, be sure you can solve a system of two (or three) linear equations in two (or three) unknowns with paper and pencil. Most of you will have seen these problems before in your math classes." ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "vuqzla188h_A" }, "source": [ "## Solving linear equations using Sympy\n", "\n", "Assuming you have mastered the solution of linear equations with paper and pencil, let's see how to find solutions using the python symbolic algebra library [Sympy](http://sympy.org/en/index.html).\n", "\n", "Sympy is an example of a Python 'library'. The first step in using the library is to import it into the current workspace. It is customary to import into the workspace with the namespace sym to avoid name clashes with variables and functions." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "RA8_VOok8h_G" }, "outputs": [], "source": [ "import sympy as sym" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "78x_O90H8h_J" }, "source": [ "The system of equations to be solved is given by\n", "\n", "\\begin{align*}\n", "n_1 + n_1 & = 100 \\\\\n", "0.7 n_1 + 0.2 n_2 & = 30\n", "\\end{align*}\n", "\n", "The next step is to introduces names for the unknown variables appearing in our problem. The Sympy function sym.var() constructs symbolic variables given a list of variable names." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "DsyWx80p8h_K", "outputId": "078b3094-721e-48ac-b9c9-5d88ccbf4edd" }, "outputs": [ { "data": { "text/plain": [ "[n1, n2]" ] }, "execution_count": 3, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "sym.var(['n1','n2'])" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "HBib10ed8h_N" }, "source": [ "The newly constructed symbolic variable are used to create symbolic equations. The sympy function sym.Eq() accepts two arguments, each a symbolic expression expressing the left and right hand sides of an equation. For this problem there are two equations to be solved simultaneously, so we construct both and store them in a python list." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "MF9QdHaq8h_P", "outputId": "3f3e0d8e-9956-4f76-8fe3-f15e2f0534cb" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[Eq(n1 + n2, 100), Eq(0.7*n1 + 0.2*n2, 30)]\n" ] } ], "source": [ "eqns = [\n", " sym.Eq(n1 + n2, 100),\n", " sym.Eq(0.7*n1 + 0.2*n2, 30)\n", "]\n", "print(eqns)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "YgPYzeby8h_R" }, "source": [ "The last step is solve the equations using sym.solve()." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "RTgF8g-88h_X", "outputId": "6bfdf592-1f15-4e32-c302-68a2c88f68e6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{n1: 20.0000000000000, n2: 80.0000000000000}\n" ] } ], "source": [ "soln = sym.solve(eqns)\n", "print(soln)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "upVWXBbf8h_b" }, "source": [ "Putting these steps together, we have a three-step procedure for solving systems of linear equations using Sympy." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 34 }, "colab_type": "code", "id": "4aoKcUcj8h_c", "outputId": "3f7cd897-a13b-4470-aff5-491549d520ad" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{n1: 20.0000000000000, n2: 80.0000000000000}\n" ] } ], "source": [ "# import sympy\n", "import sympy as sym\n", "\n", "# Step 1. Create symbolic variables.\n", "sym.var(['n1','n2'])\n", "\n", "# Step 2. Create a list of equations using the symbolic variables\n", "eqns = [\n", " sym.Eq(n1 + n2, 100),\n", " sym.Eq(0.7*n1 + 0.2*n2, 30)\n", "]\n", "\n", "# Step 3. Solve and display solution\n", "soln = sym.solve(eqns)\n", "print(soln)" ] }, { "cell_type": "markdown", "metadata": { "colab_type": "text", "id": "2hh-CaNg8h_f" }, "source": [ "## Exercise\n", "\n", "In the cell below, prepare an IPython solution to the second problem described in the screencast involving three linear equations. The problem description starts at the 2:22 mark in the screencast. You can use the example above as a template for your solution." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 336 }, "colab_type": "code", "id": "RQsrgjE28h_g", "outputId": "a7b62442-60e6-47a7-a3c5-2b1a32d39e86" }, "outputs": [ { "data": { "image/jpeg": "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\n", "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": { "tags": [] }, "output_type": "execute_result" } ], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo(\"KrrZB5LvXF4\",560,315,start=144,end=166,rel=0)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": {}, "colab_type": "code", "id": "Ir3vHyu08h_m" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Jupyter Notebooks, Python, and Google Colaboratory](http://nbviewer.jupyter.org/github/jckantor/CBE20255/blob/master/notebooks/00.01-Getting-Started-with-Jupyter-Notebooks-and-Python.ipynb) | [Contents](toc.ipynb) | [Units, Quantities, and Engineering Calculations](http://nbviewer.jupyter.org/github/jckantor/CBE20255/blob/master/notebooks/01.00-Units-Quantities-and-Engineering-Calculations.ipynb) >

" ] } ], "metadata": { "colab": { "name": "Solving_Linear_Equations_with_Sympy.ipynb", "provenance": [], "version": "0.3.2" }, "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }