diff --git a/18.06-PS1.ipynb b/18.06-PS1.ipynb
new file mode 100644
index 00000000..053c1d1d
--- /dev/null
+++ b/18.06-PS1.ipynb
@@ -0,0 +1,1606 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": false,
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Removing Homework (unregistered)\n",
+ "INFO: Cloning Homework from git://github.com/shashi/Homework.jl.git\n",
+ "INFO: Computing changes...\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: No packages to install, update or remove\n",
+ "WARNING: Interact requires IJulia >= v0.1.3 to work properly.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "WARNING: This version of the GnuTLS library (3.2.11) is deprecated\n",
+ "and contains known security vulnerabilities. Please upgrade to a\n",
+ "more recent version.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Warning: Method definition writemime(IO,MIME{symbol(\"text/html\")},AbstractDataFrame) in module DataFrames at /opt/julia_packages/.julia/v0.3/DataFrames/src/abstractdataframe/io.jl:135 overwritten in module Homework at /home/juser/.julia/v0.3/Homework/src/coloredtable.jl:10.\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Run this (ugly, sorry) cell by hitting . Ignore the warnings, they are harmless.\n",
+ "\n",
+ "display(MIME(\"text/html\"), \"\"\"\n",
+ "\"\"\")\n",
+ "\n",
+ "# Run this cell. Ignore the warning messages, they are harmless\n",
+ "\n",
+ "Pkg.rm(\"Homework\")\n",
+ "Pkg.clone(\"git://github.com/shashi/Homework.jl.git\")\n",
+ "\n",
+ "using Homework\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "# Run this cell to see your scores, your score will appear once you have answered at least one of the problems\n",
+ "# Please try again if it does not work the first time\n",
+ "Homework.progress(true)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 1. Vectors"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(a) (1 pt) SUM OF VECTORS:** What is the sum V of the twelve unit vectors that go from the center of a clock to the hours 1:00, 2:00, ..., 12:00? Write down your answer as a pair of coordinates, correct up to .01."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 2,
+ "max_score": 1,
+ "precision": 2,
+ "question": "1a"
+ },
+ "outputs": [],
+ "source": [
+ "V=[ ? , ? ]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ "**(b) (1 pt) (SUBTRACTING VECTORS)** In the sum of vectors above, if the 2:00 vector is removed, you can show that the remaining vectors add to 8:00. This is because subtracting a vector is the same as adding \n",
+ " ?
\n",
+ "Write your answer as a number from 1 through 4 below:
\n",
+ "1. An Opposite Vector\n",
+ "2. An Orthogonal Vector\n",
+ "3. A Parallel Vector\n",
+ "4. Zero"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 2,
+ "max_score": 1,
+ "question": "1b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(c) (2 pts) (COMPONENTS)** What are the components of the 2:00 vector, v=cos θ,sin θ? (write the answer correct to 2 decimal places)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 2,
+ "question": "1c"
+ },
+ "outputs": [],
+ "source": [
+ "v=[ ? , ? ]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 2. Elimination sometimes breaks down"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(2 pts)** We would like you to use elimination to solve the following linear system of two equations:\n",
+ "\n",
+ "$ax + 3y = −3$\n",
+ "\n",
+ "$4x + 6y = 6$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For which number $a$ does elimination break down permanently?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 1,
+ "question": "2a"
+ },
+ "outputs": [],
+ "source": [
+ "a = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For which number $a$ does elimination break down temporarily?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 1,
+ "question": "2b"
+ },
+ "outputs": [],
+ "source": [
+ "a = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(2 pts) SOLVING THE NON-SINGULAR SYSTEM**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Fix the temporary breakdown above by a row exchange and then solve.\n",
+ "\n",
+ "Enter the value of $x$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 1,
+ "question": "2c"
+ },
+ "outputs": [],
+ "source": [
+ "x = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Enter the value of $y$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 1,
+ "question": "2d"
+ },
+ "outputs": [],
+ "source": [
+ "y = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 3. Linear Combinations"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(2 pts)** The column vectors\n",
+ "$u=(1,1,2)^T,v=(1,2,3)^T,w=(3,5,8)^T$\n",
+ "are in a plane because w is a linear combination of u and v.
If w=au+bv:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Enter the numerical value of $a$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 3,
+ "max_score": 1,
+ "question": "3a"
+ },
+ "outputs": [],
+ "source": [
+ "a = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Enter the numerical value of $b$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 2,
+ "max_score": 1,
+ "question": "3b"
+ },
+ "outputs": [],
+ "source": [
+ "b = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(2 pts) LINEAR COMBINATIONS 2**\n",
+ "\n",
+ "The combination above is unique. However, there is more than one combination of u,v,w that produces z=(0,0,0)T.
Let us find two of them. First, if $2u+cv+dw=(0,0,0)$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Enter the numerical value of $c$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 2,
+ "max_score": 1,
+ "question": "3c"
+ },
+ "outputs": [],
+ "source": [
+ "c = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Enter the numerical value of $d$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 2,
+ "max_score": 1,
+ "question": "3d"
+ },
+ "outputs": [],
+ "source": [
+ "d = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(1 pt) LINEAR COMBINATIONS 3**\n",
+ "Second, $u+cv+dw=(0,0,0)$"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Enter the numerical value of $c$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 0.5,
+ "question": "3e"
+ },
+ "outputs": [],
+ "source": [
+ "c = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Enter the numerical value of $d$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 0.5,
+ "question": "3f"
+ },
+ "outputs": [],
+ "source": [
+ "d = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "At this point you should note that there are infinite ways to write any vector on that plane as a linear combination of $u,v,w$.
\n",
+ "However, there is no way to do that for any vector outside the plane."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(2 pts) LINEAR COMBINATIONS 4**\n",
+ "\n",
+ "Think about the vector $b=(1,−1,e)^T$. What is the only possible number e that gives a vector on the plane?
\n",
+ "Enter the numercal value of $e$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 2,
+ "question": "3g"
+ },
+ "outputs": [],
+ "source": [
+ "e = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 4. ORTHOGONAL VECTORS "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(2 pts)** Find two vectors $v$ and $w$ that are perpendicular to $(1,0,1)$ and to each other.
Enter your answer in the form $[a,b,c]$ (note the square brackets)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 1,
+ "question": "4a"
+ },
+ "outputs": [],
+ "source": [
+ "v=[?, ? , ?]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 1,
+ "question": "4b"
+ },
+ "outputs": [],
+ "source": [
+ "w=[?, ?, ?]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(1 pt)A TASTE OF PROJECTION **\n",
+ "With $v=\\begin{pmatrix} 1, 1\\end{pmatrix}$ and $w=(1,5)$, choose a number $c$ so that $w−cv$ is perpendicular to $v$.\n",
+ "\n",
+ "Enter the numerical value of $c$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 1,
+ "question": "4c"
+ },
+ "outputs": [],
+ "source": [
+ "c = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 5: (Julia) Defining a Variable"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(1 pt)** In Julia you simply assign a variable to x by simply typing the letter x and specifying what it is equal to. Ending the assignment with a semicolon suppresses printing. In the IJulia notebook, you execute a Julia command by typing shift + enter.
\n",
+ "\n",
+ "Write Julia code that assigns 1234 to the variable x. See what happens if you follow with and without a semicolon."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 2,
+ "question": "5"
+ },
+ "outputs": [],
+ "source": [
+ "x = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 6: (Julia) Define a Row Vector"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(1 pt)** Julia, somewhat like python, and unlike MATLAB has \n",
+ "one dimensional vectors, 1xn matrices, and nx1 matrices\n",
+ "which are three different things. If one needs a row vector\n",
+ "in Julia, create a 1xn matrix. \n",
+ "\n",
+ "Why do Python and Julia do it this way? Answer: There are many data science applications where one dimensional structures are extremely important. (see next problem to create a one dimensional structure)\n",
+ "\n",
+ "A 1xn matrix is created by placing elements between square brackets, e.g. [1 1 2 4 6 3]\n",
+ "\n",
+ "Write Julia code that creates the vector y with values 3, 5, 2 and 1"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 2,
+ "question": "6"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 7: (Julia) Define a One Column Matrix (there are no column vectors!) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(1 pt)** To create a one dimensional vector in Julia\n",
+ "one uses commas as in\n",
+ " [1, 1, 2].\n",
+ "The result is one dimensional and often prints in column format.\n",
+ "Write Julia code that creates the 5 vector\n",
+ "\n",
+ "\n",
+ " 1 |
\n",
+ " 2 |
\n",
+ " -1 |
\n",
+ " 0 |
\n",
+ " 0 |
\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 2,
+ "question": "7"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 8: (Julia) Define a Matrix"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "(1 pt) In Julia a matrix can be written
\n",
+ "```\n",
+ " [1 2 3\n",
+ " 4 5 6\n",
+ " 7 8 9] \n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Write Julia code that creates the 2x2 matrix A= \n",
+ " \n",
+ " 8 | 4 |
\n",
+ " 2 | 3 |
\n",
+ "
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 5,
+ "question": "8"
+ },
+ "outputs": [],
+ "source": [
+ "A = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 9: (Julia) Solve a Linear System"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(1 pt)** Solve Ax=b, where\n",
+ "\n",
+ "```\n",
+ "A=\n",
+ " [ 2 1 -1\n",
+ " -1 2 -1\n",
+ " 0 -1 1]\n",
+ "``` \n",
+ " and\n",
+ "```\n",
+ " b=[1,2,1]\n",
+ "```\n",
+ " To solve for x, use the backlash command `x=A\\b`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "# You need to run this cell to create variables A and b before answering\n",
+ "A=\n",
+ " [ 2 1 -1\n",
+ " -1 2 -1\n",
+ " 0 -1 1]\n",
+ "\n",
+ "b=[1,2,1];"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 5,
+ "question": "9"
+ },
+ "outputs": [],
+ "source": [
+ "# Write the solution here\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 10: (Julia) Plot a Line and Interact with it"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(1 pt)** Plot the linear function $u(x) = 5 + 3x on 0 ≤ x ≤ 8$\n",
+ "\n",
+ "Julia has a number of packages for plotting because different people enjoy plotting in different ways. We will use the *PyPlot* package from python for plotting, and the julia *Interact* package for interacting. Some of these commands may not make complete sense yet, but you\n",
+ "can use these \"magic incantations\" for many purposes without needing to understand how they work.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Loading help data...\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Execute this cell\n",
+ "using PyPlot # takes a little time but only needs to be executed once\n",
+ "using Interact # adds the fun interactive feature"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Slider{Float64}([Input{Float64}] 4.0,\"x\",4.0,0.0:0.5:8.0)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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Oy0pPnkNp6Sf1aFDByDsjN10003F8h6zZs3iqaee4s4776R+/fq5Pic/Nw/92BXLbdmenx7fX1etsH68pvOXaj733HOpVKkSAJdffjm//vWvf/b5P4b6/71mtDT48Wah/HQ3Ie9/VlWqVClEdZKiZodT0n599dVX3HrrrRx22GFs3bqVa665hvnz5+e4fhMKdw3nkiVLCIKAESNG7HecfsABBwCQlpbGqaee+rPnPuGEE5gzZw7/+te/aNq0abbH1q5dy86dO6lZs2aexuk/rv35v3eUw/7HvIcffjhAjjvNfyoIAq688kq2bdvG4YcfzrPPPkvXrl0566yz9vuaH893xBFHZDse9TWc69at46233sr3zUIAFStW5Oijj2bt2rV89913OUL3V199BcDxxx9fZPVKKnkGTkm52r17N126dCE9PZ0333yTmTNncu+993LzzTfz1FNP5Xh+Ya7hrF+/PldffXWunbuXX36Z7du373v8x7Hyz2nTpg1z5sxh2rRpOQLn1KlTATj77LN/8TwQ3kAF8PXXX+d4bNGiRbm+5sdx9+rVq/d73oceeoh33nmHHj16cNttt9GkSRO6detGWlrafkfx3377LQcddBDHHHNMtuNRX8P5/PPP5/tmoZ9q06YNL774ItOmTctxyUZ+/7wklVLRLQEqqTTr379/EIvFgjvuuCMIgiDIzMwMzjrrrCAWiwWvvfZaidVx7LHH7nfh9w0bNgRffPFFsGHDhmzHV6xYERx88MFBtWrVsi0YvmnTpqBOnTpBUlJSMG/evDy9/4IFC4JYLBb83//9X5CRkbHv+Ndffx3UrFkziMViQe/evbO95v333w9isVgwcODAXM85d+7coHz58sEJJ5wQ7NixIwiCIHjmmWeCWCwWtG/fPtfXbNmyJYjFYkHLli3zVHdh5Gfh96ysrKBu3bpBUlJSkJqa+rPPXbt2bfDFF18EW7duzXZ8zpw5QSwWC+rWrRts3rx53/EVK1YEVatWDSpUqJBtAX9JZY+BU1IOkydPDmKxWHDmmWdmC3rffPNNUK1ateCwww4rsZ1fjj322CAWi+UaOH8MRnfddVeOxx5//PEgFosFhx9+eNCvX79g4MCBQY0aNYJYLBbcdttt+aqhdevWQSwWC5KTk4NBgwYF3bt3D6pUqRJ06dIl18CZnp4eVKpUKTj99NNznGvz5s1B7dq1gwoVKgRpaWnZHrv88suDWCwWjBkzJsfrpk6dGsRiseCee+7JV+15df/99wc9e/YMevbsGZx22mn7/vx/PDZ27NhcX/fee+8FsVgs15/1f/Xs2TOIxWLB+PHjczw2aNCgIBaLBTVr1gwGDhwY3HDDDUG1atWCpKSk4Mknnyz0zycpWnkOnEuWLAkuvPDCoFatWkGFChWCqlWrBs2aNQteeumlHM9dvHhx0KZNm+DQQw8NqlSpEnTs2DFYvnx5kRYuqXisWrUqqFq1alC1atVct2V86623glgsFjRr1izYu3dvsdfzc1tb3nXXXUFSUlIwatSoXF/79ttvBy1btgwqVaoUHHrooUGTJk2CP//5z/muYevWrcF1110XVK9ePTjooIOC+vXrB3/605+ClStX5ho4gyAIrr322iAWiwXLli3Ldrxjx45BUlJS8Pjjj+f6Pscdd1xw8MEH5+gW9uzZMyhfvnywevXqfNefF61atQpisViQlJSU7evHY7n9jEEQBF26dAmSkpKCP/7xj7/4Hr169QqSkpKCF154IdfHx48fHzRu3DioWLFi8Ktf/Spo1apV8Le//a1QP5ek0iEWBHm79XPWrFm8/PLLtGjRgmOOOYbt27fzl7/8hZdffpm77757344ZS5cupUmTJiQnJzN06FDS09MZMWIEmzdvJi0tbd/F9JIUz9LS0khOTmbkyJGMHDmyUOfauXMnv/71r2ndujVvvfVWEVUoSSUnz4Fzf5o1a8aaNWv2XbDeuXNnZs2axbJlyzj00EOB8GL7evXqcfPNN/PAAw8UvmpJKgMuv/xyZs2axcqVKznkkEMKfJ7Ro0czZMgQUlNTOe2004qwQkkqGYVeh7NatWqULx/e7J6RkcGUKVO47LLL9oVNgFq1atG6dWveeOONwr6dJJUZDzzwAFu3buXJJ58s8Dl27tzJ6NGj6dGjh2FTUpmV72WRgiAgMzOTzZs3M2nSJN555x0ee+wxAJYtW8auXbtyXSOvfv36vPvuuzn2AJakeFWnTh12795dqHMccsghfPfdd0VUkSRFI9+Bs2/fvvt2lChXrhyjR4+mb9++AGzcuBHIfTu3qlWrEgQBmzdv5sgjjyxMzZIkSSpD8h04hw0bxrXXXsu6dev461//yi233MKuXbsYMmRIoQpZu3Yta9euLdQ5JEmSVHyOOuoojjrqqHy/Lt+Bs2bNmtSsWROAtm3bAjB8+HCuvvrqfTuA5Lad26ZNm4jFYvt27fiptWvXcvrpp7NmzZr8liNJkqQScvTRR7No0aJ8h85Cb23ZuHFjnnnmGZYvX05ycjIVKlTgk08+yfG8Tz/9lHr16uV6/ebatWtZs2YNL730EieeeGJhS0ooAwcOZMyYMVGXUab4mRWMn1v++ZkVjJ9b/vmZFYyfW/588cUXdO/enbVr15Z84JwxYwblypWjTp06lC9fnosvvpjJkyfz4IMPZlsWacaMGQwaNOhnz3XiiSeSnJxc2JISSpUqVfzM8snPrGD83PLPz6xg/Nzyz8+sYPzcSk6eA+e1115L5cqVady4MUceeSQbNmxg0qRJvPrqqwwePHjfOH3UqFE0btyYiy66KNvC79WrV//FwClJkqT4k+fA2bx5c55//nleeOEFtmzZwqGHHkqDBg146aWX6Nat277nnXDCCcycOZMhQ4bQqVMnypcvT5s2bRg9evS+UCpJkqTEkefA2atXL3r16pWn5yYnJ/Puu+8WtCZJkiTFkULvNKRopaSkRF1CmeNnVjB+bvnnZ1Ywfm7552dWMH5uJafQe6kXhdTUVBo1asTixYu9eFeSJKkUKkxes8MpSZKkYmXglCRJUrEycEqSJKlYGTglSZJUrAyckiRJKlYGTkmSJBUrA6ckSZKKlYFTkiRJxcrAKUmSpGJl4JQkSVKxMnBKkiSpWBk4JUmS9LP27oXHHiv468sXXSmSJEmKN6tWQUoKLFhQ8HPY4ZQkSVKu3noLGjaENWvguecKfh4DpyRJkrLZvRsGDoRLL4WWLWHJEqhfv+DnM3BKkiRpn2XL4Mwz4emnw+s2J0+Gww4r3Dm9hlOSJEkAvPoqXHMNHH44zJkDjRoVzXntcEqSJCW49HTo2xe6dIG2bSE1tejCJtjhlCRJSmj/+hd07hz+89lnww5nLFa072GHU5IkKUG99FLYydy9O1z26Npriz5sgoFTkiQp4ezYAVddBT16QMeOsGgRnHpq8b2fI3VJkqQE8tln4Qh95UoYPx569iz+97TDKUmSlACCIFy8vXFjSEqChQtLJmyCgVOSJCnubdsG3btDnz7hP+fPh5NOKrn3d6QuSZIUx9LSwhH62rUwYUK4L3pJs8MpSZIUh4IAnnoKmjaFihXDtTWjCJtg4JQkSYo7W7aEXc1+/cJ1NefOhXr1oqvHkbokSVIcWbgw3DFo0yZ47TW47LKoK7LDKUmSFBeCAB55BM48E444ApYsKR1hEwyckiRJZd6mTXDJJXDLLXDTTfDhh/Cb30Rd1X85UpckSSrDZs8ObwbasQPefhsuuijqinKywylJklQGZWXBAw9Ay5ZQq1a4/FFpDJtg4JQkSSpz1q2DCy+EO+6AIUNg5kyoWTPqqvbPkbokSVIZMnMmdOsGGRkwbRqcd17UFf0yO5ySJEllQGYmjBoFbdrAb38LH39cNsIm2OGUJEkq9dauhSuugFmzYORIGDYMypWLuqq8M3BKkiSVYv/4B3TvDuXLw/Tp0KpV1BXlnyN1SZKkUigjI+xktm0LycnhXehlMWyCHU5JkqRS55tvwrU1582D++6DwYMhqQy3CQ2ckiRJpciUKdCzJ1SsGF6zeeaZUVdUeGU4K0uSJMWPPXtg0CC4+OIwZC5ZEh9hE+xwSpIkRW7FCujaNQyZjzwCAwZALBZ1VUXHwClJkhShyZPhqqugatVwX/TGjaOuqOg5UpckSYrArl1w441w2WVwzjmQmhqfYRPscEqSJJW4r76CLl3gs8/gySehb9/4GqH/LzuckiRJJWjixHBdze3bYf58uOGG+A6bYOCUJEkqETt3wrXXQrdu0L49LF4MDRpEXVXJcKQuSZJUzL74Ajp3hmXLYOzY8CaheO9q/pQdTkmSpGL0wgtw+umQlQULFsDVVydW2AQDpyRJUrHYvj3cMahXr/AGoQUL4JRToq4qGo7UJUmSitgnn4Qj9NWr4cUXoXv3qCuKlh1OSZKkIhIE8Oyz0KQJHHRQeGNQoodNMHBKkiQViR9+gJQUuP566N0b5s2DE06IuqrSwZG6JElSIS1eHF6nuX49vPJKOE7Xf9nhlCRJKqAggMcfh+bNoUqVcHtKw2ZOBk5JkqQC2LwZOnaEm24KdwuaPRvq1Im6qtLJkbokSVI+zZsHXbvC1q3w5ptwySVRV1S62eGUJEnKo6wsGD0aWrSAo4+GtDTDZl4YOCVJkvJgwwa4+GK47Ta45RaYNQuOPTbqqsoGR+qSJEm/4IMPoFs32L0b/v53uOCCqCsqW+xwSpIk7UdmJtxzD7RuHd4QlJZm2CwIO5ySJEm5+P77cJeg6dPhzjthxAgob3IqED82SZKk/zF9OlxxRfj9u+9CmzbR1lPWOVKXJEn6j4yMsJN57rlQvz58/LFhsyjY4ZQkSQK+/Ta8Meijj+Duu2HoUChXLuqq4oOBU5IkJbypU+HKK+Ggg2DmzHCdTRUdR+qSJClh7d0LQ4bAhRdCkybhXeiGzaJnh1OSJCWkVavC7SkXLYKHHgoXc0+yFVcsDJySJCnhvPUW9O4Nv/oVfPghNG0adUXxzRwvSZISxu7dMHAgXHoptGwJS5YYNkuCHU5JkpQQli2DLl3g00/hscegf3+IxaKuKjEYOCVJUtx79VW45ho44giYMwcaNYq6osTiSF2SJMWt9HTo2zfsbF5wAaSmGjajYIdTkiTFpX/9Czp3hi+/hGefDTucjtCjYYdTkiTFnZdeCjuZu3fD/Plw7bWGzSgZOCVJUtzYsQOuugp69IDLLgvX2Dz11KirkiN1SZIUFz77LByhr1wJ48dDz55RV6Qf2eGUJEllWhDAc89B48bhTkGLFhk2SxsDpyRJKrO2bYPu3aFPn/CfCxbAiSdGXZX+lyN1SZJUJqWlhSP0tWthwgRISYm6Iu2PHU5JklSmBAE89VS4JeWhh4Zraxo2S7c8B87p06fTs2dPjj/+eCpWrEiNGjW49NJLSU1Nzfa8Xr16kZSUlOPrpJNOKvLiJUlSYtmyJexq9usXrqs5Zw7Uqxd1VfoleR6pP/vss6xfv56bb76Zk08+mfXr1/Pwww/TtGlT3nnnHVq3br3vuRUqVGDGjBnZXl+hQoWiq1qSJCWchQvDHYM2bYLXX4eOHaOuSHmV58D5xBNPUL169WzH2rZtS926dbnvvvuyBc5y5crRpEmToqtSkiQlrCCAMWNgyBBo2BCmT4ff/CbqqpQfeR6p/2/YBKhYsSInnngiq1evznY8CILCVyZJkhLexo1wySVwyy1w003w4YeGzbKoUDcNbd26ldTUVE4++eRsx9PT0znqqKMoX748NWvW5MYbb2Tz5s2FKlSSJCWW2bPDjubs2fD22zB6NBx4YNRVqSAKtSxSv379SE9PZ9iwYfuONWjQgIYNG3LKKacAMHPmTB555BGmT5/OwoULqVixYuEqliRJcS0rCx58EO68E5o1C5c8qlkz6qpUGAUOnMOHD2fChAk88cQTNGzYcN/xgQMHZntemzZtaNiwIZ06dWLs2LEMGDCg4NVKkqS4tm5duA/6u+/C7bfDqFFQ3lXDy7wC/RGOGjWKe++9l/vuu48bbrjhF5/foUMHKlasyPz583/2eQMHDqRKlSrZjqWkpJDi4lqSJMW9mTOhWzfIyIBp0+C886KuKHFNnDiRiRMnZju2ZcuWAp8v34Fz1KhR+76GDh2ap9cEQUBWVtYvPm/MmDEkJyfntyRJklSGZWbCPffA734HLVvCX/4CRx0VdVWJLbeGX2pqKo0aNSrQ+fIVOO+++25GjRrF8OHDGT58eJ5f99prr5Genk6zZs3yXaAkSYpfa9fCFVfArFkwciQMGwblykVdlYpangPnww8/zMiRI2nbti0XXngh8+bNy/Z406ZNWbVqFd27d6dbt24cd9xxBEHArFmzePTRRznllFPo06dPkf8AkiSpbPrHP6B79/AazenToVWrqCtScclz4JwyZQqxWIxp06Yxbdq0bI/FYjEyMzOpXLky1atX56GHHuL7778nMzOT2rVrM2DAAO644w53G5IkSWRkwIgRcP/9cP758Oc/Qy7LfSuO5Dlw/u9WlbmpUqUKr7/+eqEKkiRJ8eubbyAlBebNgwcegNtug6RCrQqussCFBiRJUomYMgV69oSKFeGDD6B586grUknxdwpJklSs9uyBQYPg4ovhzDNhyRLDZqKxwylJkorNihXQtWsYMh95BAYMgFgs6qpU0gyckiSpWEyeDFddBVWrhvuhN24cdUWKiiN1SZJUpHbtghtvhMsug3PPhdRUw2ais8MpSZKKzFdfQZcu8Pnn8NRTcP31jtBlh1OSJBWRiRMhORm2bw+XPerb17CpkIFTkiQVys6dcM010K0btG8PixdDgwZRV6XSxJG6JEkqsM8/D0foy5bBc89B7952NZWTHU5JklQg48eHNwNlZcHCheEd6YZN5cbAKUmS8mX7drjyyrCb2bUrLFgAJ58cdVUqzRypS5KkPPvkE+jcGVavhhdfhO7do65IZYEdTkmS9IuCAJ59Fpo0gYMOCm8MMmwqrwyckiTpZ/3wA6SkhGtqXnVVuOTRCSdEXZXKEkfqkiRpvxYvDu9CX78eXnklHKdL+WWHU5Ik5RAE8Nhj0KwZVKkSbk9p2FRBGTglSVI2mzdDx44wYAD06wezZ0OdOlFXpbLMkbokSdpn3rxwqaMffoA334RLLom6IsUDO5ySJImsLHjoIWjRAo4+GpYsMWyq6Bg4JUlKcBs2wMUXw+DBMGgQzJoFxx4bdVWKJ47UJUlKYB98EC55tGcPTJ0KbdtGXZHikR1OSZISUGYm3HMPtG4NdetCWpphU8XHDqckSQnmu++gRw+YPh2GDw+/ypsIVIz8n5ckSQlk+nS44orw+3ffhTZtoq1HicGRuiRJCSAjA0aMgHPPhfr14eOPDZsqOXY4JUmKc99+C926wUcfwd13w+23Q5ItJ5UgA6ckSXHs73+Hnj3hoINg5sxwnU2ppPn7jSRJcWjv3nBdzXbtoEmT8C50w6aiYodTkqQ4s2pVuD3lokUwejTcfLMjdEXLwClJUhx5803o3RsqV4YPP4SmTaOuSHKkLklSXNi9GwYOhA4doFWrcC90w6ZKCzuckiSVccuWQZcu8Omn8Nhj0L8/xGJRVyX9l4FTkqQy7NVXoU8fqF4d5syBRo2irkjKyZG6JEllUHo69O0bdjYvvBBSUw2bKr3scEqSVMb861/QuTN8+SU8+yxcc40jdJVudjglSSpDXnwx7GTu2QPz58O11xo2VfoZOCVJKgN27AiXO7rySrjsMli4EE49NeqqpLxxpC5JUin3z3+GI/RVq2D8+HCrSqksscMpSVIpFQQwdiw0bgzlyoU7Bxk2VRYZOCVJKoW2bYPu3cMbgnr0gAUL4MQTo65KKhhH6pIklTJLloTLHa1dCxMmQEpK1BVJhWOHU5KkUiII4Kmnwi0pDz00XFvTsKl4YOCUJKkU2LIFLr8c+vWD666DuXOhXr2oq5KKhiN1SZIitmBBOELfvBlefx06doy6Iqlo2eGUJCkiQQCPPAJnnRXuhb5kiWFT8cnAKUlSBDZuhPbt4ZZb4Kab4MMP4Te/iboqqXg4UpckqYTNng1du8LOnfD223DRRVFXJBUvO5ySJJWQrCy4/35o2RJq14aPPzZsKjEYOCVJKgHr1sEFF8CwYTBkCMyYATVqRF2VVDIcqUuSVMxmzoRu3SAzE6ZNg/POi7oiqWTZ4ZQkqZhkZsKoUdCmDfz2t5CWZthUYrLDKUlSMVizJtwLfdYsGDkyHKWXKxd1VVI0DJySJBWxf/wjDJvly8P06dCqVdQVSdFypC5JUhHJyIA77oDzz4dGjcIRumFTssMpSVKR+OYbSEmBefPggQfgttsgybaOBBg4JUkqtLffhl69oGJF+OADaN486oqk0sXfvSRJKqA9e2DQoHCLyrPOCkfohk0pJzuckiQVwIoV4faUS5bAI4/AgAEQi0VdlVQ6GTglScqn11+Hq6+GqlXDfdEbN466Iql0c6QuSVIe7doF/ftDp05w7rlhd9OwKf0yO5ySJOXBV19Bly7w+efw1FNw/fWO0KW8ssMpSdIvmDgRkpNh+/Zw2aO+fQ2bUn4YOCVJ2o+dO+Gaa6BbN7jkEli8GBo0iLoqqexxpC5JUi4+/xw6d4bly+G556DxTKQhAAAgAElEQVR3b7uaUkHZ4ZQk6SeCAMaPD28GCgJYuBCuusqwKRWGgVOSpP/Yvh169gy7mV27hmHz5JOjrkoq+xypS5IEfPJJOEJfvRpefBG6d4+6Iil+2OGUJCW0IIBnn4UmTeDgg8MbgwybUtEycEqSEtYPP4Sj8+uvD6/TnDcPTjgh6qqk+ONIXZKUkBYvDhdyX78eXn0VLr886oqk+GWHU5KUUIIAHnsMmjWDww4Lt6c0bErFy8ApSUoYmzZBx44wYAD06wcffQTHHRd1VVL8c6QuSUoI8+aFI/Rt2+Ctt6B9+6grkhKHHU5JUlzLyoKHHoIWLeCYYyAtzbAplTQDpyQpbq1fDxddBIMHw6BBMGsW1KoVdVVS4nGkLkmKSx98ACkpsGcPTJ0KbdtGXZGUuOxwSpLiSmYm3HMPtG4NdeuGI3TDphQtO5ySpLjx3XfhLkHvvw/Dh4df5f0vnRQ5/28oSYoL770Xhs1YDN59F9q0iboiST9ypC5JKtMyMsJO5nnnQf364QjdsCmVLnY4JUll1rffQrdu4QLu99wDQ4dCkq0UqdQxcEqSyqS//x2uvBIOPhhmzgzX2ZRUOvl7oCSpTNm7N1xXs107aNo0HKEbNqXSLc+Bc/r06fTs2ZPjjz+eihUrUqNGDS699FJSU1NzPDc1NZVzzjmHSpUqcdhhh3HZZZexYsWKIi1ckpR4Vq2C//s/eOQRGD0a/vpXOPzwqKuS9EvyHDifffZZvv76a26++WamTp3Ko48+yrp162jatCkzZszY97ylS5fSqlUrMjIymDRpEuPGjePLL7+kRYsWbNiwoVh+CElS/HvzTWjQANauhQ8/DHcO8npNqWzI8zWcTzzxBNWrV892rG3bttStW5f77ruP1q1bAzBixAgqVKjAlClTOPTQQwFo1KgR9erVY/To0TzwwANFWL4kKd7t3g1DhsCjj0KHDvDcc3DYYVFXJSk/8vy74f+GTYCKFSty4oknsnr1agAyMjKYMmUKl1122b6wCVCrVi1at27NG2+8UQQlS5ISxbJlcOaZ8PTT8Pjj8Prrhk2pLCrUMGLr1q2kpqZy8sknA7Bs2TJ27drFqaeemuO59evX59///jd79uwpzFtKkhLEq69Cw4awZQvMmQP9+4eLuksqewoVOPv160d6ejrDhg0DYOPGjQBUrVo1x3OrVq1KEARs3ry5MG8pSYpz6elw/fXQpQtceCGkpkKjRlFXJakwCrwO5/Dhw5kwYQJPPPEEDRs2LMqaJEkJaunSMGh++SX88Y/Qp49dTSkeFChwjho1invvvZf77ruPG264Yd/xatWqAbBp06Ycr9m0aROxWIzDfubim4EDB1KlSpVsx1JSUkhJSSlImZKkMuTFF6FvX6hZExYsCLeplBSNiRMnMnHixGzHtmzZUuDz5Ttwjho1at/X0KFDsz1Wp04dKlSowCeffJLjdZ9++in16tXjwAMP3O+5x4wZQ3Jycn5LkiSVYTt2hNdnjh8PPXvCE0/AT+47lRSB3Bp+qampNCrg9S35uobz7rvvZtSoUQwfPpzhw4fneLx8+fJcfPHFTJ48me3bt+87/vXXXzNjxgw6duxYoCIlSfHpn/+Exo3DG4TGjw+/DJtS/Mlzh/Phhx9m5MiRtG3blgsvvJB58+Zle7xp06ZA2AFt3LgxF110EUOHDiU9PZ0RI0ZQvXp1Bg0aVLTVS5LKpCAI19O88UaoWxcWLYITT4y6KknFJc+Bc8qUKcRiMaZNm8a0adOyPRaLxcjMzATghBNOYObMmQwZMoROnTpRvnx52rRpw+jRo/dd4ylJSlzbtoV3oU+YANdeC2PGQIUKUVclqTjlOXD+dPvKX5KcnMy7775boIIkSfFryRLo3Bm++w4mToSuXaOuSFJJcBdaSVKxCwJ48klo2hQqVQrX1jRsSonDwClJKlZbtsDll4d3ol93HcydC/XqRV2VpJJU4IXfJUn6JQsWhAu5b9kS7oPuYiVSYrLDKUkqckEAf/gDnHkmVK8eXrtp2JQSl4FTklSkNm6E9u1h0CAYOBA+/BBq1466KklRcqQuSSoys2eHNwOlp8OUKdCuXdQVSSoN7HBKkgotKwvuvx9atgy7mWlphk1J/2XglCQVyrp1cMEFMGwYDB0KM2ZAjRpRVyWpNHGkLkkqsBkzoFu3sMP5zjtw7rlRVySpNLLDKUnKt8xMGDUKzjkHTjopHKEbNiXtjx1OSVK+rFkDV1wBH3wAI0eGo/Ry5aKuSlJpZuCUJOXZO+9Ajx5QvjxMnw6tWkVdkaSywJG6JOkXZWTA7bdD27bQqBF8/LFhU1Le2eGUJP2sb76BlBSYNw9+/3u49VZIsl0hKR8MnJKk/Xr7bejVCypWDK/ZbN486ooklUX+jipJymHPnnBryvbt4ayzwrvQDZuSCsoOpyQpmxUroEuXMGQ+8ggMGACxWNRVSSrLDJySpH1efx2uvhqqVg33RW/cOOqKJMUDR+qSJHbtgv79oVOncAH3JUsMm5KKjh1OSUpwX30FnTvDF1/AU0/B9dc7QpdUtOxwSlICmzABkpNh585w2aO+fQ2bkoqegVOSEtDOndCnT7hF5SWXwKJF0KBB1FVJileO1CUpwXz+eThCX74cxo0L19m0qympONnhlKQEEQTw/PNw+unh9wsXQu/ehk1Jxc/AKUkJYPt26NkTrroq3KZy4UI4+eSoq5KUKBypS1Kc+/jjcCH31avhxRehe/eoK5KUaOxwSlKcCgJ49lk44ww4+GBITTVsSoqGgVOS4tDWrdC1a7im5tVXh0seHX981FVJSlSO1CUpzixaFI7QN2yAV1+Fyy+PuiJJic4OpyTFiSCAxx6D5s3DvdCXLDFsSiodDJySFAc2bYIOHWDAAOjXD2bPhuOOi7oqSQo5UpekMm7u3PB6zW3b4K23oH37qCuSpOzscEpSGZWVBQ8+CC1awDHHQFqaYVNS6WTglKQyaP16uOgiGDIEbr0VZs2CWrWirkqScudIXZLKmA8+CHcL2rMHpk6Ftm2jrkiSfp4dTkkqIzIz4Z57oHVrqFcv3EHIsCmpLLDDKUllwHffhbsEvf8+DB8efpX3b3BJZYR/XUlSKffee2HYjMXC788+O+qKJCl/HKlLUimVkRF2Ms87D049NbwL3bApqSyywylJpdDq1dCtW7iA+z33wNChkGSLQFIZZeCUpFLm73+HK6+Egw+GmTPDdTYlqSzz92VJKiX27oXBg6FdO2jaNByhGzYlxQM7nJJUCqxaFW5PuWgRjB4NN9/sCF1S/DBwSlLE3nwTeveGypXho4/gjDOirkiSipa/P0tSRHbvhgEDoEOHcDH3JUsMm5Likx1OSYrAv/8NXbrAP/8Jjz8O/fqF62xKUjwycEpSCXv1VejTB6pXh7lzITk56ookqXg5UpekEpKeDtdfH3Y227WD1FTDpqTEYIdTkorQ+vXrGXzXYBakLSCDDMpTniYNmnDNFQ9y/fVH8NVX8Mc/hh1OR+iSEoWBU5KKyLp162h+QXOWNVwG5wIxIAs+//ZzXmj3IXUOn8uCBUdQv37UlUpSyXKkLklFZMioIWHYrEkYNiH8W7YmBB2XcUbrwYZNSQnJwClJRWRB2gKosZ8Ha8CSzxaUaD2SVFoYOCWpiGSQ8d/O5v9K+s/jkpSADJySVESSsspDsJ8Hs6C8l81LSlAGTkkqAkuWwLcrmsDq/TzhW2jSoEmJ1iRJpYWBU5IKIQjgySehaVOoXf1Bai2oA98AWf95QhbwDdRZUocH73owwkolKToGTkkqoC1boFMn6N8frrsOFi48gkXT59LroF6c9N5JHP+P4znpvZPodVAv5k6byxFHHBF1yZIUCS8okqQCWLAg3DFoyxaYPBk6dAiPH3HEETz/5PPRFidJpYwdTknKhyCAP/wBzjwz3At9yZL/hk1JUu4MnJKURxs3Qvv2MGgQDBwIH34ItWtHXZUklX6O1CUpD2bPhq5dIT0dpkyBdu2irkiSyg47nJL0M7Ky4P77oWXLsJuZlmbYlKT8MnBK0n6sWwcXXADDhsHQoTBjBtTY39aVkqT9cqQuSbmYMQO6dQs7nO+8A+eeG3VFklR22eGUpJ/IzIS77oI2beCkk8IRumFTkgrHDqck/ceaNXDFFfDBBzBqFNxxB5QrF3VVklT2GTgliXBs3qMHHHAAvP9+eJOQJKloOFKXlNAyMuD226FtW2jUKByhGzYlqWjZ4ZSUsL75BlJSYN48+P3v4dZbIclfwyWpyBk4JSWkt9+GXr2gYsXwms3mzaOuSJLil7/LS0ooe/bALbeEW1SedVY4QjdsSlLxssMpKWGsWAFduoQhc8wYuOkmiMWirkqS4p+BU1JCeO016NMHqlWDOXPg9NOjrkiSEocjdUlxbdcu6NcPLr88XMA9NdWwKUklzQ6npLj15ZfhCP2LL+Dpp+G66xyhS1IU7HBKiksTJoTrau7cCfPnw/XXGzYlKSoGTklxZefO8FrNK66ASy6BRYvgtNOirkqSEpsjdUlx4/PPoXNnWL4cxo0L19m0qylJ0bPDKanMCwJ4/vnwZqAggIULoXdvw6YklRYGTkll2vbt0LMnXHUVdOsWhs2TT466KknSTzlSl1RmffxxOEL/9lt46aXwuk1JUuljh1NSmRME8MwzcMYZUKFCuLamYVOSSi8Dp6QyZetW6NoV+vaFq6+GefPg+OOjrkqS9HPyFTi3b9/O4MGDOe+88zjiiCNISkpi1KhROZ7Xq1cvkpKScnyddNJJRVa4pMSzaBEkJ8O0aTBpEjz5JBx8cNRVSZJ+Sb6u4dywYQN/+tOfaNCgAR06dGDs2LHE9nMbaIUKFZgxY0aOY5KUX0EAjz0Gt90Wrqn57rtw3HFRVyVJyqt8Bc7atWuzefNmADZu3MjYsWP3+9xy5crRpEmTwlUnKeFt2hTegf7WWzBwIPz+93DggVFXJUnKjwLfpR4EQaEel6RfMndueL3mtm1h4GzfPuqKJEkFUWw3DaWnp3PUUUdRvnx5atasyY033rivOypJPycrCx58EFq0gGOOgbQ0w6YklWXFsg5ngwYNaNiwIaeccgoAM2fO5JFHHmH69OksXLiQihUrFsfbSooD69eHC7lPnQpDh8LvfgcHHBB1VZKkwiiWwDlw4MBs/96mTRsaNmxIp06dGDt2LAMGDCiOt5VUxn3wAaSkwJ49YeBs2zbqiiRJRaHEdhrq0KEDFStWZP78+ft9zsCBA6lSpUq2YykpKaSkpBR3eZIilJkJ998PI0eGY/QJE+Doo6OuSpIS18SJE5k4cWK2Y1u2bCnw+UoscAZBQFZW1s8+Z8yYMSQnJ5dQRZJKg+++g+7d4f33YfhwGDECypWLuipJSmy5NfxSU1Np1KhRgc5XYoHztddeIz09nWbNmpXUW0oq5d57L9ySMikp/P7ss6OuSJJUHPIdOKdOncqOHTvYtm0bAJ999hmvvfYaAO3atWPdunV0796dbt26cdxxxxEEAbNmzeLRRx/llFNOoU+fPkX7E0gqczIy4K674L774Jxz4MUX4cgjo65KklRc8h04b7jhBlatWgVALBZj0qRJTJo0iVgsxooVK6hcuTLVq1fnoYce4vvvvyczM5PatWszYMAA7rjjDncbkhLc6tXQrRvMng333BPeiZ5UbAu0SZJKg3wHzhUrVvzic15//fUCFSMpvv3973DlleH+5zNnhjcISZLin30FScVu714YPBjatYOmTcOF3A2bkpQ4SuymIUmJaeXKcG3NRYtg9Gi4+WZH6JKUaAyckorNm29C795QuTJ89BGccUbUFUmSomCfQVKR270bBgyADh3CpY6WLDFsSlIis8MpqUj9+9/QpQv885/w+OPQrx/EYlFXJUmKkh1OSUXmlVcgORl++AHmzoX+/Q2bkiQDp6QikJ4O110HXbuGd6IvXhwGT0mSwJG6pEJauhQ6d4avvoI//hH69LGrKUnKzg6npAJ78UU4/fRwnc0FC+CaawybkqScDJyS8m3HjnC5oyuvhE6dwjU269ePuipJUmnlSF1Svnz6aXgX+qpVMH489OwZdUWSpNLODqekPAkCGDsWmjSB8uXDG4MMm5KkvDBwSvpFP/wAV1wRXqPZsyfMnw+//W3UVUmSygpH6pJ+1pIl4V3o338PEyeGSx9JkpQfdjgl5SoI4MknoWlT+NWvIDXVsClJKhgDp6QctmwJ7z7v3z9c0H3OHKhbN+qqJElllSN1SdksWBDehb5lC0yeDB06RF2RJKmss8MpCQhH6H/4A5x5Jhx5ZHjtpmFTklQUDJyS2LgR2reHQYNg4ED48EOoXTvqqiRJ8cKRupTgPvoIUlIgPR2mTIF27aKuSJIUb+xwSgkqKwvuvx9atQq7mWlphk1JUvEwcEoJ6Pvv4YILYNgwGDoUZsyAGjWirkqSFK8cqUsJ5v33w12DsrLgnXfg3HOjrkiSFO/scEoJIjMT7roLzjkHTjoJPv7YsClJKhl2OKUEsGZN2NX84AMYNQruuAPKlYu6KklSojBwSnHunXegRw844IBwnN6yZdQVSZISjSN1KU7t3Qu33w5t20KjRuFd6IZNSVIU7HBKceibb6BrV5g/H37/e7j1Vkjy10tJUkQMnFKceftt6NULDj00vGazefOoK5IkJTp7HlKc2LMHbrkl3KLyrLPCvdANm5Kk0sAOpxQHli8PR+hpaTBmDNx0E8RiUVclSVLIwCmVca+9BldfDYcfDnPmwOmnR12RJEnZOVKXyqhdu6BfP7j8cjj/fEhNNWxKkkonO5xSGfTll9C5MyxdCk8/Dddd5whdklR62eGUypgJE8J1NdPTw2WPrr/esClJKt0MnFIZsXMn9OkTblF5ySWwaBGcdlrUVUmS9MscqUtlwOefhyP05cth3LhwnU27mpKkssIOp1SKBQE8//x/bwZauBB69zZsSpLKFgOnVEpt3w5XXglXXQXdusGCBXDyyVFXJUlS/jlSl0qhjz8OR+hr1sBLL4XXbUqSVFbZ4ZRKkSCAZ56BM86AChVg8WLDpiSp7DNwSqXE1q3QpQv07RvuHDRvHhx/fNRVSZJUeI7UpVJg0aIwbG7YAJMmQadOUVckSVLRscMpRSgI4NFHoXlzqFoVliwxbEqS4o+BU4rIpk3QoQMMHAj9+8Ps2XDccVFXJUlS0XOkLkVg7lzo2hW2bYO33oL27aOuSJKk4mOHUypBWVnw4IPQogXUqAFpaYZNSVL8M3BKJWT9erjoIhgyBG67DWbOhFq1oq5KkqTi50hdKgGzZoW7Be3dC1OnQtu2UVckSVLJscMpFaPMTLj7bjj77HBNzbQ0w6YkKfHY4ZSKyXffQffu8P77MGIEDB8O5cpFXZUkSSXPwCkVg/feC7ekTEoKvz/77KgrkiQpOo7UpSKUkQF33gnnnQennRaO0A2bkqREZ4dTKiKrV4c3Bs2ZA/feG96NnuSvdJIkGTilovD3v8OVV8LBB4fLHZ11VtQVSZJUeth/kQph795wTc127aBp03CEbtiUJCk7O5xSAa1cGW5PuXgxPPww3HwzxGJRVyVJUulj4JQK4I034KqroEoV+OgjOOOMqCuSJKn0cqQu5cPu3XDTTdCxY3j3+ZIlhk1Jkn6JHU4pj/79b+jSBf75T3jiCbjhBkfokiTlhR1OKQ9eeQWSk+GHH2DePOjXz7ApSVJeGTiln5GeDtddF94c1K5deINQw4ZRVyVJUtniSF3aj6VLoXNn+Oor+NOf4Oqr7WpKklQQdjilXPz5z9CoUbjO5oIF0KePYVOSpIIycEo/sWMH9O4NPXuG3c1Fi6B+/airkiSpbHOkLv3Hp5+GIfPrr+GFF8KtKiVJUuHZ4VTCC4LwGs0mTeCAA8IbgwybkiQVHQOnEtoPP0C3bnDtteEYff58+O1vo65KkqT44khdCSs1NVzI/fvv4eWXw+8lSVLRs8OphBME4U5BzZrBr3713+ApSZKKh4FTCWXLFujUCW68MVzQfc4cqFs36qokSYpvjtSVMObPD3cM2rIFJk+GDh2irkiSpMRgh1NxLwjg4YfhrLPgyCNhyRLDpiRJJcnAqbi2cSO0bw+33go33wwffgi1a0ddlSRJicWRuuLWRx9BSgqkp8OUKdCuXdQVSZKUmOxwKu5kZcH990OrVvCb30BammFTkqQoGTgVV77/Htq2hWHD4Pbb4f33oUaNqKuSJCmxOVJX3Hj/fbjiirDD+c47cO65UVckSZLADqfiQGYmjBwJ55wDJ50EH39s2JQkqTSxw6kybc2asKv5wQcwahTccQeUKxd1VZIk6acMnCqz3nkHevSAAw4Ix+ktW0ZdkSRJyo0jdZU5e/eGNwS1bQuNGoV3oRs2JUkqvexwqkz5+utwbc358+H3vw8XdE/y1yZJkkq1fP2nevv27QwePJjzzjuPI444gqSkJEaNGpXrc1NTUznnnHOoVKkShx12GJdddhkrVqwokqKVmP76V2jQAFavDncMGjzYsClJUlmQr/9cb9iwgT/96U/s3buXDv/ZjDoWi+V43tKlS2nVqhUZGRlMmjSJcePG8eWXX9KiRQs2bNhQNJUrYezZA7fcApdcAv/3f+Fe6M2aRV2VJEnKq3yN1GvXrs3mzZsB2LhxI2PHjs31eSNGjKBChQpMmTKFQw89FIBGjRpRr149Ro8ezQMPPFDIspUoli+HLl3CpY7GjIGbboJcfseRJEmlWIEHkkEQ5Ho8IyODKVOmcNlll+0LmwC1atWidevWvPHGGwV9SyWY116Dhg1h0yaYMwcGDDBsSpJUFhX5FXDLli1j165dnHrqqTkeq1+/Pv/+97/Zs2dPUb+t4siuXXDDDXD55XD++ZCaCqefHnVVkiSpoIo8cG7cuBGAqlWr5nisatWqBEGwbywv/a8vv4SmTWHcOHj6aXjlFahcOeqqJElSYXiPr0qNCRPCdTXT08Nlj66/3hG6JEnxoMjX4axWrRoAmzZtyvHYpk2biMViHHbYYbm+duDAgVSpUiXbsZSUFFJSUoq6TJUiO3eGNwM99xx07x52Nn9y+a8kSSphEydOZOLEidmObdmypcDnK/LAWadOHSpUqMAnn3yS47FPP/2UevXqceCBB+b62jFjxpCcnFzUJakU++yz8C705cvDMXqvXnY1JUmKWm4Nv9TUVBo1alSg8xX5SL18+fJcfPHFTJ48me3bt+87/vXXXzNjxgw6duxY1G+pMigI4PnnoXHj8N8XLYLevQ2bkiTFo3x3OKdOncqOHTvYtm0bAJ999hmvvfYaAO3ataNChQqMGjWKxo0bc9FFFzF06FDS09MZMWIE1atXZ9CgQUX7E6jM2bYtvAv9pZegTx949FE45JCoq5IkScUl34HzhhtuYNWqVUC4y9CkSZOYNGkSsViMFStWUKtWLU444QRmzpzJkCFD6NSpE+XLl6dNmzaMHj163zWeSkwffwydO8OaNfCXv0C3blFXJEmSilu+A2de90NPTk7m3XffzXdBik9BAM8+CwMHwoknwuLFcPzxUVclSZJKgssiqdht3RreGNS3L1x9Ncyda9iUJCmRFPld6tJPLVoUhs0NG2DSJOjUKeqKJElSSbPDqWIRBOHNQM2bQ7VqsGSJYVOSpERl4FSR27QJLr00vF6zf3/46CM47rioq5IkSVFxpK4iNXcudO0aLn301lvQvn3UFUmSpKjZ4VSRyMqCBx+EFi2gRg1ISzNsSpKkkIFThbZ+PbRrB0OGwG23wcyZUKtW1FVJkqTSwpG6CmXWrHDx9r17Ydo0OP/8qCuSJEmljR1OFUhmJtx9N5x9drimZlqaYVOSJOXODqfy7bvv4IorYMYMGDEChg+HcuWirkqSJJVWBk7ly3vvhWEzKSn8/uyzo65IkiSVdo7UlScZGXDnnXDeeXDaaeEI3bApSZLywg6nftHq1eGNQXPmwL33hnejJ/mriiRJyiMDp37W3/4GPXtChQrhckdnnRV1RZIkqayxT6Vc7d0brql50UXQrFk4QjdsSpKkgrDDqRxWrgy3p1y8GB5+GG6+GWKxqKuSJElllYFT2bzxBlx1FVSpArNnQ5MmUVckSZLKOkfqAmD3brjpJujYMbz7/P/bu/+oLOv7j+Ov+0Y0JYaBRKCSTucxjAbmz+mIypBETbJkRir+OCgyCzZTp6lDy+wHZ2vHtpm6lovU5Y4dF1u2TcgfhYSoU2cbbrZlNoP8gTehplzfP65vFvMXkDef6+Z+Ps65zpGLc1+8zufI8e37fV2fa9cuik0AAHBt0OGEDh6U0tKkffukZcuk6dMZoQMAgGuHDqefW7dO6t1bqq6WSkqk7GyKTQAAcG1RcPqp2lpp6lT74aCUFPsBofh406kAAEBLxEjdD73/vjRmjFRRIa1YIU2eTFcTAAB4Dx1OP7N6tXT77farKktLpSlTKDYBAIB3UXD6iZoaKSPDfmvQmDHSe+9JsbGmUwEAAH/ASN0P7N1rF5kffii9/LI0frzpRAAAwJ/Q4WzBLMu+R7NfPykwUCoro9gEAADNj4Kzhaqulh56SMrMtMfoO3ZIPXuaTgUAAPwRI/UWqLzc3sj96FFp7Vr7zwAAAKbQ4WxBLMt+U9DAgdI3vvFl4QkAAGASBWcLceKE9MAD0owZ0rRp0jvvSN27m04FAADASL1F2LHDfmPQiRPShg3SqFGmEwEAAHyJDqcPq6uT8vOlwYOliAhp1y6KTQAA4DwUnD7q00+lkSOlmTOl3Fxp61apSxfTqQAAAC7GSN0HbdsmjR0r1dZKhYXSsGGmEwEAAFweHU4fUlcnLVkiJSZKXbtKu3dTbAIAAOej4PQRR49KycnS449LP/qRtHmz1KmT6VQAAABXx0jdB2zeLKWn2/tsvvWWNGSI6UQAAAANR4fTwc6flxYutAvMmBh7hE6xCQAAfA0dThQ4POgAAA/dSURBVIc6csTuam7ZIi1aZI/RAwJMpwIAAGg8Ck4HevNNadw4qXVre5x+xx2mEwEAADQdI3UH+fxzac4c6d57pb597RE6xSYAAPB1dDgd4j//sffW3LFDeuYZ6Yc/lNz8dwAAALQAFJwOsHGjlJEhBQfbbwwaONB0IgAAgGuHHppBZ8/ar6W87z4pIcF+FzrFJgAAaGnocBryr39JaWnSnj3S889LM2ZILpfpVAAAANceBacB69dLkydLHTpI77wj9eljOhEAAID3MFJvRqdPS9OnSw8+KA0dKpWXU2wCAICWjw5nM/nHP6QxY6T335d++UspM5MROgAA8A90OJtBQYHUu7dUW2tvezR1KsUmAADwHxScXvTZZ9KUKdLDD0upqdLOndK3v206FQAAQPNipO4l+/fbI/RDh6Rf/creZ5OuJgAA8Ed0OK8xy7ILzL597QKzrEyaOJFiEwAA+C8Kzmvo1Clp3Dh7y6P0dKm0VIqJMZ0KAADALEbq18ju3fZG7keO2A8JPfSQ6UQAAADOQIfza7Is6Re/kAYMkNq1sx8MotgEAAD4EgXn13DypN3VnD7dHqO/+67Uo4fpVAAAAM7CSL2J3ntP+t73pKoq6bXXpAceMJ0IAADAmehwNpJlST/9qTRokBQWJu3aRbEJAABwJRScjXDsmDRqlJSbK82YIW3bJn3zm6ZTAQAAOBsj9QZ65x17hO7xSBs3SiNGmE4EAADgG+hwXkVdnfT001JCgtS5s739EcUmAABAw1FwXkFlpZSSIs2ZI82aJRUXS9HRplMBAAD4Fkbql/H22/Z+mp9/Lr35pjR0qOlEAAAAvokO5/84f15avFi66y57T83duyk2AQAAvg46nF/x3//a70AvKpIWLJDmz5cCAkynAgAA8G0UnP/vT3+SHn5YcrulP//Z7nACAADg6/P7kfq5c9Ljj9tj87g4ac8eik0AAIBrya87nIcPS2PH2u9AX7LEfhLd7fclOAAAwLXltwVnYaE0YYLUtq293dHgwaYTAQAAtEx+1887e1Z67DFp+HBp4ED7KXSKTQAAAO/xqw7nBx/Yr6fcuVPKz7ffie5ymU4FAADQsvlNwblhgzRpktS+vbR9u9Svn+lEAAAA/qHFj9TPnJEeeUS6/3776fNduyg2AQAAmlOL7nAePCilpUn79knLlknTpzNCBwAAaG4ttsO5dq3Uu7dUXS2VlEjZ2RSbAAAAJrS4grO2Vpo61d5fc/hwqbxcio83nQoAAMB/taiR+oED9gi9okJasUKaPJmuJgAAgGktpsP58stSnz72qyrfe0+aMoViEwAAwAl8vuD0eKSMDPtIS7OLzVtvNZ0KAAAAX/DpkfrevdKYMdKHH0qrV0vjxplOBAAAgP/lkx1Oy7Lv0ezXT2rdWioro9gEAABwKp8rOKurpYcekjIzpQkT7C2PevY0nQoAAACX41Mj9fJy+z7No0ftfTbT0kwnAgAAwNV4pcNZXFwst9t9yaO0tLTR17Ms+01BAwdKISFfFp4AAABwPq+O1J966imVlJTUO3r16tWoaxw/Lo0eLc2YIU2bJm3fLnXv7qXAPmjNmjWmI/gc1qxpWLfGY82ahnVrPNasaVi35uPVgvNb3/qW+vXrV+8ICgpq8Od37LBfT1lUJG3YID3/vNSmjRcD+yB+WRqPNWsa1q3xWLOmYd0ajzVrGtat+Xi14LQsq0mfq6uT8vOlwYOlm26Sdu+WRo26xuEAAADQLLxacGZnZyswMFAhISFKTk7W9u3br/qZqipp5Ehp5kwpN1faskW6+WZvpgQAAIA3eeUp9fbt2ysnJ0eJiYkKCwtTRUWFnn32WSUmJqqwsFBJSUmX/Fx5uV1snj4tFRZKw4Z5Ix0AAACak1cKzri4OMXFxV34etCgQUpNTVVsbKxmz5592YIzM/OA4uKkJ5+UIiLsAhRXduLECZWzUI3CmjUN69Z4rFnTsG6Nx5o1DevWOAcOHGjyZ11WU2+0bIKsrCwtX75ctbW1avOVp38+/vhj9enTR0eOHGmuKAAAAGikqKgolZWVKTIyslGfM7Lxu8vlqvd1ZGSkysrK9PHHH5uIAwAAgAaIjIxsdLEpNWOH8/jx44qNjVVERIR27tzZHD8SAAAADuCVDmd6erq6du2q3r17KzQ0VBUVFcrPz1dlZaVWr17tjR8JAAAAh/JKwXnbbbdp3bp1euGFF+TxeBQaGqrvfve7Kigo0O233+6NHwkAAACHataHhgAAAOB/vLrxOwAAAGC04PR4PMrJyVHHjh3Vtm1bxcfHa926dSYjOZ7H49GsWbOUlJSk8PBwud1u5eXlmY7leH/5y180YcIE9ejRQ0FBQerUqZNGjRrF/mtXsHv3bqWkpOjmm29Wu3btFBYWpu985zsqKCgwHc2nrFy5Um63W8HBwaajOFZxcbHcbvclj9LSUtPxHG3btm0aNmyYQkND1a5dO/Xo0UNPPPGE6ViOlZGRcdm/a/x9u7yysjLdd999ioqKUlBQkG655RYtXrxYtbW1Db6GkW2RvnD//ferrKxMTz/9tHr06KGCggKNHTtWdXV1Gjt2rMlojlVVVaUVK1YoLi5OqampWrly5UXbTOFiy5cvV2VlpXJzc9WrVy9VVlYqPz9fAwYM0KZNm3TnnXeajug4J0+eVHR0tNLT09WxY0d5PB4VFBRo3Lhx+uCDDzRv3jzTER3vo48+0syZMxUVFaXq6mrTcRzvqaeeuuh3sVevXobSON+rr76q8ePHKy0tTb/5zW90/fXX6+DBg2wxeAULFizQ9OnT652zLEsjRoxQ27Zt1bdvX0PJnGvv3r0aPHiwYmJi9LOf/UwdOnTQ22+/rUWLFmnnzp16/fXXG3Yhy5DCwkLL5XJZa9eurXc+KSnJ6tixo3X+/HlDyXxHVVWV5XK5rLy8PNNRHO/o0aMXnfN4PNZNN91kDRkyxEAi3zVgwAArOjradAyfMHz4cGvUqFFWRkaGdf3115uO41hFRUWWy+Wyfve735mO4jMOHz5sBQUFWdnZ2aaj+Lzi4mLL5XJZCxYsMB3FkebOnWu5XC7rn//8Z73zU6dOtVwul3XixIkGXcfYSH3Dhg0KDg7Wgw8+WO/8xIkTdeTIEe3YscNQMt9h8bxXg914440XnftiLHD48GEDiXxXWFiYWrUyOhzxCa+88oq2bt2qF154gd/VBmKdGm7lypX67LPPNHv2bNNRfN6qVavkdrs1efJk01Ec6brrrpMkhYSE1DsfEhKigIAAtW7dukHXMVZw7tu3T7fccovc7voRYmNjJUn79+83EQt+5OTJkyovL2dkdxWWZencuXOqrKzUz3/+c23atEkzZ840HcvRjh49qpycHC1dulRRUVGm4/iM7OxsBQYGKiQkRMnJydq+fbvpSI61ZcsWhYWF6W9/+5vi4uIUGBioiIgIZWVl6dSpU6bj+YyTJ09q/fr1uvvuuxUdHW06jiNNnDhR4eHhysrK0qFDh3Tq1Cm98cYbevHFF5Wdna22bds26DrG2hSffvqpunfvftH50NDQC98HvCk7O1u1tbXci3gVWVlZevHFFyVJAQEBeu6555SVlWU4lbNlZ2crJiZG06ZNMx3FJ7Rv3145OTlKTExUWFiYKioq9OyzzyoxMVGFhYVKSkoyHdFxPvroI9XU1GjMmDGaO3euBg4cqNLSUi1cuFD79u3T1q1bTUf0CWvWrNHp06fpbl5Bp06dVFxcrJEjR6pbt24Xzj/66KP6yU9+0uDrMBeDX5o/f75effVVLVu2TPHx8abjONq8efOUmZmpTz75RBs3btQPfvADnT59mlHeZaxfv15vvPGG9uzZYzqKz4iLi1NcXNyFrwcNGqTU1FTFxsZq9uzZFJyXUFdXp9OnT+vHP/6xZs2aJUlKSEhQ69atlZOTo82bN+uuu+4ynNL5Vq1apQ4dOig1NdV0FMf6+9//riFDhqhbt2565plnFB4erpKSEj3xxBM6deqUVq5c2aDrGCs4w8LCLtnFPHbs2IXvA96Ql5enJ598UkuWLLnoaUVcrHPnzurcubMkKTk5WZJdsE+aNEnh4eEmozmOx+PR97//fT3yyCOKiIjQiRMnJElnz56VZI/vWrVqpaCgIJMxfUJISIhSUlK0fPlynTlzRm3atDEdyVHCwsJ08OBBDR06tN75L35Hd+3aRcF5FX/961+1c+dO5eTkKDAw0HQcx5o7d67q6uq0adOmC+PzwYMHq0OHDpo0aZLGjx+vhISEq17H2D2ct912mw4cOKC6urp65/fu3StJuvXWW03EQguXl5d34ZgzZ47pOD6pb9++OnfunA4dOmQ6iuNUVVXpk08+0XPPPafQ0NALx9q1a1VTU6MbbrhB48aNMx3T57D128W+2hG+FNbs6latWiVJmjJliuEkzrZ//37FxMRcdK9mnz59Lny/IYwVnKmpqfJ4PFq/fn2987/+9a/VsWNH9e/f31AytFSLFy9WXl6e5s+fr/nz55uO47OKiooUEBBQ714e2CIjI1VUVKTi4uILR1FRkYYOHarrrrtOxcXFbMrdQMePH9fvf/97xcfHN/gpWH8yevRoSdIf/vCHeucLCwsliX9Dr+LMmTN65ZVX1L9/f8XExJiO42idO3fWvn37VFNTU+/8u+++K8m+x7MhjI3Uk5OTdc899ygrK0vV1dXq1q2b1qxZo7feeksFBQX87+wK/vjHP6qmpubCk4j79++/ULinpKQ0+Ikxf5Kfn6+FCxcqOTlZw4YNU0lJSb3vDxgwwFAy58rMzFRISIj69u2riIgIVVVV6bXXXtNvf/tbzZo1i9teLqFNmza64447Ljr/0ksvKSAgoEFjJ3+Unp6url27qnfv3goNDVVFRYXy8/NVWVmp1atXm47nSEOGDNHw4cO1aNEi1dXVqX///iorK9OiRYs0YsQIDRo0yHRER3v99dd1/PhxupsNkJubqxEjRuiee+5Rbm6uwsLCVFJSoqVLl6pXr1669957G3aha71BaGN4PB7r0UcftSIjI602bdpYcXFx1rp160xG8gldunSxXC6X5XK5LLfbXe/P//73v03Hc6TExMR6a/XVw+12m47nSC+99JKVkJBghYeHW4GBgdYNN9xg3XnnnVZBQYHpaD4nIyPDCg4ONh3DsZYuXWrFx8db7du3t1q1amXdeOON1ujRo62ysjLT0RyttrbWmjNnjhUdHW0FBgZaXbp0sebNm2edPXvWdDTHS0pKsoKDgy2Px2M6ik/YsmWLlZycbEVFRVnt2rWzevbsaT322GPWsWPHGnwNl2Wx0y4AAAC8x9g9nAAAAPAPFJwAAADwKgpOAAAAeBUFJwAAALyKghMAAABeRcEJAAAAr6LgBAAAgFdRcAIAAMCrKDgBAADgVRScAAAA8CoKTgAAAHjV/wFxXEEqDWzrngAAAABJRU5ErkJggg==",
+ "text/plain": [
+ "Figure(PyObject )"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {
+ "comm_id": "ff21fc96-7c08-4cd8-ae1b-cab5f1c6a9e3",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Execute this cell as well\n",
+ "u(x) = 5 + 3x\n",
+ "range=0:.01:8\n",
+ "f=figure()\n",
+ "\n",
+ "@manipulate for x=0:.5:8; withfig(f) do\n",
+ " plot(range,u(range))\n",
+ " plot(x,u(x),\"o\")\n",
+ " title(\"x=$x u(x)=$(round(u(x),2))\")\n",
+ " end\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Slide $x$ to $6.5$ and observe u(6.5)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "There should be a plot that highlights $x=6.5$. What is $u(6.5)$?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 5,
+ "question": "10"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 11: (Julia) Plot Solutions of Linear Systems"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "(1 pt) Consider the linear system for various values of p and q that you can manipulate\n",
+ "\n",
+ "\n",
+ "$x + y = p$\n",
+ "\n",
+ "$-x + 3y = q$\n",
+ " \n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Where is the solution when $p=7$ and $q=1$?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Slider{Float64}([Input{Float64}] 7.0,\"p\",7.0,0.0:0.5:14.0)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Slider{Float64}([Input{Float64}] 7.0,\"q\",7.0,0.0:0.5:14.0)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAq8AAAIeCAYAAACV9+ZNAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xt0VfW97v/3SoORGMolNbW4y6XALtQSJRcIoVwSrIEByqkCFdRgoVChwEG0seJpROoPpVhR0cEW3SBFG9lctBVKpVVCKQSQhErtkVNLo3ZsbKmC7MJACrJ+f8wNW+QWIMlcl/drjDXCmGtl5WEtTB5nvvPzjUSj0SiSJElSHEgJO4AkSZJUV5ZXSZIkxQ3LqyRJkuKG5VWSJElxw/IqSZKkuGF5lSRJUtywvEqSJCluWF4lSZIUNyyvkiRJihuWV0mSJMUNy6skfUK7du1ISUk54+3+++8/p+dctGgR3bt3p1mzZrRo0YKioiJWrVrVQH+D+lNZWXnW1yIlJYX//M//rPNz7tmzhylTptCuXTsuvvhiLr/8csaMGXNOzyEpuUWi0Wg07BCSFCseffRR9u3bd9Lxo0ePMnPmTD7++GNee+01cnJy6vR8d955Jw8//DBf/OIXGTp0KIcOHeL5559nz549zJ07l+9+97v1/VeoN++88w6LFi065X3bt29nxYoVdO3alddff71Oz/fBBx9QWFjIW2+9Rf/+/cnPz+fNN9/kZz/7GVlZWVRVVdG+ffv6/CtISkRRSdJZ/fKXv4xGIpFobm5unT9nw4YN0UgkEu3UqVP0ww8/PH787bffjmZmZkYvvvji6Ntvv90QcRvcjTfeGI1EItG5c+fW+XPGjRsXjUQi0TvvvPOE44899lg0EolEBwwYUN8xJSUglw1Iiklvv/02KSkpfOtb32LHjh38r//1v2jVqhUZGRn07t2bX/3qV42aZ/78+QB85zvfqfPnzJs3D4D/83/+D82bNz9+vG3btnz3u9/l0KFDLFiwoM7P97e//Y0xY8bw+c9/nvT0dLp168aiRYuO/3r/vvvuq/NzXYj333+fF154gfT0dEpLS+v0Ofv372fx4sU0a9aM6dOnn3DfxIkTadu2LS+//DK1tbUNkFhSIrG8SopptbW1FBYW8uGHHzJ+/HiGDRtGdXU1AwcO5D/+4z8aJcPf/vY3XnrpJZo1a8bIkSPr/Hlr164lEokwYMCAk+4bOHAgEKwrrYv333+fwsJCFi5cSOfOnbn99tu56qqrGD9+PA8//DAAkUikztkuxKJFi/jnP//JsGHD+OxnP1unz9m0aRMfffQRvXr14pJLLjnhvkgkQklJCRC8ZpJ0JqlhB5CkM/nNb37D9773PWbNmnX82MSJE+nZsye33XYbAwcOpFmzZgDs27ePOXPmnNPzf+Mb3+DKK68842MWLFjAkSNHGDFixEnF63QOHDjArl27aNasGVlZWSfd37FjRwD++Mc/1un5pk2bRm1tLbfffjs//vGPjx8/9lqcSmVlZZ3LMQQl8t577z3r45566ikikcg5nYX+f//v/wHQqVOnU95/7PV466236vyckpKT5VVSTGvRogXl5eUnHMvNzeWmm25i0aJFvPDCC8d/db13715mzJhR5+eORCJ86UtfOmN5jUajPP3000QiEcaNG1fn5z520dcnlwt80rHjH3744Vmf6/Dhwzz33HN89rOfPelX7p98LT5t3bp15/x6nK28rlu3jj/+8Y907dqVgoKCOj93fb4ekpKbywYkxbScnJxTnu3s27cvAL/73e+OH2vXrh1Hjx6t8+3jjz8+65rNX//619TW1pKTk1PnCQP1bceOHRw8eJCrrrrq+FnmTzr2Wnzavffee86vx9kcW/t7LkVekuqT5VVSTPv85z9/yuOXXXYZwCnHWtWn8y1rx84kni7fseMtWrQ463Mde+zZXouGtmfPHpYvX056ejq33HLLOX1ufb4ekpKbywYkxbS//e1vpzz+17/+FTjx19D1veZ19+7d/OxnPzvnC7UALrnkElq3bs17773HX//615MK5rG1nf/6r/961uc69nc822vxafW95vXYhVojR46s84Vax3Tu3Bk4/Rrfc3k9JCU3y6ukmFZTU8P+/fvJyMg44fixUtatW7fjx46teY1EIkTrsP/K2da8Lly48Jwv1Pqk/v37s3jxYn75y19y6623nnDf6tWrASguLj7r83Tp0oWmTZvyu9/9jv/6r/86qTierqDW95rXYxdqnc+SgYKCAi6++GI2bNhw0vt59OhR1qxZQyQSoaio6JyfW1KSCXvQrCSdSm1tbTQSiUQjkUj0e9/73gn3vfbaa9HU1NRoy5Yto//4xz8a5OsfPXo02rFjx2hKSkq0pqbmjI997733om+++WZ03759JxzfuHFjNBKJRDt27Bjdu3fv8eO1tbXRVq1aRZs2bRp955136pTn2ID/22+//YTjx16LSCQSve++++r4tzt3v/nNb6KRSCSanZ191se++eab0R07dpx0/Dvf+U40EolE77jjjhOOP/roo9FIJBIdOHBgveWVlLgsr5Ji0rHy2rdv32jLli2jffr0iX7/+9+Pjho1KnrxxRdHU1NTo//xH//RYF//17/+dTQSiUTz8vLO+thRo0ZFI5FI9JlnnjnpvjvuuCMaiUSiX/ziF6NTpkyJTpgwIZqZmRlNSUmJPvHEE3XO8/7770c7dOgQjUQi0d69ex9/LZo2bRodMmRIg5fXm2++ORqJRKKPP/74WR977H86Pu2DDz6IfvnLX45GIpFo//79o9///vePZ7/sssuif/7znxsiuqQE0+AXbO3fv5+ysjKuueYaLr300jPuAlNTU8PVV19Ns2bNaNmyJTfccIO7rUhJ7ktf+hKbNm2iZcuWPPnkkyxbtoy8vDx+8YtfMGzYsAb7uufyK/JIJHL89mkPPfQQCxcu5LLLLuOpp57i2WefpWvXrrz00ktMmDChznkyMzPZsGHD8R3HHn30UbZv386//du/cfvtt5/T3+1c7d2795wv1EpJOfnHS6tWraiqqmLy5Mn86U9/4uGHH+a1115j9OjRVFdX0759+/qOLikBRaLROiwMuwBvv/023bp146qrrqJTp048/fTTTJ8+/aS5jTt27KB79+7k5OTw/e9/n4MHD1JeXs7evXv53e9+x+c+97mGjCkpxrz99tt86Utf4tZbbz2nLVSTUWVlJcXFxaf83ipJiabBL9hq164de/fuBeCDDz7g6aefPuXjysvLadq0KStXrjy+kD83N5dOnTrx0EMP8eCDDzZ0VEmSJMW4Rp3zerqTvEeOHGHlypXccMMNJ1yB2qZNG4qKinjhhRcaK6IkSZJiWExsUrBz504++ugjsrOzT7qva9eu/OlPf+Kf//xnCMkkSZIUS2JizusHH3wABIv5P61Vq1ZEo1H27t172t1lJCWeY1u96uz69evnayUpacREeb0Q7733Hu+9917YMSRJknQaX/jCF/jCF75QL88VE+U1MzMTCPbN/rQ9e/YQiURo2bLlSfe999575OXlsWvXrgbPKEmSpPPTunVrtm7dWi8FNibKa4cOHWjatCnbt28/6b7f//73dOrUiYsuuuik+9577z127drFs88+S5cuXRojaoOorITycmjZEh56CDp1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",
+ "text/plain": [
+ "Figure(PyObject )"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {
+ "comm_id": "0cd19799-d950-432f-963b-9f23f1f53383",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Execute the code below\n",
+ "f=figure()\n",
+ "x=-3:7:20\n",
+ "@manipulate for p=0:.5:14,q=0:.5:14; withfig(f) do\n",
+ " plot(x,p-x)\n",
+ " plot(x,(q+x)/3)\n",
+ " plot((3*p-q)/4, (p+q)/4, \"o\")\n",
+ " title(\"p=$p q=$q\")\n",
+ " end\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 5,
+ "question": "11"
+ },
+ "outputs": [],
+ "source": [
+ "# Obtain the solution when p=7 and q=1 and show the plot\n",
+ "( ?, ? )"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 12: (Julia) Singular Matrices with no zeros"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(2 pts)**\n",
+ "Use the Julia [ones](http://julia.readthedocs.org/en/latest/stdlib/arrays/?highlight=ones#Base.ones) command to create a 10x10 matrix A all of whose entries are the number 1."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 2,
+ "question": "12a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Is this matrix 1. singular or 2. nonsingular. (Type 1 or 2)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 5,
+ "max_score": 2,
+ "question": "12b"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "480e4516-c862-4090-8ba7-c733640e42db",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "# Run this cell to see your scores.\n",
+ "Homework.progress()"
+ ]
+ }
+ ],
+ "metadata": {
+ "homework": {
+ "course": "MIT-1806-Spring2015",
+ "mode": "answering",
+ "problemset": "set1"
+ },
+ "kernelspec": {
+ "display_name": "Julia 0.3.11",
+ "language": "julia",
+ "name": "julia-0.3"
+ },
+ "language": "Julia",
+ "language_info": {
+ "name": "julia",
+ "version": "0.3.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/18.06-PS2.ipynb b/18.06-PS2.ipynb
new file mode 100644
index 00000000..eed21d5b
--- /dev/null
+++ b/18.06-PS2.ipynb
@@ -0,0 +1,1119 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "\n",
+ "# Running this cell will set up auto-grading\n",
+ "# It might take a while to execute.\n",
+ "\n",
+ "# Please fill in the MIT id form that appears below. You only need to do this once.\n",
+ "\n",
+ "Pkg.rm(\"Homework\")\n",
+ "Pkg.clone(\"git://github.com/shashi/Homework.jl.git\")\n",
+ "\n",
+ "using Homework\n",
+ "\n",
+ "# SymPy takes a while to load - ignore the warnings it produces - they are harmless\n",
+ "using SymPy\n",
+ "\n",
+ "# Symbols for some of the problems\n",
+ "a,b,c,r,s,t=@syms a b c r s t\n",
+ "\n",
+ "Homework.show_mit_form()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "Homework.progress()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 1a. LU Decomposition"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "(4 pts.) We would like to find the LU decomposition of A=\n",
+ "$\\left( \\begin{matrix}\n",
+ "a & r & r & r \\\\\n",
+ "a & b & s & s \\\\\n",
+ "a & b & c & t \\\\\n",
+ "a & b & c & d\n",
+ "\\end{matrix} \\right) $.\n",
+ "\n",
+ "Find the four conditions on a,b,c,d,r,s,t so that A=LU above has four pivots.\n",
+ "\n",
+ "Your expressions can involve any of the variables: `a`,`b`,`c`,`d`,`r`,`s`,`t`. "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "a ≠"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 1,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1a.1",
+ "score": 0,
+ "status": -1
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "b ≠"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1a.2"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "c ≠"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1a.3"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "d ≠"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1a.4"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**A note about Julia matrix syntax**\n",
+ "\n",
+ "Because matrices are so common in numerical computing, Julia supports various ways of creating them. Each one is convenient in its own way. To remind ourselves of the syntax, below are some example Julia code snippets that each create the same matrix:\n",
+ "\n",
+ "\n",
+ "\n",
+ "In Julia a matrix\n",
+ "$\\begin{pmatrix} a & b & c \\\\ d & e & f \\\\ g & h & i \\end{pmatrix}$ can be entered\n",
+ "as
\n",
+ "```\n",
+ "[ a b c\n",
+ " d e f\n",
+ " g h i]\n",
+ " ```\n",
+ "or\n",
+ "\n",
+ "```\n",
+ "[a b c;d e f;g h i]\n",
+ "\n",
+ "```\n",
+ "or by columns (note that the spaces are required\n",
+ "\n",
+ "```\n",
+ "[[a,d,g] [b,e,h] [c,f,i]]\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 1b\n",
+ "\n",
+ "**LU Decompositon 2**\n",
+ "\n",
+ "(2 pts.) For the same problem above, write down L below as a numerical matrix.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "1b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 2. Transposes and Inverses"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**2a. (4pts)**\n",
+ "Find $A^T$ and $A^{-1}$ and $(A^{-1})^T$ and $(A^T)^{-1}$ for\n",
+ "\n",
+ "$A=\\left( \\begin{matrix} 1 & 0 \\\\ 9 & 3 \\end{matrix}\\right)$\n",
+ "\n",
+ "Enter your answer $ \\begin{pmatrix} a&b \\\\c&d \\end{pmatrix}$ in the form [a b ; c d]. Enter numerical values as fractions rather than as decimal numbers. (note the fraction $p\\over q$ is written as `p//q` in Julia)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "$A^T=$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "2a.1"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "$A^{-1}=$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "2a.2"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "$(A^{-1})^T=$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "2a.3"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "$(A^T)^{-1}=$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "2a.4"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(4 pts) TRANSPOSES AND INVERSES**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Find $A^T$ and $A^{−1}$ and $(A^{−1})^T$ and $(A^T)^{−1}$ for\n",
+ "$A=\n",
+ "\\begin{pmatrix}\n",
+ "1 & c \\\\ c & 0\n",
+ "\\end{pmatrix}.$\n",
+ "\n",
+ "Enter your answer $ \\begin{pmatrix} a&b \\\\c&d \\end{pmatrix}$ in the form `[a b ; c d]`. Enter numerical values as fractions rather than as decimal numbers. Use the carrot (shift 6) for squares (for example, `c^2` for $c^2$). (Note: it is not recommended to use Julia to get the answer. Rather use scrap paper.)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "$A^T=$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "2b.1"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "$A^{-1}=$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "2b.2"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "$(A^{-1})^T=$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "2b.3"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "$(A^T)^{-1}=$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "2b.4"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 3 Symmetric Matrices"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**3a (4 pts.)** Which of these are true?
\n",
+ "\n",
+ "1. The block matrix\n",
+ "$\\begin{pmatrix} 0 & A\\\\ A & 0 \\end{pmatrix}$\n",
+ "is automatically symmetric.
\n",
+ "\n",
+ "2. If A and B are symmetric then their product AB is symmetric.
\n",
+ "\n",
+ "3. If A is not symmetric then A^{−1} is not symmetric.
\n",
+ "\n",
+ "4. When A,B,C are symmetric, the transpose of ABC is CBA
\n",
+ "\n",
+ "Write your answer as a vector of numbers corresponding to true, example [1, 3] means that 1 and 3 are true,and 2 and 4 are false.\n",
+ "\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 4,
+ "question": "3a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "SYMMETRIC MATRICES 2
\n",
+ "\n",
+ "(2 pts.) If $A=A^T$ and $B=B^T$, which of these matrices are certainly symmetric?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1.$A^2−B^2$
2. $(A+B)(A−B)$
3. $ABA$
4. $ABAB$\n",
+ "\n",
+ "Write your answer as a vector of numbers corresponding to certainly symmetric, example [1, 3] means that 1 and 3 are certainly symmetric."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 4,
+ "question": "3b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 4. Subspaces"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**( 6 pts.)** Which of the following subsets of $R^3$ are actually subspaces?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1. The plane of vectors $(b_1,b_2,b_3)$ with $b_1=b_2$\n",
+ "2. The plane of vectors with $b_1=1$\n",
+ "3. The vectors with $b_1 b_2 b_3 = 0$\n",
+ "4. All linear combinations of $v=(1,4,0)$ and $w=(2,2,2)$\n",
+ "5. All vectors that satisfy $b_1+b_2+b_3=0$\n",
+ "6. All vectors with $b_1≤b_2≤b_3$.\n",
+ "\n",
+ "Write your answer as a vector of numbers corresponding to which are subspaces, example `[1, 3]` means that 1 and 3 are subspaces (Make sure the items are ordered)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 6,
+ "question": "4"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 5. Matrix Subspaces"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(3 pts.)** Remember (from Chapter 3.1) that all two-by-two matrices form a vector space, which we denote M.\n",
+ "\n",
+ "Which of the following statements are true? Recommendation: check addition in each case by an example.\n",
+ "\n",
+ "1. The symmetric matrices in M (with $A^T=A$) form a subspace.
\n",
+ "2. The skew-symmetric matrices in M (with $A^T=−A$) form a subspace.
\n",
+ "3. The un-symmetric matrices in M (with $A^T≠A$) form a subspace\n",
+ "\n",
+ "Write your answer as a vector of numbers corresponding to which are a vector space, example [1, 3] means that 1 and 3 are vector spaces."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 3,
+ "question": "5"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Problem 6. Special Solutions"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "** 6a (2 pts.)** For the matrix \n",
+ "$A=\\begin{pmatrix}\n",
+ "1 & 2 & 2 & 4 & 6 \\\\\n",
+ "1 & 2 & 3 & 6 & 9 \\\\\n",
+ "0 & 0 & 1 & 2 & 3\n",
+ "\\end{pmatrix}$\n",
+ " find a special solution for every free variable. \n",
+ "(Set one free variable to 1. Set the other free variables to zero.)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Enter the special solutions by columns `[[a,b,c,d,e] [f,g,h,i,j] [k,l,m,n,o]]` in order of the free variables.\n",
+ "(If you see bounds error, make sure you put a space between right brackets and left brackets)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6a.1"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For the matrix\n",
+ "$B=\\begin{pmatrix}\n",
+ "2 & 4 & 4 \\\\\n",
+ "0 & 4 & 4\\\\\n",
+ "0 & 8 & 8\n",
+ "\\end{pmatrix}\n",
+ "$\n",
+ "find a special solution for every free variable. (Set one free variable to 1. Set the other free variables to zero.)\n",
+ "\n",
+ "Enter the special solutions more or less as above."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6a.2"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**6b (3 pts.) RREF and Nullspace**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Find the reduced row echelon form $R_B$ of\n",
+ "$B=\\begin{pmatrix}\n",
+ "2 & 4 & 4 \\\\\n",
+ "0 & 4 & 4\\\\\n",
+ "0 & 8 & 8\n",
+ "\\end{pmatrix}\n",
+ "$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6b.1"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Find the reduced row echelon form $R_A$ of\n",
+ "$A=\\begin{pmatrix}\n",
+ "1 & 2 & 2 & 4 & 6 \\\\\n",
+ "1 & 2 & 3 & 6 & 9 \\\\\n",
+ "0 & 0 & 1 & 2 & 3\n",
+ "\\end{pmatrix}\n",
+ "$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6b.2"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Is the nullspace of $R_A$ equal to the nullspace of A?
\n",
+ "Type true or false"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6b.3"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**6c (4 pts.) PIVOTS AND FREE VARIABLES** (type true or false for each of these problems)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "A square matrix has no free variables"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6c.1"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "An invertible matrix has no free variables"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6c.2"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "An $m \\times n$ matrix has no more than n pivot variables"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6c.3"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "An $m \\times n$ matrix has no more than m pivot variable"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6c.4"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**JULIA PROBLEM 1:** LU Decomposition"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "In Julia one can type L,U,p = lu(A) for the LU decomposition. Here L is lower triangular, U is upper triangular,\n",
+ "and p is a permutation vector. (Storing a permutation vector on a computer is much more sensible than storing\n",
+ "a large permutation matrix!)\n",
+ "\n",
+ "One can learn more by typing
\n",
+ "```\n",
+ "? lu\n",
+ "```\n",
+ "\n",
+ "**(2 pts.) Write three lines of Julia.**\n",
+ "\n",
+ "1. First line define A to be `[1 2 3; 4 5 6; 7 7 7]`.\n",
+ "2. Second line: obtain `L`, `U`, and `p`.\n",
+ "3. Third Line: write an expression that combines `L`,`U`, `p` that gives a 0 matrix."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 5,
+ "question": "7"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "There is another command that we will not explore right now: `lufact`, which stores `L` and `U` in half the memory\n",
+ "(as half the numbers are 0!). If you are curious if `z=lufact(A)`, then `z[:L]` displays `L` for humans, `z[:U]` displays `U`,\n",
+ "and `z[:P]` displays a permutation matrix, but never stores it."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**JULIA PROBLEM 2:** Symmetric Matrices and Diffusion \n",
+ "(!0 pts)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ " \n",
+ "
Symmetric matrices are important because they appear in the real world \n",
+ " all the time. One such place is in numerically solving a model for diffusion.\n",
+ "
\n",
+ " \n",
+ " The following partial differential equation models diffusion, and \n",
+ " is known as the heat equation.
\n",
+ "$$\\frac{\\partial}{\\partial t} c(x,t)=\\frac{\\partial^2}\n",
+ " {\\partial x^2}c(x,t) $$
\n",
+ " This equation models any sort of diffusion: the diffusion of dye into a \n",
+ " liquid, or the diffusion of heat through a solid. Note that we have omitted constants\n",
+ " required to guarantee the balance of units for simplicity here.
\n",
+ " \n",
+ " To use linear algebra to solve this equation, we need to change this \n",
+ " differential equation into a difference equation.\n",
+ " The partial derivative with respect to $t$\n",
+ " can be approximated as a difference equation as follows:
\n",
+ " $$\\frac{\\partial}{\\partial t} c(x,t) \n",
+ " \\approx \\frac{c(x,t+\\Delta t) - c(x,t)}{\\Delta t}$$
\n",
+ " The second derivative can be approximated as the following difference equation:
\n",
+ " $$\\frac{\\partial^2}{\\partial x^2}c(x,t) \n",
+ " \\approx \\cfrac{\\cfrac{c(x+\\Delta x,t) - c(x,t)}{\\Delta x}- \n",
+ " \\cfrac{c(x,t) - c(x-\\Delta x,t)}{\\Delta x}}{\\Delta x} = \\cfrac{c(x+\\Delta x,t) \n",
+ " - 2c(x,t)+ c(x-\\Delta x,t)}{(\\Delta x)^2}$$
\n",
+ " We can rearrange this difference equation to find an expression \n",
+ " at the grid point x
at the time step $t + \\Delta t$ as \n",
+ " follows:
\n",
+ " $$c(x,t+\\Delta t) = c(x,t) + \\frac{\\Delta t}{(\\Delta x)^2}\n",
+ " (c(x+\\Delta x,t)-2c(x,t)+c(x-\\Delta x,t))$$
\n",
+ " Notice that every term on the right hand side only depends \n",
+ " on the values at time step t
. So we can rewrite this as a matrix \n",
+ " equation, in terms of a vector c(t)
whose entries are points \n",
+ " $x$ separated\n",
+ " by $\\Delta x$
\n",
+ " $$ c(x,t + \\Delta t) \\approx c(x,t) + \\Delta t \\frac{\\partial}{\\partial t}c(x,t) = c(x,t) + \\Delta t \\frac{\\partial^2}{\\partial x^2}c(x,t).$$
\n",
+ " $$ c(t + \\Delta t) = (I - \\frac{\\Delta t}{(\\Delta x)^2}A)*c(t)$$
\n",
+ " In this problem, we provide you with the code to observe the evolution of this \n",
+ " differential equation, which describes diffusion. We start by discretizing the \n",
+ " variable x
, which we represent as a vector of 101 points lying on the \n",
+ " interval from 0 to 1. Thus our meshwidth in space,$\\Delta x$,\n",
+ " is 0.01. We start with an c(x,0) = c
is the initial concentration, \n",
+ " which we take to be a Gaussian distribution, or a bell curve.
\n",
+ " \n",
+ " \n",
+ " Your job is to create a negative second difference matrix A. And, to plot the \n",
+ " concentration vector C(:,t)
for (at least) 3 later times. (See further \n",
+ " instructions within the code body.)\n",
+ " \n",
+ " \n",
+ "
A note about A:\n",
+ " The dimension of A is 101x101. \n",
+ " The matrix A must enforce boundary conditions!!!! Here, this means we will \n",
+ " make the first row and column zero, and the last row and column zero. You can see\n",
+ " what happens in the plot if you don't enforce this condition!\n",
+ " Note that the diagonal of A will be 2, the super and sub diagonals will be -1, \n",
+ " except at the boundary, where all entries will be zero.\n",
+ "
\n",
+ " $A = \\begin{bmatrix} \n",
+ " 0 & 0 & & \\dots & & & 0 & 0 \\\\\n",
+ " 0 & 2 & -1 & 0 & \\dots & & & \\dots & 0 \\\\\n",
+ " 0 &-1 & 2 & -1 & 0 &\\dots & &\\dots & 0\\\\\n",
+ " 0 & & -1 & 2 & -1 & 0 &\\dots&\\dots & 0\\\\\n",
+ " \\vdots & & &\\ddots & \\ddots & \\ddots & & &\\vdots \\\\\n",
+ " 0 & \\dots & \\dots & 0 & -1 & 2 & -1 & & 0\\\\\n",
+ " 0 &\\dots & &\\dots & 0 & -1 & 2 & -1 & 0\\\\\n",
+ " 0 & \\dots & & & \\dots &0 & -1 & 2 & 0\\\\\n",
+ " 0 & 0 & & & \\dots & & & 0 & 0 \n",
+ " \\end{bmatrix}$\n",
+ "
\n",
+ " \n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "This matrix is symmetric tridiagonal so it would be foolish to store more\n",
+ "than $n+(n-1)=2n-1$ number to represent or compute with $A$.\n",
+ "
\n",
+ "\n",
+ "First define the diagonal of $A$ as a vector of length 101 by typing
\n",
+ "\n",
+ "`d = [0, 2*ones(?), 0]`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "d= [0,2*ones(?),0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Next obtain the sub and super diagonal of A as a vector of length 100 by typing
\n",
+ "\n",
+ "`e = [? , ? , ?]`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "e=[?,?,?]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Then this wonderful matrix is stored compactly in Julia as
\n",
+ "(Note the display is for humans, only the 201 numbers are stored)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 5,
+ "question": "8"
+ },
+ "outputs": [],
+ "source": [
+ "A=SymTridiagonal(d,e)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "ename": "LoadError",
+ "evalue": "DimensionMismatch(\"\")\nwhile loading In[7], in expression starting on line 25",
+ "output_type": "error",
+ "traceback": [
+ "DimensionMismatch(\"\")\nwhile loading In[7], in expression starting on line 25",
+ "",
+ " in A_mul_B! at linalg/tridiag.jl:66",
+ " in * at operators.jl:82",
+ " in anonymous at no file:26"
+ ]
+ }
+ ],
+ "source": [
+ "## We will do the rest\n",
+ "numx = 101 #number of grid points in x\n",
+ "numt = 10000 #number of time steps to be iterated over \n",
+ "Δx = 1/(numx - 1)\n",
+ "Δt = 0.00005\n",
+ "x = 0: Δx :1 #vector of x values used for plotting and initial conditions\n",
+ " \n",
+ "# initialize to Guassian\n",
+ "μ = 0.5;\n",
+ "σ = 0.05;\n",
+ "c = exp(-(x-μ).^2/(2*σ^2)) / sqrt(2*π*σ^2);\n",
+ "c[1]=0;\n",
+ "c[numx]=0;\n",
+ "\n",
+ "# Iterate difference equation - note that c[1] and c[numx] always \n",
+ "#remain 0 for all time steps\n",
+ "#We create a matrix C whose rows are iterative applications of \n",
+ "#the discrete diffusion equation to the vector c\n",
+ "#We must specify initial conditions\n",
+ "C=zeros(numx,numt);\n",
+ "C[:,1]=c; # Initially Gaussian\n",
+ "C[1,1] = 0; #C=0 at x=0 left boundary\n",
+ "C[numx,1] = 0; #C=0 at x=1 right boundary\n",
+ "\n",
+ "for j=1:(numt-1)\n",
+ " C[:,j+1] = C[:,j] -(Δt/Δx^2)*A*C[:,j]; \n",
+ "end\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Loading help data...\n"
+ ]
+ }
+ ],
+ "source": [
+ "using PyPlot,Interact"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Slider{Int64}([Input{Int64}] 5000,\"iteration\",5000,1:10000)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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vr4IDAyswrTqc3V1feHmDHDeL5oXdd7movrplaGhoUhLS4OLiwuio6MxYMAAfPHFF4iMjMT+/fuf+zdJiYiodBbRoq+++qr+kqZERGRaqu/RExGRebHorYxWq1U7gio47xfLizpvc2HRW5kX9QeA836xvKjzNhcWPRGR5Fj0RESSY9ETEUmORU9EJDkWPRGR5Fj0RESSY9ETEUmORU9EJDkWPRGR5Fj0RESSY9ETEUmORU9EJDkWPRGR5Fj0RESSY9ETEUmORU9EJDkWPRGR5Fj0RESSY9ETEUnOIoo+PDwcGo2mxNvRo0fVjkhEZLVs1Q4AANOnT8c777xjMCaEwIABA+Dg4IAOHTqolIyIyPpZRNE3adIETZo0MRhLT0/HzZs3MW3aNCiKolIyIiLrZxGHboqzYsUKaDQajB49Wu0oRERWzSKLPjc3F5s2bULPnj3h5eWldhwiIqtmkUWflJSE/Px87s0TEZmARRb9ihUrUKdOHQwePFjtKEREVs/iiv7MmTM4ceIERowYATs7O7XjEBFZPYs46+ZpK1asAAC8/fbbz71vdHQ0XF1dDca0Wi20Wq1ZshERmUJSUhKSkpIMxnQ6ndm2pwghhNkevZwePnyIBg0aoEWLFjh8+HCJ98vIyEBQUBBOnDiBwMDAKkxIRGQe5uw1izp0s3XrVty5c6dMe/NERFQ2FlX0K1euhJOTE9544w21oxARScOijtF/++23akcgIpKORe3RExGR6bHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkZzFFf/DgQYSGhqJ27dqoUaMGWrRogU8++UTtWEREVs9W7QAAsH79erz11lsYNmwYvvjiCzg5OeHXX39Fdna22tGIiKye6kV//fp1jB07FpGRkVi0aJF+PDg4WMVURETyUP3QzfLly/HgwQPExMSoHYWISEqqF/3+/fvh5uaGc+fOISAgAHZ2dvDw8MC4ceNw7949teMREVk91Yv++vXruH//PsLCwqDVapGamooPPvgAa9euRWhoqNrxiIisnurH6AsLC5Gfn4+4uDhMnjwZANC1a1dUq1YN0dHR2Lt3L3r06KFySiIi66X6Hr2bmxsAoE+fPgbjISEhAICTJ09WeSYiIpmovkcfEBCAH374ocTliqKUuCw6Ohqurq4GY1qtFlqt1mT5iIhMLSkpCUlJSQZjOp3ObNtTveiHDh2KpUuX4ptvvkHbtm314zt37gQAdOzYscR158+fj8DAQLNnJCIypeJ2SDMyMhAUFGSW7ale9K+99hr69++PGTNmoLCwEB07dsTx48cxY8YMDBgwAK+88oraEYmIrJrqx+gB4Msvv0R0dDQSEhIQGhqKpUuX4r333sOmTZvUjkZEZPVU36MHgOrVq2P27NmYPXu22lGIiKRjEXv0RERkPix6IiLJseiJiCTHoicikhyLnohIcix6IiLJseiJiCTHoicikhyLnohIcix6IiLJseiJiCTHoicikhyLnohIcix6IiLJseiJiCTHoicikhyLnohIcix6IiLJseiJiCTHoicikhyLnohIcix6IiLJWUTRp6WlQaPRFHs7evSo2vGIiKyardoBnjZ79mx0797dYMzPz0+lNEREcrCoom/evDlefvlltWMQEUnFIg7dFBFCqB2BiEg6FlX048ePh52dHVxcXBASEoLvv/9e7UhERFbPIore1dUV0dHRSEhIQFpaGj777DNcvXoV3bp1w+7du9WOR0Rk1SziGH1AQAACAgL0/3/llVcwePBg+Pv7IyYmBr1791YxHRGRdbOIPfriuLi4oF+/fjh9+jQePnyodhwiIqtlEXv0z6MoSrHj0dHRcHV1NRjTarXQarVVEYuIqEKSkpKQlJRkMKbT6cy2PUVY6Kkud+7cgb+/Pzw8PHDixAmDZRkZGQgKCsKJEycQGBioUkIiItMxZ69ZxB79m2++CR8fHwQGBqJ27dr45ZdfMG/ePPzxxx9Yu3at2vGIiKyaRRR9mzZtsHHjRixevBh5eXmoXbs2Xn31VSQmJiIoKEjteEREVs0iij4mJgYxMTFqxyAikpLFnnVDRESmwaInIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpKcRRb98uXLodFo4OzsrHYUIiKrZ3FFf/36dbz//vto0KABFEVROw4RkdWzuKKPjIxE9+7d0atXLwgh1I5DRGT1ylT0OTk5GDJkCHbu3Fnifb7++msMHToUt27dqnCYdevW4cCBA1i8eDFLnojIRMpU9IsXL8bp06fRp0+fEu8TEhKCM2fOYNGiRRUK8p///AfR0dH49NNP0aBBgwo9BhERGStT0e/YsQNjxoyBra1tifexs7PD2LFj8fXXX1coyPjx49GqVStERkZWaH0iIipemYr+559/RocOHZ57v3bt2uHixYvlDrFp0ybs2LEDy5YtK/e6RERUupJ30Z/y+PFj2NnZPfd+dnZ2KCgoKFeAvLw8REVFYcKECfDw8IBOpwMAPHr0CACQm5sLW1tbODo6lutxiYjoL2Uq+vr16+PcuXPo2rVrqfc7d+4c6tWrV64AN2/eRE5ODubOnYu5c+caLa9VqxYGDRqEzZs3Gy2Ljo6Gq6urwZhWq4VWqy1XBiKiqpSUlISkpCSDsaKdXHNQRBlOb4mIiMCJEyeQkZFR4nH6goICBAUFISgoCKtWrSpzgIcPH+LIkSMG58wLIfDpp58iPT0dKSkpqFOnDlq1aqVfnpGRgaCgIJw4cQKBgYFl3hYRkaUyZ6+VaY9+0qRJCAoKwt///nckJCTA09PTYPn169cxZswYXLhwAevWrStXAHt7ewQHBxuNr1q1CjY2Ns99FUFERKUrU9G3adMGn3/+OcaNG4cmTZogKCgIPj4+AIDMzEwcP34cQggsWbIEbdq0MUkwRVH4yVgiIhMoU9EDwJgxY9C6dWvMmjULe/fuxZEjRwAANWrUQN++ffHhhx+iU6dOJgu2atWqch0CIiKi4pW56AGgc+fO+Prrr/HkyRPcvHkTAFCnTh3Y2NiYJRwREVVeuYq+iI2NDTw8PEydhYiIzMDiLmpGRESmxaInIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiyVlE0Z86dQr9+vVD48aNUaNGDbi5uaFLly5ITExUOxoRkdWzVTsAAOTm5sLLywtvvvkmPD09kZeXh8TERPzXf/0Xrly5gqlTp6odkYjIallE0QcHByM4ONhgrF+/fsjMzERCQgKLnoioEizi0E1J3NzcYGtrEb+LiIislkW1qBACT548wZ07d5CcnIxvv/0WCxYsUDsWEZFVs6iiHzduHBISEgAANjY2mDt3LsaNG6dyKiIi62ZRRT916lSMHTsWOTk52L59O9577z3k5+cjJiZG7WhERFbLooq+UaNGaNSoEQAgJCQEADBt2jSMGjUK7u7uakYjIrJaFlX0z+rQoQP+/e9/IzMzs9iij46Ohqurq8GYVquFVqutqohEROWWlJSEpKQkgzGdTme27Vl00e/btw82NjZo2rRpscvnz5+PwMDAKk5FRFQ5xe2QZmRkICgoyCzbs4iiHzt2LFxcXNChQwd4eHjg5s2bSE5OxpdffonJkyfDzc1N7YhERFbLIoq+S5cuWLVqFdasWQOdTgcnJycEBARg3bp1GD58uNrxiIismkUUfXh4OMLDw9WOQUQkJYv+ZCwREVUei56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIWUfSpqakYOXIkWrRoAUdHRzRs2BCDBg1CRkaG2tGIiKyeRRT90qVLkZWVhUmTJmHXrl347LPPkJOTg06dOmHfvn1qxyMismq2agcAgEWLFqFu3boGYyEhIWjWrBlmzZqF7t27q5SMiMj6WcQe/bMlDwCOjo7w9fXFtWvXVEhERCQPiyj64uTm5iIjIwN+fn5qRyEismoWW/Tjx4/Hn3/+ialTp6odhYjIqlnEMfpnTZs2DevXr8eiRYvQrl07teMQEVk1i9ujj4+Px8yZMzFr1iy88847aschIrJ6FrVHHx8fr7/94x//eO79o6Oj4erqajCm1Wqh1WrNFZGIqNKSkpKQlJRkMKbT6cy2PUUIIcz26OXw8ccfIzY2FtOmTUN8fHyp983IyEBQUBBOnDiBwMDAKkpIRGQ+5uw1i9ijnzdvHmJjYxESEoLQ0FAcOXLEYHmnTp1USkZEZP0souh37NgBRVGQkpKClJQUg2WKouDJkycqJSMisn4WUfS8zAERkflY3Fk3RERkWix6IiLJseiJiCTHoicikhyLnohIcix6IiLJseiJiCTHoicikhyLnohIcix6IiLJseiJiCTHoicikhyLnohIcix6IiLJseiJiCTHoicikhyLnohI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ZKSoV6+eqFatmmjZsqWYN29eVcavsMrMe9u2baJr166ibt26wsnJSfj7+4uZM2cafYjKUnl7e+t/Np/+mX16rubsNl69kohIchbzZiwREZkHi56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiYgkx6InIpIci56ISHIseiIiybHoiZ7x8OFDtGvXDs2aNcPdu3f147///jvq1auHHj16GF1XnciSseiJnmFvb4/k5GT88ccfGDVqFIC//oxf0R91Wb9+vdEfuSayZBbzpwSJLEmzZs2wfPlyDBs2DAsWLMCtW7ewf/9+pKSkoF69emrHIyoXFj1RCV5//XWkpaXh/fffR2FhIaZMmYLXXntN7VhE5cbr0ROV4vjx43j55Zdhb2+Pq1evok6dOmpHIio3Fj1RCe7fv4/27dsD+OuN2ODgYGzdulXlVETlx3eUiEoQGRmJa9euYfPmzVixYgW2b9+O+fPnqx2LqNxY9ETFWL58ORITE7F48WL4+vpiyJAhiIqKQkxMDI4dO6Z2PKJy4aEbomf8+OOP6NSpE4YNG4aVK1fqxx89eoQuXbrgzp07OHnyJGrWrKliSqKyY9ETEUmOh26IiCTHoicikhyLnohIcix6IiLJseiJiCTHoicikhyLnohIcix6IiLJseiJiCTHoicikhyLnohIcix6IiLJ/T9BN9Nwa7ejSwAAAABJRU5ErkJggg==",
+ "text/plain": [
+ "Figure(PyObject )"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {
+ "comm_id": "b32aa0f2-164e-42cf-b08a-a75d5c9d332a",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "f=figure(figsize=(4,3.5))\n",
+ "@manipulate for iteration = 1:numt; withfig(f) do\n",
+ " plot(x,C[:,iteration])\n",
+ " axis([0,1,0,8])\n",
+ " xlabel(\"x\")\n",
+ " ylabel(\"C\")\n",
+ " title(\"diffusion at time=$(round(iteration*Δt,3))\")\n",
+ " \n",
+ " end\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Enjoy manipulating the diffusion from a large peak at t=0 to near dissipation at t=.5 ! (Nothing further to submit, your main job is to define A, and learn something about how useful linear algebra can be)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "Homework.progress()"
+ ]
+ }
+ ],
+ "metadata": {
+ "homework": {
+ "course": "MIT-18.06-Spring-2015",
+ "host": "https://juliabox.org",
+ "mode": "answering",
+ "problemset": "pset2"
+ },
+ "kernelspec": {
+ "display_name": "Julia 0.3.11",
+ "language": "julia",
+ "name": "julia-0.3"
+ },
+ "language": "Julia",
+ "language_info": {
+ "name": "julia",
+ "version": "0.3.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/18.06-PS3.ipynb b/18.06-PS3.ipynb
new file mode 100644
index 00000000..4894c12d
--- /dev/null
+++ b/18.06-PS3.ipynb
@@ -0,0 +1,2825 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Removing Homework (unregistered)\n",
+ "INFO: Cloning Homework from git://github.com/shashi/Homework.jl.git\n",
+ "INFO: Computing changes...\n",
+ "INFO: No packages to install, update or remove\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " \n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "WARNING: This version of the GnuTLS library (3.2.11) is deprecated\n",
+ "and contains known security vulnerabilities. Please upgrade to a\n",
+ "more recent version.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "# Running this cell will set up auto-grading\n",
+ "# It might take a while to execute.\n",
+ "\n",
+ "# Please fill in the MIT id form that appears below. You only need to do this once.\n",
+ "\n",
+ "Pkg.rm(\"Homework\")\n",
+ "Pkg.clone(\"git://github.com/shashi/Homework.jl.git\")\n",
+ "\n",
+ "using Homework\n",
+ "\n",
+ "Homework.show_mit_form()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Options{:ToggleButtons,ASCIIString}([Input{ASCIIString}] score,\"report\",\"score\",\"Score\",OptionDict({\"Score\",\"Incorrect attempts\"},{\"Score\"=>\"score\",\"Incorrect attempts\"=>\"attempts\"}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# After you've answered the pset, Check your progress by running this cell.\n",
+ "Homework.progress(true)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 1a. (2 pts) PIVOTS AND FREE VARIABLES
\n",
+ "\n",
+ "Suppose column 1 + column 3 + column 5 = 0 in a 4 by 5 matrix with four pivots.
\n",
+ "Which column is sure to have no pivot?
\n",
+ "\n",
+ "Answer should be a column number such as 2."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1a.1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "2c36f964-4fe7-4d0c-bc28-27f6c8b60f78",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Which variable is free?
\n",
+ "\n",
+ "Answer should be a variable number such as 2."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1a.2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "6a0bc4f0-48cd-41c0-a1c5-0c808c555f40",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 1b. (1pt) SPECIAL SOLUTIONS
\n",
+ "Suppose column 1 + column 3 + column 5 = 0 in a 4 by 5 matrix with four pivots. What are the special solutions?
\n",
+ "\n",
+ "**Instructions**\n",
+ "- If there are none write the empty vector `[]`.
\n",
+ "- If there is one, write a Julia vector. Example: `[a b c]`\n",
+ "- If there is more than one, write a Julia matrix. Example: `[ [a b c]; [d e f] ]`\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1b"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "c0f6a97c-041f-4510-9949-179a35d48eb4",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 2. (4 pts) REDUCED FORMS
\n",
+ "\n",
+ "The reduced form R of a 3 by 3 matrix with randomly chosen entries is almost sure to be_______________.
\n",
+ "\n",
+ "Enter the solution as a Julia matrix of Int64's. Example: [[1 2 3];[4 5 6]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "2.1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "8e252090-d0a2-4498-af9c-b0a0e1db94ba",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The reduced form R of a 4 by 3 matrix with randomly chosen entries is almost sure to be______________.
\n",
+ "\n",
+ "Enter the solution as a Julia matrix of Int64's."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "2.2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "be3902a2-05cf-4130-bac0-7b06103dbe38",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 3. (6 pts) REDUCED FORMS OF BLOCK MATRICES
\n",
+ "Find the reduced echelon form R for A and each of the block matrices B and C:\n",
+ "\n",
+ "$A= \\begin{pmatrix}0 & 0 & 0 \\\\ 0 & 0 & 3 \\\\ 2 & 4 & 6 \\end{pmatrix} \\hspace{.3in}$ \n",
+ "$B= \\begin{pmatrix} A & A \\end{pmatrix} \\hspace{.3in}$ \n",
+ "$C= \\begin{pmatrix} A & A \\\\ A & 0 \\end{pmatrix}$
\n",
+ "\n",
+ "$A_{reduced}$ =
\n",
+ "Enter as a Julia Int64 matrix. Example [[1 2 3];[4 5 6]] or
\n",
+ "[1 2 3
\n",
+ " 4 5 6]
\n",
+ " \n",
+ " Note: while rref will compute the answer, it won't be Int64, it will be Float64. It can be converted,\n",
+ " but we really want you to do this by hand and just type in the answer."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "3.1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "28ded080-0357-4f0e-ac47-c5846ba696be",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "$B_{reduced}$ =
\n",
+ "Enter as a Julia Int64 matrix. Example [[1 2 3];[4 5 6]] or
\n",
+ "[1 2 3
\n",
+ " 4 5 6]
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "3.2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "e484b82c-df55-4e1e-865c-c28c064f1a70",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "$C_{reduced}$ =
\n",
+ "Enter as a Julia Int64 matrix. Example [[1 2 3];[4 5 6]] or
\n",
+ "[1 2 3
\n",
+ " 4 5 6]
"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "3.3"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "c1b6f400-b14e-4088-9eb4-03a6d79d9070",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 4. (2 pts) COMPLETE SOLUTION
\n",
+ "\n",
+ "Construct a 2 by 3 system Ax=b with particular solution $x_p$=(2,4,0) and has as homogeneous solution $x_n$ = any multiple of (1,1,1).
\n",
+ "\n",
+ "Write Julia code such as these three lines:
\n",
+ "A = ???? (The matrix A as in A = [[1 2 3];[4 5 6 ]] )
\n",
+ "b = ??? (The vector b as in b=[1, 2, 3])
\n",
+ "test = A * [1,1,1] == [0,0] && b==A * [2,4,0] && rank(A) > 0 \n",
+ "\n",
+ "The goal is to find A and b so that test yields true."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "4"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "b99cafbe-e7c4-44c2-9a6b-a4104173fce0",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "A = # something like [[1 2 3];[4 5 6 ]]\n",
+ "b = #something like [1, 2, 3]\n",
+ "\n",
+ "\n",
+ "test = A*[1,1,1] == [0,0] && b==A * [2,4,0] && rank(A) > 0"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 5a. (4 pts) FULL RANK"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "These questions are about a \"full rank\" r=m or r=n matrix. Say the matrix has m=6 rows and n=4 columns.
\n",
+ "\n",
+ "The largest possible rank of a 6 by 4 matrix is (enter an integer such as 0, 1, 2, ...)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "5a.1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "4cb0eb10-e418-4afc-bace-6f94fb81a070",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "There is a pivot in every of U and R.
\n",
+ "\n",
+ "1. row
\n",
+ "2. column
\n",
+ "3. entry
\n",
+ "4. cannot be determined from information given
\n",
+ "Answer: 1, 2, 3, or 4"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "5a.2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "4637908e-afee-4b22-b0c7-05268da70df8",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The solution to Ax=b .
\n",
+ "\n",
+ "1. always exists, and is unique \n",
+ "2. always exists, but is not unique \n",
+ "3. does not always exists, but is unique when it does \n",
+ "4. does not always exists, and is not unique when it does
\n",
+ "Answer: 1, 2, 3, or 4\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "5a.3"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "b3c56d16-a923-48a0-9fec-ffa0c9429820",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The nullspace of A is .
\n",
+ "\n",
+ "1. ∅ \n",
+ "2. 0-dimensional \n",
+ "3. 1-dimensional \n",
+ "4. 2-dimensional \n",
+ "5. 4-dimensional
\n",
+ "Answer: 1, 2, 3, 4, or 5"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "5a.4"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "83c132c4-0750-459c-b767-48b04eb9959a",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 5b. (2 pts) FULL RANK 2\n",
+ "\n",
+ "Give an example of a 6 by 4 matrix with full rank.\n",
+ "\n",
+ "Write a Julia matrix, perhaps in the form
\n",
+ "```\n",
+ "A= [a b c d\n",
+ " e f g h\n",
+ " i j k l\n",
+ " m n o p\n",
+ " q r s t]\n",
+ "```\n",
+ "and then type\n",
+ "\n",
+ "`rank(A)`\n",
+ " \n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "5b"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "9be43e98-30bf-4b14-a3ed-70ec6a1c0114",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 6a. (3 pts) SPACES OF MATRICES\n",
+ "\n",
+ "What subspace of 3 by 3 matrices is spanned (take all combinations) by the following matrices?
\n",
+ "\n",
+ "### I. The invertible matrices\n",
+ "\n",
+ "1.The whole set of matrices.
\n",
+ "2 The set of invertible matrices.
\n",
+ "3.The set of matrices with at least one non zero entry. \n",
+ "\n",
+ "Choose a number: 1,2, or 3\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6a.1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "aa0adae8-b0c7-4e4a-a5b1-fe80d3d6b398",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### II. The Rank One matrices
\n",
+ "\n",
+ "1. The set of rank one matrices.
\n",
+ "2. The set of rank three matrices.
\n",
+ "3. The whole set of matrices\n",
+ "\n",
+ "Choose a number: 1,2, or 3"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6a.2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "97d776b8-23b2-4908-b0c3-a05c542fb5c0",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### III. The identity matrix.\n",
+ "\n",
+ "1. The set of diagonal matrices.
\n",
+ "2. The whole set of matrices.
\n",
+ "3. The set of diagonal matrices with the same entry on the diagonal\n",
+ "\n",
+ "Choose a number: 1,2, or 3"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6a.3"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "1c3426ce-841f-4a14-a5a3-8750f0f4989e",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 6b. (3 pts) SUM OF RANK ONE MATRICES\n",
+ "\n",
+ "Suppose $A$ is the sum of two matrices of rank one: $A=uv^T+wz^T$.\n",
+ "\n",
+ "### I. Which vectors span the column space of A?\n",
+ "\n",
+ " 1. The linear combinations of v$_i$u+z$_i$w, where i=1,2,....
\n",
+ " 2. The vectors u and w.
\n",
+ " 3. The vectors v and w.
\n",
+ " 4. The linear combinations of u$_i$v$^T$+w$_i$v$^T$, where i=1,2,...\n",
+ " \n",
+ " Choose a number: 1,2,3, or 4"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6b.1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "123a4244-1368-4200-b3dd-5424af222900",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "II. Which vectors span the row space of A?\n",
+ "\n",
+ "1. The linear combinations of v$_i$u+z$_i$w, where i=1,2,...
\n",
+ "2. The vectors z and w.
\n",
+ "3. The vectors v and z.
\n",
+ "4. The linear combinations of u$_i$v$^T$+w$_i$v$^T$, where i=1,2,...\n",
+ "\n",
+ "Choose a number: 1,2,3, or 4"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6b.2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "3712a5a0-eec1-470c-989f-7dc0c4b67870",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "III. The rank is less than 2 if and only if .\n",
+ "\n",
+ "1. u and w are dependent or v and z are dependent
\n",
+ "2. one of the four vectors is zero
\n",
+ "3. u and w are dependent
\n",
+ "4. u and z are dependent or v and w are dependent\n",
+ "\n",
+ "Choose a number: 1,2,3, or 4"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6b.3"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "ec055834-2337-4460-b00b-8aa03fa631a8",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 7. SPECIAL SOLUTIONS\n",
+ "\n",
+ "**7a. (2 pts)**\n",
+ "For the matrix \n",
+ "$A=\\begin{pmatrix}\n",
+ "1 & 2 & 2 & 4 & 6 \\\\\n",
+ "1 & 2 & 3 & 6 & 9 \\\\\n",
+ "0 & 0 & 1 & 2 & 3\n",
+ "\\end{pmatrix}$\n",
+ " find a special solution for every free variable. \n",
+ "(Set one free variable to 1. Set the other free variables to zero.)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Enter the special solutions by columns `[[a,b,c,d,e] [f,g,h,i,j] [k,l,m,n,o]]` in order of the free variables.\n",
+ "(If you see bounds error, make sure you put a space between right brackets and left brackets)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "7a.1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "39e617d6-e182-42e0-a87f-d4f89f2b2580",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "For the matrix\n",
+ "$B=\\begin{pmatrix}\n",
+ "2 & 4 & 4 \\\\\n",
+ "0 & 4 & 4\\\\\n",
+ "0 & 8 & 8\n",
+ "\\end{pmatrix}\n",
+ "$\n",
+ "find a special solution for every free variable. (Set one free variable to 1. Set the other free variables to zero.)\n",
+ "\n",
+ "Enter the special solutions more or less as above."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "7a.2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "f06c2000-711a-40e8-8374-be84dae31ee0",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**7b (3 pts.) RREF and Nullspace**"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Find the reduced row echelon form $R_B$ of\n",
+ "$B=\\begin{pmatrix}\n",
+ "2 & 4 & 4 \\\\\n",
+ "0 & 4 & 4\\\\\n",
+ "0 & 8 & 8\n",
+ "\\end{pmatrix}\n",
+ "$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "7b.1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "d0c58450-fb79-482c-b188-cccafcf35316",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Find the reduced row echelon form $R_A$ of\n",
+ "$A=\\begin{pmatrix}\n",
+ "1 & 2 & 2 & 4 & 6 \\\\\n",
+ "1 & 2 & 3 & 6 & 9 \\\\\n",
+ "0 & 0 & 1 & 2 & 3\n",
+ "\\end{pmatrix}\n",
+ "$"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "7b.2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "292a6fac-8dd8-4886-8d34-0dca7ec48460",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Is the nullspace of $R_A$ equal to the nullspace of A?
\n",
+ "Type true or false"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "7b.3"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "838bf02c-c8f1-4830-8e81-4bc0b8ebd0b0",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**7c (4 pts.) PIVOTS AND FREE VARIABLES** (type `true` or `false` for each of these problems)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "True or False.\n",
+ "\n",
+ "A square matrix has no free variables\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "7c.1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "7f4079f4-6aa7-4b5a-8715-3734be628620",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "An invertible matrix has no free variables"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "7c.2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "ee28d840-366b-4f64-b468-6ef60c436340",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "An m by n matrix has no more than n pivot variables\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "7c.3"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "b6fc4b28-dff1-4364-9612-3ac2bf07ced0",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "An m by n matrix has no more than m pivot variables"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "7c.4"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "4312aa18-9a5d-4620-9ab2-6f28335c0468",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 8 . (3 Pts.) NULLSPACE AND SPECIAL SOLUTIONS \n",
+ "\n",
+ "The JULIA command rref(A) finds the reduced echelon form of a matrix A.
\n",
+ "Okay to type
\n",
+ "? rref\n",
+ "but it won't tell you much.\n",
+ "\n",
+ "For each matrix equation Ax=0, use rref to determine the number of special solutions, which is equal to the dimension of the nullspace.\n",
+ "\n",
+ "rand(9,9)x = 0
\n",
+ "ones(9,9)x = 0
\n",
+ "[1 -2 -1 1 0 -1; 2 1 2 3 1 -1; -1 -2 1 -3 0 -3]x = 0\n",
+ "\n",
+ "You can use rref to determine the dimension of the nullspace. Recall that a point has dimension 0, a line dimension 1, and plane dimension 2."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "9x9 Array{Float64,2}:\n",
+ " 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rref(rand(9,9))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "8.1"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "18b4bf50-1f2c-4ec2-b22f-0e4006d2a1f8",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "nullspace_dimension = ?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "9x9 Array{Float64,2}:\n",
+ " 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n",
+ " 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rref(ones(9,9))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "8.2"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "1b845a6a-08aa-4dce-8657-2aa0aadbc9b8",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "nullspace_dimension = ?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3x6 Array{Float64,2}:\n",
+ " 1.0 0.0 0.0 1.625 0.25 0.0\n",
+ " 0.0 1.0 0.0 0.5 0.0 1.0\n",
+ " 0.0 0.0 1.0 -0.375 0.25 -1.0"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "rref([1 -2 -1 1 0 -1; 2 1 2 3 1 -1; -1 -2 1 -3 0 -3])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "8.3"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "5d261268-383e-44a8-9917-07b43f9be57a",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "nullspace_dimension = ?"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 9 . (2 pt.) NULLSPACE\n",
+ "In Julia set\n",
+ "` v=[1, 2, 3]` then\n",
+ "` w=[2, 3, 4]` and\n",
+ "` A=zeros(3,3)`\n",
+ "\n",
+ "Then create the matrix \n",
+ "$A=\\begin{pmatrix} 1 & 2 & 3 \\\\2 & 3 & 4 \\\\ 3 & 4 & 5 \\end{pmatrix}$ using Julia's column assignment\n",
+ "commands.\n",
+ "\n",
+ "In other words \n",
+ "\n",
+ "`A[:,1]` = (first column in terms of v and w) \n",
+ "`A[:,2]` = (second column in terms of v and w) \n",
+ "`A[:,3]` = (third column in terms of v and w) \n",
+ "\n",
+ "Conclude with the rref(A). There probably should be 7 lines of code all together."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "9"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "cbf2f328-2266-4e34-ae8a-fd3a6856c360",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "A=zeros(3,3)\n",
+ "v=[1,2,3]\n",
+ "w=[2,3,4]\n",
+ "A[:,1]=?\n",
+ "A[:,2]=?\n",
+ "A[:,3]=?\n",
+ "display(A)\n",
+ "rref(A)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 10 . (3 pts.) MORE EXERCISE WITH RREF\n",
+ "\n",
+ "Suppose that R is the reduced echelon form of a 4 by 5 matrix A.\n",
+ "\n",
+ "$R = rref(A) =\n",
+ "\\begin{pmatrix} 1 & 3 & 0 & 1 & -2 \\\\\n",
+ "0 & 0 & 1 & 2 & 4 \\\\\n",
+ "0 & 0 & 0 & 0 & 0 \\\\\n",
+ "0 & 0 &0& 0 & 0\n",
+ "\\end{pmatrix} $\n",
+ "\n",
+ "If $v=[1,2,3,4]$ is the first column of $A$ and $w=[5,6,7,8]$ is the third column of $A$,\n",
+ "what is $A$? Okay to use Julia to compute. We'll start you off."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4-element Array{Int64,1}:\n",
+ " 5\n",
+ " 6\n",
+ " 7\n",
+ " 8"
+ ]
+ },
+ "execution_count": 53,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "v=[1,2,3,4]\n",
+ "w=[5,6,7,8]\n",
+ "\n",
+ "# Edit the line that follows, to get A."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 3,
+ "question": "10"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "1be538b0-7c99-40b8-9600-770c406665c4",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "A = [v ?v w v+?w ?v+?w]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 11 . (3 pts.) STATISTICS ON RANDOM MATRICES\n",
+ "\n",
+ "We did a diffusion problem last week that showed how useful Julia (or MATLAB) can be in testing and exploring ideas in applied math problems. This week we'll see how useful Julia(or MATLAB) can be in experimenting to create conjectures about mathematics ideas.\n",
+ "\n",
+ "We've seen that on average, a random matrix is invertible. But what if the random matrix has entries that are either 0 or 1 with equal probability? What is the probability that a 5 by 5 matrix whose entries are all zeros or ones is singular? And what is the average number of pivot columns? That is what you will find out in this exercise.\n",
+ "\n",
+ "\n",
+ "To create a random integer matrix whose entries are either 0 or 1, you can use the Julia command rand(0:1,5,5);. To find the number of pivot columns of a matrix R, use the Julia command rank(R).\n",
+ "\n",
+ "To create a conjecture on the probability that such a matrix is singular, we are going to want to collect a lot of data. That means that we want to generate many many of these matrices. You may want to start small, say 5 or 10, but the you might what to test your conjectures for even larger numbers, say 100, 1000, or 10000. \n",
+ "\n",
+ "There is some code created for you below. \n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "randstats (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "function randstats(num,n)\n",
+ " ranks = [ rank(rand(0:1,n,n)) for i=1:num] # Run num experiments and build a vector of ranks\n",
+ " mean(ranks), mean(ranks.< n)\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "elapsed time: 24.997667196 seconds (12878368472 bytes allocated, 39.64% gc time)\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "(4.272566,0.626207)"
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "num = 100000; # Number of random trials (100,000 takes 2 seconds, your matlab friends were told to stay less than 10,000)\n",
+ "n = 5 # Size of matrix\n",
+ "@time randstats(num,n)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "# Enter what you see (avg number of pivots, probability of being singular)\n",
+ "# in the format [a.b,c.d] where you rounded the answer to one decimal place.\n",
+ "# a or c may be 0\n",
+ "# make sure you have converged\n",
+ "\n",
+ "# We can't test this, but think about the answer, and decide if you are surprised\n",
+ "# or not. Maybe play with some other numbers for your own amusement. \n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Write your answer here as a vector, with floating point numbers rounded to 1st decimal place"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 3,
+ "precision": 1,
+ "question": "11"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "c4848750-de51-413c-8a52-2000ee5198c8",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 12 . (3 pts.) MORE RANDOM MATRICES \n",
+ "\n",
+ "We've looked at random matrices whose entries are 0 or 1. But how does size effect the rank and the probability of being singular? Repeat the previous exercise for 10 by 10 matrices with entries that are 0 or 1.\n",
+ "\n",
+ "\n",
+ "\n",
+ "To create a conjecture on the probability that such a matrix is singular, we are going to want to collect a lot of data. That means that we want to generate many many of these matrices. \n",
+ "\n",
+ "\n",
+ "\n",
+ "If you enjoyed this problem, you may be interested in looking at more data. Here are a few ideas to get your started.\n",
+ "\n",
+ "You can explore the probability of singularity and the average number of pivots for different sizes of random matrices. Can you determine how this probability depends on the size of the matrix?\n",
+ "You might try to find the probability of a 10 by 10 random matrix with entries 0 or 1 has rank 10, 9, 8, 7 etc. You can check your probabilities against the expected value to see if your probabilities match your observations.\n",
+ "You might try to connect these probabilities with determinant formulas to see if you can predict the numbers from other formulas and prove a relationship.\n",
+ "Happy explorations!\n",
+ "\n",
+ "( guess what happens as n$\\rightarrow \\infty$, but only run up to 80, we have limited free cycles so please \n",
+ "be kind)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "n:5:(4.232,0.652)\n",
+ "elapsed time: 0.022301843 seconds (6827680 bytes allocated)\n",
+ "n:10:(9.718,0.27)\n",
+ "elapsed time: 0.018120023 seconds (8616040 bytes allocated)\n",
+ "n:20:(19.996,0.004)\n",
+ "elapsed time: 0.048506671 seconds (14090232 bytes allocated)\n",
+ "n:40:(40.0,0.0)\n",
+ "elapsed time: 0.1877261 seconds (29689376 bytes allocated, 17.51% gc time)\n",
+ "n:80:(80.0,0.0)\n",
+ "elapsed time: 0.803544689 seconds (80264872 bytes allocated, 9.96% gc time)\n"
+ ]
+ }
+ ],
+ "source": [
+ "nvalues = [5,10,20,40,80]\n",
+ "for n in nvalues\n",
+ " \n",
+ "@time println(\"n:\", n, \":\", randstats(500,n))\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Suppose n were too large to run, say `n=10^100`. (Do not try to run, please!) \n",
+ "Take a guess at the mean number of pivots divided by n. Take a guess at the probability\n",
+ "of singularlity. Type your answer in the format `[a.b, c.d]`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 3,
+ "precision": 1,
+ "question": "12"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "de2c7ac0-5bb9-4ef2-896b-9edc10fe9190",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "Homework.progress()"
+ ]
+ }
+ ],
+ "metadata": {
+ "homework": {
+ "admins": [
+ "mit.edelman@gmail.com"
+ ],
+ "course": "18.06-Spring-2015",
+ "mode": "answering",
+ "problemset": "pset3"
+ },
+ "kernelspec": {
+ "display_name": "Julia 0.3.11",
+ "language": "julia",
+ "name": "julia-0.3"
+ },
+ "language": "Julia",
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "0.3.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/18.06-PS4.ipynb b/18.06-PS4.ipynb
new file mode 100644
index 00000000..285d4c94
--- /dev/null
+++ b/18.06-PS4.ipynb
@@ -0,0 +1,1481 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Removing Homework (unregistered)\n",
+ "INFO: Cloning Homework from git://github.com/shashi/Homework.jl.git\n",
+ "INFO: Computing changes...\n",
+ "INFO: No packages to install, update or remove\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " \n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "WARNING: This version of the GnuTLS library (3.2.11) is deprecated\n",
+ "and contains known security vulnerabilities. Please upgrade to a\n",
+ "more recent version.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "# Running this cell will set up auto-grading\n",
+ "# It might take a while to execute.\n",
+ "\n",
+ "# Please fill in the MIT id form that appears below. You only need to do this once.\n",
+ "\n",
+ "Pkg.rm(\"Homework\")\n",
+ "Pkg.clone(\"git://github.com/shashi/Homework.jl.git\")\n",
+ "\n",
+ "using Homework\n",
+ "\n",
+ "Homework.show_mit_form()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Options{:ToggleButtons,ASCIIString}([Input{ASCIIString}] score,\"report\",\"score\",\"Score\",OptionDict({\"Score\",\"Incorrect attempts\"},{\"Score\"=>\"score\",\"Incorrect attempts\"=>\"attempts\"}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " | Names | total | 0a | 0b | 0c.1 | 0c.2 | 1a | 1b | 2a | 2b | 2c | 2d | 3a | 3b | 4a | 4b | 5a | 5b |
---|
1 | MAX | 50.0 | 1.0 | 2.0 | 2.0 | 2.0 | 4.0 | 3.0 | 2.0 | 2.0 | 2.0 | 2.0 | 5.0 | 5.0 | 4.0 | 4.0 | 5.0 | 5.0 |
---|
"
+ ],
+ "text/plain": [
+ "1x18 DataFrame\n",
+ "| Row | Names | total | 0a |\n",
+ "|-----|-------|-----------------------|------------------------|\n",
+ "| 1 | \"MAX\" | Colored(\"black\",50.0) | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 0b | 0c.1 |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 0c.2 | 1a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"4.0\") |\n",
+ "\n",
+ "| Row | 1b | 2a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"3.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 2b | 2c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 2d | 3a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"5.0\") |\n",
+ "\n",
+ "| Row | 3b | 4a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"5.0\") | Colored(\"black\",\"4.0\") |\n",
+ "\n",
+ "| Row | 4b | 5a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"4.0\") | Colored(\"black\",\"5.0\") |\n",
+ "\n",
+ "| Row | 5b |\n",
+ "|-----|------------------------|\n",
+ "| 1 | Colored(\"black\",\"5.0\") |"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {
+ "comm_id": "ebfaf1f0-fd1c-4b1c-bde2-40c64b080598",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# This might take more than one attempt to work...\n",
+ "\n",
+ "Homework.progress()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "# Cheatsheet: How to enter vectors and matrices\n",
+ "\n",
+ "v=[1,2,3]; # vector (no row vectors/column vectors, just vectors!)\n",
+ "A=[[1 2 3],[4 5 6],[7 8 9]] # matrix by rows .. or\n",
+ "A=[1 2 3\n",
+ " 4 5 6\n",
+ " 7 8 9]\n",
+ "B=[[1,2,3] [4,5,6] [7,8,9]] # matrix by columns;"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 0\n",
+ "\n",
+ "### Problem 0a (1 point)\n",
+ "\n",
+ "If you exchange the first two rows of a matrix $A$, which of the four subspaces stay the same?\n",
+ "\n",
+ "Select the answers that match.\n",
+ "\n",
+ "1. Row space\n",
+ "2. Column space\n",
+ "3. Null space\n",
+ "4. Left null space\n",
+ "5. All 4 spaces\n",
+ "\n",
+ "Enter your answer as a vector of answer numbers: e.g. [1,2] if both 1 and 2 are correct"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[1.0,3.0]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 0a",
+ "question": "0a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 0b (2 points)\n",
+ "If you exchange the first two rows of $A$, and $v=(1,2,3,4)$ is in the left nullspace of $A$, write down a nonzero vector in the left nullspace of the new matrix."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[2.0,1.0,3.0,4.0]",
+ "collapsed": false,
+ "explanation": "A vector in the left null space tells you a combination of the rows which is zero. If you switch two rows, you can find a combination which is zero by switching the first two entries of the vector.",
+ "max_attempts": 1000,
+ "max_score": 2,
+ "msg": " Will commit last result as the answer to question 0b",
+ "question": "0b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 0c (4 points)\n",
+ "\n",
+ "$A^T y=d$ is solvable when $d$ is in which of the four subspaces?\n",
+ "\n",
+ "Choose one of the four subspaces.\n",
+ "\n",
+ "1. Row space of A\n",
+ "2. Column space of A\n",
+ "3. Null space of A\n",
+ "4. Left null space of A\n",
+ "\n",
+ "(Answer format: integer 1-4 : the answer)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "1.0",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "msg": " Will commit last result as the answer to question 0c.1",
+ "question": "0c.1"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The solution $y$ is unique when which of the four subspaces contains only the zero vector?\n",
+ "\n",
+ "Choose one of the four subspaces.\n",
+ "\n",
+ "1. Row space of A\n",
+ "2. Column space of A\n",
+ "3. Null space of A\n",
+ "4. Left null space of A\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "4.0",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "msg": " Will commit last result as the answer to question 0c.2",
+ "question": "0c.2"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 1 *(7 points)*\n",
+ "\n",
+ "### Problem 1a *(4 point)*\n",
+ "\n",
+ "**The Incidence matrix for a triangle graph**\n",
+ "\n",
+ "\n",
+ "\n",
+ "Enter the 3 by 3 incidence matrix A for the triangle graph on the picture. The first row has `−1` in column `1` and `+1` in column 2.\n",
+ "\n",
+ "Easiest format: `[[-1 1 ?],[? ? ?],[? ? ?]]`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[-1.0,-1.0,0.0],[1.0,0.0,-1.0],[0.0,1.0,1.0]]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 4,
+ "msg": " Will commit last result as the answer to question 1a",
+ "question": "1a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 1b. (3 point)\n",
+ "Give the vector in A's nullspace whose first entry is 5. Format idea: [5, ?, ..."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[5.0,5.0,5.0]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 3,
+ "msg": " Will commit last result as the answer to question 1b",
+ "question": "1b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 2 (8 points)\n",
+ "### Problem 2a. (2 point) \n",
+ "\n",
+ "
\n",
+ "\n",
+ "Enter the 5 by 4 incidence matrix A for the square graph in the picture.
\n",
+ "[[a b c d],[e f g h], ... ]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[-1.0,-1.0,0.0,0.0,0.0],[1.0,0.0,-1.0,-1.0,0.0],[0.0,1.0,1.0,0.0,-1.0],[0.0,0.0,0.0,1.0,1.0]]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "msg": " Will commit last result as the answer to question 2a",
+ "question": "2a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 2b *(2 point) *\n",
+ "\n",
+ "Find a solution to Ax=0 whose first element is 5. [a, b, c, ...]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[5.0,5.0,5.0,5.0]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "msg": " Will commit last result as the answer to question 2b",
+ "question": "2b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 2c *(2 point) *\n",
+ "\n",
+ "Find two solutions with x₃ = 1 (third entry is 1) to Aᵀx = 0 that correspond to triangular loops.
\n",
+ "The \"upper left loop\" solution is: [a,b,...]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[1.0,-1.0,1.0,0.0,0.0]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "msg": " Will commit last result as the answer to question 2c",
+ "question": "2c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 2d *(2 point) *\n",
+ "The \"lower right solution is\": [a,b,...]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[0.0,0.0,1.0,-1.0,1.0]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "msg": " Will commit last result as the answer to question 2d",
+ "question": "2d"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 3a *(10 points)*\n",
+ "\n",
+ "Find the incidence matrix A of the directed complete graph on 5 vertices. The vertices and edges are labeled for you.\n",
+ "\n",
+ "Recall that the columns of the incidence matrix are indexed by the vertices. The rows are indexed by the edges. Each row has entries which are either -1, 1, or 0. The -1 occurs at the vertex position where the edge begins, and the 1 occurs at the vertex position where the edge terminates.\n",
+ "\n",
+ "\n",
+ "\n",
+ "Write the incidence matrix A as an Integer matrix."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[-1.0,-1.0,-1.0,-1.0,0.0,0.0,0.0,0.0,0.0,0.0],[1.0,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,1.0,0.0,0.0,-1.0,-1.0,0.0],[0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,0.0,-1.0],[0.0,0.0,0.0,1.0,0.0,0.0,1.0,0.0,1.0,1.0]]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 5,
+ "msg": " Will commit last result as the answer to question 3a",
+ "question": "3a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 3b *(5 points)*\n",
+ "Determine a basis for the row space.
Enter your basis as a matrix whose rows each form a basis element for the row space of A.
\n",
+ "\n",
+ "(Format: the answer we are checking for takes some of the rows of A in the order in which they appear in A. More precisely please create a matrix that has the first k rows of A, where k is the number of basis vectors.)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[-1.0,-1.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,1.0,0.0],[0.0,0.0,0.0,1.0]]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 5,
+ "msg": " Will commit last result as the answer to question 3b",
+ "question": "3b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## Problem 4\n",
+ "\n",
+ "**About Stoichiometric Matrices**\n",
+ "\n",
+ "\n",
+ "[ Quick Summary for those\n",
+ "who do not want to read everything: chemical reactions turn into matrices by turning \n",
+ "coefficients into matrix elements. Every reaction is a column in the matrix. The coefficients on the left side of the\n",
+ "chemical reaction appear with negative signs.\n",
+ "The nullspace corresponds to the reactions' steady state with negative signs\n",
+ "corresponds to backwards reactions.]\n",
+ "\n",
+ "\n",
+ "Suppose that you have a system of chemical reactions. You know the velocity, or rate of each individual reaction, and you know which species are involved in each reaction. You can think of the reactants and reaction rates as the vertices and edges in a network, or graph. We create something very similar to the incidence matrix from a graph, and use it to discover the steady state solutions to a system of reactions.\n",
+ "\n",
+ " Basics of chemical reactions \n",
+ "\n",
+ "Recall the following basics about chemical reactions.\n",
+ "\n",
+ "If A is a molecule, then we use [A] to denote the concentration of that molecular species. The concentration is a function of time, but we typically are interested in the concentration at steady state (no time dependence).\n",
+ "\n",
+ "If A→B is a unimolecular reaction, then the velocity or reaction rate, v, is written as\n",
+ "\n",
+ "$$ v=\\frac{d[B]}{dt}=−\\frac{d[A]}{dt}=k[A].$$\n",
+ "If A+B→P+Q is a bimolecular chemical reaction, then the reaction rate is\n",
+ "\n",
+ "$$v=\\frac{d[P]}{dt}=\\frac{d[Q]}{dt}=−\\frac{d[A]}{dt}=−\\frac{d[B]}{dt}=k[A][B].$$\n",
+ "\n",
+ " Example 1: Simple Stoichiometric Matrix \n",
+ "\n",
+ "Consider the single reaction with three different chemical species.\n",
+ "\n",
+ "2NO+O2⇌2NO2.\n",
+ "
\n",
+ "\n",
+ "The stoichiometric matrix is a column vector:\n",
+ "\n",
+ "$$\\begin{pmatrix} 2 \\\\ -1 \\\\ 2 \\end{pmatrix}$$\n",
+ "such that\n",
+ "\n",
+ " [[NO] [O$_2$] [NO$_2$]] $\\begin{pmatrix} 2 \\\\ -1 \\\\ 2 \\end{pmatrix} =0. $\n",
+ "\n",
+ "\n",
+ "Note the convention that reactants have negative sign, and products have positive sign.\n",
+ "\n",
+ " Example 2: Input and output \n",
+ "\n",
+ "Now consider the same reaction that is no longer closed. We will allow that oxygen is being continuously added into the system, and we are taking out nitrogen dioxide. The reaction is now the following system:\n",
+ "\n",
+ "r1: 2NO+O$_2$⇌2NO$_2$
\n",
+ "e1: →O$_2$
\n",
+ "e2: NO$_2$→\n",
+ "\n",
+ "\n",
+ "\n",
+ " \n",
+ "\n",
+ "The stoichiometric matrix is\n",
+ "\n",
+ "\n",
+ "$\\begin{matrix} & r_1 & e_1 & e_2 \\\\\n",
+ "NO & -2 & 0 & 0 \\\\\n",
+ "O_2 & -1 & 1 & 0 \\\\\n",
+ "NO_2 & 2 & 0 & -1\n",
+ "\\end{matrix}$\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ " \t \t \t \n",
+ " Example 3: Closed System of Reactions \n",
+ "\n",
+ "Suppose we have the following closed system of chemical reactions. It is closed because no new reactants are entering the system, and no products are leaving the system.\n",
+ "\n",
+ "r1: H$_2$O + CO ⇌CO$_2$ + H$_2$
\n",
+ "r2: H$_2$O + H ⇌ H$_2$ + OH
\n",
+ "r3: OH + CO ⇌ CO$_2$ + H\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "The following molecular species can be designated:\n",
+ "\n",
+ " X$_1$\t= H$_2$O\t \t\n",
+ " X$_2$\t= CO\t \t \n",
+ " X$_3$\t= CO$_2$\t \n",
+ " X$_4$\t= H$_2$\t \t \n",
+ " X$_5$\t= H\t \t \n",
+ " X$_6$\t= OH\t \t\n",
+ " \n",
+ "Then the coefficient on every term in this reaction is 1, the entries will all be +1, −1, or 0. The convention is that the reactants have negative, and the products have positive sign.\n",
+ "\n",
+ "The stoichiometric matrix is given by the following, where the columns each designate a particular reaction, and the coefficients determine the amount of each species present.\n",
+ "\n",
+ "$\\begin{matrix} & r_1 & e_1 & e_2 \\\\\n",
+ "X_1=H_20 & -1 & -1 & 0 \\\\\n",
+ "X_2=CO & -1 & 0 & -1 \\\\\n",
+ "X_3=CO_2 & 1 & 0 & 1 \\\\\n",
+ "X_4 = H_2 & 1 & 1 & 0 \\\\\n",
+ "X_5 =H & 0 & -1 & 1 \\\\\n",
+ "X_6 = OH & 0 & 1 & -1\n",
+ "\\end{matrix}$\n",
+ "\n",
+ "\n",
+ "\n",
+ "Let $v_1$ is the velocity of reaction 1, $v_2$ is the velocity of reaction 2, and $v_3$ is the velocity of reaction 3, then\n",
+ "\n",
+ "$$\\begin{pmatrix}\n",
+ "\\frac{d[X_1]}{dt} \\\\\n",
+ "\\frac{d[X_2]}{dt} \\\\\n",
+ "\\frac{d[X_3]}{dt} \\\\\n",
+ "\\frac{d[X_4]}{dt} \\\\\n",
+ "\\frac{d[X_5]}{dt} \\\\\n",
+ "\\frac{d[X_6]}{dt} \n",
+ "\\end{pmatrix}=\n",
+ "\\begin{pmatrix}\n",
+ "-1 & -1 & 0 \\\\\n",
+ "-1 & 0 & -1 \\\\\n",
+ "1 & 0 & 1\\\\\n",
+ "1 & 1 & 0 \\\\\n",
+ "0 & -1 & 1 \\\\\n",
+ "0 & 1 & -1\n",
+ "\\end{pmatrix}\n",
+ "\\begin{pmatrix}\n",
+ "v_1 \\\\\n",
+ "v_3 \\\\\n",
+ "v_3\n",
+ "\\end{pmatrix}.\n",
+ "$$\n",
+ "\n",
+ "To find the steady state solution, we are interested in finding the velocities such that each concentration is steady, that is the derivative is zero:\n",
+ "\n",
+ "$$\\begin{pmatrix}\n",
+ "0 \\\\ 0 \\\\ 0 \\\\\n",
+ "0 \\\\ 0 \\\\ 0 \n",
+ "\\end{pmatrix}=\n",
+ "\\begin{pmatrix}\n",
+ "-1 & -1 & 0 \\\\\n",
+ "-1 & 0 & -1 \\\\\n",
+ "1 & 0 & 1\\\\\n",
+ "1 & 1 & 0 \\\\\n",
+ "0 & -1 & 1 \\\\\n",
+ "0 & 1 & -1\n",
+ "\\end{pmatrix}\n",
+ "\\begin{pmatrix}\n",
+ "v_1 \\\\\n",
+ "v_3 \\\\\n",
+ "v_3\n",
+ "\\end{pmatrix}.\n",
+ "$$\n",
+ "\n",
+ "This is exactly the nullspace of the matrix. In this case the nullspace, which corresponds to the steady state is:\n",
+ "\n",
+ "$$\\begin{pmatrix}\n",
+ "v_1 \\\\\n",
+ "v_3 \\\\\n",
+ "v_3\n",
+ "\\end{pmatrix}=\n",
+ "\\begin{pmatrix}\n",
+ "-1 \\\\\n",
+ "1 \\\\\n",
+ "1\n",
+ "\\end{pmatrix} .\n",
+ "$$\n",
+ "This is telling us that at steady state, the first reaction will be proceeding in the backwards direction, and the other two in the forwards direction, all with the same velocity, or reaction rate k.\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 4a *(5 pts)*\n",
+ "\n",
+ "**Closed Stoichiometric Matrix**\n",
+ "\n",
+ "Find the stoichiometric matrix A for the follow system of reactions. Please order your rows such that the species occur in alphabetical order according to the given variable names (A,B,C,D,E,X,Y).\n",
+ "\n",
+ "In this problem, we assume that we are interested in creating a product E with input A. Y and X are enzymes that will further the reaction rates.\n",
+ "\n",
+ "$r1: A ⇌ B\\\\\n",
+ "r2: 2B ⇌ C+Y\\\\\n",
+ "r3: 2B+X ⇌ D+Y\\\\\n",
+ "r4: D ⇌ E+X\\\\\n",
+ "r5: C+X ⇌ D\\\\\n",
+ "r6: C⇌ E\n",
+ "$\n",
+ "\n",
+ "The stoichiometric matrix A (Int64 entries is)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[-1.0,1.0,0.0,0.0,0.0,0.0,0.0],[0.0,-2.0,1.0,0.0,0.0,0.0,1.0],[0.0,-2.0,0.0,1.0,0.0,-1.0,1.0],[0.0,0.0,0.0,-1.0,1.0,1.0,0.0],[0.0,0.0,-1.0,1.0,0.0,-1.0,0.0],[0.0,0.0,-1.0,0.0,1.0,0.0,0.0]]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 4,
+ "msg": " Will commit last result as the answer to question 4a",
+ "question": "4a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Use Julia's rref command to find the nullspace of A. \n",
+ "Directly reading the information in the rref(A)\n",
+ "create a flux matrix\n",
+ "that has the basis vectors for the nullspace of A as rows. \n",
+ "
\n",
+ "While there are many bases for the nullspace, the autograder is looking\n",
+ "for the one that would naturally be produced by pencil and paper.\n",
+ "(Format: Int64, basis vectors listed in the rows)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[0.0,0.0],[1.0,1.0],[-1.0,-1.0],[0.0,-1.0],[1.0,0.0],[0.0,1.0]]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 4,
+ "msg": " Will commit last result as the answer to question 4b",
+ "question": "4b"
+ },
+ "outputs": [],
+ "source": [
+ "A = [? 0 0 0 0 0 \n",
+ " ? ? ? 0 0 0\n",
+ " 0 ? 0 0 ? ?\n",
+ " 0 0 ? ? ? 0\n",
+ " 0 0 0 ? 0 ?\n",
+ " 0 0 ? ? ? 0\n",
+ " 0 ? ? 0 0 0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 5 *(8 points)*\n",
+ "\n",
+ "Find the stoichiometric matrix A for the follow system of reactions. Please order your rows such that the species occur in alphabetical order according to the given variable names (A,B,C,D,F,X,Y).\n",
+ "\n",
+ "In this problem, we assume that we are interested in creating a product F with input A. Y and X are enzymes that will further the reaction rates. We continue to input species A into the reaction and siphon off species F and the extra enzyme Y.\n",
+ "\n",
+ "$r1: A ⇌ B\\\\\n",
+ "r2: 2B ⇌ C+Y \\\\\n",
+ "r3: 2B+X ⇌ D+Y \\\\\n",
+ "r4: D ⇌ F+X \\\\\n",
+ "r5: C+X ⇌ D \\\\\n",
+ "r6: C⇌ F \\\\\n",
+ "e1:→A \\\\\n",
+ "e2:F→\\\\\n",
+ "e3:Y→\\\\\n",
+ "$\n",
+ "\n",
+ "Use Julia's `rref` command to find the nullspace of A. \n",
+ "Directly reading the information in the rref(A)\n",
+ "create a flux matrix\n",
+ "that has the basis vectors for the nullspace of A as rows. \n",
+ "
\n",
+ "While there are many bases for the nullspace, the autograder is looking\n",
+ "for the one that would naturally be produced by pencil and paper.\n",
+ "(Format: Int64, basis vectors listed in the rows)\n",
+ "\n",
+ "This might be best done manually, as on page 147 of your text."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[-1.0,1.0,0.0,0.0,0.0,0.0,0.0],[0.0,-2.0,1.0,0.0,0.0,0.0,1.0],[0.0,-2.0,0.0,1.0,0.0,-1.0,1.0],[0.0,0.0,0.0,-1.0,1.0,1.0,0.0],[0.0,0.0,-1.0,1.0,0.0,-1.0,0.0],[0.0,0.0,-1.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.0,0.0,0.0,-1.0,0.0,0.0],[0.0,0.0,0.0,0.0,0.0,0.0,-1.0]]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 5,
+ "msg": " Will commit last result as the answer to question 5a",
+ "question": "5a"
+ },
+ "outputs": [],
+ "source": [
+ "A = [ ? 0 0 0 0 0 ? 0 0\n",
+ " 1 ? ? 0 0 0 0 0 0\n",
+ " 0 1 0 0 ? ? 0 0 0 \n",
+ " 0 0 ? ? ? 0 0 0 0 \n",
+ " 0 0 0 1 0 1 0 ? 0 \n",
+ " 0 0 ? ? ? 0 0 0 0 \n",
+ " 0 ? ? 0 0 0 0 0 ?]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Use the RREF to obtain the nullspace of A as rows of an int64 matrix.
\n",
+ "This might be best done manually, as on page 147 of your text."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[0.0,0.0,2.0],[1.0,1.0,0.0],[-1.0,-1.0,1.0],[0.0,-1.0,1.0],[1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,2.0],[0.0,0.0,1.0],[0.0,0.0,1.0]]",
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 5,
+ "msg": " Will commit last result as the answer to question 5b",
+ "question": "5b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 61,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Options{:ToggleButtons,ASCIIString}([Input{ASCIIString}] score,\"report\",\"score\",\"Score\",OptionDict({\"Score\",\"Incorrect attempts\"},{\"Score\"=>\"score\",\"Incorrect attempts\"=>\"attempts\"}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " | Names | total | 0a | 0b | 0c.1 | 0c.2 | 1a | 1b | 2a | 2b | 2c | 2d | 3a | 3b | 4a | 4b | 5a | 5b |
---|
1 | MAX | 50.0 | 1.0 | 2.0 | 2.0 | 2.0 | 4.0 | 3.0 | 2.0 | 2.0 | 2.0 | 2.0 | 5.0 | 5.0 | 4.0 | 4.0 | 5.0 | 5.0 |
---|
"
+ ],
+ "text/plain": [
+ "1x18 DataFrame\n",
+ "| Row | Names | total | 0a |\n",
+ "|-----|-------|-----------------------|------------------------|\n",
+ "| 1 | \"MAX\" | Colored(\"black\",50.0) | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 0b | 0c.1 |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 0c.2 | 1a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"4.0\") |\n",
+ "\n",
+ "| Row | 1b | 2a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"3.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 2b | 2c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 2d | 3a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"5.0\") |\n",
+ "\n",
+ "| Row | 3b | 4a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"5.0\") | Colored(\"black\",\"4.0\") |\n",
+ "\n",
+ "| Row | 4b | 5a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"4.0\") | Colored(\"black\",\"5.0\") |\n",
+ "\n",
+ "| Row | 5b |\n",
+ "|-----|------------------------|\n",
+ "| 1 | Colored(\"black\",\"5.0\") |"
+ ]
+ },
+ "execution_count": 61,
+ "metadata": {
+ "comm_id": "5988861a-1e86-4e70-903a-bc4c4a50d82a",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Homework.progress()"
+ ]
+ }
+ ],
+ "metadata": {
+ "homework": {
+ "admins": [
+ "mit.edelman@gmail.com"
+ ],
+ "course": "MIT-18.06-Spring-2015",
+ "mode": "answering",
+ "problemset": "pset4"
+ },
+ "kernelspec": {
+ "display_name": "Julia 0.3.11",
+ "language": "julia",
+ "name": "julia-0.3"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "0.3.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/18.06-PS5.ipynb b/18.06-PS5.ipynb
new file mode 100644
index 00000000..6a54d751
--- /dev/null
+++ b/18.06-PS5.ipynb
@@ -0,0 +1,1042 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "\n",
+ "#### 18.06 Spring 2015\n",
+ "# Problem Set 5"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "\n",
+ "# Running this cell will set up auto-grading\n",
+ "# It might take a while to execute.\n",
+ "\n",
+ "# Please fill in the MIT id form that appears below. You only need to do this once.\n",
+ "\n",
+ "Pkg.rm(\"Homework\")\n",
+ "Pkg.clone(\"git://github.com/shashi/Homework.jl.git\")\n",
+ "\n",
+ "using Homework\n",
+ "\n",
+ "Homework.show_mit_form()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "Homework.progress()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 1* (3 points)*\n",
+ "\n",
+ "**Projection Matrix**\n",
+ "\n",
+ "On paper or using Julia, find the projection matrix onto the plane $$x−y−2z=0$$ by first\n",
+ "finding two independent vectors in this plane.
\n",
+ "Find the projection matrix P, and display it to three decimal places\n",
+ "by typing round(P,3). (You can compute P on paper and enter it, or compute P with Julia.)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 1,
+ "collapsed": false,
+ "explanation": null,
+ "max_attempts": 1000,
+ "max_score": 3,
+ "precision": 3,
+ "question": "1",
+ "score": 0,
+ "status": 1
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 2 *(2 points)*\n",
+ "\n",
+ "Construct a 3x3 matrix A with no zero entries whose columns are mutually perpendicular. The first column should be [1,1,1], the second column should be [1,2,-3], and\n",
+ "the third column has bottom entry 1.\n",
+ "\n",
+ "Remember, the Julia syntax for constructing arrays by column is: `A=[[a,b,c][d,e,f][g,h,i]]`
\n",
+ "The array should be labeled as a `3x3 Array{Int64,2}`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "2a"
+ },
+ "outputs": [],
+ "source": [
+ "A = [ [1, 1, 1] [1, 2, -3] [?, ?, 1] ]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "What is $A^TA$? (Julia: `A' * A`)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "2b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## Problem 3 (3 points)\n",
+ "\n",
+ "Construct the projection matrix $P_1$ onto the line through the vector (1,0)
\n",
+ "Express your answer as a 2x2 Array{Int64,2}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "3a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Construct the projection matrix $P_2$ onto the line through the vector (1,−1)
\n",
+ "(Note: if you are computing in Julia, `dot(u,v)` may be more useful than `u'*v` for vectors, as\n",
+ "the latter creates a matrix not a scalar.)
\n",
+ "Express your answer as a 2x2 Array{Float64,2}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "3b",
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Is it true that $(P_1+P_2)^2=P_1+P_2$? In other words, is $(P_1+P_2)$ a projection matrix?
\n",
+ "Answer true or false"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "3c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 4\n",
+ "### Problem 4a *(1 point)*\n",
+ "Suppose b equals 2 times the first column of A.
What is the projection of b onto the column space of A?
Type your answer in the form (double quote) (letter) (double quote) as in `\"x\"`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "4a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 4b *(1 point)*"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Is it always true that $P=I$ in this case?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "4b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 4c *(1 point)*\n",
+ "\n",
+ "Suppose b=(0,2,4) and the columns of A are (0,1,2) and (1,2,0).
What is p, the projection of b? (format: Int64 vector e.g. [1,2,3,4] )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "4c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 4d *(1 point)*\n",
+ "Compute the projection matrix $P_1$.
Enter or return `int(21 * P1)` as a `3x3 Array{Int64,2}`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "4d"
+ },
+ "outputs": [],
+ "source": [
+ "A = [ [0,1,2] [1,2,0] ]\n",
+ "P₁ = ?\n",
+ "int(21*P₁)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 5 *(3 pt)*\n",
+ "\n",
+ "What linear combination of $(1,2,−1)$ and $(1,0,1)$ is closest to $b=(2,1,1)$?
\n",
+ "Enter the vector as integers, (e.g. [1,2,3]) or compute `int(P*b)`.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "3",
+ "question": "5a"
+ },
+ "outputs": [],
+ "source": [
+ "A=[ [1,2,-1] [1,0,1] ]\n",
+ "P = ?\n",
+ "b=[2,1,1]\n",
+ "int(P*b)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 6\n",
+ "\n",
+ "### Problem 6a *(1 point)*\n",
+ "Suppose L is a one-dimensional subspace (a line) in $R^3$.
\n",
+ "Its orthogonal complement $L^⊥$ is the perpendicular to L.
\n",
+ "(Format, write a familiar word from elementary geometry in small letters surrounded by double quotes as in `\"circle\"`)\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "6a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 6b *(1 point)*\n",
+ "Then $(L^⊥)^⊥$ is a \n",
+ "perpendicular to $L^⊥$. (geometry word again)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "6b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Problem 6c *(1 point)*\n",
+ "In fact, $(L^⊥)^⊥$ is the same as
(Format: letter in double quotes)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "6c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 7. Fitting Lines\n",
+ "\n",
+ "** 7a) (2 pts.) **\n",
+ "\n",
+ "Find the best line C+Dt to fit b = 7,7,21 at times t = −1,1,2.
\n",
+ "Format: [C, D] (ints)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "2",
+ "question": "7a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "** 7b) (2 pts.)**\n",
+ "\n",
+ "Find the best line C+Dt to fit b = 4,2,−1,0,0 at times t =− 2,−1,0,1,2.
\n",
+ "Format: [C, D] (ints) "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "2",
+ "question": "7b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 8. (2 pts.) Error Term\n",
+ "\n",
+ "Suppose that Ax=b has no solution. Let p be the projection of b on the column space of A. The length of b−Ax is minimized at x = $\\hat x$.
\n",
+ "The error vector e = b−p is orthogonal to\n",
+ "\n",
+ "1. b
\n",
+ "2. p
\n",
+ "3. e
\n",
+ "4. $\\hat x$
\n",
+ "5. A$\\hat x$\n",
+ "\n",
+ "Choose the answers that apply in order, example: [1,3,5]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "2",
+ "question": "8"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 9\n",
+ "\n",
+ "**Problem 9a. (1 pt)** If A has three orthogonal columns each of length 4, what is A$^T$A?\n",
+ "\n",
+ "$1. \\hspace{.2in} \\left( \\begin{array}{cc} 2 & 0 & 0 \\\\ 0 & 2 & 0 \\\\ 0 & 0 & 2 \\end{array} \\right)$\n",
+ "\n",
+ "$2. \\hspace{.2in} \\left( \\begin{array}{cc} 4 & 0 & 0 \\\\ 0 & 4 & 0 \\\\ 0 & 0 & 4 \\end{array} \\right)$\n",
+ "\n",
+ "$3. \\hspace{.2in} \\left( \\begin{array}{cc} 16 & 0 & 0 \\\\ 0 & 16 & 0 \\\\ 0 & 0 & 16 \\end{array} \\right)$\n",
+ "\n",
+ "$4. \\hspace{.2in} \\left( \\begin{array}{cc} 4 & 4 & 4 \\\\ 4 & 4 & 4 \\\\ 4 & 4 & 4 \\end{array} \\right)$\n",
+ "\n",
+ "$5. \\hspace{.2in} \\left( \\begin{array}{cc} 16 & 16 & 16 \\\\ 16 & 16 & 16 \\\\ 16 & 16 & 16 \\end{array} \\right)$\n",
+ "\n",
+ "Format: one integer from 1, 2, 3, 4, 5."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "9a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**9b. (2 pts.)** If A has three orthogonal columns of lengths 1,2,3, what is A$^T$A?
\n",
+ "Format:
[1 2 3
\n",
+ " 4 5 6
\n",
+ " 7 8 9]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "2",
+ "question": "9b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 10. (3 pts) (Gram-Schmidt process)\n",
+ "\n",
+ "(a) Probably with pencil and paper, find orthonormal vectors q$_1$,q$_2$,q$_3$ such that q$_1$,q$_2$ span the column space of \n",
+ "$A=\\left( \\begin{array}\\\\1&1\\\\ 2 & -1 \\\\ -2 & 4 \\end{array} \\right)$
\n",
+ "using the Gram-Schmidt process on the columns of A. (Hint: to find $q_3$, add a column to A so that the three columns of A are linearly independent, and then apply the Gram-Schmidt process.)
\n",
+ "(If you do qr with Julia you run the risk of not exercising skills for your exam, and it's possible\n",
+ "you will compute $\\pm$q.)\n",
+ "\n",
+ "**10a(i) (1 pt.) q$_1$=?**\n",
+ "\n",
+ "Format: `[ 5//7, -1//3, 2//9]` (Vector of Rationals)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "10a.1"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "** 10a(ii) (1 pt.)** q$_2$=? (Format as above)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "10a.2"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**10a(iii)** (1 pt.) what is q$_3$ if its first component is positive? (Format as above)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "10a.3"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**10(b) (1pt)** Which of the four fundamental subspaces contains q$_3$?\n",
+ "\n",
+ "1. Row Space
\n",
+ "2. Column Space
\n",
+ "3. Null Space
\n",
+ "4. Left nullspace \n",
+ "\n",
+ "(Format: 1, 2, 3, or 4)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "10b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**10(c) (1 pt)** Solve Ax=(1,2,7) by least squares.\n",
+ "\n",
+ "Format: integer vector"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "10c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 11. Gram Schmidt Process II\n",
+ "\n",
+ "**11a.** If A=QR then A$^T$A=R$^T$R= \n",
+ " \n",
+ "(1) triangular times (2) triangular. Please write the type of matrix in corresponding blanks."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "** 11a.(i) (1 pt)** Write (1) as a lowercase string (example: \"symmetric\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "11a.1"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**11a.(ii) (1 pt)** Write (2) as a lowercase string (example: \"symmetric\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "11a.2"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**11b. (1 pt)** Gram-Schmidt on A corresponds to elimination on $A^TA$. The pivots for A$^T$A must be the squares of diagonal entries of R.
Let A=\n",
+ "$\\left( \\begin{array} \\\\{-1} & 1 \\\\ 2 & 1 \\\\ 2 & 4 \\end{array}\\right)$\n",
+ "so that A$^T$A=\n",
+ "$\\left( \\begin{array} \\\\ 9 & 9 \\\\ 9 & 18 \\end{array}\\right)$ =\n",
+ "$\\left( \\begin{array} \\\\ 1 & 0 \\\\ 1 & 1 \\end{array}\\right)$\n",
+ "$\\left( \\begin{array} \\\\ 9 & 0 \\\\ 0 & 9 \\end{array}\\right)$\n",
+ "$\\left( \\begin{array} \\\\ 1 & 1 \\\\ 0 & 1 \\end{array}\\right)$
\n",
+ " What is the R obtained from the Gram-Schmidt process on A?\n",
+ " \n",
+ " (Format: Array{Int64,2}, example [1 2;3 4])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "11b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 12. (Orthogonal Matrix)\n",
+ " \n",
+ "**12a. (1 pt)** Q$^{−1}$ is an orthogonal matrix when Q is an orthogonal matrix.
\n",
+ "true or false ?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "12a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**12b. (1 pt)** If Q (3 by 2) has orthonormal columns then ||Qx|| always equals ||x||.
\n",
+ "true or false?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "12b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 13. (Fourier Basis)\n",
+ "\n",
+ "**13a. (1 pt)** By the trig identity \n",
+ "$ 2 \\cos(jx) \\cos(kx) = \\cos((j+k)x) +\\cos((j−k)x),$
\n",
+ "we have that
\n",
+ "$\\frac{1}{\\pi}∫_0^{2π}$ cos(jx)cos(kx)dx = when j ≠ k.\n",
+ "\n",
+ "Format: int"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "13a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "** 13b. (1 pt)** And $\\frac{1}{\\pi}∫_0^{2π}$ cos(jx)cos(kx)dx = \n",
+ "when j = k.\n",
+ "\n",
+ "Format: int\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "13b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## Problem 14. (Legendre Polynomials)\n",
+ "\n",
+ "**(a) (3 pts)** Let $f(x)=1,g(x)=x,h(x)=x^2−1/3$. Compute (by hand):\n",
+ "\n",
+ "[ ∫$_{-1}^{1}$f(x)g(x)dx , ∫$_{-1}^{1}$g(x)h(x)dx, ∫$_{-1}^{1}$h(x)f(x)dx]\n",
+ "\n",
+ "Format: 3-element array of int's ([1,3,5])\n",
+ "\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "3",
+ "question": "14a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(b) ( 1 pt )** Write 2x$^2$ as a combination of those orthogonal functions. Coefficients of f,g,h are typed in as\n",
+ "[ , , ]\n",
+ "\n",
+ "Format: (Three Rationals: [5, -3//5, 12] )\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "question": "14b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(c) (2 pts)** Choose c so that the fourth polynomial x$^3$−cx is orthogonal to the first three.
(Here, two functions are said to be orthogonal when the integration of their product from x=−1 to x=1 is equal to 0.)\n",
+ "\n",
+ "Format: Rational such as 22//7 ."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "2",
+ "question": "14c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## Problem 15. (5 pts in total) Linear Regression\n",
+ "\n",
+ "Where does projection and least squares approximation occur in the real world? The answer is anywhere there is data. All data comes with some measurement error. So when you look to fit your data to a curve in science and engineering, you are using the method of least squares approximation to get the best fit. The most basic example of least squares approximation also has another name: linear regression. The goal of linear regression is to fit your data with the best fit line. This is the common term used in statistical analysis.\n",
+ "\n",
+ "In this example, we'll analyze data to predict the thermal coefficient of expansion of steel given discrete temperatures T and the coefficient of thermal expansion α.\n",
+ "\n",
+ "If we assume that there are coefficients c and d such that α(T) = c+dT, find the matrix A in terms of the data so that\n",
+ "A$\\left[ \\begin{matrix} c \\\\ d \\end{matrix} \\right]$=α.\n",
+ "\n",
+ "Use the method of least squares to find the equation. Find the error between the expected value given by your equation, and your actual data. Find the residual, which is the magnitude squared of that error vector.\n",
+ "\n",
+ "You might expect that to find the least squares approximation, you will have to use some code of the form: x = A'*A\\A'*α, but you don't have to! Julia already uses least squares approximation in their algorithm for the backslash operator \\. This means that x = A'*A\\A'*α and x = A\\α will give you the same vector output! (Except for roundoff error.) Go ahead and check it out."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "# Data (do not edit, but do execute)\n",
+ "T = [80 : -20: -300]; # (The Temperature numbers 80,60,40,...,-300)\n",
+ "α = [6.47e-6; 6.36e-6; 6.24e-6; 6.12e-6; 6e-6; 5.86e-6; 5.43e-6; 5.28e-6; 5.09e-6;4.91e-6; 4.72e-6;4.52e-6; 4.3e-6; 4.08e-6; 3.83e-6; 3.58e-6; 3.33e-6; 3.07e-6; 2.76e-6; 2.45e-6];"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(2 pts)** Construct the matrix A that is needed for the best fit line:\n",
+ "(Things to try: What does ones(T) do?, what does [T T] do?)\n",
+ "\n",
+ "Format: 20x2 Array{Int64,2}:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "2",
+ "question": "15a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "(1 pt) Use the method of least squares, \n",
+ "also known as linear regression to find the best fit line to the data.
(To type the α you can type \\alpha[tab] )\n",
+ "\n",
+ "Format: 2-element Array{Float64,1}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "precision": 12,
+ "question": "15b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "# Not graded but interesting to see the comparison between the data and the line\n",
+ "\n",
+ "using PyPlot\n",
+ "#Plot data and line, compare\n",
+ "plot(T,α,\"o\");\n",
+ "plot(T,A*x,\"r\");"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(1 pt)** The error is the difference between `A*x` and `α`.\n",
+ "Find the error vector $e$\n",
+ "\n",
+ "Format: 20-element Array{Float64,1}."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": "1",
+ "precision": 12,
+ "question": "15c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**(1 pt)** The total error is the magnitude squared of the error vector.\n",
+ "Find the total error.\n",
+ "\n",
+ "Format: a Floating point number"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "precision": 22,
+ "question": "15d"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "Homework.progress()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "homework": {
+ "admins": [
+ "mit.edelman@gmail.com"
+ ],
+ "course": "MIT-18.06-Spring-2015",
+ "mode": "answering",
+ "problemset": "pset5"
+ },
+ "kernelspec": {
+ "display_name": "Julia 0.3.11",
+ "language": "julia",
+ "name": "julia-0.3"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "0.3.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/18.06-PS6.ipynb b/18.06-PS6.ipynb
new file mode 100644
index 00000000..bbdadb63
--- /dev/null
+++ b/18.06-PS6.ipynb
@@ -0,0 +1,2240 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Removing Homework (unregistered)\n",
+ "INFO: Cloning Homework from git://github.com/shashi/Homework.jl.git\n",
+ "INFO: Computing changes...\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " \n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: No packages to install, update or remove\n",
+ "WARNING: This version of the GnuTLS library (3.2.11) is deprecated\n",
+ "and contains known security vulnerabilities. Please upgrade to a\n",
+ "more recent version.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "\n",
+ "# Running this cell will set up auto-grading\n",
+ "# It might take a while to execute.\n",
+ "\n",
+ "# Please fill in the MIT id form that appears below. You only need to do this once.\n",
+ "\n",
+ "Pkg.rm(\"Homework\")\n",
+ "Pkg.clone(\"git://github.com/shashi/Homework.jl.git\")\n",
+ "\n",
+ "using Homework\n",
+ "\n",
+ "Homework.show_mit_form()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Options{:ToggleButtons,ASCIIString}([Input{ASCIIString}] score,\"report\",\"score\",\"Score\",OptionDict({\"Score\",\"Incorrect attempts\"},{\"Score\"=>\"score\",\"Incorrect attempts\"=>\"attempts\"}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " | Names | total | 1a | 1b | 1c | 1d | 2a | 2b | 3a | 3b | 4 | 5a | 5b | 5c | 5d | 5e | 5f | 5g | 5h | 6a | 6b | 6c | 6d | 7a | 7b | 8 | 9a | 9b | 9c | 10a | 10b | 10c | 11a | 11b | 11c | 11d |
---|
1 | MAX | 50.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 | 1.0 | 0.5 | 0.5 | 1.0 | 0.5 | 0.5 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 5.0 | 1.0 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 | 1.0 | 2.0 | 2.0 | 1.0 |
---|
"
+ ],
+ "text/plain": [
+ "1x36 DataFrame\n",
+ "| Row | Names | total | 1a |\n",
+ "|-----|-------|-----------------------|------------------------|\n",
+ "| 1 | \"MAX\" | Colored(\"black\",50.0) | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 1b | 1c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 1d | 2a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 2b | 3a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 3b | 4 |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 5a | 5b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"0.5\") |\n",
+ "\n",
+ "| Row | 5c | 5d |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"0.5\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 5e | 5f |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"0.5\") | Colored(\"black\",\"0.5\") |\n",
+ "\n",
+ "| Row | 5g | 5h |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 6a | 6b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 6c | 6d |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 7a | 7b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 8 | 9a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"5.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 9b | 9c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 10a | 10b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 10c | 11a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 11b | 11c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 11d |\n",
+ "|-----|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") |"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {
+ "comm_id": "16550db4-20b8-4fc0-a09a-8fe8f9b93490",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Homework.progress()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 1. Determinants"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1a) (1pt.) Let A and B be any two r×r square matrices for some r.\n",
+ "\n",
+ "If A is not invertible then AB is not invertible. (true/false)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1b) (1pt.) The determinant of A is always the product of its pivots. (true/false)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1c) (1pt.) The determinant of A−B always equals detA − detB (true/false)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1d) AB and BA must have the same determinant. (true/false)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1d"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 2. Placing Zeroes"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "2a) (2pt.) What is the smallest number of zeroes that one can place in a 4 by 4 matrix A to guarantee that detA = 0? (Int)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "2a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "2b) (2 pt.) What is the largest number of zeroes that one can place in a 4 by 4 matrix A while still having detA≠0? (Int)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "2b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 3. Computing the Inverse of a Matrix"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "3a) (2 pt.) Find A$^{-1}$ from the cofactor formula C$^T$/detA.\n",
+ "\n",
+ "$A = \\left( \\begin{array}\\\\ 1 & 2 & 0 \\\\ 0 & 3 & 0 \\\\ 0 & 7 & 1 \\end{array} \\right)$\n",
+ "\n",
+ "(Format [a b c; d e f;g h i], use p//q for fractions)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "3a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "3b) (2 pt.) Find A$^{-1}$ from the cofactor formula C$^T$/detA.\n",
+ "\n",
+ "$A = \\left( \\begin{array}\\\\ 2 & -1 & 0 \\\\ -1 & 2 & -1 \\\\ 0 & -1 & 2 \\end{array} \\right)$\n",
+ "\n",
+ "(Format [a b c; d e f;g h i], use p//q for fractions)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "3b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 4. Maximum Determinant"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "(2 pts.) What is the maximum determinant of a 4 by 4 matrix with entries all 1 or −1?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "4"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 5. Computing Eigenvalues and Eigenvectors"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5a.) (1pts) \n",
+ "\n",
+ "$A= \\left( \\begin{array} \\\\ -1 & 3 \\\\ 2 & 0 \\end{array} \\right)$\n",
+ "\n",
+ "What are the eigenvalues of A?
\n",
+ " (Format: [$\\lambda_1, \\lambda_2]$ ints with $\\lambda_1<\\lambda_2$)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "5a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5b) (1pt)\n",
+ "What is the eigenvector with eigenvalue $\\lambda_1$?\n",
+ "\n",
+ "(Format: [p,q] ints with p>0 and p and q have no common factors)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 0.5,
+ "question": "5b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5c) (0.5pt) What is the eigenvector with eigenvalue $λ_2$?\n",
+ "\n",
+ "(Format: [p,q] ints with p>0 and p and q have no common factors)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 0.5,
+ "question": "5c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5d) (0.5 pts) What are the eigenvalues of $A^2$?
\n",
+ "(Format: [$\\lambda_1, \\lambda_2]$ ints with $\\lambda_1<\\lambda_2$) (These $\\lambda_1,\\lambda_2$ different from 5a)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "5d"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5e) (0.5pts)\n",
+ "What is the eigenvector of $A^2$ with eigenvalue $\\lambda_2$ where $\\lambda_1<\\lambda_2$ are the eigenvalues of $A^2$?\n",
+ "\n",
+ "(Format: [p,q] ints with p>0 and p and q have no common factors)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 0.5,
+ "question": "5e"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5f) (0.5pts)\n",
+ "What is the eigenvector of $A^2$ with eigenvalue $\\lambda_1$?\n",
+ "\n",
+ "(Format: [p,q] ints with p>0 and p and q have no common factors"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 0.5,
+ "question": "5f"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5g) (1 pt)\n",
+ "Let A now be any 2 by 2 matrix. Then A$^2$ has the same ________ as A.\n",
+ "\n",
+ "1. eigenvalues
\n",
+ "2. eigenvectors
\n",
+ "3. determinant
\n",
+ "4. characteristic polynomial \n",
+ "\n",
+ "(Format: 1,2,3,or 4)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "5g"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5h) (1 pt) When A has eigenvalues λ$_1$ and λ$_2$, A$^2$ has trace\n",
+ "\n",
+ "1. λ$_1$ + λ$_2$
\n",
+ "2. 2 λ$_1$ λ$_2$
\n",
+ "3. (λ$_1$ + λ$_2$)$^2$
\n",
+ "4. λ$_1^2$ + λ$_2^2$\n",
+ "\n",
+ "(Format: 1,2,3, or 4)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "5h"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 6. Extracting Information from Eigenvalues\n",
+ "\n",
+ "A 3 by 3 matrix B is known to have eigenvalues 0, 1, 2.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "6a) (1 pt) What is the rank of B?\n",
+ "\n",
+ "1. 1
\n",
+ "2. 2
\n",
+ "3. 3
\n",
+ "4. Can not be determined\n",
+ "\n",
+ "(Format: 1,2,3, or 4 from the choice numbers)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "6b) (1 pt) What is the determinant of B$^T$B ?\n",
+ "\n",
+ "\n",
+ "1. 0
\n",
+ "2. 1
\n",
+ "3. 4
\n",
+ "4. Can not be determined\n",
+ "\n",
+ "(Format: 1,2,3, or 4 from the choice numbers, e.g. an answer of 3 means the determinant is 4)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "6c) (1 pt) What are the eigenvalues of B$^T$B ?\n",
+ "\n",
+ "\n",
+ "1. 0,1,2
\n",
+ "2. 0,1,4
\n",
+ "3. 0,1,1
\n",
+ "4. Can not be determined\n",
+ "\n",
+ "(Format: 1,2,3, or 4 )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "6d) (1 pt) What are the eigenvalues of $(B^2+I)^{-1}$? (I is the 3x3 Identity)\n",
+ "\n",
+ "\n",
+ "1. 0, 1/2, 1
\n",
+ "2. 1/5, 1/2, 1
\n",
+ "3. 1,2,5
\n",
+ "4. Can not be determined\n",
+ "\n",
+ "(Format: 1,2,3, or 4 )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "6d"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 7. Companion Matrices\n",
+ "\n",
+ "Choose the last rows of A and B to give eigenvalues 4,7 and 1,2,3:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "7a) (1 pt) $ A = \\left( \\begin{array} \\\\ 0 & 1 \\\\ * & * \\end{array} \\right) $\n",
+ "\n",
+ "Enter the last row of A to give eigenvalues 4,7 (Format: [a,b] ints)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "7a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "7b) (1 pt) $ B = \\left( \\begin{array} \\\\ 0 & 1 & 0 \\\\ 0 & 0 & 1 \\\\ * & * & * \\end{array} \\right) $\n",
+ "\n",
+ "Enter the last row of B to give eigenvalues 1,2,3 (Format: [a,b,c] ints)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "7b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 8. Determinant Formulas with Symbolic Julia"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Warning: error initializing module Plots:\n",
+ "Base.MethodError(f=warn, args=(\"You don't have any of the supported backends installed! Chose from \", Array{Symbol, 1}[:qwt, :gadfly, :unicodeplots, :pyplot, :immerse, :winston]))\n"
+ ]
+ }
+ ],
+ "source": [
+ "using SymPy; #Takes a while to load, and comes with lots of ignorable warnings"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "\\begin{bmatrix}x_{11}&x_{12}&x_{13}&x_{14}\\\\x_{21}&x_{22}&x_{23}&x_{24}\\\\x_{31}&x_{32}&x_{33}&x_{34}\\\\x_{41}&x_{42}&x_{43}&x_{44}\\end{bmatrix}"
+ ],
+ "text/plain": [
+ "4x4 Array{Sym,2}\n",
+ "[x11 x12 x13 x14]\n",
+ "[ ]\n",
+ "[x21 x22 x23 x24]\n",
+ "[ ]\n",
+ "[x31 x32 x33 x34]\n",
+ "[ ]\n",
+ "[x41 x42 x43 x44]"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Make a pretty symbolic matrix\n",
+ "X(n)=Sym[\"x$i$j\" for i=1:n, j=1:n]\n",
+ "X(4)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "bigdet (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Quick and dirty big determinant formula\n",
+ "parity(p) = int(det(eye(length(p))[p,:]))\n",
+ "bigdet(M) = sum([parity(p) * prod([M[i,p[i]] for i=1:size(M,1)]) for p in permutations(1:size(M,1))])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$x_{11} x_{22} - x_{12} x_{21}$$"
+ ],
+ "text/plain": [
+ "x11*x22 - x12*x21"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "bigdet(X(2))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$x_{11} x_{22} x_{33} - x_{11} x_{23} x_{32} - x_{12} x_{21} x_{33} + x_{12} x_{23} x_{31} + x_{13} x_{21} x_{32} - x_{13} x_{22} x_{31}$$"
+ ],
+ "text/plain": [
+ "x11*x22*x33 - x11*x23*x32 - x12*x21*x33 + x12*x23*x31 + x13*x21*x32 - x13*x22*\n",
+ "x31"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "bigdet(X(3))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$x_{11} x_{22} x_{33} x_{44} - x_{11} x_{22} x_{34} x_{43} - x_{11} x_{23} x_{32} x_{44} + x_{11} x_{23} x_{34} x_{42} + x_{11} x_{24} x_{32} x_{43} - x_{11} x_{24} x_{33} x_{42} - x_{12} x_{21} x_{33} x_{44} + x_{12} x_{21} x_{34} x_{43} + x_{12} x_{23} x_{31} x_{44} - x_{12} x_{23} x_{34} x_{41} - x_{12} x_{24} x_{31} x_{43} + x_{12} x_{24} x_{33} x_{41} + x_{13} x_{21} x_{32} x_{44} - x_{13} x_{21} x_{34} x_{42} - x_{13} x_{22} x_{31} x_{44} + x_{13} x_{22} x_{34} x_{41} + x_{13} x_{24} x_{31} x_{42} - x_{13} x_{24} x_{32} x_{41} - x_{14} x_{21} x_{32} x_{43} + x_{14} x_{21} x_{33} x_{42} + x_{14} x_{22} x_{31} x_{43} - x_{14} x_{22} x_{33} x_{41} - x_{14} x_{23} x_{31} x_{42} + x_{14} x_{23} x_{32} x_{41}$$"
+ ],
+ "text/plain": [
+ "x11*x22*x33*x44 - x11*x22*x34*x43 - x11*x23*x32*x44 + x11*x23*x34*x42 + x11*x2\n",
+ "4*x32*x43 - x11*x24*x33*x42 - x12*x21*x33*x44 + x12*x21*x34*x43 + x12*x23*x31*\n",
+ "x44 - x12*x23*x34*x41 - x12*x24*x31*x43 + x12*x24*x33*x41 + x13*x21*x32*x44 - \n",
+ "x13*x21*x34*x42 - x13*x22*x31*x44 + x13*x22*x34*x41 + x13*x24*x31*x42 - x13*x2\n",
+ "4*x32*x41 - x14*x21*x32*x43 + x14*x21*x33*x42 + x14*x22*x31*x43 - x14*x22*x33*\n",
+ "x41 - x14*x23*x31*x42 + x14*x23*x32*x41"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "bigdet(X(4))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "\\begin{bmatrix}x_{11}&x_{12}&x_{13}&x_{14}\\\\x_{11}&x_{12}&x_{13}&x_{14}\\\\x_{31}&x_{32}&x_{33}&x_{34}\\\\x_{41}&x_{42}&x_{43}&x_{44}\\end{bmatrix}"
+ ],
+ "text/plain": [
+ "4x4 Array{Sym,2}\n",
+ "[x11 x12 x13 x14]\n",
+ "[ ]\n",
+ "[x11 x12 x13 x14]\n",
+ "[ ]\n",
+ "[x31 x32 x33 x34]\n",
+ "[ ]\n",
+ "[x41 x42 x43 x44]"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Y=copy(X(4)) # Y is a copy of X(4)\n",
+ "Y[2,:]=Y[1,:] # Set the second row to be equal to the first row\n",
+ "Y"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$0$$"
+ ],
+ "text/plain": [
+ "0"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Notice what happens if the two first rows of a matrix are identical\n",
+ "bigdet(Y)\n",
+ "# You might try to find the terms that cancel when for example x₂₁=x₁₁, etc.\n",
+ "# I find them hard to spot: here's one x11 x22 x33 x44 - x12 x21 x33 x44 (since x21->x11 and x22->x12 )\n",
+ "# Ultimately there are 24 terms which may be grouped as 12 pairs \n",
+ "# which will cancel when the first two rows are identical"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "**Note: different from MITx **\n",
+ "\n",
+ "We'd be happy if you thought a bit more about determinants.\n",
+ "\n",
+ "Create a matrix Z whose 2nd row is equal to the sum of the 2nd row of X(4) and the first row of X(4). How does Z's determinant compare to the determinant of X(4)?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "\n",
+ "\n",
+ "Z=X(4)\n",
+ "Z[2,:]=???\n",
+ "Z\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 5,
+ "question": "8"
+ },
+ "outputs": [],
+ "source": [
+ "# (5 pts)\n",
+ "# After defining Z, run this cell and evaluate your answer\n",
+ "# Submit this cell without editing\n",
+ "#(I know this seems lame, but i don't love the matlab problem in mitx either)\n",
+ "\n",
+ "\n",
+ "simplify(bigdet(X(4)) - bigdet(Z))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 9. Areas, determinants, and fun with manipulate"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Suppose that you have a matrix A which takes the basis vectors e$_1$=(1,0) and e$_2$=(0,1) that lie along the square to the corresponding vectors Ae$_1$=(s,s),Ae$_2$=(t,0) on the parallelogram. Julia lets your draw the pictures nicely. Have fun watching s and t vary."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Loading help data...\n",
+ "INFO: Loading additional PyPlot commands for graphing for SymPy objects:\n",
+ "contour, quiver, plot_surface, plot_parametric_surface, and plot_implicit.\n",
+ "See ?sympy_plotting for some more details\n"
+ ]
+ }
+ ],
+ "source": [
+ "using PyPlot #Ignore warnings\n",
+ "using Interact"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 94,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Slider{Float64}([Input{Float64}] 1.7,\"s\",1.7,0.5:0.1:3.0)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Slider{Float64}([Input{Float64}] 1.2,\"t\",1.2,0.5:0.1:2.0)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "Figure(PyObject )"
+ ]
+ },
+ "execution_count": 94,
+ "metadata": {
+ "comm_id": "2e8b99e4-d80c-47a0-9af3-77d42cb0c988",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "f=figure(figsize=(6,6))\n",
+ "\n",
+ "@manipulate for s=.5:.1:3, t=.5:.1:2; withfig(f) do\n",
+ "\n",
+ "Ae1=[s s]\n",
+ "Ae2=[t 0]\n",
+ "\n",
+ "subplot(221)\n",
+ "ax = gca()\n",
+ "arrow(0,0,0,1,head_width=0.05, head_length=0.1,color=\"g\")\n",
+ "arrow(0,0,1,0,head_width=0.05, head_length=0.1,color=\"b\")\n",
+ " ax[:add_patch](matplotlib[:patches][:Rectangle]((0, 0), 1,1,facecolor=\"lightblue\"))\n",
+ "axis([-.1,3,-.1,3]);\n",
+ " text(1.1,-.05,\"e₁\",horizontalalignment=\"left\",verticalalignment=\"bottom\")\n",
+ " text(.05,1.1,\"e₂\",horizontalalignment=\"center\",verticalalignment=\"bottom\")\n",
+ "\n",
+ "subplot(222)\n",
+ " \n",
+ "ax = gca()\n",
+ "arrow(0,0,Ae1...,head_width=0.05, head_length=0.1,color=\"g\")\n",
+ " arrow(0,0,Ae2...,head_width=0.05, head_length=0.1,color=\"b\")\n",
+ " ax[:add_patch](matplotlib[:patches][:Polygon]([[0 0], Ae2, Ae1+Ae2 ,Ae1],facecolor=\"lightblue\",hatch=\"*\"))\n",
+ "axis([-.1,3,-.1,3]);\n",
+ " title(\"Ae₁=[$t,0] \\n Ae₂=[$s,$s]\")\n",
+ " text(t+.12,-.05,\"Ae₁\",horizontalalignment=\"left\",verticalalignment=\"bottom\")\n",
+ " text(s,.1+s,\"Ae₂\",horizontalalignment=\"center\",verticalalignment=\"bottom\")\n",
+ " end\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "9a) (1 pt.) When s=1 and t=2, what is the area of the parallelogram, computed through basic geometry? (base times height which is perpendicular to the base) (int)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "9a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "9b) (2 pts.) When s=1 and t=2, what is the the matrix A?
Format: By Rows: [[a b],[c d]] all ints.
\n",
+ "or by cols: [[a,b] [c,d]] . (I prefer by cols for this one, don't forget the space in the middle)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "9b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "9c) (2 pts.) What is the dterminant of A? (int). Take a moment to explain to yourself what is going on."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "9c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## Problem 10. Volumes and determinants"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "using PyPlot\n",
+ "using Interact"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Suppose that you have a matrix A which takes the following basis vectors e$_1$=(1,0,0)$^T$,e$_2$=(0,1,0)$^T$,e$_3$=(0,0,1)$^T$ that lie along the unit cube (not drawn) to the corresponding vectors Ae$_1$=(0.5,−0.5,0)$^T$,Ae$_2$=(0,0,1)$^T$,Ae$_3$=(0.5,1.5,0)$^T$ on the parallelopiped.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "Figure(PyObject )"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "PyObject "
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "f=figure(figsize=(4,4))\n",
+ "Ae₁=[0.5,-0.5,0]\n",
+ "Ae₂=[0,0,1]\n",
+ "Ae₃=[.5,1.5,0]\n",
+ "z=zeros(3)\n",
+ "plot3(v,w)=plot3D([ [v[i],w[i]] for i=1:3]...)\n",
+ "plot3(z,Ae₁)\n",
+ "plot3(z,Ae₂)\n",
+ "plot3(z,Ae₃)\n",
+ "plot3(Ae₁,Ae₁+Ae₂)\n",
+ "plot3(Ae₃,Ae₃+Ae₂)\n",
+ "plot3(Ae₂,Ae₁+Ae₂)\n",
+ "plot3(Ae₂,Ae₃+Ae₂)\n",
+ "plot3(Ae₁,Ae₁+Ae₃)\n",
+ "plot3(Ae₃,Ae₁+Ae₃)\n",
+ "plot3(Ae₁+Ae₃,Ae₁+Ae₂+Ae₃)\n",
+ "plot3(Ae₁+Ae₂,Ae₁+Ae₂+Ae₃)\n",
+ "plot3(Ae₃+Ae₂,Ae₁+Ae₂+Ae₃)\n",
+ "text3D(.4,-.35,0,\"(.5,-.5,0)\")\n",
+ "text3D(.25,1.1,0,\"(.5,1.5,0)\")\n",
+ "text3D(-.1,-.2,1.1,\"(0,0,1)\")\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "10a) (2 pt) What is the volume of the parallelopiped? (Use area of base times height)\n",
+ "\n",
+ "(Format: Answer as Int!!)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "10a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "10b) (2 pt) What is the matrix A?\n",
+ "\n",
+ "format(3x3 Array{Float64,2})"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "10b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "10c) (1pt) What is det(A)?\n",
+ "\n",
+ "(Format: Answer as Int e.g. int(det(A))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "10c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## Problem 11. Area of a hexagon, determinants and fun with manipulate\n",
+ "In this question, you are tasked with finding a matrix A which takes the hexagon in the first image and transforms it into the hexagon in the second image. To help you find such a matrix, look at the first image. Let e$_1$=(0,1)$^T$ be the blue horizontal vector. We define the red vector v to be the vector which forms an equilateral triangle with the first vector. Then in the second image we have Ae$_1$=(s,2)$^T$, Av=(0,4)$^T$ and we\n",
+ "want you to manipulate the triangle until has angles 30, 30, and 120."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 92,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Slider{Float64}([Input{Float64}] 1.5,\"s\",1.5,0.0:0.05:3.0)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ "Figure(PyObject )"
+ ]
+ },
+ "execution_count": 92,
+ "metadata": {
+ "comm_id": "4059c108-c7ff-47c0-993e-d00e5247c716",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "f=figure(figsize=(8,8))\n",
+ "\n",
+ "@manipulate for s=.0:.05:3; withfig(f) do\n",
+ "\n",
+ "hexagon=[ cos(2π*(0:5)/6) sin(2π*(0:5)/6)]\n",
+ "e₁=[1,0]\n",
+ "v=[cos(π/3), sin(π/3)]\n",
+ "\n",
+ "subplot(221)\n",
+ "ax = gca()\n",
+ "arrow(0,0,e₁...,head_width=0.05, head_length=0.1,color=\"b\")\n",
+ "arrow(0,0,v..., head_width=0.05, head_length=0.1,color=\"r\")\n",
+ "ax[:add_patch](matplotlib[:patches][:Polygon](hexagon,facecolor=\"lightblue\"))\n",
+ "text(1.1,-.05,\"e₁\")\n",
+ "text(.05+v...,\"v\")\n",
+ "text( .1*(v+e₁)..., \"60°\")\n",
+ "axis([-2,2,-2,2]);\n",
+ "\n",
+ "A= [[s, 2] [0,4]]/[e₁ v]\n",
+ " \n",
+ "subplot(222)\n",
+ "ax = gca()\n",
+ "arrow(0,0,(A*e₁)...,head_width=0.05, head_length=0.1,color=\"b\")\n",
+ "arrow(0,0,(A*v)..., head_width=0.05, head_length=0.1,color=\"r\")\n",
+ "text((.05+A*e₁)...,\"Ae₁\")\n",
+ "text((.05+A*v)...,\"Av\")\n",
+ "ang = int(round(acosd(dot(A*v,A*e₁)/(norm(A*v)*norm(A*e₁))),0))\n",
+ " \n",
+ "text( .05,1.1, \"$(ang)°\",fontsize=8)\n",
+ "text( .05,3, \"$(ang)°\",fontsize=8)\n",
+ " text(([-1 -.03]'+A*e₁)...,\"$(180-2*ang)°\",fontsize=8)\n",
+ " \n",
+ "ax[:add_patch](matplotlib[:patches][:Polygon]((A*hexagon')',facecolor=\"lightblue\"))\n",
+ " title(\"Ae₁=($s,2) \\n Av=(0,4)\")\n",
+ "axis([-5,5,-5,5]) \n",
+ "\n",
+ "\n",
+ "end\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "11a) (1 pt.) What is the area of the first hexagon? (Hint, the formula is $(3/2)*s^2*\\sqrt{3}$)\n",
+ "\n",
+ "Format: Float64"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "precision": 3,
+ "question": "11a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "11b) (1 pt.) What is the area of the second hexagon? (Hint: the correct hexagon is made up of 6 congruent triangles)\n",
+ "\n",
+ "Format: a number"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "precision": 3,
+ "question": "11b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "11c) (2 pt.) What is the matrix A?\n",
+ "\n",
+ "format: Array{Float64, 2}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "precision": 3,
+ "question": "11c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "11d) (1 pt.) What is the determinant of A? (Notice the ratio of the hexagon areas computed in parts b and a)\n",
+ "\n",
+ "Format: Float64"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "precision": 3,
+ "question": "11d"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Options{:ToggleButtons,ASCIIString}([Input{ASCIIString}] score,\"report\",\"score\",\"Score\",OptionDict({\"Score\",\"Incorrect attempts\"},{\"Score\"=>\"score\",\"Incorrect attempts\"=>\"attempts\"}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " | Names | total | 1a | 1b | 1c | 1d | 2a | 2b | 3a | 3b | 4 | 5a | 5b | 5c | 5d | 5e | 5f | 5g | 5h | 6a | 6b | 6c | 6d | 7a | 7b | 8 | 9a | 9b | 9c | 10a | 10b | 10c | 11a | 11b | 11c | 11d |
---|
1 | MAX | 50.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 | 1.0 | 0.5 | 0.5 | 1.0 | 0.5 | 0.5 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 5.0 | 1.0 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 | 1.0 | 2.0 | 2.0 | 1.0 |
---|
"
+ ],
+ "text/plain": [
+ "1x36 DataFrame\n",
+ "| Row | Names | total | 1a |\n",
+ "|-----|-------|-----------------------|------------------------|\n",
+ "| 1 | \"MAX\" | Colored(\"black\",50.0) | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 1b | 1c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 1d | 2a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 2b | 3a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 3b | 4 |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 5a | 5b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"0.5\") |\n",
+ "\n",
+ "| Row | 5c | 5d |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"0.5\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 5e | 5f |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"0.5\") | Colored(\"black\",\"0.5\") |\n",
+ "\n",
+ "| Row | 5g | 5h |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 6a | 6b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 6c | 6d |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 7a | 7b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 8 | 9a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"5.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 9b | 9c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 10a | 10b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 10c | 11a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 11b | 11c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 11d |\n",
+ "|-----|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") |"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {
+ "comm_id": "9a59c180-7722-47d2-8926-e7da2fa09326",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Homework.progress()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "homework": {
+ "course": "MIT-18.06-Spring-2015",
+ "mode": "answering",
+ "problemset": "pset6"
+ },
+ "kernelspec": {
+ "display_name": "Julia 0.3.11",
+ "language": "julia",
+ "name": "julia-0.3"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "0.3.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/18.06-PS7.ipynb b/18.06-PS7.ipynb
new file mode 100644
index 00000000..810b437d
--- /dev/null
+++ b/18.06-PS7.ipynb
@@ -0,0 +1,1306 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Removing Homework (unregistered)\n",
+ "INFO: Cloning Homework from git://github.com/shashi/Homework.jl.git\n",
+ "INFO: Computing changes...\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: No packages to install, update or remove\n"
+ ]
+ }
+ ],
+ "source": [
+ "\n",
+ "# Running this cell will set up auto-grading\n",
+ "# It might take a while to execute.\n",
+ "\n",
+ "# Please fill in the MIT id form that appears below. You only need to do this once.\n",
+ "\n",
+ "Pkg.rm(\"Homework\")\n",
+ "Pkg.clone(\"git://github.com/shashi/Homework.jl.git\")\n",
+ "\n",
+ "using Homework\n",
+ "\n",
+ "Homework.show_mit_form()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Options{:ToggleButtons,ASCIIString}([Input{ASCIIString}] score,\"report\",\"score\",\"Score\",OptionDict({\"Score\",\"Incorrect attempts\"},{\"Score\"=>\"score\",\"Incorrect attempts\"=>\"attempts\"}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " | Names | total | 1a | 1b | 2a | 2b | 3a | 3b | 3c | 4a | 4b | 4c | 4d | 4e | 4f | 5a | 5b | 5c | 6 | 7a | 7b | 7c | 8 | 9 | 10a | 10b |
---|
1 | MAX | 50.0 | 1.0 | 2.0 | 1.0 | 1.0 | 2.0 | 2.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 3.0 | 1.0 | 1.0 | 1.0 | 8.0 | 8.0 | 5.0 | 4.0 |
---|
"
+ ],
+ "text/plain": [
+ "1x26 DataFrame\n",
+ "| Row | Names | total | 1a |\n",
+ "|-----|-------|-----------------------|------------------------|\n",
+ "| 1 | \"MAX\" | Colored(\"black\",50.0) | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 1b | 2a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 2b | 3a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 3b | 3c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 4a | 4b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 4c | 4d |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 4e | 4f |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 5a | 5b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 5c | 6 |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"3.0\") |\n",
+ "\n",
+ "| Row | 7a | 7b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 7c | 8 |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"8.0\") |\n",
+ "\n",
+ "| Row | 9 | 10a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"8.0\") | Colored(\"black\",\"5.0\") |\n",
+ "\n",
+ "| Row | 10b |\n",
+ "|-----|------------------------|\n",
+ "| 1 | Colored(\"black\",\"4.0\") |"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {
+ "comm_id": "52e4ce00-7d4b-4f4e-8712-0fb80a394bb0",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Homework.progress()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 1. Fixing Eigenvectors\n",
+ "\n",
+ "1a) (1 pt.) Write down a matrix with first row \n",
+ "[20,15] that has eigenvectors [1,1] and [1,−1]."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1b) (2 pts.) What is the dimension of the space of matrices that have [1,1] and [1,−1] as eigenvectors?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "2.0",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "msg": " Will commit last result as the answer to question 1b",
+ "question": "1b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 2. DIAGONALIZABILITY AND EIGENVECTORS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "2a) (1 pt.) If the eigenvalues of A are 2, 2, 5 then the matrix is certainly:\n",
+ "\n",
+ "1. invertible
\n",
+ "2. diagonalizable
\n",
+ "3. not diagonalizable \n",
+ "\n",
+ "(Format: 1,2, or 3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "1.0",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 2a",
+ "question": "2a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "2b) (1 pt.) If the only eigenvectors of A are multiples of (1,4) then A has:\n",
+ "\n",
+ "1. no inverse
\n",
+ "2. a repeated eigenvalue
\n",
+ "3. no diagonalization SAS${}^{−1}$ \n",
+ "\n",
+ "(Format: 1,2, 3, [1,2], [1,3], [2,3], or [1,2,3] )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[2.0,3.0]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 2b",
+ "question": "2b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 3) Convergence to 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "using SymPy; # Ignore warnings\n",
+ "a=Sym(\"a\");"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "3a) (1 pt) Consider the matrix A=$\\left( \\begin{array}\\\\ a & 1 \\\\ 1 & a \\end{array} \\right)$ What are the eigenvalues of A?\n",
+ "\n",
+ "Format [$\\lambda_1,\\lambda_2$] where $\\lambda_1 \\le \\lambda_2$ are symbolic expressions in a."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[\"sym-a - 1\",\"sym-a + 1\"]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "msg": " Will commit last result as the answer to question 3a",
+ "question": "3a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "3b) What are the eigenvalues of B=$\\left( \\begin{array}\\\\ b & -1 \\\\ 1 & b \\end{array} \\right)$?\n",
+ "Format [$\\lambda_1,\\lambda_2$] where $\\lambda_1$ and $\\lambda_2$ are complex symbolic expressions in b and the imaginary part of $\\lambda_1$ is less than that of $\\lambda_2$. (You will need to\n",
+ "use $\\bf im$ for the sqrt(-1) here.)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {
+ "alert": "info",
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$b$$"
+ ],
+ "text/plain": [
+ "b"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "b=Sym(\"b\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[\"sym-b - I\",\"sym-b + I\"]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "msg": " Will commit last result as the answer to question 3b",
+ "question": "3b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "c) When do the all the solutions of du/dt=Au and dv/dt=Bv approach zero when t→ ∞ ?\n",
+ "\n",
+ "1. a < 0 and b < 0
\n",
+ "2. a ≥ 0 and b > 0
\n",
+ "3. a < −1 and b < 0
\n",
+ "4. a ≤−1 and b ≤ 0\n",
+ "\n",
+ "1,2,3, or 4?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "3.0",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 3c",
+ "question": "3c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## 4) Exponential of Matrices"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$t$$"
+ ],
+ "text/plain": [
+ "t"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# using SymPy;\n",
+ "t=Sym(\"t\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4a) (0.5 pts) Consider $A=\\left( \\begin{matrix} 1 & 4 \\\\ 0 & 0 \\end{matrix} \\right).$\n",
+ "Compute $e^{tA}$\n",
+ "\n",
+ "Format: [[a b],[c d]] which might include t or e^t"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[\"sym-exp(t)\",\"sym-0\"],[\"sym-4*exp(t) - 4\",\"sym-1\"]]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 4a",
+ "question": "4a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4b) (0.5 pts) Consider $B=\\left( \\begin{matrix} 0 & -4 \\\\ 0 & 0 \\end{matrix} \\right).$\n",
+ "Compute $e^{tB}$\n",
+ "\n",
+ "Format: [[a b],[c d]] which might include t or e^t"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[\"sym-1\",\"sym-0\"],[\"sym--4*t\",\"sym-1\"]]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 4b",
+ "question": "4b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4c) (1 pt) \n",
+ "Compute $e^{t(A+B)}$\n",
+ "\n",
+ "Format: [[a b],[c d]] which might include t or e^t"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[\"sym-exp(t)\",\"sym-0\"],[\"sym-0\",\"sym-1\"]]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 4c",
+ "question": "4c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4d) (0.25 pts) Compute $e^{(A+B)}$\n",
+ "\n",
+ "Format: anything reasonable"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[2.718,0.0],[0.0,1.0]]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 4d",
+ "question": "4d"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4e) (0.25 pts) Compute $e^A e^B$\n",
+ "\n",
+ "Format: anything reasonable"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[2.718,0.0],[-4.0,1.0]]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 4e",
+ "question": "4e"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4f) (0.5pts) Compute $e^B e^A$\n",
+ "\n",
+ "Format: anything reasonable"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[2.718,0.0],[2.873,1.0]]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 4f",
+ "question": "4f"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 5) Symmetric and Unsymmetric Matrices"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ " Let A=$\\left(\\begin{matrix} 1 & 2 & 4\\\\4 &3& 0 \\\\ 8& 6& 5 \\\\ \\end{matrix} \\right)$. Write A as M+N where M is symmetric and N is antisymmetric.\n",
+ " \n",
+ " 5a) (0.5 pts) M =\n",
+ " \n",
+ " Format: [[a b c],[d e f],[g h i]]
Anything reasonable"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[1.0,3.0,6.0],[3.0,3.0,3.0],[6.0,3.0,5.0]]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 5a",
+ "question": "5a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5b) (0.5 pts) N=\n",
+ "\n",
+ "Format: [[a b c],[d e f],[g h i]]
Anything reasonable"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[0.0,1.0,2.0],[-1.0,0.0,3.0],[-2.0,-3.0,0.0]]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 5b",
+ "question": "5b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5c (1 pt) Consider the matrix \n",
+ "$M= \\frac{1}{\\sqrt{3}} \\left( \\begin{matrix} 0 & 1 & 1 & 1 \\\\ -1 & 0 & -1 & 1 \\\\ -1 & 1 & 0 & -1 \\\\ -1 & -1 & 1 & 0 \\end{matrix} \\right).$\n",
+ "This matrix is skew-symmetric (hence it has trace zero) and orthogonal. Therefore, the eigenvalues are:\n",
+ "\n",
+ "1. i,i,i,−i
\n",
+ "2. 1,1,−1,−1
\n",
+ "3. 1,i,−1,−i
\n",
+ "4. i,i,−i,−i\n",
+ "\n",
+ "1, 2, 3, or 4"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "4.0",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 5c",
+ "question": "5c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## 6. Looking for Three Numbers"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "(2 pts.) Let A=$\\left( \\begin{matrix} 2 & b \\\\ 1 & 0 \\end{matrix} \\right) $. Let b$_1$, b$_2$ and b$_3$ be values of b such that:\n",
+ "\n",
+ "1) when b=b$_1$, A is of the form QΛQ$^T$;\n",
+ "\n",
+ "2) when b=b$_2$, A is not of the form SΛS$^{−1}$;\n",
+ "\n",
+ "3) when b=b$_3$, A is not invertible.\n",
+ "\n",
+ "What is [b$_1$,b$_2$,b$_3$]?\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[1.0,-1.0,0.0]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 3,
+ "msg": " Will commit last result as the answer to question 6",
+ "question": "6"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 7. Markov Matrices\n",
+ "\n",
+ "What are the steady state eigenvectors for the following Markov matrices? (elements add to one)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "7a) (1 pt) A=$\\left( \\begin{matrix} 1 & .2 \\\\ 0 & .8 \\end{matrix} \\right)$.\n",
+ "\n",
+ "[a,b]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[1.0,0.0]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 7a",
+ "question": "7a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "7b) (1 pt) A=$\\left( \\begin{matrix} .2 & 1 \\\\ .8 & 0 \\end{matrix} \\right)$.\n",
+ "\n",
+ "[a,b]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[0.556,0.444]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 7b",
+ "precision": 3,
+ "question": "7b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "7c) (1 pt) A=$\\left( \\begin{matrix} 1/2 & 1/4 & 1/4 \\\\ 1/4 & 1/2 & 1/4 \\\\ 1/4 & 1/4 & 1/2 \\end{matrix} \\right)$."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[0.333,0.333,0.333]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "msg": " Will commit last result as the answer to question 7c",
+ "question": "7c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 8. EXPLICIT IN TIME BACKWARD IN SPACE\n",
+ "\n",
+ "[For those who do not wish to read too much:\n",
+ "when solving differential equations, setting the time step interval\n",
+ "dt small can be more accurate, but can take longer. One can \n",
+ "make dt larger but one might regret it with a blown up solution.\n",
+ "This problem wants you to experience this for yourself,\n",
+ "by evolving to a large time (say 500) and seeing what is the first\n",
+ "dt that is so large that it blows up.\n",
+ "\n",
+ "Either way, this is all about linear algebra.\n",
+ "]\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "\n",
+ "Let's talk through how numerical methods solve a simple partial differential equation.\n",
+ "\n",
+ "The differential equation we will consider is the one dimensional wave equation:\n",
+ "\n",
+ "$\\frac{\\partial u}{\\partial t}=−\\frac{\\partial u}{\\partial x}$,\n",
+ "with initial condition u(x,0)=sin(x).\n",
+ "\n",
+ "Note that the wave equation is typically a second order equation in both x and t because waves disperse in both directions, right and left. This equation models only the part of the wave that travels to the right.\n",
+ "\n",
+ "The first step to create a numerical method is to discretize. Let's choose the number of points we'd like to break up the x interval from 0 to 2π into. We'll call this variable numx = 5 in this example. In the code below, you will take a much larger number of points. Then our spatial step variable Δx is dx = 2/numx = 2*π/5.\n",
+ "\n",
+ "Our x vector becomes x = [dx: dx: 2*π]. And the initial condition is u(:,1) = sin(x). It may seem odd to start the input vector x from dx rather than 0. The reason is that because our initial condition is periodic, we will imagine the x axis as continuing infinitely in either direction by identifying the value at 0 with the value at 2π.\n",
+ "\n",
+ "We'll use a backwards method on the spacial variable to approximate as follows\n",
+ "\n",
+ " $\\frac{\\partial u}{\\partial x}(x+\\Delta x, t) \\approx \\frac{u(x + \\Delta x,t)-u(x,t)}{\\Delta x} $\n",
+ "$= \\frac{1}{\\Delta x} \n",
+ "\\left( \\begin{matrix} 1 & 0 & 0 & 0 & -1\\\\ -1 & 1 & 0 & 0 & 0\\\\ 0 & -1 & 1 & 0 & 0\\\\ 0 & 0& -1 & 1 & 0\\\\ 0 & 0 & 0 & -1 & 1 \\end{matrix} \\right) \\begin{matrix} u \\end{matrix} $\n",
+ "\n",
+ "This works because when x=0 we've identified u(0,t)=u(2π,t).\n",
+ "\n",
+ "Let's name the matrix A=\n",
+ "$\\left( \\begin{matrix} 1 & 0 & 0 & 0 & -1\\\\ -1 & 1 & 0 & 0 & 0\\\\ 0 & -1 & 1 & 0 & 0\\\\ 0 & 0 & -1 & 1 & 0\\\\ 0 & 0 & 0 & -1 & 1 \\end{matrix} \\right) $.\n",
+ "\n",
+ "Then our differential equation becomes:\n",
+ "\n",
+ "$\\frac{\\partial u}{\\partial t} = -\\frac{1}{\\Delta x}Au$\n",
+ "\n",
+ "Next we must discretize the time variable. The first numerical method we will consider is called explicit in time, backwards in space. We will look for a solution of the form\n",
+ "\n",
+ "$u(x,t+\\Delta t) = u(x,t) - \\frac{\\Delta t}{\\Delta x} A u(x,t).$\n",
+ "\n",
+ "This is a simple updating scheme, which can be unstable. By changing the size of the time step dt in the code below, find the size dtunstable above which the solution becomes unbounded as the number of time steps increases. Enter your answer to two significant figures.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "pdesolve (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "## IN JULIA: THE CODE IS SHORTER THAN THE EXPLANATION!!\n",
+ "function pdesolve(dt,time;numx=10)\n",
+ " dx = 2π/numx # size of step size\n",
+ " A = I-[1==mod(i-j,numx) for i=1:numx, j=1:numx]\n",
+ " x = [dx: dx: 2π]\n",
+ " x,(I - dt/dx*A)^round(time/dt) * sin(x)\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Loading help data...\n"
+ ]
+ }
+ ],
+ "source": [
+ "using PyPlot, Interact"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Slider{Float64}([Input{Float64}] 0.75,\"dt\",0.75,0.5:0.001:1.0)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Options{:ToggleButtons,Int64}([Input{Int64}] 1,\"time\",1,\"1\",OptionDict({\"1\",\"2\",\"3\",\"500\"},{\"1\"=>1,\"2\"=>2,\"500\"=>500,\"3\"=>3}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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E0URtra26Nq1KzZu3Ch3OERUyvTybWxvb4/MzEwAUjXpqlWrin2O5s2bo3Xr1qUdGhHpyZUrV5CZmala9IqIyha9/7wvaYWIHipSiEiHnJycChx5QUTGz2hGefj4+MDU1BQ2Njbo378/rl69KndIRERE9P8MvgNCrVq1MGXKFHTo0AFVq1ZFfHw85s6diw4dOuDkyZNwcnKSO0QiIqJyTy+dMl/34MED2NnZFblTpiapqalwcnJCly5dsGPHjnzb09LSkJaWpm2oRERE5U6tWrVU6wYVh8HXUGhSv359dOzYEadOncq3LS0tDW3btsXt27dliIyIiMi4vfvuuzh79myxkwqjTCiUlJPnvC4tLQ23b9/Ghg0b0KxZMxmiMizjx4/HwoUL5Q5DdnwcJHwc/sbHQsLH4W98LIBr165hyJAhSEtLKx8JRVJSEmJjY9G9e/cC92nWrBmHmUJa8ZCPAx8HJT4Of+NjIeHj8Dc+FtrRW0Kxb98+PH36FI8fPwYAXL16FVu3bgUA9OrVC+bm5hg+fDjWrVuHpKQk1K1bFwDQrVs3eHt7w9HREZaWlrh8+TLmzZsHU1NTzJw5U1/hExERUSH0llCMHj0aqampAKSmii1btmDLli0QBAHJycmoV6+eajGe1/uJOjk5ITw8HDdv3sTz589hZ2eHrl27YurUqWjcuLG+wiciIqJC6C2hSE5Ofus+oaGhCA0NVStbsGCBrkIiIiKiUmI0E1tRyfj5+ckdgkHg4yDh4/A3PhYSPg5/42OhHb3PQ6Fr58+fR5s2bXDu3Dl2riEiIioGbb5DWUNBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFpjQkFERERaY0JBREREWmNCQURERFrTeULx5MkTTJ48GR988AFsbW2hUCgwffr0Ih9/7949DBs2DLa2trCwsICbmxuOHDmiw4iJiIiouHSeUDx48AArV65ETk4O+vbtCwAQBKFIx7548QJdunRBdHQ0Fi9ejMjISNSsWRM9evTAsWPHdBk2ERERFYOpri9gb2+PzMxMAEB6ejpWrVpV5GNXr16Nq1evIi4uDu3btwcAeHp6wtnZGZMnT8apU6d0EjMREREVj177UIiiWKz9d+zYgaZNm6qSCQAwMTHBkCFDcPr0aaSlpZV2iESlLjsbOHwY+PprYO5coJhvAyIio6DzGgptXLlyBR4eHvnKnZycAABXr15FrVq19B0WUaHy8oD4eODQIekvNlZKKmrUAB48ACwtgTFj5I6SiKh0GfQoj4yMDFSvXj1fubIsPT1d3yERafTXX0BYGPDxx0CtWkCrVkBQEKBQALNmAZcuAffuAePGAePHA9HRckdMRFS6DLqGgshQPX4MHD36dy3EtWuAIACtWwMBAUC3boCbG1Cpkvpx//kPcPUqMHAgcOYM0KCBPPETEZU2g04obGxskJGRka9cWWZjY1PgsePHj4eVlZVamZ+fH/z8/Eo3SCoXXr0Czp79O4GIi5PK6teXkofgYMDbW2rWKIypKbBpE9CuHdC7N3DypNQEQkSkbxEREYiIiFAry8rKKvH5DDqhcHJyQnx8fL7yy5cvAwCaN29e4LELFy5E69atdRYblW2iCPz5598JxJEjwMOHQNWqgJcXsHAh8MEHQOPGUs1EcVSvDuzaBXToAHz2GbB1q9Q0QkSkT5p+ZJ8/fx5t2rQp0fkM+mOsb9++SEhIwOnTp1Vlr169woYNG9ChQwe88847MkZHZU1GBrBlCzBiBNCwIeDgAIwdK/V9CAwETpwA0tOBnTuBf/5T2l7cZELJ0REID5fONWNG6d4HEZEc9FJDsW/fPjx9+hSPHz8GII3O2Lp1KwCgV69e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",
+ "text/plain": [
+ "Figure(PyObject )"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {
+ "comm_id": "8e6b491c-e9ee-4520-993b-ee547e7f1a80",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "f=figure(figsize=(6,6))\n",
+ "\n",
+ "@manipulate for dt=.5:.001:1, time=[1:3,500] withfig(f) do\n",
+ " plot(pdesolve(dt,time)...)\n",
+ " title(\"Set Time=500 \\n Find the smallest blowing up dt \\n Time=$time, dt=$dt\")\n",
+ " end\n",
+ "end\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "(4 pts.) To two decimal places, find the smallest dt which graphs values bigger than 10^16\n",
+ "smallest unstable dt ="
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "0.7",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 8,
+ "msg": " Will commit last result as the answer to question 8",
+ "precision": 1,
+ "question": "8"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 9. IMPLICIT IN TIME BACKWARD IN SPACE\n",
+ "\n",
+ "In the previous problem, we used an explicit in time, backwards in space numerical method. The difference equation we modeled was:\n",
+ "\n",
+ "$u(x,t+\\Delta t) = u(x,t) \n",
+ " - \\frac{\\Delta t}{\\Delta x} A u(x,t).$\n",
+ "\n",
+ "We saw that this method could be unstable.\n",
+ "\n",
+ "To make a stable version, we can use an implicit in time, backwards in space method. In this method, you take the space difference Au at the new time t+Δt:\n",
+ "\n",
+ "$u(x,t+\\Delta t) = u(x,t) \n",
+ " - \\frac{\\Delta t}{\\Delta x} A u(x,t+\\Delta t).$\n",
+ "\n",
+ "We Modified the code below which was copied from the last problem so that it becomes an implicit in time method. Explore different time steps to see that as the time step increases, solutions tend to zero more quickly.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "pdesolveback (generic function with 1 method)"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "function pdesolveback(dt,time;numx=10)\n",
+ " dx = 2π/numx # size of step size\n",
+ " A = I-[1==mod(i-j,numx) for i=1:numx, j=1:numx]\n",
+ " x = [dx: dx: 2π]\n",
+ " x,(I + dt/dx*A)^round(time/dt) \\ sin(x)\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Slider{Float64}([Input{Float64}] 0.525,\"dt\",0.525,0.05:0.001:1.0)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Options{:ToggleButtons,Int64}([Input{Int64}] 1,\"time\",1,\"1\",OptionDict({\"1\",\"2\",\"3\"},{\"1\"=>1,\"2\"=>2,\"3\"=>3}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhQAAAIeCAYAAADj4ZaDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl8VNXh/vHPhLAEiCAREQLKViFlMyBFpcqiaHBB2QkkSkA2FYgL+rVYigoWd37VVgoKMSROwEBEZJFFQBQE2ZRFihWFKrglAkZFSeb+/jhNakyALDM5szzv14tX7U3unYdBmSfnnHuuy3EcBxEREZEKCLMdQERERAKfCoWIiIhUmAqFiIiIVJgKhYiIiFSYCoWIiIhUmAqFiIiIVJgKhYiIiFSYCoWIiIhUmAqFiIiIVJgKhUgQa9q0Kc2aNbMdQ0RCgAqFSJBzuVyF/5ySkkJYWBgvv/yyT18zPz+fZ599lvbt21OzZk2ioqK44YYb2Lx5c5muM3XqVMLCwk77a9WqVUW+/8cffyQ9PZ2hQ4fSunVrateuTWRkJJ07d+aZZ57h1KlTJb7OmV7j8ssvL/f7IBJKwm0HEJHK9+uS4W2O4zBkyBAWLVpE69atGT9+PNnZ2SxYsICrrrqKRYsW0adPnzJdc/jw4TRt2rTY8ZYtWxb5/2+//TaJiYnUq1ePnj170q9fP3Jycnj99de57777WLRoEW+99RbVq1cvdq2mTZsyfPjwYscbN25cpqwioUqFQiQE+fKZgBkZGSxatIiuXbuydu1aqlWrBsDYsWP54x//yKhRo+jRoweRkZGlvubw4cO56qqrzvp9DRs2ZP78+QwaNIiqVasWHn/qqafo3r07mzdv5vnnn+fee+8tdm7Tpk2ZMmVKqTOJSFGa8hAJAs8//zxt2rQhIiKCxo0bc9ddd3H8+PEi39O9e3dGjBgBQFJSUpFh/cOHD3styz/+8Q8Apk+fXlgmAC699FIGDx7MN998Q2Zmptde79c6dOjAsGHDipQJgNq1axeWiA0bNvjktUVCnUYoRALcxIkTee6552jUqBFjxowhPDycJUuWsHXrVk6dOlU4vJ+UlMS5557LkiVLuOWWW7jkkksKr1GnTh2vZDl58iSbN2+mVq1aXHnllcW+3rt3b+bPn8/69etJSkoq9XXffvtt3nvvPRzHoVmzZlx99dVERUWVKVtByfht2Sjw3XffMWfOHL7++mvq1q3LpZdeSpcuXcr0GiKhTIVCJIBt2rSJ5557jpYtW7J161bq1q0LmNGBHj16cPTo0cK1B7fddhuO4xQWiltvvbXY9T777DNSUlLKlCEpKYmLLroIgE8++QSPx0Pz5s1LXKdRsObhwIEDZXqN305FVK9enUmTJvHII4+U+hovvfQSAHFxcSV+/YMPPmDMmDFFjnXo0IH58+fTtm3bMuUVCUUqFCIBbN68eQBMnjy5sEyA+cD961//So8ePcp0vc8++6xMH9Iul4uePXsWFoqCaZbTjXgUHD927Fiprn/JJZcwb948unfvTsOGDfn666958803eeihh5g2bRr5+flMnz79rNd5/vnnefPNN+nQoUPhtM+v3XPPPQwYMICLL76YGjVq8NFHH/H444+TmZlJz5492bVrF40aNSpVZpGQ5YhIwOrYsaMTFhbmfPrpp8W+durUKadKlSpOs2bNCo/NmzfPcblczssvv+yTPO+++67jcrmcK6+8ssSvHzhwwHG5XE7r1q0r9Do7duxwqlWr5lSrVs359ttvz/i9mZmZTpUqVZyGDRs6n3zySZleZ8CAAY7L5XLuvvvuisQVCQlalCkSwApGBBo0aFDsa+Hh4Zx33nmVmqdgBOK3C0ILFBz/9WhKecTGxtK5c2dOnTp1xr0tMjMzGTJkCBdccAHr16+nefPmZXqdsWPHArBx48YK5RUJBZryEAlgBR/gX375ZbEdMfPy8vj222+58MILS329iq6haNGiBWFhYRw8eJD8/HyqVKlS5Hs//vhjAC6++OIyvUZJzj//fMBsZlWSjIwMEhMTadSoEW+99RYtWrQo82vUr18fgB9++KH8QUVChAqFSADr1KkTO3fuZMOGDcUKxTvvvIPH4ylyrOADPj8/v8TrVXQNRY0aNejatSsbN25k48aNdO/evcj3r1ixAoCePXuW+jVKkpeXx44dOwBKHHVIS0tj+PDhNGnShHXr1pW4KVZpbNmy5bSvISK/YXvORUTKr2DNQsuWLZ2cnJzC4z/99JNz2WWXOS6Xq8gaimXLljkul8uZOnWqzzK53W7H5XI5Xbt2dU6ePFl4fOvWrU61atWcBg0aON9//32Rcw4dOuR89NFHzo8//lh47Pvvv3f2799f7Pq//PKLM378eMflcjm///3vi3193rx5TlhYmNOiRQvn8OHDZ8374YcfOqdOnSp2fPfu3c55553nhIWFOW63+6zXEQl1Lsfx4ZZ5IuJzBftQNGzYkP79+1O1alWWLFlCVFQUn3/+OdWqVePTTz8FzN0VjRs3pmrVqiQmJhZOG0yYMIFzzjnHa5kGDRpEZmYmrVu35sYbbyzcevuXX35h0aJF3HTTTUW+v3v37rz99tusW7eObt26AWa0pHnz5nTu3JnWrVvTsGFDvvnmG9avX8+nn35K/fr1Wb16Ne3bty+8zrp167jmmmtwHIcRI0aUuG32ueeey8SJEwv///Dhw3njjTe48sorady4MdWrV+df//oXK1aswHEcRo0axaxZs7z23ogErcpoLd9//70zceJEp1GjRk6NGjWcSy65xMnIyCjVuatXr3Z69uzp1K9f36ldu7bTvn17529/+5uTn5/v49QigeP55593YmJinOrVqzvR0dHOXXfd5Rw/ftxp2rRpkREKx3GclStXOpdffrlTu3Ztx+VyOWFhYc6hQ4e8micvL8959tlnnXbt2jkRERFOvXr1nBtuuMHZvHlzid/fvXt3JywszNmwYUPhsRMnTjgTJkxwLrvsMueCCy5wqlWr5kRGRjqXXHKJ8+CDDzrffPNNseukpKQU/p5cLleJv377frz22mtOv379nJYtWzrnnHOOU61aNadRo0ZOnz59nKVLl3r1fREJZpUyQnHttdeybds2Hn/8cS6++GLS09N58cUXSU9PJz4+/rTnrVy5kuuvv54ePXqQnJxMrVq1WLJkCc899xwTJkxg5syZvo4uIiIipeDzQrF8+XJuvPFG3G43gwcPLjx+3XXXsXfvXg4fPkxYWMl3rw4bNoysrCyys7OJiIgoPB4XF8d7771X6s1xRERExLd8vg9FVlYWkZGRDBw4sMjxpKQkjhw5UriKuiQRERFUrVqVGjVqFDlep06dIgVDRERE7PJ5odizZw8xMTHFRiHatWsHwN69e0977p133onH42HChAkcPXqUY8eOkZqaymuvvcYDDzzg09wiIiJSej7fhyI7O7vwgUC/Vq9evcKvn05sbCwrVqxgwIAB/P3vfwfMffQzZswgOTnZN4FFRESkzPx6Y6t33nmHG264gR49ejB69Ghq1arF2rVrmTx5Mj/99BMPPfRQiecdPXqUo0ePVnJaERGRwNewYUMaNmxY5vN8XiiioqJKHIXIyckp/PrpTJw4kWbNmpGVlVX4KORu3boRFhbG1KlTGTZsWLHdAY8ePcql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ZkpBIiMD+Phj6UhIAGbPBry85J3/8mUgOlq6zLJ69Qsp2W7k5+fXu+OySsY+9mYHio4dO2Ly5MlNOnlAQADy8/MhCILJOorTp08DAHr16tVo/z59+qCoqOiZr6tUqme+tmrVKgQHBzepXiIisgwvLylQ/O1v0gf/mjXS5Ym4OOlx335+TT9nba10G6ujI1BYKP1J5mvoP9nHjh1D3759n+t8Fl1DERUVBaPRiMLCQpP2zZs3w9vbG6GhoY32HzNmDABg7969Ju179uyBg4MDQkJCXmzBRERkUe3aSZc//vUvaUOybduAP/xBujvkn/80/zyiKO2KeuaMdEeHh4fFSiYzWTRQ6HQ6DB8+HHq9HllZWSgpKUF8fDyKioqwYsUKkxmGuLg4aDQaXLp0qa4tNjYWwcHBmDZtGtauXYuDBw9i/vz5yMzMhF6vh4+PjyXLJyIiC3FxkbYSv3gRWLFCuvXU3x8YN066U+S/+fhjabOvv/9d2meElGfxJ2Vu374dEyZMQGpqKl577TUcPXoUBQUF9aZZBEGAIAgQn3qGa4sWLfD111/jjTfewJIlSxAREYGdO3di+fLlWLNmjaVLJyIiC3NyAmbOBC5ckNZaHDkCBAYCf/mL9GyLhhQVSU/AnDdPehomNQ8qUWyOT2F/fr9f/ykrK+MaCiKi/2f+/W8gLw9YulS6BDJsGJCcLD1AS6UCzp8HQkKkfUR27wYcHJSu2LbI+QzlbqNERNRsaDTAxIlAebm0vqKiQtrd9E9/ktZK/PWvQPv2UuhgmGheGCiIiKjZcXCQnl9x/Lg0E/H4sXRHx+XLwK5dwH88FYCaAbNvGyUiIrI2lQoYORKIiAAOHQKcnYHu3ZWuihrCQEFERM3e7xuRUfPFSx5EREQkGwMFERERycZAQURERLIxUBAREZFsDBREREQkGwMFERERycZAQURERLIxUBAREZFsDBREREQkGwMFERERycZAQURERLIxUBAREZFsDBREREQkGwMFERERycZAQURERLIxUBAREZFsDBREREQkGwMFERERycZAQURERLIxUBAREZFsDBREREQkGwMFERERycZAQURERLIxUBAREZFsDBREREQkGwMFERERycZAQURERLIxUBAREZFsDBREREQkGwMFERERycZAQURERLIxUBAREZFsDBREREQkGwMFERERycZAQURE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",
+ "text/plain": [
+ "Figure(PyObject )"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {
+ "comm_id": "28450640-16f9-4a60-8729-abdcfc314298",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "f=figure(figsize=(6,6))\n",
+ "\n",
+ "@manipulate for dt=.05:.001:1, time=[1:3] withfig(f) do\n",
+ " plot(pdesolveback(dt,time)...)\n",
+ " title(\"dt=$dt\")\n",
+ " end\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "(8 pts.) pdesolveback is a 6 line code. Which line was modified?\n",
+ "1, 2, 3, 4, 5, or 6? (We can't test you, but we recommend you look\n",
+ "at the code and try to understand it. We also recommend playing with the parameters.)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "5.0",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 8,
+ "msg": " Will commit last result as the answer to question 9",
+ "question": "9"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 10. CENTERED IN TIME BACKWARD IN SPACE \n",
+ "\n",
+ "The explicit in time, backwards in space method could be unstable. In contrast the implicit in time, backwards Euler in space method was very stable. The center method we will discuss below is the most accurate.\n",
+ "\n",
+ "Recap \n",
+ "\n",
+ "All of our methods were backwards in space. We considered three different approaches to time variable.\n",
+ "\n",
+ "Explicit in time (most unstable): $u(x,t+\\Delta t) = u(x,t) - \n",
+ "\\frac{\\Delta t}{\\Delta x} A u(x,t).$\n",
+ "\n",
+ "Implicit in time (most stable): $u(x,t+\\Delta t) = u(x,t) - \n",
+ "\\frac{\\Delta t}{\\Delta x} A u(x,t+\\Delta t).$\n",
+ "\n",
+ "Centered in time (most accurate): $u(x,t+\\Delta t) = u(x,t) - \n",
+ "\\frac{\\Delta t}{\\Delta x} A \\left(\\frac{u(x,t+\\Delta t)+u(x,t)}{2}\\right).$\n",
+ "\n",
+ "\n",
+ "The Julia code for the centered in time would look like this:\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "function pdesolvecenter(dt,time;numx=10)\n",
+ " dx = 2π/numx # size of step size\n",
+ " A = I-[1==mod(i-j,numx) for i=1:numx, j=1:numx]\n",
+ " x = [dx:dx:2π]\n",
+ " x,(?? \\ ??)^round(time/dt) * sin(x) ## (M\\N) is notation for inv(M)*N, you fill in M and N\n",
+ "end"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "using SymPy # Ignore warnings\n",
+ "dt=Sym(\"dt\")\n",
+ "dx=Sym(\"dx\")\n",
+ "A=Sym(\"A\");\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "(5pts) Write down a symbolic expression for M in terms of dt, dx, A and I"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[\"sym-dt/(2*dx) + 1\",\"sym-2*dt/dx\",\"sym-4*dt/dx\"],[\"sym-dt/dx\",\"sym-3*dt/(2*dx) + 1\",\"sym-3*dt/dx\"],[\"sym-2*dt/dx\",\"sym-0\",\"sym-5*dt/(2*dx) + 1\"]]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 5,
+ "msg": " Will commit last result as the answer to question 10a",
+ "question": "10a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "(4pts) Write down a symbolic expression for N in terms of dt, dx, A and I"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "alert": "info",
+ "answer": "[[\"sym--dt/(2*dx) + 1\",\"sym--2*dt/dx\",\"sym--4*dt/dx\"],[\"sym--dt/dx\",\"sym--3*dt/(2*dx) + 1\",\"sym--3*dt/dx\"],[\"sym--2*dt/dx\",\"sym-0\",\"sym--5*dt/(2*dx) + 1\"]]",
+ "attempts": 0,
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 4,
+ "msg": " Will commit last result as the answer to question 10b",
+ "question": "10b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Options{:ToggleButtons,ASCIIString}([Input{ASCIIString}] score,\"report\",\"score\",\"Score\",OptionDict({\"Score\",\"Incorrect attempts\"},{\"Score\"=>\"score\",\"Incorrect attempts\"=>\"attempts\"}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " | Names | total | 1a | 1b | 2a | 2b | 3a | 3b | 3c | 4a | 4b | 4c | 4d | 4e | 4f | 5a | 5b | 5c | 6 | 7a | 7b | 7c | 8 | 9 | 10a | 10b |
---|
1 | MAX | 50.0 | 1.0 | 2.0 | 1.0 | 1.0 | 2.0 | 2.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 3.0 | 1.0 | 1.0 | 1.0 | 8.0 | 8.0 | 5.0 | 4.0 |
---|
"
+ ],
+ "text/plain": [
+ "1x26 DataFrame\n",
+ "| Row | Names | total | 1a |\n",
+ "|-----|-------|-----------------------|------------------------|\n",
+ "| 1 | \"MAX\" | Colored(\"black\",50.0) | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 1b | 2a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 2b | 3a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 3b | 3c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 4a | 4b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 4c | 4d |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 4e | 4f |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 5a | 5b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 5c | 6 |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"3.0\") |\n",
+ "\n",
+ "| Row | 7a | 7b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 7c | 8 |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"8.0\") |\n",
+ "\n",
+ "| Row | 9 | 10a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"8.0\") | Colored(\"black\",\"5.0\") |\n",
+ "\n",
+ "| Row | 10b |\n",
+ "|-----|------------------------|\n",
+ "| 1 | Colored(\"black\",\"4.0\") |"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {
+ "comm_id": "f6b3cba8-5b3e-441c-aee8-b0ea55aa91da",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Homework.progress()"
+ ]
+ }
+ ],
+ "metadata": {
+ "homework": {
+ "admins": [
+ "mit.edelman@gmail.com",
+ "edelman.alan@gmail.com"
+ ],
+ "course": "MIT-18.06-Spring-2015",
+ "mode": "answering",
+ "problemset": "pset7"
+ },
+ "kernelspec": {
+ "display_name": "Julia 0.3.11",
+ "language": "julia",
+ "name": "julia-0.3"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "0.3.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/18.06-PS8.ipynb b/18.06-PS8.ipynb
new file mode 100644
index 00000000..4e0e382a
--- /dev/null
+++ b/18.06-PS8.ipynb
@@ -0,0 +1,1715 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# 18.06 Problem Set 8"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Removing Homework (unregistered)\n",
+ "INFO: Cloning Homework from https://github.com/shashi/Homework.jl.git\n",
+ "INFO: Computing changes...\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " \n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: No packages to install, update or remove\n",
+ "WARNING: This version of the GnuTLS library (3.2.11) is deprecated\n",
+ "and contains known security vulnerabilities. Please upgrade to a\n",
+ "more recent version.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "Pkg.rm(\"Homework\")\n",
+ "Pkg.clone(\"https://github.com/shashi/Homework.jl.git\")\n",
+ "using Homework\n",
+ "\n",
+ "# Fill the form below, you only need to do it once throughout this semester.\n",
+ "Homework.show_mit_form()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 1. Difference of Squares"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "Warning: error initializing module Plots:\n",
+ "Base.MethodError(f=warn, args=(\"You don't have any of the supported backends installed! Chose from \", Array{Symbol, 1}[:qwt, :gadfly, :unicodeplots, :pyplot, :immerse, :winston]))\n"
+ ]
+ },
+ {
+ "data": {
+ "text/latex": [
+ "$$y$$"
+ ],
+ "text/plain": [
+ "y"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "using SymPy #Ignore Warnings\n",
+ "x=Sym(\"x\")\n",
+ "y=Sym(\"y\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "a) (2 pt) Write f(x,y)=x$^2$+4xy+3y$^2$ as a difference of squares (each square is a linear function of x and/or y))\n",
+ "\n",
+ "Format: (????)^2-(????)^2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "1a"
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {
+ "comm_id": "fe9e6240-adb5-4b00-96f1-7e381543c9fa",
+ "reactive": true
+ },
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Button{Nothing}([Input{Nothing}] nothing,\"Submit \\ubb\",nothing)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "b) (1 pt) f(x,y) can be negative?\n",
+ "\n",
+ "true or false ?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "1b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 2. Saddle Point\n",
+ "\n",
+ "a) (1 pt) The function f(x,y)=2xy certainly has a saddle point and not a minimum at (0,0). What symmetric matrix A produces this f?\n",
+ "\n",
+ "Format: [[x,y],[y,z]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "2a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "b) (1 pt) Let λ$_1$ and λ$_2$ be the eigenvalues of A with λ$_1$>λ$_2$. What is the vector [λ$_1$,λ$_2$]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "2b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 3. THE MATRIX CORRESPONDING TO A QUADRATIC FORM "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "a. (1 pt.) Find the 3 by 3 symmetric matrix A for which\n",
+ "\n",
+ "$\\begin{bmatrix}x_1 & x_2 & x_3\\end{bmatrix} \\begin{bmatrix} A \\end{bmatrix} \\begin{bmatrix}x_1 \\\\ x_2 \\\\ x_3\\end{bmatrix} = 4(x_1 - x_2 + 2x_3)^2$\n",
+ "\n",
+ "Format: [[a b c],[d e f],[g h i]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "3a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "b) (1 pt.) Find A's pivots. \n",
+ "\n",
+ "Format: [p q r] or [p q] or [p] depending on how many pivots there are."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "3b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "c) (1 pt.) What is the rank of A?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "3c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "d) (1 pt.) What are the eigenvalues of A?\n",
+ "\n",
+ "Format: [a, b, c] where a$\\ge$b$\\ge$c"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "3d"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "e) (1 pt.) What is det(A)?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "3e"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 4. Upper Left Determinants"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "(3 pt.) Compute the three upper left determinants of\n",
+ "A=$\\left[\\begin{matrix}2 &2 & 0\\\\2 & 5 & 3\\\\0 & 3 & 8\\end{matrix}\\right]$\n",
+ "to establish positive definiteness. Let a, b and c be equal to the determinant of upper left 1 by 1, 2 by 2 and 3 by 3 matrix respectively.\n",
+ "\n",
+ "Format: [a,b,c]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 3,
+ "question": "4"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 5. Similar Diagonal Matrices \n",
+ "(2 pt.) If A=diag(1,3) and B=diag(3,1) show that A and B are similar (find a permutation matrix M such that B=M$^{−1}$AM). (Here diag denotes a 2x2 matrix with those entries on the diagonal in the given order.)\n",
+ "\n",
+ "Format: [[a b],[c d]] (a permutation matrix)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "5"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## Problem 6. Change of Basis\n",
+ "\n",
+ "Show that A and B are similar by finding M so that B=M$^{−1}$AM."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "a. (2 pt.) $A = \\left[ \\begin{smallmatrix}1 & 0\\\\1& 0\\end{smallmatrix}\\right]$ and $B = \\left[ \\begin{smallmatrix}1 & 0\\\\0 & 0\\end{smallmatrix}\\right]$ \n",
+ "\n",
+ "There are infinitely many possible $M$ but only one with ones and zeros. Please find the $M$ whose entries are ones and zeros.\n",
+ "\n",
+ "Format: M=[[a b],[c d]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "6a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "b. (2 pt.) $ A = \\left[ \\begin{smallmatrix}1 & 1\\\\1&1\\end{smallmatrix}\\right]$ and $B = \\left[ \\begin{smallmatrix}1 & -1\\\\-1&1\\end{smallmatrix}\\right]$\n",
+ "\n",
+ "There are infinitely many possible $M$ but only one with first row [3 4]. Please find the $M$ whose first row is [3 4].\n",
+ "\n",
+ "Format: [[3 4],[? ?]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "6b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "c. (2 pt.) $ A = \\left[ \\begin{smallmatrix}1 & 2\\\\3&4\\end{smallmatrix}\\right]$ and $B = \\left[ \\begin{smallmatrix}4 & 3\\\\2&1\\end{smallmatrix}\\right]$\n",
+ "\n",
+ "\n",
+ "There are infinitely many possible $M$ but only one with first row [2 -3]. Please find the $M$ whose first row is [2 -3].\n",
+ "\n",
+ "Format [[2 -3],[? ?]]\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "6c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 7. Powers of a Matrix"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "a. (0.25 pt) Find $A^2$, $A^3$ and $A^5$ where $ A = \\left[ \\begin{smallmatrix}1 & 1\\\\ 0 &1 \\end{smallmatrix}\\right]$.\n",
+ "We will only check $A^5$:\n",
+ "\n",
+ "Format (for $A^5$): [[? ?],[? ?]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 0.25,
+ "question": "7a",
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "b. (0.25 pt) Guess the form of $A^k$\n",
+ "\n",
+ "[[? ?],[? ?]] (use numbers and k)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$k$$"
+ ],
+ "text/plain": [
+ "k"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "using SymPy\n",
+ "k=Sym(\"k\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 0.25,
+ "question": "7b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "c. (.5 pt) What is $A^0$ according to the pattern?\n",
+ "\n",
+ "[[? ?],[? ?]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 0.25,
+ "question": "7c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "d. (.5 pt) What is $A^{-1}$ according to the pattern ( k=-1) ?\n",
+ "\n",
+ "[[? ?],[? ?]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 0.25,
+ "question": "7d"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 8. True or False\n",
+ "\n",
+ "a) (1 pt) A symmetric matrix can't be similar to a nonsymmetric matrix.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "8a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "b) (1 pt) An invertible matrix can't be similar to a singular matrix."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "8b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "c) (1 pt) A can't be similar to −A unless A=0."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "8c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "d) (1 pt) A can't be similar to A+I."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "8d"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Problem 9. Positive Definite Matrices"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "\\begin{bmatrix}3&1&x\\\\1&4&2\\\\x&2&5\\end{bmatrix}"
+ ],
+ "text/plain": [
+ "3x3 Array{Sym,2}\n",
+ "[3 1 x]\n",
+ "[ ]\n",
+ "[1 4 2]\n",
+ "[ ]\n",
+ "[x 2 5]"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "using SymPy # If you run twice the warning messages disappear\n",
+ "x=Sym(\"x\")\n",
+ "A=[[3 1 x],[1 4 2],[x 2 5]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$- 8 x + 4$$"
+ ],
+ "text/plain": [
+ "-8*x + 4"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "(diff(simplify(det(A)),x))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": false
+ },
+ "source": [
+ "9a. (4 pts) The above matrix A and its derivative is taken for you in Julia using the SymPy python package. What\n",
+ "value for x sets the derivative to 0? (Thought question, not to be answered online, is this a max or a min?)\n",
+ "\n",
+ "The derivative is 0 when x= ???"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 4,
+ "precision": 1,
+ "question": "9a"
+ },
+ "outputs": [],
+ "source": [
+ "simplify(inv(A)[1,3])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "9b. (5 pts.) Evaluate the expression below and without being autograded notice that this is \n",
+ "determinant of A[2:3,1:2]/det(A) and the numerator is half the derivative. We can conclude\n",
+ "that the derivative is 0 exactly when the corresponding subdeterminant is 0."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 5,
+ "question": "9b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## Problem 10. Positive Definite Matrices\n",
+ "\n",
+ "Now suppose I have a symmetric, positive definite, 4 by 4 matrix A. But now we are missing more data. \n",
+ "\n",
+ "${A = \\begin{bmatrix} 3 & 1 & x & y\\\\ 1 & 4 & 2 & z\\\\ x & 2 & 5 & 1\\\\ y & z & 1 & 7 \\end{bmatrix}}$\n",
+ "\n",
+ "Turns out we can maximize this determinant as well."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "\\begin{bmatrix}3&1&x&y\\\\1&4&2&z\\\\x&2&5&1\\\\y&z&1&7\\end{bmatrix}"
+ ],
+ "text/plain": [
+ "4x4 Array{Sym,2}\n",
+ "[3 1 x y]\n",
+ "[ ]\n",
+ "[1 4 2 z]\n",
+ "[ ]\n",
+ "[x 2 5 1]\n",
+ "[ ]\n",
+ "[y z 1 7]"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Let's get the matrix into Julia\n",
+ "using SymPy # If you run twice the warning messages disappear\n",
+ "x=Sym(\"x\")\n",
+ "y=Sym(\"y\")\n",
+ "z=Sym(\"z\")\n",
+ "A=[[3 1 x y],[1 4 2 z],[x 2 5 1],[y z 1 7]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\frac{- 4 x + 2}{- 4 x^{2} + 4 x + 43}$$"
+ ],
+ "text/plain": [
+ " 2*(-2*x + 1) \n",
+ "-----------------\n",
+ " 2 \n",
+ "- 4*x + 4*x + 43"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "simplify(inv(A[1:3,1:3])[3,1])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "10a (2 pt.) Set the above equal to 0 to solve for x (again). It maximizes the 3x3 determinant. The value of\n",
+ "x is (same as in problem 9)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "precision": 1,
+ "question": "10a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\frac{- 5 z + 2}{- 5 z^{2} + 4 z + 108}$$"
+ ],
+ "text/plain": [
+ " -5*z + 2 \n",
+ "------------------\n",
+ " 2 \n",
+ "- 5*z + 4*z + 108"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "simplify(inv(A[2:4,2:4])[3,1])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "10b (2 pt.) Do the same for the bottom 3x3 getting a value for z. The value for z that makes the above 0\n",
+ "is ??"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "10b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$- 32.0 y + 3.2$$"
+ ],
+ "text/plain": [
+ "--32.0*(-1)*y + 3.2"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "x= # Fill in the correct x\n",
+ "z= # Fill in the correct z\n",
+ "y=Sym(\"y\")\n",
+ "A=[[3 1 x y],[1 4 2 z],[x 2 5 1],[y z 1 7]]\n",
+ "det(A)\n",
+ "simplify(diff( det(A) , y))\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "10c. (2 pt) Now let's do the same for y. Solve the above equals 0 for y.\n",
+ "\n",
+ "The value of y is"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "10c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "10d. (2 pts) The maximum value of the determinant of A is then"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 4,
+ "question": "10d"
+ },
+ "outputs": [],
+ "source": [
+ "#x= # ??\n",
+ "#y= # ??\n",
+ "#z= # ??\n",
+ "A=[[3 1 x y],[1 4 2 z],[x 2 5 1],[y z 1 7]]\n",
+ "det(A)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "We can't test this but we'd like you to look at inv(A) and think of anything really small as roundoff error (0).\n",
+ "Notice the structure."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "4x4 Array{Float64,2}:\n",
+ " 0.363636 -0.0909091 -2.04085e-19 1.02043e-18\n",
+ " -0.0909091 0.335227 -0.125 -2.04085e-18\n",
+ " -3.46945e-18 -0.125 0.255882 -0.0294118 \n",
+ " 8.67362e-19 -3.46945e-18 -0.0294118 0.147059 "
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "inv(A)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [],
+ "text/plain": [
+ "Options{:ToggleButtons,ASCIIString}([Input{ASCIIString}] score,\"report\",\"score\",\"Score\",OptionDict({\"Score\",\"Incorrect attempts\"},{\"Score\"=>\"score\",\"Incorrect attempts\"=>\"attempts\"}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " | Names | total | 1a | 1b | 2a | 2b | 3a | 3b | 3c | 3d | 3e | 4 | 5 | 6a | 6b | 6c | 7a | 7b | 7c | 7d | 8a | 8b | 8c | 8d | 9a | 9b | 10a | 10b | 10c | 10d |
---|
1 | MAX | 45.0 | 2.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 3.0 | 2.0 | 2.0 | 2.0 | 2.0 | 0.25 | 0.25 | 0.25 | 0.25 | 1.0 | 1.0 | 1.0 | 1.0 | 4.0 | 5.0 | 2.0 | 2.0 | 2.0 | 4.0 |
---|
"
+ ],
+ "text/plain": [
+ "1x30 DataFrame\n",
+ "| Row | Names | total | 1a |\n",
+ "|-----|-------|-----------------------|------------------------|\n",
+ "| 1 | \"MAX\" | Colored(\"black\",45.0) | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 1b | 2a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 2b | 3a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 3b | 3c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 3d | 3e |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 4 | 5 |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"3.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 6a | 6b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 6c | 7a |\n",
+ "|-----|------------------------|-------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"0.25\") |\n",
+ "\n",
+ "| Row | 7b | 7c |\n",
+ "|-----|-------------------------|-------------------------|\n",
+ "| 1 | Colored(\"black\",\"0.25\") | Colored(\"black\",\"0.25\") |\n",
+ "\n",
+ "| Row | 7d | 8a |\n",
+ "|-----|-------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"0.25\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 8b | 8c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 8d | 9a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"4.0\") |\n",
+ "\n",
+ "| Row | 9b | 10a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"5.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 10b | 10c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 10d |\n",
+ "|-----|------------------------|\n",
+ "| 1 | Colored(\"black\",\"4.0\") |"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {
+ "comm_id": "e840f770-211e-48c4-9d3f-f9ec160f5c5e",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Homework.progress()"
+ ]
+ }
+ ],
+ "metadata": {
+ "homework": {
+ "course": "MIT-18.06-Spring-2015",
+ "mode": "answering",
+ "problemset": "pset8"
+ },
+ "kernelspec": {
+ "display_name": "Julia 0.3.11",
+ "language": "julia",
+ "name": "julia-0.3"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "0.3.11"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/18.06-PS9.ipynb b/18.06-PS9.ipynb
new file mode 100644
index 00000000..ef96f393
--- /dev/null
+++ b/18.06-PS9.ipynb
@@ -0,0 +1,1373 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: Removing Homework (unregistered)\n",
+ "INFO: Cloning Homework from https://github.com/shashi/Homework.jl.git\n",
+ "INFO: Computing changes...\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ " \n",
+ " \n",
+ "
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO: No packages to install, update or remove\n",
+ "WARNING: This version of the GnuTLS library (3.2.11) is deprecated\n",
+ "and contains known security vulnerabilities. Please upgrade to a\n",
+ "more recent version.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ],
+ "text/plain": [
+ "Html(\"\")"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "Pkg.rm(\"Homework\")\n",
+ "Pkg.clone(\"https://github.com/shashi/Homework.jl.git\")\n",
+ "using Homework\n",
+ "\n",
+ "\n",
+ "Homework.show_mit_form()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 1. Linear Transformations\n",
+ "\n",
+ "1a (2 pts) Which transformations with input v=(v$_1$,v$_2$) are linear?
\n",
+ "\n",
+ "1. T(v)=(v$_2$,v$_1$)
\n",
+ "2. T(v)=(v$_1$,v$_1$)
\n",
+ "3. T(v)=(0,v$_1$)
\n",
+ "4. T(v)=(0,1)
\n",
+ "5. T(v)=v$_1$-v$_2$
\n",
+ "6. T(v)= v$_1$v$_2$\n",
+ "\n",
+ "Format: If 1,2,and 6 are linear write [1,2,6] etc.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "1a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1b (1 pt) Which transformations satisfy T(v+w)=T(v)+T(w). The input is v=(v$_1$,v$_2$,v$_3$).
\n",
+ "\n",
+ "1. T(v)=v/$\\|v\\|$
\n",
+ "2. T(v)=v$_1$+v$_2$+v$_3$
\n",
+ "3. T(v)=(v$_1$,2v$_2$,3v$_3$)
\n",
+ "4. T(v) = largest component of v\n",
+ "\n",
+ "Format: If 1 and 4 work write [1,4] etc."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "1b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "1c (1 pt.) Which transformations satisfy T(cv)=cT(v). The input is v=(v$_1$,v$_2$,v$_3$)\n",
+ "\n",
+ "\n",
+ "1. T(v)=v/$\\|v\\|$
\n",
+ "2. T(v)=v$_1$+v$_2$+v$_3$
\n",
+ "3. T(v)=(v$_1$,2v$_2$,3v$_3$)
\n",
+ "4. T(v) = largest component of v\n",
+ "\n",
+ "Format: If 1 and 4 work write [1,4] etc."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "1c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 2. Transpose as a Linear Transformation\n",
+ "\n",
+ "(2 pts.) The transformation T that transposes every matrix is definitely linear. Which of these extra properties are true? \n",
+ "\n",
+ "1. T$^2$ = the identity transformation.
\n",
+ "2. The kernel of T is the zero matrix.
\n",
+ "2. Every matrix is in the range of T.
\n",
+ "4. T(M) = −M is impossible\n",
+ "\n",
+ "Format: If 1 and 4 are true write [1,4] etc.\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "2"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 3. Derivative as a Linear Transformation\n",
+ "\n",
+ "(2 pts.) The transformation S takes the second derivative. Let 1,x,x$^2$,x$^3$ be an ordered basis for degree 3 polynomials in x. Find the 4 by 4 matrix B for S with respect to this ordered basis.\n",
+ "\n",
+ "Format: [[1 2 3 4],[1 2 3 4],[1 2 3 4],[1 2 3 4]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 5,
+ "question": "3"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 4. Fibonacci Matrix SVD\n",
+ "\n",
+ "Let the SVD of $A=\\left[\\begin{matrix}1 & 1\\\\1 & 0\\end{matrix}\\right]$\n",
+ "be $A=U\\Sigma V^T$ where the first row of $U$ is positive.\n",
+ "\n",
+ "Enter U, $\\Sigma$ and $V$ numerically, we will check a few decimal places.\n",
+ "\n",
+ "(If you want to use Julia, try -svd(A)[1], diagm(svd(A)[2]), -svd(A)[3] to\n",
+ "match the format of MITx)\n",
+ "\n",
+ "4a.(.5 pts) U="
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "4a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4b.(1 pt) $\\Sigma$="
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "4b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "4c. (.5 pts) V="
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 1,
+ "question": "4c"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 5. Constructing a matrix of rank one\n",
+ "\n",
+ "5a (1 pt.) What is the matrix A with rank one that has Av=12u for v=$\\frac{1}{2}$(1,1,1,1) and u=$\\frac{1}{3}$(2,2,1)?\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "5a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "5b. (1 pt.) What is the (non-zero) singular value of $A$?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "5b"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 6. Singular Value Decomposition of a Symmetric Matrix\n",
+ "\n",
+ "6a. (2 pts.)\n",
+ "Suppose A is a 2 by 2 symmetric matrix with unit eigenvectors u$_1$ and u$_2$ and corresponding eigenvalues λ$_1$=3 and λ$_2$=−2. What are possible singular value decompositions for A?\n",
+ "\n",
+ "1. U=(u$_1$,u$_2$), $\\Sigma=\\left[\\begin{matrix}3 & 0\\\\0 & -2\\end{matrix}\\right]$, V=(u$_1$,u$_2$)
\n",
+ "2. U=(u$_1$,-u$_2$), $\\Sigma=\\left[\\begin{matrix}3 & 0\\\\0 & 2\\end{matrix}\\right]$, V=(u$_1$,u$_2$)
\n",
+ "3. U=(u$_1$,u$_2$), $\\Sigma=\\left[\\begin{matrix}3 & 0\\\\0 & 2\\end{matrix}\\right]$, V=(u$_1$,u$_2$)
\n",
+ "4. U=(u$_1$,u$_2$), $\\Sigma=\\left[\\begin{matrix}3 & 0\\\\0 & 2\\end{matrix}\\right]$, V=(u$_1$,-u$_2$)
\n",
+ "\n",
+ "Format: If 1 and 4 work write [1,4] etc."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 2,
+ "question": "6a"
+ },
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "collapsed": true
+ },
+ "source": [
+ "## 7. Linear Fitting of Data\n",
+ "\n",
+ "\n",
+ "Suppose you have the following 3 dimensional points:\n",
+ "\n",
+ "{⟨0,2,1⟩,⟨0,4,3⟩,⟨1,4,5⟩,⟨1,8,6⟩,⟨1,8,10⟩,⟨4,8,14⟩,⟨5,9,13⟩}
\n",
+ "We'd like to find the best fit plane that will fit these data points. There are many ways that we can attempt this.\n",
+ "\n",
+ "We can use least squares approximation\n",
+ "\n",
+ "$\\begin{bmatrix} x_1 & y_1 & 1 \\\\ x_2 & y_2 & 1\\\\ x_3 & y_3 & 1 \\\\ \\vdots & \\vdots & \\vdots \\end{bmatrix} \\begin{bmatrix} A\\\\ B \\\\ C \\end{bmatrix} = \\begin{bmatrix} z_1 \\\\ z_2 \\\\ z_3 \\\\ \\vdots \\end{bmatrix}\n",
+ "$\n",
+ "\n",
+ "to find the best fit plane of the form z=Ax+By+C.\n",
+ "However, you might ask yourself why is the z-coordinate on the right, and x and y on the left?\n",
+ "Why should z be different? This strategy \n",
+ "assumes that the x and y coordinates are correct, and the error is all in the z-direction, perpendicular to the xy-plane.\n",
+ "\n",
+ "We could instead assume the error is along the x or the y direction and use least square approximation to find the best fit plane of the form x=Ay+Bz+C or y=Ax+Bz+C. However, each of these methods makes a pretty strong assumption about in which direction the error or noise in the data occurs.\n",
+ "\n",
+ "Another method is to make an assumption that the data is mostly correct, and lies on some plane, and that the error is small in comparison. A priori, we make no assumption about the direction of this error. This method is called principal component analysis and applies SVD. Let's see how.\n",
+ "\n",
+ "PRINCIPAL COMPONENT ANALYSIS\n",
+ "\n",
+ "We will explain this method in the context of the problem we are using. Let A be the matrix whose rows are the data of 3 dimensional points above. However, a more general method is described below. First, find the mean data point μ=[μ$_x$ μ$_y$ μ$_z$]. We use this mean to create a matrix M with zero mean by taking the rows of A and subtracting μ from each row.\n",
+ "\n",
+ "Once we find the plane P that the data in M lie on, the data from A lie on P+μ.\n",
+ "\n",
+ "Question: Which plane do the data in M come from? The answer is to use SVD. If we look at svd(M), we get M=USV$^T$. S has 3 nonzero singular values if our data is not already on a plane. However, one singular value will be smaller than the other two. The matrix V=[v$_1$ v$_2$ v$_3$] consists of orthogonal vectors. The conjecture is that the data come from the plane spanned by v$_1$ and v$_2$, and that the error occurs in the direction of v$_3$. Because v$_3$ corresponds to the smallest singular value, this minimizes the magnitude of the error in this data.\n",
+ "\n",
+ "GENERAL PRINCIPAL COMPONENT ANALYSIS\n",
+ "\n",
+ "Suppose your data is a collection of m-dimensional vectors: D=[d$_1$, …, $d_n$]. But we suppose that this data should fit some k-dimensional subspace. It doesn't because there is error, noise that is perpendicular to this k-dimensional subspace. The question posed is: what subspace did this data most likely come from? And what dimension is that subspace?\n",
+ "\n",
+ "Method.\n",
+ "\n",
+ "* Find the expected value of your data μ=$\\sum_{i=1}^n d_i/n$.\n",
+ "\n",
+ "* Create a new, zero mean matrix M whose ith row is d$_i$−μ.\n",
+ "\n",
+ "* Find svd(M)=USV$^T$.\n",
+ "\n",
+ "* Identify k such that σ$_k$>>σ$_{k+1}$.\n",
+ "\n",
+ "* Conjecture that data came from the span of μ and the first k columns of V. These vectors are called the principal components."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "7a) (6 pts)\n",
+ "\n",
+ "\n",
+ "This problem is exercise 14.4 in \n",
+ "\n",
+ "“Linear Algebra and Probability for Computer Science Applications\", by Ernest Davis.\n",
+ "\n",
+ "Consider the following set of three dimensional points we introduced earlier.\n",
+ "\n",
+ "{⟨0,2,1⟩,⟨0,4,3⟩,⟨1,4,5⟩,⟨1,8,6⟩,⟨1,8,10⟩,⟨4,8,14⟩,⟨5,9,13⟩}\n",
+ "Find the least squares estimate for z taken as a linear combination of x and y; e.g. z=ax+by+c.\n",
+ "\n",
+ "Define a matrix A whose rows are the data above:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {
+ "alert": "info",
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "3-element Array{Int64,1}:\n",
+ " 1\n",
+ " 3\n",
+ " 5"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# Complete A (currently with three points) to the seven data points (not graded) \n",
+ "A= [ 0 2 1\n",
+ " 0 4 3\n",
+ " 1 4 5 ]\n",
+ "\n",
+ "\n",
+ "# Also obtain A_ls (least squares)\n",
+ "A_ls = [A[:,1:2] ones(size(A,1))]\n",
+ "z = A[:,3]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Let zz be the data predicted by the least squares approximation. (You can use backslash: \"\\\" )
\n",
+ "Compute norm(zz-z), the norm of the difference between zz and the actual data for the z-coordinates "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [],
+ "source": [
+ "# Fill in the blanks for two points\n",
+ "zz = ?? #(Hint: Use A_ls, z, *, and \\ )\n",
+ "norm(z-zz)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 6,
+ "precision": 3,
+ "question": "7a"
+ },
+ "outputs": [],
+ "source": [
+ "A_ls = # Use 2:3 this time\n",
+ "x=\n",
+ "xx = # Use x this time\n",
+ "norm(x-xx)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "7b) ( 6 pts.)\n",
+ "\n",
+ "\n",
+ "Take the same data from before.\n",
+ "\n",
+ "{⟨0,2,1⟩,⟨0,4,3⟩,⟨1,4,5⟩,⟨1,8,6⟩,⟨1,8,10⟩,⟨4,8,14⟩,⟨5,9,13⟩}
\n",
+ "This time, find the least squares estimate for x as a linear combination of y and z; e.g. x = A + By + Cz. Do you think the error will be larger or smaller than in part (a)? Compute norm(x-xx)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2.097079044348641"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "A_ls = # Use 2:3 this time\n",
+ "x=\n",
+ "xx = # Use x this time\n",
+ "norm(x-xx)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 6,
+ "precision": 3,
+ "question": "7b"
+ },
+ "outputs": [],
+ "source": [
+ "# We can't grade you but try to understand how this works\n",
+ "μ = mean(A,1)\n",
+ "M = broadcast(-,A,μ) # Make mean 0\n",
+ "U,S,V = svd(M)\n",
+ "best_fit = broadcast(+, U[:,1:2]*diagm(S[1:2])*V[:,1:2]', μ) # Make rank 2 and add back mean"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "7c) (6 pts.)\n",
+ "\n",
+ "Looking at the same data one last time.\n",
+ "\n",
+ "{⟨0,2,1⟩,⟨0,4,3⟩,⟨1,4,5⟩,⟨1,8,6⟩,⟨1,8,10⟩,⟨4,8,14⟩,⟨5,9,13⟩}
\n",
+ "Find the best-fit plane from a principal component analysis. Use U,S,V = svd(A) to find the 3 singular value decomposition of A. (Julia stores the diagonal of S as a vector which is less wasteful than storing a whole matrix)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {
+ "collapsed": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "7x3 Array{Float64,2}:\n",
+ " -0.14732 1.94221 1.08145\n",
+ " 0.0728165 4.02856 2.95974\n",
+ " 1.1453 4.05699 4.91967\n",
+ " 0.449134 7.78393 6.30457\n",
+ " 1.96438 8.37827 9.4668 \n",
+ " 4.4242 8.16639 13.7655 \n",
+ " 4.0915 8.64365 13.5023 "
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# We can't grade you but try to understand how this works\n",
+ "μ = mean(A,1)\n",
+ "M = broadcast(-,A,μ) # Make mean 0\n",
+ "U,S,V = svd(M)\n",
+ "best_fit = broadcast(+, U[:,1:2]*diagm(S[1:2])*V[:,1:2]', μ) # Make rank 2 and add back mean"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "collapsed": false,
+ "max_attempts": 1000,
+ "max_score": 6,
+ "precision": 3,
+ "question": "7c"
+ },
+ "outputs": [],
+ "source": [
+ "# For six points create a vector of length three which\n",
+ "# has norm(best_fit[:,j]-A[:,j]) for j=1:3\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 8. COMPRESSION ALGORITHMS\n",
+ "\n",
+ "(10 pts.) The following is a classical example of an application of svd, although it is not typically used for image compression .\n",
+ "\n",
+ "A compression algorithm Φ takes in data D and constructs a representation E=Φ(D) such that:\n",
+ "\n",
+ "The computer memory required to record E is less than that required by natural encoding of D.\n",
+ "\n",
+ "There is a decompression algorithm Ψ to reconstruct D from E. If Ψ(E)=D, the algorithms Φ is called lossless compression. If Ψ(E) is approximately D, then Φ is called lossy compression.\n",
+ "\n",
+ "The singular value decomposition gives lossy compression algorithms.\n",
+ "\n",
+ "Suppose image data is stored in an m by n matrix M, let USV$^T$=svd(M). Choose k<\"score\",\"Incorrect attempts\"=>\"attempts\"}),None[],None[])"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ " | Names | total | 1a | 1b | 1c | 2 | 3 | 4a | 4b | 4c | 5a | 5b | 6a | 7a | 7b | 7c |
---|
1 | MAX | 40.0 | 2.0 | 2.0 | 2.0 | 2.0 | 5.0 | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 | 2.0 | 6.0 | 6.0 | 6.0 |
---|
"
+ ],
+ "text/plain": [
+ "1x16 DataFrame\n",
+ "| Row | Names | total | 1a |\n",
+ "|-----|-------|-----------------------|------------------------|\n",
+ "| 1 | \"MAX\" | Colored(\"black\",40.0) | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 1b | 1c |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 2 | 3 |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"5.0\") |\n",
+ "\n",
+ "| Row | 4a | 4b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n",
+ "\n",
+ "| Row | 4c | 5a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 5b | 6a |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n",
+ "\n",
+ "| Row | 7a | 7b |\n",
+ "|-----|------------------------|------------------------|\n",
+ "| 1 | Colored(\"black\",\"6.0\") | Colored(\"black\",\"6.0\") |\n",
+ "\n",
+ "| Row | 7c |\n",
+ "|-----|------------------------|\n",
+ "| 1 | Colored(\"black\",\"6.0\") |"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {
+ "comm_id": "45043668-2592-4b40-825f-01c049efa7fc",
+ "reactive": true
+ },
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "Homework.progress()"
+ ]
+ }
+ ],
+ "metadata": {
+ "homework": {
+ "admins": [
+ "mit.edelman@gmail.com"
+ ],
+ "course": "MIT-18.06-Spring-2015",
+ "mode": "answering",
+ "problemset": "pset9"
+ },
+ "kernelspec": {
+ "display_name": "Julia 0.3.12",
+ "language": "julia",
+ "name": "julia-0.3"
+ },
+ "language_info": {
+ "file_extension": ".jl",
+ "mimetype": "application/julia",
+ "name": "julia",
+ "version": "0.3.12"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/README.md b/README.md
index 2999679f..56a737c5 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,32 @@
-# MIT Course 18.06, Spring 2017
+# MIT Course 18.06, Spring 2015
-This is a repository for Prof. Steven G. Johnson's course [18.06: Linear Algebra](http://web.mit.edu/18.06) at MIT in 2017.
-(See also the [Stellar 18.06 page](https://stellar.mit.edu/S/course/18/sp17/18.06/index.html).)
+This is a repository for Prof. Alan Edelman's course [18.06: Linear Algebra](http://web.mit.edu/18.06) at MIT in spring 2015.
+
+Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website.
+
+For those who don't read instructions:
+`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS9.ipynb", "18.06-PS9.ipynb" )`
+
+
+
+## Instructions for Problem Set 9 (and so on)
+
+0. The Julia option (only!) may be completed by midnight Friday night for full credit (12:01AM Saturday to be precise)
+1. Login to [juliabox.org](https://juliabox.org) with your google account.
+2. Go back into an existing (or a new notebook) and copy and paste the next line:
`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS9.ipynb", "18.06-PS9.ipynb" )`
+
in a new cell and execute
+4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 9
+3. If you filled in your gmail and mit address once this semester, it is not necessary to do again.
+4. If you are trying julia for the first time, open up a new notebook (any kernel is fine) and follow the instruction on line 3
+
+
+### Some Notes:
+
+1. If you do both MITx and Julia problem sets, we will take a simple maximum of the two total scores each week.
+2. Scores for MITx or Julia may be posted at different times (probably 24 or 48 hours apart)
+3. The MITx and Julia problems are nearly identical, though there are some minor changes due to format and language. We hope the Julia set is more fun.
+4. Ask Julia questions through Piazza and very likely Professor Edelman will answer them quickly
+6. Don't worry if something technically goes wrong. We can always do things manually, just send a friendly note through piazza or to edelman at mit.edu.
+7. If you need to re-download the notebook to get some fixes you can run `download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS9.ipynb", "18.06-PS9_a.ipynb" )` (notice the changed name as the second argument to `download`. Now you can open the new notebook and you *only need to answer the problems you haven't already or had trouble with*. Your score from the previous notebook will be saved.
+8. Notice that the files on the github page are timestamped. If you are having trouble with a problem for technical reasons, check for updates.
+9. If you see a dead kernel, please follow the instructions on https://piazza.com/class/iebnrdsl7th4h7?cid=130