From 8f0815c9dbd4f0a16f3671468715ba5d97f579a4 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 11 Sep 2015 02:02:20 +0530 Subject: [PATCH 01/77] PS1 --- 18.06-PS1.ipynb | 975 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 975 insertions(+) create mode 100644 18.06-PS1.ipynb diff --git a/18.06-PS1.ipynb b/18.06-PS1.ipynb new file mode 100644 index 00000000..9b462b4b --- /dev/null +++ b/18.06-PS1.ipynb @@ -0,0 +1,975 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Run this cell. Ignore the warnings, they are harmless.\n", + "using Homework" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Run this cell to see your scores.\n", + "Homework.progress()" + ] + }, + { + "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": [ + "z=[ ? , ? ]" + ] + }, + { + "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 θ?" + ] + }, + { + "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": [ + "# Julia Problem 1: 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": 1, + "question": "J1" + }, + "outputs": [], + "source": [ + "x = ?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Julia Problem 2: Define a Row Vector" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**(1 pt)** Julia, somewhat like python, and unlike MATLAB has vectors which are different from 1 x n or n x 1 matrices.\n", + "A row vector is created by placing elements between square brackets with commas separating elements, e.g. `[1,1,2,4,6,3]`\n", + "\n", + "Why does Julia do it this way? Answer: There are many data science applications where\n", + "one dimensional structures are extremely important.\n", + "\n", + "Write Julia code that creates the vector `y` with values 3, 5, 2 and 1\n", + "\n", + "Julia indicates that the result is a 4-element array of 64 bit integers that is 1-dimensional, in other words, a vector! " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "max_attempts": 5, + "max_score": 1, + "question": "J2" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Julia Problem 3: Define a One Column Matrix (there are no column vectors!) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "(1 pt) In Julia one creates a one column matrix by placing elements between square brackets, with spaces separating elements, and then using apostrophe as a transpose: e.g. [1 1 2]'
\n", + "\n", + "What really happens here is that [1 1 2] is a 1x3 two dimensional matrix, and the apostrophe\n", + "turns it into a 3x1 two dimensional matrix. \n", + "\n", + "\n", + "Write Julia code that creates the 5x1 matrix \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
1
2
-1
0
0
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "max_attempts": 5, + "max_score": 1, + "question": "J3" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Julia Problem 4. 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", + " \n", + " \n", + "
8 4
2 3
" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "max_attempts": 5, + "max_score": 1, + "question": "J4" + }, + "outputs": [], + "source": [ + "A = ?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Julia Problem 5: 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": 1, + "question": "J5" + }, + "outputs": [], + "source": [ + "# Write the solution here\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Julia Problem 6: 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+aqhdevWQSwWC5KTk4NBgwYF3bt3D6pUqRJ06dIl18CZnp4eVKpUKTj99NNznGvz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", + "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": 1, + "question": "J6" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Julia Problem 7. 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": 1, + "question": "J7" + }, + "outputs": [], + "source": [ + "# Obtain the solution when p=7 and q=1 and show the plot\n", + "( ?, ? )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Julia Problem 8. 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 100x100 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": "J8a" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Is this matrix 1. singular or 2. nonsingular. (Type 1 or 2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "max_attempts": 1, + "max_score": 3, + "question": "J8b" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Run this cell to see your scores.\n", + "Homework.progress()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# You don't need to run this cell, if not specifically asked to for debugging purposes\n", + "\n", + "Pkg.rm(\"Homework\")\n", + "Pkg.clone(\"git://github.com/shashi/Homework.jl.git\")" + ] + } + ], + "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 +} From da8e9234690e8c18db559a710e71ef01bf48bfbb Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 11 Sep 2015 03:58:12 +0530 Subject: [PATCH 02/77] Update notebook with new scores and fixes, also add the google form for mit.edu ids --- 18.06-PS1.ipynb | 686 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 637 insertions(+), 49 deletions(-) diff --git a/18.06-PS1.ipynb b/18.06-PS1.ipynb index 9b462b4b..92bc7f5a 100644 --- a/18.06-PS1.ipynb +++ b/18.06-PS1.ipynb @@ -2,25 +2,642 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { - "collapsed": false + "collapsed": false, + "scrolled": false }, - "outputs": [], + "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 cell. Ignore the warnings, they are harmless.\n", - "using Homework" + "\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": true + "collapsed": false }, "outputs": [], "source": [ - "# Run this cell to see your scores.\n", + "# Run this cell to see your scores, your score will appear once you have answered at least one of the problems\n", "Homework.progress()" ] }, @@ -50,7 +667,7 @@ }, "outputs": [], "source": [ - "z=[ ? , ? ]" + "V=[ ? , ? ]" ] }, { @@ -472,7 +1089,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Julia Problem 1: Defining a Variable" + "# Problem 5: (Julia) Defining a Variable" ] }, { @@ -490,7 +1107,7 @@ "metadata": { "collapsed": false, "max_attempts": 5, - "max_score": 1, + "max_score": 2, "question": "J1" }, "outputs": [], @@ -502,7 +1119,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Julia Problem 2: Define a Row Vector" + "# Problem 6: (Julia) Define a Row Vector" ] }, { @@ -510,7 +1127,7 @@ "metadata": {}, "source": [ "**(1 pt)** Julia, somewhat like python, and unlike MATLAB has vectors which are different from 1 x n or n x 1 matrices.\n", - "A row vector is created by placing elements between square brackets with commas separating elements, e.g. `[1,1,2,4,6,3]`\n", + "A row vector is created by placing elements between square brackets with commas separating elements, e.g. `[1 1 2 4 6 3]`\n", "\n", "Why does Julia do it this way? Answer: There are many data science applications where\n", "one dimensional structures are extremely important.\n", @@ -526,7 +1143,7 @@ "metadata": { "collapsed": false, "max_attempts": 5, - "max_score": 1, + "max_score": 2, "question": "J2" }, "outputs": [], @@ -536,17 +1153,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Julia Problem 3: Define a One Column Matrix (there are no column vectors!) " + "# Problem 7: (Julia) Define a One Column Matrix (there are no column vectors!) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "(1 pt) In Julia one creates a one column matrix by placing elements between square brackets, with spaces separating elements, and then using apostrophe as a transpose: e.g. [1 1 2]'
\n", - "\n", - "What really happens here is that [1 1 2] is a 1x3 two dimensional matrix, and the apostrophe\n", - "turns it into a 3x1 two dimensional matrix. \n", + "**(1 pt)** In Julia one creates a one column matrix by placing elements between square brackets, and separating the numbers with commas: e.g. [1, 1, 2]
\n", "\n", "\n", "Write Julia code that creates the 5x1 matrix \n", @@ -564,7 +1178,7 @@ "metadata": { "collapsed": false, "max_attempts": 5, - "max_score": 1, + "max_score": 2, "question": "J3" }, "outputs": [], @@ -606,7 +1220,7 @@ "metadata": { "collapsed": false, "max_attempts": 5, - "max_score": 1, + "max_score": 5, "question": "J4" }, "outputs": [], @@ -663,7 +1277,7 @@ "metadata": { "collapsed": false, "max_attempts": 5, - "max_score": 1, + "max_score": 5, "question": "J5" }, "outputs": [], @@ -776,7 +1390,7 @@ "metadata": { "collapsed": false, "max_attempts": 5, - "max_score": 1, + "max_score": 5, "question": "J6" }, "outputs": [], @@ -871,7 +1485,7 @@ "metadata": { "collapsed": false, "max_attempts": 5, - "max_score": 1, + "max_score": 5, "question": "J7" }, "outputs": [], @@ -892,7 +1506,7 @@ "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 100x100 matrix A all of whose entries are the number 1." + "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." ] }, { @@ -914,18 +1528,6 @@ "Is this matrix 1. singular or 2. nonsingular. (Type 1 or 2)" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "max_attempts": 1, - "max_score": 3, - "question": "J8b" - }, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, @@ -937,20 +1539,6 @@ "# Run this cell to see your scores.\n", "Homework.progress()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# You don't need to run this cell, if not specifically asked to for debugging purposes\n", - "\n", - "Pkg.rm(\"Homework\")\n", - "Pkg.clone(\"git://github.com/shashi/Homework.jl.git\")" - ] } ], "metadata": { From 9da37a0f8e3addacb360e7b26e17c29ff1b7ff1e Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 11 Sep 2015 04:40:28 +0530 Subject: [PATCH 03/77] Create instructions.md --- instructions.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 instructions.md diff --git a/instructions.md b/instructions.md new file mode 100644 index 00000000..4905e48d --- /dev/null +++ b/instructions.md @@ -0,0 +1,16 @@ +Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website or mitx. + +## Instructions + +1. go to juliabox.org +2. In the sync tab, paste `https://github.com/alanedelman/18.06_Spring_2015.git` in Git Clone URL +3. Go the the Ijulia tab, refresh (upper right icon), and drill down +Enter your answers with + + +### 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 to edelman at mit.edu. From 5e4820f9d9f08d664bed42cb3b25d2d33bad0a16 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 11 Sep 2015 04:41:54 +0530 Subject: [PATCH 04/77] rename instructions to readme --- instructions.md => README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename instructions.md => README.md (100%) diff --git a/instructions.md b/README.md similarity index 100% rename from instructions.md rename to README.md From aeffdb158a8ad30e6abe8e1c8cc9c519579ea297 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 11 Sep 2015 04:47:49 +0530 Subject: [PATCH 05/77] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4905e48d..7b105656 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,10 @@ Students in 18.06 have the option of using Date: Thu, 10 Sep 2015 19:18:26 -0400 Subject: [PATCH 06/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b105656..66ac0872 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Students in 18.06 have the option of using Date: Thu, 10 Sep 2015 19:18:42 -0400 Subject: [PATCH 07/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 66ac0872..8c8d47ba 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Students in 18.06 have the option of using Date: Thu, 10 Sep 2015 19:19:10 -0400 Subject: [PATCH 08/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8c8d47ba..b81f04a4 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Students in 18.06 have the option of using Date: Thu, 10 Sep 2015 19:20:03 -0400 Subject: [PATCH 09/77] Update README.md --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b81f04a4..1b2b8c82 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,10 @@ Students in 18.06 have the option of using Date: Thu, 10 Sep 2015 19:20:35 -0400 Subject: [PATCH 10/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b2b8c82..71b9383e 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Students in 18.06 have the option of using Then click on the "+" button. 4. Go the IJulia tab, refresh (upper right icon), and click on `18.06_Spring_2015` 5. Enter your answers with Shift+Enter From 5bdd6d451449ab1ff6b4cb8915e2d3a564bab84a Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 10 Sep 2015 19:23:46 -0400 Subject: [PATCH 11/77] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 71b9383e..93e96588 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,11 @@ Students in 18.06 have the option of using Then click on the "+" button. -4. Go the IJulia tab, refresh (upper right icon), and click on `18.06_Spring_2015` -5. Enter your answers with Shift+Enter +2. Click on the Sync tab (on top). (If by chance it fails to load, try hitting refresh in the browser.) +3. Paste `https://github.com/alanedelman/18.06_Spring_2015.git` under "Git Clone URL".
Then click on the "+" button under Action. +4. Click on the IJulia tab (on top), refresh (upper right icon), and click on `18.06_Spring_` +5. The first cell is a bit ugly, but if you hit Shift+Enter it will ask for your @mit login name. This is how we know who you are. +6. Enter your answers with Shift+Enter. Have fun with Julia! ### Some Notes: From 8589c42281360c5dcc2f438a047abcb53afe3afe Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 11 Sep 2015 04:59:37 +0530 Subject: [PATCH 12/77] add the 'ugly' bit --- 18.06-PS1.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/18.06-PS1.ipynb b/18.06-PS1.ipynb index 92bc7f5a..abdacc4e 100644 --- a/18.06-PS1.ipynb +++ b/18.06-PS1.ipynb @@ -615,7 +615,7 @@ } ], "source": [ - "# Run this cell. Ignore the warnings, they are harmless.\n", + "# Run this (ugly, sorry) cell by hitting . Ignore the warnings, they are harmless.\n", "\n", "display(MIME(\"text/html\"), \"\"\"\n", "\"\"\")\n", From c04dc0bf1c2e46f9fdb66dc33335959d54fda4b6 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 10 Sep 2015 19:30:45 -0400 Subject: [PATCH 13/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 93e96588..a4d8e5a4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website or mitx. -## Instructions +## Instructions for the Julia Based Problem Sets 1. Go to [juliabox.org](https://juliabox.org). 2. Click on the Sync tab (on top). (If by chance it fails to load, try hitting refresh in the browser.) From e8d9f395cbcd69aaa3cf81861cd533c7b1f92350 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 10 Sep 2015 19:32:32 -0400 Subject: [PATCH 14/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a4d8e5a4..bf73ec42 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website or mitx. +Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. ## Instructions for the Julia Based Problem Sets From b2382051103e7cc77331a2fe4029fcb14877c0e1 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 10 Sep 2015 19:32:43 -0400 Subject: [PATCH 15/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bf73ec42..0c1e187c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. -## Instructions for the Julia Based Problem Sets +## Instructions 1. Go to [juliabox.org](https://juliabox.org). 2. Click on the Sync tab (on top). (If by chance it fails to load, try hitting refresh in the browser.) From 8692b7ec5573ec87a6d0cd5d211af09324509f50 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 10 Sep 2015 19:34:23 -0400 Subject: [PATCH 16/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0c1e187c..3515d371 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Students in 18.06 have the option of using Then click on the "+" button under Action. 4. Click on the IJulia tab (on top), refresh (upper right icon), and click on `18.06_Spring_` From 6e176fe6e3dbcee27605b4e7966e7c0bc4a5ea16 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 10 Sep 2015 19:34:53 -0400 Subject: [PATCH 17/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3515d371..4458a16b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Students in 18.06 have the option of using Then click on the "+" button under Action. 4. Click on the IJulia tab (on top), refresh (upper right icon), and click on `18.06_Spring_` From 552cc47ea30bf7233642e61d24490e68e92756e8 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 10 Sep 2015 19:38:20 -0400 Subject: [PATCH 18/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4458a16b..4e97abd3 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Students in 18.06 have the option of using Then click on the "+" button under Action. 4. Click on the IJulia tab (on top), refresh (upper right icon), and click on `18.06_Spring_` -5. The first cell is a bit ugly, but if you hit Shift+Enter it will ask for your @mit login name. This is how we know who you are. +5. The first cell is a bit ugly, but if you hit Shift+Enter it will ask for your @mit login name. This is how we know who you are. (If by chance nothing happens after a minute, try hitting Shift+Enter again.) 6. Enter your answers with Shift+Enter. Have fun with Julia! ### Some Notes: From 736fd83f16fa9dd6f860cb52a9f41189c95e00a3 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Fri, 11 Sep 2015 05:03:43 -0400 Subject: [PATCH 19/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4e97abd3..b27a78bf 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. +Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. ## Instructions From 99da80368049c6fe8887e9b82d95faea14b05918 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Fri, 11 Sep 2015 05:04:42 -0400 Subject: [PATCH 20/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b27a78bf..2e061751 100644 --- a/README.md +++ b/README.md @@ -15,4 +15,4 @@ Students in 18.06 have the option of using 2. Click on the Sync tab (on top). (If by chance it fails to load, try hitting refresh in the browser.) 3. Paste `https://github.com/alanedelman/18.06_Spring_2015.git` under "Git Clone URL".
Then click on the "+" button under Action. 4. Click on the IJulia tab (on top), refresh (upper right icon), and click on `18.06_Spring_` From c08889213471be87ec9a1e604db8a1d29a822a2c Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sat, 12 Sep 2015 00:29:05 +0530 Subject: [PATCH 22/77] Fixes --- 18.06-PS1.ipynb | 73 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 56 insertions(+), 17 deletions(-) diff --git a/18.06-PS1.ipynb b/18.06-PS1.ipynb index abdacc4e..e10a6bfd 100644 --- a/18.06-PS1.ipynb +++ b/18.06-PS1.ipynb @@ -587,7 +587,7 @@ { "data": { "text/html": [ - "" ], "text/plain": [ - "Html(\"\")" + "Html(\"\")" ] }, "metadata": {}, @@ -638,6 +638,7 @@ "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()" ] }, @@ -1108,7 +1109,7 @@ "collapsed": false, "max_attempts": 5, "max_score": 2, - "question": "J1" + "question": "5" }, "outputs": [], "source": [ @@ -1127,7 +1128,7 @@ "metadata": {}, "source": [ "**(1 pt)** Julia, somewhat like python, and unlike MATLAB has vectors which are different from 1 x n or n x 1 matrices.\n", - "A row vector is created by placing elements between square brackets with commas separating elements, e.g. `[1 1 2 4 6 3]`\n", + "A row vector is created by placing elements between square brackets, e.g. `[1 1 2 4 6 3]`\n", "\n", "Why does Julia do it this way? Answer: There are many data science applications where\n", "one dimensional structures are extremely important.\n", @@ -1144,7 +1145,7 @@ "collapsed": false, "max_attempts": 5, "max_score": 2, - "question": "J2" + "question": "6" }, "outputs": [], "source": [] @@ -1179,7 +1180,7 @@ "collapsed": false, "max_attempts": 5, "max_score": 2, - "question": "J3" + "question": "7" }, "outputs": [], "source": [] @@ -1188,7 +1189,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Julia Problem 4. Define a Matrix" + "# Problem 8: (Julia) Define a Matrix" ] }, { @@ -1221,7 +1222,7 @@ "collapsed": false, "max_attempts": 5, "max_score": 5, - "question": "J4" + "question": "8" }, "outputs": [], "source": [ @@ -1232,7 +1233,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Julia Problem 5: Solve a Linear System" + "# Problem 9: (Julia) Solve a Linear System" ] }, { @@ -1278,7 +1279,7 @@ "collapsed": false, "max_attempts": 5, "max_score": 5, - "question": "J5" + "question": "9" }, "outputs": [], "source": [ @@ -1289,7 +1290,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Julia Problem 6: Plot a Line and Interact with it" + "# Problem 10: (Julia) Plot a Line and Interact with it" ] }, { @@ -1391,7 +1392,7 @@ "collapsed": false, "max_attempts": 5, "max_score": 5, - "question": "J6" + "question": "10" }, "outputs": [], "source": [] @@ -1400,7 +1401,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Julia Problem 7. Plot Solutions of Linear Systems" + "# Problem 11: (Julia) Plot Solutions of Linear Systems" ] }, { @@ -1486,7 +1487,7 @@ "collapsed": false, "max_attempts": 5, "max_score": 5, - "question": "J7" + "question": "11" }, "outputs": [], "source": [ @@ -1498,7 +1499,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Julia Problem 8. Singular Matrices with no zeros" + "# Problem 12: (Julia) Singular Matrices with no zeros" ] }, { @@ -1516,7 +1517,7 @@ "collapsed": false, "max_attempts": 5, "max_score": 2, - "question": "J8a" + "question": "12a" }, "outputs": [], "source": [] @@ -1528,11 +1529,49 @@ "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": true + "collapsed": false }, "outputs": [], "source": [ From 81a407b552b1d93062db04e789d3c97ebf047769 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sat, 12 Sep 2015 23:17:58 +0530 Subject: [PATCH 23/77] Fixes 2 --- 18.06-PS1.ipynb | 636 ++---------------------------------------------- 1 file changed, 17 insertions(+), 619 deletions(-) diff --git a/18.06-PS1.ipynb b/18.06-PS1.ipynb index e10a6bfd..4772582d 100644 --- a/18.06-PS1.ipynb +++ b/18.06-PS1.ipynb @@ -2,622 +2,16 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "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" - ] - } - ], + "outputs": [], "source": [ "# Run this (ugly, sorry) cell by hitting . Ignore the warnings, they are harmless.\n", "\n", - "display(MIME(\"text/html\"), \"\"\"\n", + "display(MIME(\"text/html\"), \"\"\"\n", "\"\"\")\n", "\n", "# Run this cell. Ignore the warning messages, they are harmless\n", @@ -701,7 +95,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**(c) (2 pts) (COMPONENTS)** What are the components of the 2:00 vector, v=cos θ,sin θ?" + "**(c) (2 pts) (COMPONENTS)** What are the components of the 2:00 vector, v=cos θ,sin θ? (write the answer correct to 2 decimal places)" ] }, { @@ -1127,15 +521,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**(1 pt)** Julia, somewhat like python, and unlike MATLAB has vectors which are different from 1 x n or n x 1 matrices.\n", - "A row vector is created by placing elements between square brackets, e.g. `[1 1 2 4 6 3]`\n", + "**(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 does Julia do it this way? Answer: There are many data science applications where\n", - "one dimensional structures are extremely important.\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", - "Write Julia code that creates the vector `y` with values 3, 5, 2 and 1\n", + "A 1xn matrix is created by placing elements between square brackets, e.g. [1 1 2 4 6 3]\n", "\n", - "Julia indicates that the result is a 4-element array of 64 bit integers that is 1-dimensional, in other words, a vector! " + "Write Julia code that creates the vector y with values 3, 5, 2 and 1" ] }, { @@ -1161,10 +556,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**(1 pt)** In Julia one creates a one column matrix by placing elements between square brackets, and separating the numbers with commas: e.g. [1, 1, 2]
\n", - "\n", + "**(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", - "Write Julia code that creates the 5x1 matrix
\n", + "
\n", "\n", "\n", "\n", From f3a29236315c347eaba93679f1e1724f38f4165e Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sat, 12 Sep 2015 23:48:51 +0530 Subject: [PATCH 24/77] 1000 attempts --- 18.06-PS1.ipynb | 82 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 55 insertions(+), 27 deletions(-) diff --git a/18.06-PS1.ipynb b/18.06-PS1.ipynb index 4772582d..c171c4eb 100644 --- a/18.06-PS1.ipynb +++ b/18.06-PS1.ipynb @@ -54,8 +54,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 2, + "max_attempts": 1000, "max_score": 1, "precision": 2, "question": "1a" @@ -83,8 +84,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 2, + "max_attempts": 1000, "max_score": 1, "question": "1b" }, @@ -102,9 +104,11 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 2, + "precision": 2, "question": "1c" }, "outputs": [], @@ -141,8 +145,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 1, "question": "2a" }, @@ -162,8 +167,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 1, "question": "2b" }, @@ -192,8 +198,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 1, "question": "2c" }, @@ -213,8 +220,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 1, "question": "2d" }, @@ -250,8 +258,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 3, + "max_attempts": 1000, "max_score": 1, "question": "3a" }, @@ -271,8 +280,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 2, + "max_attempts": 1000, "max_score": 1, "question": "3b" }, @@ -301,8 +311,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 2, + "max_attempts": 1000, "max_score": 1, "question": "3c" }, @@ -322,8 +333,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 2, + "max_attempts": 1000, "max_score": 1, "question": "3d" }, @@ -351,8 +363,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 0.5, "question": "3e" }, @@ -372,8 +385,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 0.5, "question": "3f" }, @@ -404,8 +418,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 2, "question": "3g" }, @@ -432,8 +447,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 1, "question": "4a" }, @@ -446,8 +462,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 1, "question": "4b" }, @@ -470,8 +487,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 1, "question": "4c" }, @@ -500,8 +518,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 2, "question": "5" }, @@ -530,15 +549,16 @@ "\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" + "Write Julia code that creates the 1x4 matrix y with values 3, 5, 2 and 1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 2, "question": "6" }, @@ -575,8 +595,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 2, "question": "7" }, @@ -617,8 +638,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 5, "question": "8" }, @@ -674,8 +696,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 5, "question": "9" }, @@ -787,8 +810,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 5, "question": "10" }, @@ -882,8 +906,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 5, "question": "11" }, @@ -912,8 +937,9 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 2, "question": "12a" }, @@ -931,8 +957,9 @@ "cell_type": "code", "execution_count": 4, "metadata": { + "attempts": 0, "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 2, "question": "12b" }, @@ -979,6 +1006,7 @@ } ], "metadata": { + "celltoolbar": "Edit Metadata", "homework": { "course": "MIT-1806-Spring2015", "mode": "answering", From 4576af9fe16558bc02fafa6d7e8d539b00861e0b Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Thu, 17 Sep 2015 23:57:19 +0530 Subject: [PATCH 25/77] problem set 2 --- 18.06-PS2.ipynb | 1128 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1128 insertions(+) create mode 100644 18.06-PS2.ipynb diff --git a/18.06-PS2.ipynb b/18.06-PS2.ipynb new file mode 100644 index 00000000..fa55a9d2 --- /dev/null +++ b/18.06-PS2.ipynb @@ -0,0 +1,1128 @@ +{ + "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": "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.save_problemset()" + ] + }, + { + "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": { + "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 +} From e59d99f8e35d665666d1c4f39f2a2f1326248eaa Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 16:43:06 -0400 Subject: [PATCH 26/77] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6540a7c1..789b615a 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,10 @@ Students in 18.06 have the option of using 2. Click on the Sync tab (on top). (If by chance it fails to load, try hitting refresh in the browser.) -3. Paste `https://github.com/alanedelman/18.06_Spring_2015.git` under "Git Clone URL".
Then click on the "+" button under Action. +3. Paste `https://github.com/alanedelman/18.06_Spring_2015.git` under "Git Clone URL".
Then click on the "+" button under Action. 4. Click on the IJulia tab (on top), refresh (upper right icon), and click on `18.06_Spring_` 5. The first cell is a bit ugly, but if you hit Shift+Enter it will ask for your @mit login name. This is how we know who you are. (If by chance nothing happens after a minute, try hitting Shift+Enter again.) 6. Enter your answers with Shift+Enter. Have fun with Julia! From 03fd1f44438bede42263a71596f2d58d468104fe Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 16:43:51 -0400 Subject: [PATCH 27/77] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 789b615a..64cf5f93 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,9 @@ Students in 18.06 have the option of using +0. If you wish to save your notebook from the previous problem set, you can download to your own computer or make a copy. 2. Click on the Sync tab (on top). (If by chance it fails to load, try hitting refresh in the browser.) 3. Paste `https://github.com/alanedelman/18.06_Spring_2015.git` under "Git Clone URL".
Then click on the "+" button under Action. 4. Click on the IJulia tab (on top), refresh (upper right icon), and click on `18.06_Spring_` From e915fc9cf6d567fb0c98eef0e4008dc004a9b28b Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 16:59:26 -0400 Subject: [PATCH 28/77] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 64cf5f93..f7bda67f 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,8 @@ Students in 18.06 have the option of using -0. If you wish to save your notebook from the previous problem set, you can download to your own computer or make a copy. -2. Click on the Sync tab (on top). (If by chance it fails to load, try hitting refresh in the browser.) -3. Paste `https://github.com/alanedelman/18.06_Spring_2015.git` under "Git Clone URL".
Then click on the "+" button under Action. +2. Click on the Console tab +3. Copy and paste wget https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb 4. Click on the IJulia tab (on top), refresh (upper right icon), and click on `18.06_Spring_` 5. The first cell is a bit ugly, but if you hit Shift+Enter it will ask for your @mit login name. This is how we know who you are. (If by chance nothing happens after a minute, try hitting Shift+Enter again.) 6. Enter your answers with Shift+Enter. Have fun with Julia! From 5f5b7e485c7e15a5c1586be191adc80f844527dc Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 17:00:30 -0400 Subject: [PATCH 29/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f7bda67f..70a86279 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Students in 18.06 have the option of using 2. Click on the Console tab -3. Copy and paste wget https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb +3. Copy and paste `wget https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb` 4. Click on the IJulia tab (on top), refresh (upper right icon), and click on `18.06_Spring_` 5. The first cell is a bit ugly, but if you hit Shift+Enter it will ask for your @mit login name. This is how we know who you are. (If by chance nothing happens after a minute, try hitting Shift+Enter again.) 6. Enter your answers with Shift+Enter. Have fun with Julia! From c66c8d90ed89a3328f779ab5cdb4fc2c9185bb43 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 17:04:36 -0400 Subject: [PATCH 30/77] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 70a86279..b7ad8f88 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ Students in 18.06 have the option of using 2. Click on the Console tab 3. Copy and paste `wget https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb` +4. Sometimes paste doesn't work. You can right click on the console, paste from browser, paste, ok, (maybe click on console), and hit return 4. Click on the IJulia tab (on top), refresh (upper right icon), and click on `18.06_Spring_` 5. The first cell is a bit ugly, but if you hit Shift+Enter it will ask for your @mit login name. This is how we know who you are. (If by chance nothing happens after a minute, try hitting Shift+Enter again.) 6. Enter your answers with Shift+Enter. Have fun with Julia! From 3392ca5c588845245ebf2186f0ca45474aaca6a3 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 17:10:37 -0400 Subject: [PATCH 31/77] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index b7ad8f88..ed6aa502 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. -## Instructions +## Instructions for Problem Set 2 1. Login to [juliabox.org](https://juliabox.org) with your google account.
From 3f2b1622a793ac0f7009d2c5461eb8dee4df1c53 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 17:14:27 -0400 Subject: [PATCH 33/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ae23674..9124bbbd 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Students in 18.06 have the option of using -2. Click on the Console tab +2. Click on the Console tab (we are going to upload ps2 only so as not to overwrite ps1) 3. Copy and paste `wget https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb` 4. Sometimes paste doesn't work. You can right click on the console, paste from browser, paste, ok, (maybe click on console), and hit return 4. Click on the IJulia tab (on top), refresh (upper right icon) From 0894d86378e053891b68409cfffecf37dbc8e5e7 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 17:30:39 -0400 Subject: [PATCH 35/77] Update README.md --- README.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 4b23c263..0d7b003e 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,10 @@ Students in 18.06 have the option of using -2. Click on the Console tab (we are going to upload ps2 only so as not to overwrite ps1) -3. Copy and paste `wget https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb` -4. Sometimes paste doesn't work. You can right click on the console, paste from browser, paste, ok, (maybe click on console), and hit return -4. Click on the IJulia tab (on top), refresh (upper right icon) -5. The first cell is a bit ugly, but if you hit Shift+Enter it will ask for your @mit login name. This is how we know who you are. (If by chance nothing happens after a minute, try hitting Shift+Enter again.) -6. Enter your answers with Shift+Enter. Have fun with Julia! -7. The progress bar is at the bottom. +2. If you did pset 1, go back into pset1 and copy and paste `download https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb` in a new cell in pset1 and execute +3. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 +4. If you are trying julia for the first time, open up a new notebook and follow the instruction on line 2 + ### Some Notes: From e949d5e7d7ab3bf138606da3cb6a5dc5629d15f1 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 18 Sep 2015 03:00:40 +0530 Subject: [PATCH 36/77] Add Homework progress to the beginning --- 18.06-PS1.ipynb | 694 ++++++++++++++++++++++++++++++++++++++++++++---- 18.06-PS2.ipynb | 31 +-- 2 files changed, 647 insertions(+), 78 deletions(-) diff --git a/18.06-PS1.ipynb b/18.06-PS1.ipynb index c171c4eb..053c1d1d 100644 --- a/18.06-PS1.ipynb +++ b/18.06-PS1.ipynb @@ -2,12 +2,618 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "collapsed": false, "scrolled": false }, - "outputs": [], + "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", @@ -33,7 +639,7 @@ "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()" + "Homework.progress(true)" ] }, { @@ -54,9 +660,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 2, "max_score": 1, "precision": 2, "question": "1a" @@ -84,9 +689,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 2, "max_score": 1, "question": "1b" }, @@ -104,11 +708,9 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 2, - "precision": 2, "question": "1c" }, "outputs": [], @@ -145,9 +747,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 1, "question": "2a" }, @@ -167,9 +768,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 1, "question": "2b" }, @@ -198,9 +798,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 1, "question": "2c" }, @@ -220,9 +819,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 1, "question": "2d" }, @@ -258,9 +856,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 3, "max_score": 1, "question": "3a" }, @@ -280,9 +877,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 2, "max_score": 1, "question": "3b" }, @@ -311,9 +907,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 2, "max_score": 1, "question": "3c" }, @@ -333,9 +928,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 2, "max_score": 1, "question": "3d" }, @@ -363,9 +957,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 0.5, "question": "3e" }, @@ -385,9 +978,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 0.5, "question": "3f" }, @@ -418,9 +1010,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 2, "question": "3g" }, @@ -447,9 +1038,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 1, "question": "4a" }, @@ -462,9 +1052,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 1, "question": "4b" }, @@ -487,9 +1076,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 1, "question": "4c" }, @@ -518,9 +1106,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 2, "question": "5" }, @@ -549,16 +1136,15 @@ "\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 1x4 matrix y with values 3, 5, 2 and 1" + "Write Julia code that creates the vector y with values 3, 5, 2 and 1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 2, "question": "6" }, @@ -595,9 +1181,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 2, "question": "7" }, @@ -638,9 +1223,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 5, "question": "8" }, @@ -696,9 +1280,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 5, "question": "9" }, @@ -810,9 +1393,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 5, "question": "10" }, @@ -906,9 +1488,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 5, "question": "11" }, @@ -937,9 +1518,8 @@ "cell_type": "code", "execution_count": null, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 2, "question": "12a" }, @@ -957,9 +1537,8 @@ "cell_type": "code", "execution_count": 4, "metadata": { - "attempts": 0, "collapsed": false, - "max_attempts": 1000, + "max_attempts": 5, "max_score": 2, "question": "12b" }, @@ -1006,7 +1585,6 @@ } ], "metadata": { - "celltoolbar": "Edit Metadata", "homework": { "course": "MIT-1806-Spring2015", "mode": "answering", diff --git a/18.06-PS2.ipynb b/18.06-PS2.ipynb index fa55a9d2..eed21d5b 100644 --- a/18.06-PS2.ipynb +++ b/18.06-PS2.ipynb @@ -28,6 +28,17 @@ "Homework.show_mit_form()" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "Homework.progress()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -1073,17 +1084,6 @@ "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.save_problemset()" - ] - }, { "cell_type": "code", "execution_count": null, @@ -1094,15 +1094,6 @@ "source": [ "Homework.progress()" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] } ], "metadata": { From 6379cd7f7c42602170c60eb8ebd4ecc27760a644 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 17:40:33 -0400 Subject: [PATCH 37/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d7b003e..e61e2ddc 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Students in 18.06 have the option of using -2. If you did pset 1, go back into pset1 and copy and paste `download https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb` in a new cell in pset1 and execute +2. If you did pset 1, go back into pset1 and copy and paste
`download https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb` in a new cell in pset1 and execute 3. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 4. If you are trying julia for the first time, open up a new notebook and follow the instruction on line 2 From fdea6deb12c643f1ce15678ec22f1c34cfbfc9d0 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 17:40:54 -0400 Subject: [PATCH 38/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e61e2ddc..e1ab2dec 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Students in 18.06 have the option of using -2. If you did pset 1, go back into pset1 and copy and paste
`download https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb` in a new cell in pset1 and execute +2. If you did pset 1, go back into pset1 and copy and paste the next line:
`download https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb`
in a new cell in pset1 and execute 3. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 4. If you are trying julia for the first time, open up a new notebook and follow the instruction on line 2 From 04adf8851822781854a49f97dfaa0da490d2b56a Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 17:41:22 -0400 Subject: [PATCH 39/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e1ab2dec..82f85992 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Students in 18.06 have the option of using 2. If you did pset 1, go back into pset1 and copy and paste the next line:
`download https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb`
in a new cell in pset1 and execute 3. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 -4. If you are trying julia for the first time, open up a new notebook and follow the instruction on line 2 +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 2 ### Some Notes: From 62d1894f0e9ee4155d5ab63df5ab8b2212bbbd39 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 19:07:13 -0400 Subject: [PATCH 40/77] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 82f85992..95c47245 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,9 @@ Students in 18.06 have the option of using -2. If you did pset 1, go back into pset1 and copy and paste the next line:
`download https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb`
in a new cell in pset1 and execute +2. If you did pset 1, go back into pset1 and copy and paste the next line:
+ `download("https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb")` +`
in a new cell in pset1 and execute 3. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 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 2 From 5c30902e5003a2f35b0c26581ed94d93c4dfc9bc Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 19:07:34 -0400 Subject: [PATCH 41/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 95c47245..6484478d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Students in 18.06 have the option of using 2. If you did pset 1, go back into pset1 and copy and paste the next line:
`download("https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb")` -`
in a new cell in pset1 and execute +
in a new cell in pset1 and execute 3. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 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 2 From 2179faf93f327baae99cefebff6fccb40a358941 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 19:09:20 -0400 Subject: [PATCH 42/77] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6484478d..ec8c7da1 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,9 @@ Students in 18.06 have the option of using in a new cell in pset1 and execute -3. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 -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 2 +3. Generate the userid form again but ok to leave blank if you ever filled out before even in previous weeks +4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 +5. If you are trying julia for the first time, open up a new notebook (any kernel is fine) and follow the instruction on line 2 ### Some Notes: From d2ec3c4febaac2e5b6e967cdd7e8dba69a12f8f9 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 19:10:10 -0400 Subject: [PATCH 43/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ec8c7da1..df660e2f 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Students in 18.06 have the option of using in a new cell in pset1 and execute -3. Generate the userid form again but ok to leave blank if you ever filled out before even in previous weeks +3. Filling in the blanks in the form generated by the first cell is necessary only once this semester. 4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 5. If you are trying julia for the first time, open up a new notebook (any kernel is fine) and follow the instruction on line 2 From c5af3c0dd0e377597d2c90c53313add6bfe25c50 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 19:20:37 -0400 Subject: [PATCH 44/77] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index df660e2f..19807ebc 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,9 @@ Students in 18.06 have the option of using -2. If you did pset 1, go back into pset1 and copy and paste the next line:
+2. If you did pset 1, go back into pset1 (or a new notebook) and copy and paste the next line:
`download("https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb")` -
in a new cell in pset1 and execute +
in a new cell and execute 3. Filling in the blanks in the form generated by the first cell is necessary only once this semester. 4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 5. If you are trying julia for the first time, open up a new notebook (any kernel is fine) and follow the instruction on line 2 From 6685ef1de40123c5a3f92561f63391c801ba5221 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Thu, 17 Sep 2015 19:21:35 -0400 Subject: [PATCH 45/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 19807ebc..8609285d 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Students in 18.06 have the option of using in a new cell and execute -3. Filling in the blanks in the form generated by the first cell is necessary only once this semester. +3. If you filled in your gmail and mit address once this semester, it is not necessary to do again. 4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 5. If you are trying julia for the first time, open up a new notebook (any kernel is fine) and follow the instruction on line 2 From fb96904dd4979e913fb230222b06972a433ad6c6 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sat, 3 Oct 2015 02:13:14 +0530 Subject: [PATCH 46/77] Problem Set 3 --- 18.06-PS3.ipynb | 2815 +++++++++++++++++++++++++++++++++++++++++++++++ README.md | 11 +- 2 files changed, 2820 insertions(+), 6 deletions(-) create mode 100644 18.06-PS3.ipynb diff --git a/18.06-PS3.ipynb b/18.06-PS3.ipynb new file mode 100644 index 00000000..24a0bf83 --- /dev/null +++ b/18.06-PS3.ipynb @@ -0,0 +1,2815 @@ +{ + "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": true + }, + "outputs": [], + "source": [ + "# After you've answered the pset, Check your progress by running this cell.\n", + "Homework.progress()" + ] + }, + { + "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": "7a.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": "7a.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": "7a.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": 50, + "metadata": { + "collapsed": false, + "max_attempts": 1000, + "max_score": 3, + "precision": 1, + "question": "12" + }, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "Html(\"\")" + ] + }, + "metadata": { + "comm_id": "5a800430-72a9-43c4-9913-23a4f3470bb8", + "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": { + "celltoolbar": "Edit 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/README.md b/README.md index 8609285d..e01013cc 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,14 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. -## Instructions for Problem Set 2 - +## Instructions for Problem Set 3 +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. If you did pset 1, go back into pset1 (or a new notebook) and copy and paste the next line:
- `download("https://github.com/alanedelman/18.06_Spring_2015/blob/master/18.06-PS2.ipynb")` +2. If you did pset 1, go back into pset1 (or a new notebook) and copy and paste the next line:
`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS3.ipynb", "18.06-PS3.ipynb" )`
in a new cell and execute -3. If you filled in your gmail and mit address once this semester, it is not necessary to do again. 4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 -5. If you are trying julia for the first time, open up a new notebook (any kernel is fine) and follow the instruction on line 2 +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: From 036ed277d631b68b26443abb784b55f4c2cfb516 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Tue, 6 Oct 2015 08:40:32 +0530 Subject: [PATCH 47/77] Fix 7c.2 --- 18.06-PS3.ipynb | 65 ++++++++++++++----------------------------------- 1 file changed, 18 insertions(+), 47 deletions(-) diff --git a/18.06-PS3.ipynb b/18.06-PS3.ipynb index 24a0bf83..bdeb43d1 100644 --- a/18.06-PS3.ipynb +++ b/18.06-PS3.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "collapsed": false }, @@ -583,7 +583,7 @@ { "data": { "text/html": [ - "" ], "text/plain": [ - "Html(\"\")" + "Html(\"\")" ] }, "metadata": {}, @@ -631,12 +631,23 @@ "cell_type": "code", "execution_count": null, "metadata": { - "collapsed": true + "collapsed": false }, - "outputs": [], + "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()" + "Homework.progress(true)" ] }, { @@ -2024,7 +2035,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "7a.2" + "question": "7c.2" }, "outputs": [ { @@ -2736,45 +2747,6 @@ "of singularlity. Type your answer in the format `[a.b, c.d]`" ] }, - { - "cell_type": "code", - "execution_count": 50, - "metadata": { - "collapsed": false, - "max_attempts": 1000, - "max_score": 3, - "precision": 1, - "question": "12" - }, - "outputs": [ - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "Html(\"\")" - ] - }, - "metadata": { - "comm_id": "5a800430-72a9-43c4-9913-23a4f3470bb8", - "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, @@ -2788,7 +2760,6 @@ } ], "metadata": { - "celltoolbar": "Edit Metadata", "homework": { "admins": [ "mit.edelman@gmail.com" From 6ef207d259bc65223371ab5ca9471cd47d98e1a8 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Tue, 6 Oct 2015 08:43:28 +0530 Subject: [PATCH 48/77] More 7c fixes --- 18.06-PS3.ipynb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/18.06-PS3.ipynb b/18.06-PS3.ipynb index bdeb43d1..55556943 100644 --- a/18.06-PS3.ipynb +++ b/18.06-PS3.ipynb @@ -2080,7 +2080,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "7a.3" + "question": "7c.3" }, "outputs": [ { @@ -2125,7 +2125,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "7a.4" + "question": "7c.4" }, "outputs": [ { @@ -2760,6 +2760,7 @@ } ], "metadata": { + "celltoolbar": "Edit Metadata", "homework": { "admins": [ "mit.edelman@gmail.com" From 2fa0ed79c30374b298a8046198845a3652f8d308 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Thu, 8 Oct 2015 06:59:23 +0530 Subject: [PATCH 49/77] Fix problem 12 --- 18.06-PS3.ipynb | 46 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/18.06-PS3.ipynb b/18.06-PS3.ipynb index 55556943..4894c12d 100644 --- a/18.06-PS3.ipynb +++ b/18.06-PS3.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": { "collapsed": false }, @@ -583,7 +583,7 @@ { "data": { "text/html": [ - "" ], "text/plain": [ - "Html(\"\")" + "Html(\"\")" ] }, "metadata": {}, @@ -2747,6 +2747,45 @@ "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, @@ -2760,7 +2799,6 @@ } ], "metadata": { - "celltoolbar": "Edit Metadata", "homework": { "admins": [ "mit.edelman@gmail.com" From 1244753dfdae4ed01203b8159e5fcf52e0cf9cb6 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Thu, 8 Oct 2015 15:04:28 +0530 Subject: [PATCH 50/77] Add instructions for updating notebook. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e01013cc..6495e3bc 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,4 @@ Students in 18.06 have the option of using Date: Thu, 8 Oct 2015 21:43:40 +0530 Subject: [PATCH 51/77] Pset 4 --- 18.06-PS4.ipynb | 1464 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1464 insertions(+) create mode 100644 18.06-PS4.ipynb diff --git a/18.06-PS4.ipynb b/18.06-PS4.ipynb new file mode 100644 index 00000000..45f32f85 --- /dev/null +++ b/18.06-PS4.ipynb @@ -0,0 +1,1464 @@ +{ + "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": [ + "
1
2
-1
Namestotal0a0b0c.10c.21a1b2a2b2c2d3a3b4a4b5a5b
1MAX50.01.02.02.02.04.03.02.02.02.02.05.05.04.04.05.05.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", + "(Format: the answer we are checking for takes some of the rows of A in the order in which they appear in A.)" + ] + }, + { + "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": [] + }, + { + "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": [] + }, + { + "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": [ + "
Namestotal0a0b0c.10c.21a1b2a2b2c2d3a3b4a4b5a5b
1MAX50.01.02.02.02.04.03.02.02.02.02.05.05.04.04.05.05.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 +} From d06545c195377e708d2f93ffeeaa266fa0e5ae42 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 9 Oct 2015 01:01:59 +0530 Subject: [PATCH 52/77] Announce pset4 --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 6495e3bc..5628d123 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. +** Julia problem set 4 is already out! Replace `PS3`in the instructions below with `PS4`to get it! Deadline for problem set 3 is Friday 9th October.** + ## Instructions for Problem Set 3 0. The Julia option (only!) may be completed by midnight Friday night for full credit (12:01AM Saturday to be precise) From 61a528eb0a640bfd61430f5e791267a1449c8bb4 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 9 Oct 2015 01:02:25 +0530 Subject: [PATCH 53/77] Fix bold --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5628d123..c44b6c89 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. -** Julia problem set 4 is already out! Replace `PS3`in the instructions below with `PS4`to get it! Deadline for problem set 3 is Friday 9th October.** +**Julia problem set 4 is already out! Replace `PS3`in the instructions below with `PS4`to get it! Deadline for problem set 3 is Friday 9th October.** ## Instructions for Problem Set 3 From 77404e921634359ea2cd12cf841621724543c922 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Sat, 10 Oct 2015 05:45:32 -0400 Subject: [PATCH 54/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c44b6c89..2674524d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. -**Julia problem set 4 is already out! Replace `PS3`in the instructions below with `PS4`to get it! Deadline for problem set 3 is Friday 9th October.** +**Julia problem set 4 is already out! Replace `PS3`in the instructions below with `PS4`to get it! Deadline for problem set 3 is Friday 9th October 11:59pm.** ## Instructions for Problem Set 3 From f7cb1bf74659f1d0482172823a86df128feca8f6 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Sat, 10 Oct 2015 05:46:44 -0400 Subject: [PATCH 55/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2674524d..5c1ba85b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Students in 18.06 have the option of using From 13749063a379776a551af463709f253127f4fa7f Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Sat, 10 Oct 2015 05:47:36 -0400 Subject: [PATCH 56/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5c1ba85b..8c25c090 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. -**Julia problem set 4 is already out! Replace `PS3`in the instructions below with `PS4`to get it! Deadline for problem set 3 is Friday 9th October 11:59pm.** +**Julia problem set 4 is already out! Replace `PS3`in the instructions below with `PS4`to get it! Deadline for problem set 3 is Saturday 10th October 12:01am.** ## Instructions for Problem Sets 3 (and so on) From 7c4a5938531849ac4f7d081402f84ae09dbe186e Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Sat, 10 Oct 2015 05:50:25 -0400 Subject: [PATCH 57/77] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8c25c090..444c85f0 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,16 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. -**Julia problem set 4 is already out! Replace `PS3`in the instructions below with `PS4`to get it! Deadline for problem set 3 is Saturday 10th October 12:01am.** +** A ready made copy and paste for pset 4 **:
+ +`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS4.ipynb", "18.06-PS4.ipynb" )` + + ## Instructions for Problem Sets 3 (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. If you did pset 1, go back into pset1 (or a new notebook) and copy and paste the next line:
`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS3.ipynb", "18.06-PS3.ipynb" )` +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-PS3.ipynb", "18.06-PS3.ipynb" )`
in a new cell and execute 4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 3. If you filled in your gmail and mit address once this semester, it is not necessary to do again. From a2195e82b0bd8d5055069ff2470729609bb7afe6 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Sat, 10 Oct 2015 05:52:31 -0400 Subject: [PATCH 58/77] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 444c85f0..2fa35cc2 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,4 @@ Students in 18.06 have the option of using the github page is timestamped. If you are having trouble with a problem for technical reasons, check for updates. From f6727b367dfedc0e9fe03f2c8cbf4945270802d4 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Sat, 10 Oct 2015 05:53:01 -0400 Subject: [PATCH 59/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2fa35cc2..333b4bb9 100644 --- a/README.md +++ b/README.md @@ -25,4 +25,4 @@ Students in 18.06 have the option of using the github page is timestamped. If you are having trouble with a problem for technical reasons, check for updates. +8. Notice that the files on the github page is timestamped. If you are having trouble with a problem for technical reasons, check for updates. From 8c1f5b33af80b59e345441b8b4659a391b201549 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sat, 10 Oct 2015 15:38:40 +0530 Subject: [PATCH 60/77] Some improvements to answer prompts --- 18.06-PS4.ipynb | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/18.06-PS4.ipynb b/18.06-PS4.ipynb index 45f32f85..285d4c94 100644 --- a/18.06-PS4.ipynb +++ b/18.06-PS4.ipynb @@ -1033,7 +1033,8 @@ "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", - "(Format: the answer we are checking for takes some of the rows of A in the order in which they appear in A.)" + "\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.)" ] }, { @@ -1291,7 +1292,15 @@ "question": "4b" }, "outputs": [], - "source": [] + "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", @@ -1339,7 +1348,15 @@ "question": "5a" }, "outputs": [], - "source": [] + "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", From 006918ec5e728f6da4b9674c76f2cd6a9ef1f3c8 Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Sun, 11 Oct 2015 07:34:26 -0400 Subject: [PATCH 61/77] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 333b4bb9..6fa03967 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. -** A ready made copy and paste for pset 4 **:
+** For those who don't read instructions:
`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS4.ipynb", "18.06-PS4.ipynb" )` -## Instructions for Problem Sets 3 (and so on) +## Instructions for Problem Set 4 (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-PS3.ipynb", "18.06-PS3.ipynb" )` +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-PS4.ipynb", "18.06-PS4.ipynb" )`
in a new cell and execute -4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 2 +4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 4 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 @@ -25,4 +25,4 @@ Students in 18.06 have the option of using the github page is timestamped. If you are having trouble with a problem for technical reasons, check for updates. +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. From 68b94a4dfd21a694f2220260847802379bc7f41e Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Sun, 11 Oct 2015 07:34:42 -0400 Subject: [PATCH 62/77] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 6fa03967..7597d88c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ Students in 18.06 have the option of using through the [juliabox.org](https://juliabox.org) website. -** For those who don't read instructions:
- +For those who don't read instructions:
`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS4.ipynb", "18.06-PS4.ipynb" )` From 4d6eaa7ad3fbcb7400c04b493834232393182e7a Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Sun, 11 Oct 2015 07:35:52 -0400 Subject: [PATCH 63/77] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7597d88c..5e2f50b4 100644 --- a/README.md +++ b/README.md @@ -23,5 +23,5 @@ For those who don't read instructions:
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-PS3.ipynb", "18.06-PS3_new_version.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. +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-PS4.ipynb", "18.06-PS4_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. From 4158a0e8f10e9e30108a066202d3bc06cc65ce95 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Mon, 19 Oct 2015 12:20:09 +0530 Subject: [PATCH 64/77] ps5 --- 18.06-PS5.ipynb | 1255 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1255 insertions(+) create mode 100644 18.06-PS5.ipynb diff --git a/18.06-PS5.ipynb b/18.06-PS5.ipynb new file mode 100644 index 00000000..9ec66c4a --- /dev/null +++ b/18.06-PS5.ipynb @@ -0,0 +1,1255 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "#### 18.06 Spring 2015\n", + "# Problem Set 5" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "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" + ] + } + ], + "source": [ + "Pkg.rm(\"Homework\")\n", + "Pkg.clone(\"git://github.com/shashi/Homework.jl.git\")\n", + "\n", + "using Homework" + ] + }, + { + "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": [ + "
Namestotal12a2b3a3b3c4a4b4c4d5a6a6b6c7a7b89a9b9d10a.110a.210a.310b10c11a.111a.211b12a12b13a13b14a14b14c15a15b15c
1MAX50.03.01.01.01.01.01.01.01.01.01.03.01.01.01.02.02.02.01.02.01.01.01.01.01.01.01.01.01.01.01.01.01.03.01.02.02.01.01.0
" + ], + "text/plain": [ + "1x40 DataFrame\n", + "| Row | Names | total | 1 |\n", + "|-----|-------|-----------------------|------------------------|\n", + "| 1 | \"MAX\" | Colored(\"black\",50.0) | Colored(\"black\",\"3.0\") |\n", + "\n", + "| Row | 2a | 2b |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 3a | 3b |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 3c | 4a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 4b | 4c |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 4d | 5a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"3.0\") |\n", + "\n", + "| Row | 6a | 6b |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 6c | 7a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", + "\n", + "| Row | 7b | 8 |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n", + "\n", + "| Row | 9a | 9b |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", + "\n", + "| Row | 9d | 10a.1 |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 10a.2 | 10a.3 |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 10b | 10c |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 11a.1 | 11a.2 |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 11b | 12a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 12b | 13a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 13b | 14a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"3.0\") |\n", + "\n", + "| Row | 14b | 14c |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", + "\n", + "| Row | 15a | 15b |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 15c |\n", + "|-----|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") |" + ] + }, + "execution_count": 2, + "metadata": { + "comm_id": "fe85a486-3a4f-48ca-a944-439a201af24c", + "reactive": true + }, + "output_type": "execute_result" + } + ], + "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": { + "collapsed": false, + "max_attempts": 5, + "max_score": "3", + "precision": 3, + "question": "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "max_score": "1", + "question": "10a.2" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**10a(iii)** (1 pt.) q$_3$=? (Format as above)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false, + "max_attempts": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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": 5, + "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)=x2−13. 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": 5, + "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": 5, + "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": 5, + "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": 149, + "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": 5, + "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": 5, + "max_score": "1", + "precision": 12, + "question": "15b" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 152, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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aBFDhgxh7ty52O12/vjHP/LPf/6TrVu3Oj3npZde4p577mHIkCFMmDCB3Nxcpk2bRkhIiNPWgcHBwYwZM4aZM2fi6enJnXfeyebNm1myZAmzZ8+mdevWZX2nTJnCX/7yFx544AFeeOEFvL29mTt3LhcuXGDWrFll/Tw8PEhKSmLUqFE88cQTDBs2jH/+858kJCTQv39/+vfvX+G9vPvuu5w8ebJaVXAREREREajhBzPXrl3LjBkzeO655ygoKKBz586sXr2ahx9+uKyPw+HA4XBgLjmI09vbm48++oj4+HieeuopvvvuO3r06MHGjRvp1auX0zPuuusuPvjgA5577jkGDRqEn58fAwcOZN68eRXWW//xj38kMDCQBQsW8M033/CjH/2I1157jYkTJzr1u+6669i5cydTpkzhscceo7i4mMjISHbs2OF0WibAI488gqenJ3PnzmXZsmW0bduWxx57jNmzZ1f6Tv785z/TokULhg0bVpNXKSIiIiJNWI1CuL+/P6+88kqVa4qWLl3K0qVLK7S3a9eOZcuWVes5/fr1o1+/fpft5+XlxcyZM5k5c+Zl+95yyy2sXbu2Ws8fNmxYtUP1hx9+WK1+IiIiIiIXVXufcBF3Gz58uLun0ODonV0Zvbea0zu7MnpvNad3dmX03uofm7l03YjUur///e/ccccdpKenc/vtt7t7OiIiIiJSTl3kNVXCRURERETqmEK4iIiIiEgdUwgXEREREaljCuEiIiIiInVMIVxEREREpI4phIuIiIiI1DGFcBERERGROqYQLiIiIiJSxxTCRURERETqmEK4iIiIiEgdUwgXEREREaljCuEiIiIiInVMIVxEREREpI4phIuIiIiI1DGFcBERERGROqYQLiIiIiJSxxTCRURERKT+uXABsrPdPYtaoxAuIiIiIvXLvn1wxx0wcCA4HO6eTa1QCBcRERGR+uHcOZg2DcLCoFkzSE4Gj8YZV73cPQEREREREXbvhtGj4auvIDERpkyxgngj1Tj/aCEiIiIiDcN338Gvfw0/+xm0bg3798P06Y06gIMq4SIiIiLiLh9/DGPGwNGjMG8exMWBp6e7Z1UnVAkXERERkbp1+jRMnAh33w0dOsCBA/Cb3zSZAA6qhIuIiIhIXdqyBcaNg//+FxYsgCefbLQfvqxK0/uORURERKTuffstjB0L/ftD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NXToUOXm5jZ2aHEBF5pjqI0xuziMW+MxZheHcWs8xuziMG7NkGmEN954w1gsFvPKK6+4tI8aNcqEh4ebqqqqOs/929/+ZiwWi3nvvfecbXa73fTv398MGTLEpe+gQYNMZGSky/V27dplLBaLWbNmjbOtqKjIWK1Ws2zZMpfzp0yZYgIDA01ZWZmzbe7cucbf3998+eWXzrbvv//e2Gw2c/fdd7vUFBYWZuLi4lyumZGRYSwWi8nOzna2lZSU1Hqd5eXlplu3bubmm292Ow579uwxksyePXvcHkfdbr/9dm+X0OIwZheHcWs8xuziMG6Nx5hdHMatcTyR1xq1Er5582YFBwdr3LhxLu1JSUn65ptvtHv37nrPjYiI0JAhQ5xtPj4+uvfee1VQUKB//etfkqSvv/5aH3zwgSZOnCir9afyYmNjdfXVV2vz5s3Oti1btsgYo6SkpFr1nDp1Stu2bXO5/0033aQePXo424KDg5WQkKB//OMfqq6uJxQv3AAADmBJREFUliS99957+vbbb2tdc+zYserQoYPL/bt06VLrdQYFBalv37766quv6hwLAAAAtG2NCuFFRUXq27evSziWpKioKEnSwYMH6z03Ojq6Vvv55xYVFUlSnX1rjtf07dKlS60wfP41T506pc8//7zOa9Ycr+/+fn5+ioiIcLm/OydPntTevXvVv3//evsBAACg7WpUCD9+/Lg6depUq72m7fjx43WeW1ZW1qBza37X1ffn96irnqCgILVr187Z98SJEzLG/OL7h4SEqKysrM7XKEkzZ87UqVOntHDhwnr7AQAAoO3y9XYBrcmiRYuUkZGhVatWacCAAfX2/eijjzxUVevx3Xff8eSZRmLMLg7j1niM2cVh3BqPMbs4jFvjeCKnNSqEh4aGul3trlkdDg0Nrfdcd6vI559b87uuvp07d3a55v79+2v1q6io0JkzZ5zXCgkJkcViafT9z9/mUlZWVudrXLJkiZ544gk9+eSTmjFjhts+khQWFqbu3bvr3nvvrbMP6nbdddd5u4QWhzG7OIxb4zFmF4dxazzG7OIwbo3TvXt3hYWFNdn1GxXCo6OjlZmZqerqapd94QcOHJAkRUZG1nluVFSUCgsLa7Wff27N78LCQsXFxdXq+/N7REVFKSsrSyUlJeratWud1wwICNBVV11V5/0DAwN15ZVXOq9Zc/+IiAhnP7vdrsOHD2vChAm1rrFkyRLnz/z58+scA8kRwj/44APnB1EBAADQ/ISFhTVpCG/UIwqzs7ONxWIxWVlZLu2jR482l19+uamurq7z3DVr1hiLxWJ2797tbDt79qzp37+/iY2Ndek7ZMgQExUV5fKIwvz8fGOxWMyzzz7rbDt48KCxWq3mqaeecjl/6tSpJigoyJw4ccLZNm/ePOPv72/+7//+z9lW84jC8ePHO9uqqqpM9+7dza233upyzczMTGOxWMxbb73l0v7oo48ai8ViHn744TpfOwAAAPBzjQrhxjieCd6pUyfz/PPPm5ycHDN58mRjsVhMRkaGs09ycrLx9fV1eSZ3ZWWliYyMND179jQZGRlm+/btJj4+3rRr187s3LnT5R55eXnGz8/PJCQkmO3bt5v09HTTo0cPEx0dbc6cOePSd/LkyaZ9+/ZmxYoVJi8vzyxYsMBYrVazdOlSl36lpaWme/fuJjo62mzZssW8+eabZvjw4aZjx47m448/dum7YcMGY7FYzNSpU01ubq557rnnTEhIiBk9erRLvxUrVhiLxWJuvfVW895775n8/HyXHwAAAMCdRofw8vJyM3v2bBMWFmb8/f1NTExMrZXxxMREY7VazZEjR1zaS0pKzKRJk0xoaKgJCAgww4YNMzt27HB7n+3bt5vY2FgTEBBgQkNDTWJioiktLa3V7+zZs2bx4sWmV69ext/f30RERJhVq1a5vWZxcbGJj483HTt2NEFBQeaWW24x+/btc9s3MzPTXHvttcbf3990797dpKSkmIqKCpc+I0aMMFar1Vgsllo/Vqu1zjEEAABA22Yxxpim2+wCAAAA4HyNek44GubDDz/Ubbfdpl69eikwMFChoaEaNmyY0tPT3fbfu3evbr75ZgUHByskJER33XWXvvjiC7d9//rXvyoiIkLt27fXlVdeqUcffVR2u70pX45H7NixQ5MmTdLVV1+toKAgXX755brzzjvdPk4pMTFRVqu11k+/fv3cXru1jpnUuHGTmGuSVF5ertTUVI0aNUo2m01Wq1VLlixx25e59pPGjJvEXKtLXl6e2zlltVpVUFBQq39jxrE1Ky8vV0pKisLDwxUQEKABAwYoKyvL22U1C42ZU211PjXm/cuj713eXopvjfLy8sy0adNMenq6ycvLM6+//roZP368sVgs5vHHH3fp+9FHH5ng4GDzm9/8xmRnZ5vXXnvNREZGmvDw8Frbbx5//HFjtVrNwoULzTvvvGOWL19u/P39zZQpUzz58prEuHHjzIgRI8zq1avNO++8YzZt2mRiY2ONn5+fycnJcek7adIkExgYaHbv3u3yU1hYWOu6rXnMjGncuDHXHL744gtz2WWXmREjRjg/07JkyRK3fZlrP2nMuDHX6pabm2ssFotZtmxZrXlVXl7u0rcx49ja3XLLLSYkJMQ899xzJi8vz+3n0dqqhs6ptjyfGvr+5en3LkK4Bw0dOtT07NnTpW3cuHGmS5cu5ocffnC2HTlyxLRr187MmzfP2Xbs2DHTvn17M23aNJfzn3zySWO1Ws2hQ4eatvgmVlJSUqutvLzcdOvWzdx8880u7ZMmTTLBwcEXvGZrHzNjGjduzLXajh07dsEQzlyr7ULjxlyrW01g+vvf/37Bvg0dx9bujTfeMBaLxbzyyisu7aNGjTLh4eEuT1Jrixo6p5hPDvW9f3n6vYvtKB4UGhoqX9+fHs1ut9v1+uuv66677lKHDh2c7T179tSNN96ozZs3O9u2bdumyspKJSUluVwzKSlJxhht2bKl6V9AEzr/i5EkKSgoSH379tVXX31V65hpwEcZWvuYSQ0fN+aaew2ZR8y12uobE+Zaw1xoXjVmHFu7zZs3Kzg4WOPGjXNpT0pK0jfffKPdu3d7qbLm5VL9e9na1TVO3njvIoQ3IWOM7Ha7SktLtXr1ar311lt68MEHnceLi4t1+vRpRUdH1zo3KipKn332mc6cOSNJKioqcrb/XLdu3dS5c2cdPHiwCV+Jd5w8eVJ79+5V//79ax07deqUwsLC5Ovrqx49emjWrFk6ceKES5+2OGaS+3Fjrl085lrjMNcaZubMmfLz81PHjh0VFxen//3f/3U53phxbO2KiorUt29fly8JlH6aN615njRGfXOK+XRh3njvatQ3ZqJxpk+frueee06S5OPjoxUrVmj69OnO48ePH5ckderUqda5nTp1kjFGJ06cUNeuXXX8+HH5+/srICCgVt+QkBDntVqTmTNn6tSpU1q4cKFLe0xMjAYMGOD8RtS8vDz95S9/0Y4dO/T+++8rKChIktrkmEnux425dnGYa43HXKvfZZddppSUFI0YMUKhoaH69NNPtXz5co0YMUJvvPGGRo0aJalx49jaHT9+XFdddVWt9pqxaY3zpDEaMqeYTxfmjfcuQvgF5OXl6aabbmpQ3w8//NDlb1ALFy7UlClTdPToUW3dulVz5szR6dOnNW/evKYqt1n4JWNWY9GiRcrIyNCqVas0YMAAl2MpKSkufx45cqQGDBigsWPH6oUXXtDs2bMvvngvaupxa40uxZjVh7l2cePWVlzMOMbExCgmJsbZ/utf/1rx8fGKiorSvHnznCEcaCjmVMtFCL+AiIgIvfDCCw3q26NHj1p/rmmLi4uT5AhJycnJstlsCg0NlSSVlZXVulZZWZksFotCQkIkOfaTV1ZW6vTp02rfvn2tvoMGDWrcC2tCv2TMJGnJkiV64okn9OSTT2rGjBkNuk58fLyCgoJc9ga2pDGTmnbcmGvux+xiMNfq11rnmjuXahw7duyo2267Tc8++6wqKyvl7+/fqHFs7UJDQ92uLNaMTc1Y4Sfnzynm04V5472LEH4B3bp1U3Jy8iW51qBBg7R27Vp98cUXstls6tOnjwICAlRYWFir74EDB/Rv//ZvateunSQ5V6IKCws1ePBgZ79vv/1Wx48fd/7f5c3BLxmzJUuWOH/mz5/f4POMMaqurnZpa0ljJjXtuDHXLp22PtcupLXONXeaYhwtFoukxo1jaxcdHa3MzExVV1e77As/cOCAJDX7eeJtFouF+dQAXnnvatAzVHBJTJw40fj6+ppjx4452+6++27TtWtXt4/D+eMf/+hsKysrMwEBAWb69Oku11y6dKmxWq3mo48+avoX0MQeffRRY7FYzMMPP9zoc7OysozFYjHPPPOMs60tjJkxDR835lptpaWl9T5qz522PNdqXGjcmGuNU1ZWZsLDw83AgQNd2hs6jq1ddna2sVgsJisry6V99OjR5vLLLzfV1dVeqqz5cjenmE8O9b1/efq9y2fx4sWLf/FfH+BiypQp2rlzp7777jsdO3ZMe/bs0aOPPqrMzEzNnTtXY8aMcfaNiorS6tWrlZubq27duunAgQOaPHmyfHx89PLLLyswMFCSFBAQIIvFouXLl+vs2bPy8fHRpk2b9Mgjjyg5OVmJiYleerWXxp/+9CctWLBAcXFxmjx5sr766iuXn8svv1ySdOTIEd1+++2qrKxUWVmZPvvsM7344ov64x//qIiICK1Zs0Z+fn6SWv+YSQ0fN4m59nPZ2dnav3+/Dhw4oK1bt8pms8lisejQoUO64oor5Ofnx1xzoyHjJjHX6jNhwgTt27dP3333nUpKSrR9+3bdd999+vrrr/XSSy/piiuucPZt6Di2dldddZV27dql559/XqGhoTp58qSWLl2qV199VWvXrq31hIq2pqFzqq3Pp4a8f3n8vesi/yKBeqxbt84MHz7c2Gw24+fnZ0JCQsyNN95o0tPT3fbfs2ePufnmm01QUJDp2LGjSUhIMJ9//rnbvs8884y55pprjL+/v+ndu7dZsmSJsdvtTflyPGLEiBHGarUai8VS68dqtTr7nThxwiQkJJgrrrjCBAYGGn9/f3PNNdeY+fPnm++//97ttVvrmBnT8HGrwVxz6N27t8s4/fx/HzlyxBjDXHOnIeNWg7nm3rJly8yAAQPMZZddZnx9fU2XLl3MXXfdZT744AO3/Rszjq1ZeXm5mT17tgkLCzP+/v4mJiam1sp4W9WYOdWW51ND3788+d5lMaYB30QBAAAA4JLhy3oAAAAADyOEAwAAAB5GCAcAAAA8jBAOAAAAeBghHAAAAPAwQjgAAADgYYRwAAAAwMMI4QAAAICHEcIBAAAADyOEAwAAAB5GCAcAAAA8jBAOAAAAeNj/B73hnYDNtwulAAAAAElFTkSuQmCC", + "text/plain": [ + "Figure(PyObject )" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 5, + "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": 5, + "max_score": 1, + "precision": 22, + "question": "9d" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 156, + "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": [ + "
Namestotal12a2b3a3b3c4a4b4c4d5a6a6b6c7a7b89a9b9d10a.110a.210a.310b10c11a.111a.211b12a12b13a13b14a14b14c15a15b15c
1MAX50.03.01.01.01.01.01.01.01.01.01.03.01.01.01.02.02.02.01.02.01.01.01.01.01.01.01.01.01.01.01.01.01.03.01.02.02.01.01.0
" + ], + "text/plain": [ + "1x40 DataFrame\n", + "| Row | Names | total | 1 |\n", + "|-----|-------|-----------------------|------------------------|\n", + "| 1 | \"MAX\" | Colored(\"black\",50.0) | Colored(\"black\",\"3.0\") |\n", + "\n", + "| Row | 2a | 2b |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 3a | 3b |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 3c | 4a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 4b | 4c |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 4d | 5a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"3.0\") |\n", + "\n", + "| Row | 6a | 6b |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 6c | 7a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", + "\n", + "| Row | 7b | 8 |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n", + "\n", + "| Row | 9a | 9b |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", + "\n", + "| Row | 9d | 10a.1 |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 10a.2 | 10a.3 |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 10b | 10c |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 11a.1 | 11a.2 |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 11b | 12a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 12b | 13a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 13b | 14a |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"3.0\") |\n", + "\n", + "| Row | 14b | 14c |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", + "\n", + "| Row | 15a | 15b |\n", + "|-----|------------------------|------------------------|\n", + "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"1.0\") |\n", + "\n", + "| Row | 15c |\n", + "|-----|------------------------|\n", + "| 1 | Colored(\"black\",\"1.0\") |" + ] + }, + "execution_count": 156, + "metadata": { + "comm_id": "6cd59de8-fa13-4ff0-aea1-251075f47030", + "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": "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 +} From c3883235abc27c44bb478dee34e66f3296459d70 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Mon, 19 Oct 2015 12:22:13 +0530 Subject: [PATCH 65/77] Update readme about pset 5 --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5e2f50b4..e7aac0b0 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ 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-PS4.ipynb", "18.06-PS4.ipynb" )` +`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS5.ipynb", "18.06-PS5.ipynb" )` -## Instructions for Problem Set 4 (and so on) +## Instructions for Problem Set 5 (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-PS4.ipynb", "18.06-PS4.ipynb" )` +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-PS5.ipynb", "18.06-PS5.ipynb" )`
in a new cell and execute -4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 4 +4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 5 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 @@ -23,5 +23,5 @@ For those who don't read instructions:
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-PS4.ipynb", "18.06-PS4_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. +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-PS5.ipynb", "18.06-PS5_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. From 54a62181b1cd79150074b6e98347191fc6d44c4b Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Mon, 19 Oct 2015 12:50:35 +0530 Subject: [PATCH 66/77] Add mit id form --- 18.06-PS5.ipynb | 145 +++++++++++------------------------------------- 1 file changed, 33 insertions(+), 112 deletions(-) diff --git a/18.06-PS5.ipynb b/18.06-PS5.ipynb index 9ec66c4a..d3010370 100644 --- a/18.06-PS5.ipynb +++ b/18.06-PS5.ipynb @@ -22,131 +22,48 @@ "text": [ "INFO: Removing Homework (unregistered)\n", "INFO: Cloning Homework from git://github.com/shashi/Homework.jl.git\n", - "INFO: Computing changes...\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" + "using Homework\n", + "\n", + "Homework.show_mit_form()" ] }, { "cell_type": "code", - "execution_count": 2, + "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" - }, - { - "data": { - "text/html": [ - "
Namestotal12a2b3a3b3c4a4b4c4d5a6a6b6c7a7b89a9b9d10a.110a.210a.310b10c11a.111a.211b12a12b13a13b14a14b14c15a15b15c
1MAX50.03.01.01.01.01.01.01.01.01.01.03.01.01.01.02.02.02.01.02.01.01.01.01.01.01.01.01.01.01.01.01.01.03.01.02.02.01.01.0
" - ], - "text/plain": [ - "1x40 DataFrame\n", - "| Row | Names | total | 1 |\n", - "|-----|-------|-----------------------|------------------------|\n", - "| 1 | \"MAX\" | Colored(\"black\",50.0) | Colored(\"black\",\"3.0\") |\n", - "\n", - "| Row | 2a | 2b |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 3a | 3b |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 3c | 4a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 4b | 4c |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 4d | 5a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"3.0\") |\n", - "\n", - "| Row | 6a | 6b |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 6c | 7a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", - "\n", - "| Row | 7b | 8 |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n", - "\n", - "| Row | 9a | 9b |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", - "\n", - "| Row | 9d | 10a.1 |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 10a.2 | 10a.3 |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 10b | 10c |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 11a.1 | 11a.2 |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 11b | 12a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 12b | 13a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 13b | 14a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"3.0\") |\n", - "\n", - "| Row | 14b | 14c |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", - "\n", - "| Row | 15a | 15b |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 15c |\n", - "|-----|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") |" - ] - }, - "execution_count": 2, - "metadata": { - "comm_id": "fe85a486-3a4f-48ca-a944-439a201af24c", - "reactive": true - }, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Homework.progress()" ] @@ -169,11 +86,15 @@ "cell_type": "code", "execution_count": null, "metadata": { + "attempts": 1, "collapsed": false, + "explanation": null, "max_attempts": 5, - "max_score": "3", + "max_score": 3, "precision": 3, - "question": "1" + "question": "1", + "score": 3, + "status": 1 }, "outputs": [], "source": [] From 68b51a01d9e7dbd15732686cfb1ffb2d8db3143a Mon Sep 17 00:00:00 2001 From: Alan Edelman Date: Mon, 19 Oct 2015 09:07:09 -0400 Subject: [PATCH 67/77] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e7aac0b0..9aa21edd 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,4 @@ For those who don't read instructions:
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-PS5.ipynb", "18.06-PS5_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 From 5ddc32c818912b71eff9644ab9225dde3e819d99 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Mon, 19 Oct 2015 20:46:27 +0530 Subject: [PATCH 68/77] Fixes --- 18.06-PS5.ipynb | 248 +++++++++++------------------------------------- 1 file changed, 57 insertions(+), 191 deletions(-) diff --git a/18.06-PS5.ipynb b/18.06-PS5.ipynb index d3010370..84d2ed95 100644 --- a/18.06-PS5.ipynb +++ b/18.06-PS5.ipynb @@ -11,37 +11,11 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "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" - ] - } - ], + "outputs": [], "source": [ "\n", "# Running this cell will set up auto-grading\n", @@ -89,11 +63,11 @@ "attempts": 1, "collapsed": false, "explanation": null, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 3, "precision": 3, "question": "1", - "score": 3, + "score": 0, "status": 1 }, "outputs": [], @@ -117,7 +91,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "2a" }, @@ -138,7 +112,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "2b" }, @@ -162,7 +136,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "3a" }, @@ -184,7 +158,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "3b", "scrolled": true @@ -205,7 +179,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "3c" }, @@ -226,7 +200,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "4a" }, @@ -252,7 +226,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "4b" }, @@ -273,7 +247,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "4c" }, @@ -293,7 +267,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "4d" }, @@ -319,7 +293,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "3", "question": "5a" }, @@ -349,7 +323,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "6a" }, @@ -370,7 +344,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "6b" }, @@ -390,7 +364,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "6c" }, @@ -414,7 +388,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "2", "question": "7a" }, @@ -436,7 +410,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "2", "question": "7b" }, @@ -466,7 +440,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "2", "question": "8" }, @@ -499,7 +473,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "9a" }, @@ -521,7 +495,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "2", "question": "9b" }, @@ -550,7 +524,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "10a.1" }, @@ -569,7 +543,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "10a.2" }, @@ -588,7 +562,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "10a.3" }, @@ -614,7 +588,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "10b" }, @@ -635,7 +609,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "10c" }, @@ -665,7 +639,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "11a.1" }, @@ -684,7 +658,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "11a.2" }, @@ -712,7 +686,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "11b" }, @@ -734,7 +708,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "12a" }, @@ -754,7 +728,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "12b" }, @@ -780,7 +754,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "13a" }, @@ -802,7 +776,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "13b" }, @@ -817,7 +791,7 @@ "source": [ "## Problem 14. (Legendre Polynomials)\n", "\n", - "**(a) (3 pts)** Let f(x)=1,g(x)=x,h(x)=x2−13. Compute (by hand):\n", + "**(a) (3 pts)** Let $f(x)=1,g(x)=x,h(x)=x^2−13$. 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", @@ -831,7 +805,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "3", "question": "14a" }, @@ -853,7 +827,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "question": "14b" }, @@ -874,7 +848,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "2", "question": "14c" }, @@ -903,7 +877,7 @@ }, { "cell_type": "code", - "execution_count": 149, + "execution_count": null, "metadata": { "collapsed": false }, @@ -929,7 +903,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "2", "question": "15a" }, @@ -951,7 +925,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "precision": 12, "question": "15b" @@ -961,22 +935,11 @@ }, { "cell_type": "code", - "execution_count": 152, + "execution_count": null, "metadata": { "collapsed": false }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAuEAAAIQCAYAAAAvjrAuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3X9c1tX9//HHBQgC+lGxy1JWa9GcophW8mvTmppZTReY+SMt8EdmrsRNQXOlNUxD2yp1lbZpTkX2Me2bmaamllOUZJYCSxe03NSEgX1U8gdwne8fbyQv4EJQ4eLH8367eWOd9znv9+G9wqcvz3WOzRhjEBERERGROuPh7gmIiIiIiDQ1CuEiIiIiInVMIVxEREREpI4phIuIiIiI1DGFcBERERGROqYQLiIiIiJSxxTCRURERETqmEK4iIiIiEgdUwgXEREREaljNQrhZ86cIS4ujsDAQHx9fenRowcpKSnVGpubm0tMTAx2ux1/f38iIyPZtm1bpX23bt1KREQE/v7+2O12YmNjycvLq9CvqKiI559/nptvvpnmzZvTuXNnFi5cWOk9c3JyiI6Opk2bNrRs2ZL+/fuzf//+SvuuXr2a7t274+vrS2BgIJMnT6awsNCpT0xMDB4eHi5/paWlVeu9iIiIiEjTY6vJsfX9+/dn3759vPTSS3Ts2JGVK1fy1ltvsXLlSoYPH+5y3Pnz57nzzjs5deoUc+fOpV27dixcuJANGzawdetWevfuXdb3448/pl+/fgwcOJCJEydy4sQJEhISaNOmDfv27cPb27us77hx41ixYgWJiYn07NmTTZs28dJLL5GYmMj06dPL+uXl5dG9e3fatm3LCy+8gI+PD3PmzOHzzz/n008/pWPHjmV9V65cyahRoxg3bhwjRozg0KFDJCQkEBYWxqZNm8r65eTk8N///tfp+zTGMHDgQHx9ffnXv/6FzWar7qsVERERkabEVNOGDRuMzWYzq1evdmrv37+/CQwMNCUlJS7HLlq0yNhsNrNnz56ytuLiYtOlSxcTFhbm1Ldnz56ma9euTvfbvXu3sdls5vXXXy9ry8jIMB4eHmbu3LlO4x9//HHj5+dnCgoKytqmTp1qfHx8zJEjR8raTp06Zex2uxk6dKjTnNq3b28GDBjgdM9Vq1YZm81mNm7c6PJ7NMaYHTt2GJvNZp577rkq+4mIiIhI01bt5Sjr1q2jZcuWDBkyxKk9NjaWY8eOsXfv3irHdurUibCwsLI2T09PRo4cSVpaGsePHwfg6NGj7Nu3j1GjRuHh8f3UIiIi6NixI+vWrStre/fddzHGEBsbW2E+Z8+edapar1u3jj59+nDjjTeWtbVs2ZLo6GjWr1+Pw+EAYM+ePXzzzTcV7vnQQw/RokULp+dX5k9/+hMeHh6MGTOmyn4iIiIi0rRVO4RnZGTQuXNnp3AMEBISAkBmZmaVY7t161ahvfzYjIwMAJd9L16/2Lddu3a0a9euynuePXuWnJwcl/e8eL2q5zdr1oxOnTo5Pb+8//u//2PNmjX07duXm266yWU/EREREZFqh/D8/HwCAgIqtF9sy8/Pdzm2oKCgWmMvfnXV99JnuJqPv78/3t7eZX1PnjyJMeaqn9+mTRsKCgpcfo/JycmcO3dOVXARERERuSwvd0+gsfjTn/7EddddR1RU1GX7Hj9+vGwJjoiIiIjUP+3bt6d9+/a1dv9qh/C2bdtWWu2+WB1u27ZtlWMrqyKXH3vxq6u+1113ndM9P//88wr9CgsLuXDhQtm92rRpg81mq/Hzyy9zKSgocPk9HjhwgPT0dOLi4mjWrFmlfS46fvw4d955J8eOHauyn4iIiIi4T4cOHdi3b1+tBfFqh/Bu3bqRnJyMw+FwWhd+8OBBALp27epybEhICAcOHKjQXn7sxa8HDhxgwIABFfpe+oyQkBBSUlI4ceIE119/vct7+vr6cuutt7p8vp+fH7fcckvZPS8+v1OnTmX9iouL+eKLL3jkkUcq/f7+9Kc/ATB27FiX7+Ci48ePc+zYMVasWEHnzp0v21++FxcXxyuvvOLuaTQoemdXRu+t5vTOrozeW83pnV0Zvbea+cc//sHIkSM5fvx47VXDq7uNysaNG43NZjMpKSlO7ffee6/5wQ9+YBwOh8uxr7/+urHZbGbv3r1lbUVFRaZLly4mIiLCqW9YWJgJCQlx2qIwNTXV2Gw28+abb5a1ZWZmGg8PD/PSSy85jR8/frzx9/c3J0+eLGtLSEgwPj4+5t///ndZ28UtCocPH17WVlJSYjp06GDuu+8+p3smJycbm81mPvzwwwrf27lz50xAQIAJDw93+f1fKj093QAmPT29Wv3lewMHDnT3FBocvbMro/dWc3pnV0bvreb0zq6M3lvN1EVeq3YlfMCAAdxzzz1MmDCBU6dOERQURHJyMps3b2blypVlB9OMGTOG5cuXk5OTU7Yl4OjRo1m0aBFDhgxh7ty52O12/vjHP/LPf/6TrVu3Oj3npZde4p577mHIkCFMmDCB3Nxcpk2bRkhIiNPWgcHBwYwZM4aZM2fi6enJnXfeyebNm1myZAmzZ8+mdevWZX2nTJnCX/7yFx544AFeeOEFvL29mTt3LhcuXGDWrFll/Tw8PEhKSmLUqFE88cQTDBs2jH/+858kJCTQv39/+vfvX+G9vPvuu5w8ebJaVXAREREREajhBzPXrl3LjBkzeO655ygoKKBz586sXr2ahx9+uKyPw+HA4XBgLjmI09vbm48++oj4+HieeuopvvvuO3r06MHGjRvp1auX0zPuuusuPvjgA5577jkGDRqEn58fAwcOZN68eRXWW//xj38kMDCQBQsW8M033/CjH/2I1157jYkTJzr1u+6669i5cydTpkzhscceo7i4mMjISHbs2OF0WibAI488gqenJ3PnzmXZsmW0bduWxx57jNmzZ1f6Tv785z/TokULhg0bVpNXKSIiIiJNWI1CuL+/P6+88kqVa4qWLl3K0qVLK7S3a9eOZcuWVes5/fr1o1+/fpft5+XlxcyZM5k5c+Zl+95yyy2sXbu2Ws8fNmxYtUP1hx9+WK1+IiIiIiIXVXufcBF3Gz58uLun0ODonV0Zvbea0zu7MnpvNad3dmX03uofm7l03YjUur///e/ccccdpKenc/vtt7t7OiIiIiJSTl3kNVXCRURERETqmEK4iIiIiEgdUwgXEREREaljCuEiIiIiInVMIVxEREREpI4phIuIiIiI1DGFcBERERGROqYQLiIiIiJSxxTCRURERETqmEK4iIiIiEgdUwgXEREREaljCuEiIiIiInVMIVxEREREpI4phIuIiIiI1DGFcBERERGROqYQLiIiIiJSxxTCRURERKT+uXABsrPdPYtaoxAuIiIiIvXLvn1wxx0wcCA4HO6eTa1QCBcRERGR+uHcOZg2DcLCoFkzSE4Gj8YZV73cPQEREREREXbvhtGj4auvIDERpkyxgngj1Tj/aCEiIiIiDcN338Gvfw0/+xm0bg3798P06Y06gIMq4SIiIiLiLh9/DGPGwNGjMG8exMWBp6e7Z1UnVAkXERERkbp1+jRMnAh33w0dOsCBA/Cb3zSZAA6qhIuIiIhIXdqyBcaNg//+FxYsgCefbLQfvqxK0/uORURERKTuffstjB0L/ftD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NXToUOXm5jZ2aHEBF5pjqI0xuziMW+MxZheHcWs8xuziMG7NkGmEN954w1gsFvPKK6+4tI8aNcqEh4ebqqqqOs/929/+ZiwWi3nvvfecbXa73fTv398MGTLEpe+gQYNMZGSky/V27dplLBaLWbNmjbOtqKjIWK1Ws2zZMpfzp0yZYgIDA01ZWZmzbe7cucbf3998+eWXzrbvv//e2Gw2c/fdd7vUFBYWZuLi4lyumZGRYSwWi8nOzna2lZSU1Hqd5eXlplu3bubmm292Ow579uwxksyePXvcHkfdbr/9dm+X0OIwZheHcWs8xuziMG6Nx5hdHMatcTyR1xq1Er5582YFBwdr3LhxLu1JSUn65ptvtHv37nrPjYiI0JAhQ5xtPj4+uvfee1VQUKB//etfkqSvv/5aH3zwgSZOnCir9afyYmNjdfXVV2vz5s3Oti1btsgYo6SkpFr1nDp1Stu2bXO5/0033aQePXo424KDg5WQkKB//OMfqq6uJxQv3AAADmBJREFUliS99957+vbbb2tdc+zYserQoYPL/bt06VLrdQYFBalv37766quv6hwLAAAAtG2NCuFFRUXq27evSziWpKioKEnSwYMH6z03Ojq6Vvv55xYVFUlSnX1rjtf07dKlS60wfP41T506pc8//7zOa9Ycr+/+fn5+ioiIcLm/OydPntTevXvVv3//evsBAACg7WpUCD9+/Lg6depUq72m7fjx43WeW1ZW1qBza37X1ffn96irnqCgILVr187Z98SJEzLG/OL7h4SEqKysrM7XKEkzZ87UqVOntHDhwnr7AQAAoO3y9XYBrcmiRYuUkZGhVatWacCAAfX2/eijjzxUVevx3Xff8eSZRmLMLg7j1niM2cVh3BqPMbs4jFvjeCKnNSqEh4aGul3trlkdDg0Nrfdcd6vI559b87uuvp07d3a55v79+2v1q6io0JkzZ5zXCgkJkcViafT9z9/mUlZWVudrXLJkiZ544gk9+eSTmjFjhts+khQWFqbu3bvr3nvvrbMP6nbdddd5u4QWhzG7OIxb4zFmF4dxazzG7OIwbo3TvXt3hYWFNdn1GxXCo6OjlZmZqerqapd94QcOHJAkRUZG1nluVFSUCgsLa7Wff27N78LCQsXFxdXq+/N7REVFKSsrSyUlJeratWud1wwICNBVV11V5/0DAwN15ZVXOq9Zc/+IiAhnP7vdrsOHD2vChAm1rrFkyRLnz/z58+scA8kRwj/44APnB1EBAADQ/ISFhTVpCG/UIwqzs7ONxWIxWVlZLu2jR482l19+uamurq7z3DVr1hiLxWJ2797tbDt79qzp37+/iY2Ndek7ZMgQExUV5fKIwvz8fGOxWMyzzz7rbDt48KCxWq3mqaeecjl/6tSpJigoyJw4ccLZNm/ePOPv72/+7//+z9lW84jC8ePHO9uqqqpM9+7dza233upyzczMTGOxWMxbb73l0v7oo48ai8ViHn744TpfOwAAAPBzjQrhxjieCd6pUyfz/PPPm5ycHDN58mRjsVhMRkaGs09ycrLx9fV1eSZ3ZWWliYyMND179jQZGRlm+/btJj4+3rRr187s3LnT5R55eXnGz8/PJCQkmO3bt5v09HTTo0cPEx0dbc6cOePSd/LkyaZ9+/ZmxYoVJi8vzyxYsMBYrVazdOlSl36lpaWme/fuJjo62mzZssW8+eabZvjw4aZjx47m448/dum7YcMGY7FYzNSpU01ubq557rnnTEhIiBk9erRLvxUrVhiLxWJuvfVW895775n8/HyXHwAAAMCdRofw8vJyM3v2bBMWFmb8/f1NTExMrZXxxMREY7VazZEjR1zaS0pKzKRJk0xoaKgJCAgww4YNMzt27HB7n+3bt5vY2FgTEBBgQkNDTWJioiktLa3V7+zZs2bx4sWmV69ext/f30RERJhVq1a5vWZxcbGJj483HTt2NEFBQeaWW24x+/btc9s3MzPTXHvttcbf3990797dpKSkmIqKCpc+I0aMMFar1Vgsllo/Vqu1zjEEAABA22Yxxpim2+wCAAAA4HyNek44GubDDz/Ubbfdpl69eikwMFChoaEaNmyY0tPT3fbfu3evbr75ZgUHByskJER33XWXvvjiC7d9//rXvyoiIkLt27fXlVdeqUcffVR2u70pX45H7NixQ5MmTdLVV1+toKAgXX755brzzjvdPk4pMTFRVqu11k+/fv3cXru1jpnUuHGTmGuSVF5ertTUVI0aNUo2m01Wq1VLlixx25e59pPGjJvEXKtLXl6e2zlltVpVUFBQq39jxrE1Ky8vV0pKisLDwxUQEKABAwYoKyvL22U1C42ZU211PjXm/cuj713eXopvjfLy8sy0adNMenq6ycvLM6+//roZP368sVgs5vHHH3fp+9FHH5ng4GDzm9/8xmRnZ5vXXnvNREZGmvDw8Frbbx5//HFjtVrNwoULzTvvvGOWL19u/P39zZQpUzz58prEuHHjzIgRI8zq1avNO++8YzZt2mRiY2ONn5+fycnJcek7adIkExgYaHbv3u3yU1hYWOu6rXnMjGncuDHXHL744gtz2WWXmREjRjg/07JkyRK3fZlrP2nMuDHX6pabm2ssFotZtmxZrXlVXl7u0rcx49ja3XLLLSYkJMQ899xzJi8vz+3n0dqqhs6ptjyfGvr+5en3LkK4Bw0dOtT07NnTpW3cuHGmS5cu5ocffnC2HTlyxLRr187MmzfP2Xbs2DHTvn17M23aNJfzn3zySWO1Ws2hQ4eatvgmVlJSUqutvLzcdOvWzdx8880u7ZMmTTLBwcEXvGZrHzNjGjduzLXajh07dsEQzlyr7ULjxlyrW01g+vvf/37Bvg0dx9bujTfeMBaLxbzyyisu7aNGjTLh4eEuT1Jrixo6p5hPDvW9f3n6vYvtKB4UGhoqX9+fHs1ut9v1+uuv66677lKHDh2c7T179tSNN96ozZs3O9u2bdumyspKJSUluVwzKSlJxhht2bKl6V9AEzr/i5EkKSgoSH379tVXX31V65hpwEcZWvuYSQ0fN+aaew2ZR8y12uobE+Zaw1xoXjVmHFu7zZs3Kzg4WOPGjXNpT0pK0jfffKPdu3d7qbLm5VL9e9na1TVO3njvIoQ3IWOM7Ha7SktLtXr1ar311lt68MEHnceLi4t1+vRpRUdH1zo3KipKn332mc6cOSNJKioqcrb/XLdu3dS5c2cdPHiwCV+Jd5w8eVJ79+5V//79ax07deqUwsLC5Ovrqx49emjWrFk6ceKES5+2OGaS+3Fjrl085lrjMNcaZubMmfLz81PHjh0VFxen//3f/3U53phxbO2KiorUt29fly8JlH6aN615njRGfXOK+XRh3njvatQ3ZqJxpk+frueee06S5OPjoxUrVmj69OnO48ePH5ckderUqda5nTp1kjFGJ06cUNeuXXX8+HH5+/srICCgVt+QkBDntVqTmTNn6tSpU1q4cKFLe0xMjAYMGOD8RtS8vDz95S9/0Y4dO/T+++8rKChIktrkmEnux425dnGYa43HXKvfZZddppSUFI0YMUKhoaH69NNPtXz5co0YMUJvvPGGRo0aJalx49jaHT9+XFdddVWt9pqxaY3zpDEaMqeYTxfmjfcuQvgF5OXl6aabbmpQ3w8//NDlb1ALFy7UlClTdPToUW3dulVz5szR6dOnNW/evKYqt1n4JWNWY9GiRcrIyNCqVas0YMAAl2MpKSkufx45cqQGDBigsWPH6oUXXtDs2bMvvngvaupxa40uxZjVh7l2cePWVlzMOMbExCgmJsbZ/utf/1rx8fGKiorSvHnznCEcaCjmVMtFCL+AiIgIvfDCCw3q26NHj1p/rmmLi4uT5AhJycnJstlsCg0NlSSVlZXVulZZWZksFotCQkIkOfaTV1ZW6vTp02rfvn2tvoMGDWrcC2tCv2TMJGnJkiV64okn9OSTT2rGjBkNuk58fLyCgoJc9ga2pDGTmnbcmGvux+xiMNfq11rnmjuXahw7duyo2267Tc8++6wqKyvl7+/fqHFs7UJDQ92uLNaMTc1Y4Sfnzynm04V5472LEH4B3bp1U3Jy8iW51qBBg7R27Vp98cUXstls6tOnjwICAlRYWFir74EDB/Rv//ZvateunSQ5V6IKCws1ePBgZ79vv/1Wx48fd/7f5c3BLxmzJUuWOH/mz5/f4POMMaqurnZpa0ljJjXtuDHXLp22PtcupLXONXeaYhwtFoukxo1jaxcdHa3MzExVV1e77As/cOCAJDX7eeJtFouF+dQAXnnvatAzVHBJTJw40fj6+ppjx4452+6++27TtWtXt4/D+eMf/+hsKysrMwEBAWb69Oku11y6dKmxWq3mo48+avoX0MQeffRRY7FYzMMPP9zoc7OysozFYjHPPPOMs60tjJkxDR835lptpaWl9T5qz522PNdqXGjcmGuNU1ZWZsLDw83AgQNd2hs6jq1ddna2sVgsJisry6V99OjR5vLLLzfV1dVeqqz5cjenmE8O9b1/efq9y2fx4sWLf/FfH+BiypQp2rlzp7777jsdO3ZMe/bs0aOPPqrMzEzNnTtXY8aMcfaNiorS6tWrlZubq27duunAgQOaPHmyfHx89PLLLyswMFCSFBAQIIvFouXLl+vs2bPy8fHRpk2b9Mgjjyg5OVmJiYleerWXxp/+9CctWLBAcXFxmjx5sr766iuXn8svv1ySdOTIEd1+++2qrKxUWVmZPvvsM7344ov64x//qIiICK1Zs0Z+fn6SWv+YSQ0fN4m59nPZ2dnav3+/Dhw4oK1bt8pms8lisejQoUO64oor5Ofnx1xzoyHjJjHX6jNhwgTt27dP3333nUpKSrR9+3bdd999+vrrr/XSSy/piiuucPZt6Di2dldddZV27dql559/XqGhoTp58qSWLl2qV199VWvXrq31hIq2pqFzqq3Pp4a8f3n8vesi/yKBeqxbt84MHz7c2Gw24+fnZ0JCQsyNN95o0tPT3fbfs2ePufnmm01QUJDp2LGjSUhIMJ9//rnbvs8884y55pprjL+/v+ndu7dZsmSJsdvtTflyPGLEiBHGarUai8VS68dqtTr7nThxwiQkJJgrrrjCBAYGGn9/f3PNNdeY+fPnm++//97ttVvrmBnT8HGrwVxz6N27t8s4/fx/HzlyxBjDXHOnIeNWg7nm3rJly8yAAQPMZZddZnx9fU2XLl3MXXfdZT744AO3/Rszjq1ZeXm5mT17tgkLCzP+/v4mJiam1sp4W9WYOdWW51ND3788+d5lMaYB30QBAAAA4JLhy3oAAAAADyOEAwAAAB5GCAcAAAA8jBAOAAAAeBghHAAAAPAwQjgAAADgYYRwAAAAwMMI4QAAAICHEcIBAAAADyOEAwAAAB5GCAcAAAA8jBAOAAAAeNj/B73hnYDNtwulAAAAAElFTkSuQmCC", - "text/plain": [ - "Figure(PyObject )" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Not graded but interesting to see the comparison between the data and the line\n", "\n", @@ -1001,7 +964,7 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": "1", "precision": 12, "question": "15c" @@ -1024,130 +987,33 @@ "execution_count": null, "metadata": { "collapsed": false, - "max_attempts": 5, + "max_attempts": 1000, "max_score": 1, "precision": 22, - "question": "9d" + "question": "15d" }, "outputs": [], "source": [] }, { "cell_type": "code", - "execution_count": 156, + "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" - }, - { - "data": { - "text/html": [ - "
Namestotal12a2b3a3b3c4a4b4c4d5a6a6b6c7a7b89a9b9d10a.110a.210a.310b10c11a.111a.211b12a12b13a13b14a14b14c15a15b15c
1MAX50.03.01.01.01.01.01.01.01.01.01.03.01.01.01.02.02.02.01.02.01.01.01.01.01.01.01.01.01.01.01.01.01.03.01.02.02.01.01.0
" - ], - "text/plain": [ - "1x40 DataFrame\n", - "| Row | Names | total | 1 |\n", - "|-----|-------|-----------------------|------------------------|\n", - "| 1 | \"MAX\" | Colored(\"black\",50.0) | Colored(\"black\",\"3.0\") |\n", - "\n", - "| Row | 2a | 2b |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 3a | 3b |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 3c | 4a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 4b | 4c |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 4d | 5a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"3.0\") |\n", - "\n", - "| Row | 6a | 6b |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 6c | 7a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", - "\n", - "| Row | 7b | 8 |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"2.0\") |\n", - "\n", - "| Row | 9a | 9b |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", - "\n", - "| Row | 9d | 10a.1 |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 10a.2 | 10a.3 |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 10b | 10c |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 11a.1 | 11a.2 |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 11b | 12a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 12b | 13a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 13b | 14a |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"3.0\") |\n", - "\n", - "| Row | 14b | 14c |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") | Colored(\"black\",\"2.0\") |\n", - "\n", - "| Row | 15a | 15b |\n", - "|-----|------------------------|------------------------|\n", - "| 1 | Colored(\"black\",\"2.0\") | Colored(\"black\",\"1.0\") |\n", - "\n", - "| Row | 15c |\n", - "|-----|------------------------|\n", - "| 1 | Colored(\"black\",\"1.0\") |" - ] - }, - "execution_count": 156, - "metadata": { - "comm_id": "6cd59de8-fa13-4ff0-aea1-251075f47030", - "reactive": true - }, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "Homework.progress()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { From c56c1f93fb2c1a1f975da5f351808e615e1d708e Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sun, 25 Oct 2015 23:10:12 +0530 Subject: [PATCH 69/77] PS6 --- 18.06-PS5.ipynb | 4 +- 18.06-PS6.ipynb | 2298 +++++++++++++++++++++++++++++++++++++++++++++++ README.md | 10 +- 3 files changed, 2305 insertions(+), 7 deletions(-) create mode 100644 18.06-PS6.ipynb diff --git a/18.06-PS5.ipynb b/18.06-PS5.ipynb index 84d2ed95..6a54d751 100644 --- a/18.06-PS5.ipynb +++ b/18.06-PS5.ipynb @@ -554,7 +554,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**10a(iii)** (1 pt.) q$_3$=? (Format as above)" + "**10a(iii)** (1 pt.) what is q$_3$ if its first component is positive? (Format as above)" ] }, { @@ -791,7 +791,7 @@ "source": [ "## Problem 14. (Legendre Polynomials)\n", "\n", - "**(a) (3 pts)** Let $f(x)=1,g(x)=x,h(x)=x^2−13$. Compute (by hand):\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", diff --git a/18.06-PS6.ipynb b/18.06-PS6.ipynb new file mode 100644 index 00000000..20e8f3c3 --- /dev/null +++ b/18.06-PS6.ipynb @@ -0,0 +1,2298 @@ +{ + "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": [ + "
Namestotal1a1b1c1d2a2b3a3b45a5b5c5d5e5f5g5h6a6b6c6d7a7b89a9b9c10a10b10c11a11b11c11d
1MAX50.01.01.01.01.02.02.02.02.02.01.00.50.51.00.50.51.01.01.01.01.01.02.02.05.01.02.02.02.02.02.01.02.02.01.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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5e) (0.25pts)\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": "5e", + "status": 1 + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "5f) (0.25pts)\n", + "What is the eigenvector with eigenvalue $\\lambda_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": "5f", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "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: Array{Float64, 2}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "attempts": 0, + "collapsed": false, + "max_attempts": 1000, + "max_score": 2, + "precision": 3, + "question": "11b", + "status": 1 + }, + "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", + "status": 1 + }, + "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", + "status": 1 + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [ + "Html(\"\")" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "Homework.save_problemset()" + ] + }, + { + "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": [ + "
Namestotal1a1b1c1d2a2b3a3b45a5b5c5d5e5f5g5h6a6b6c6d7a7b89a9b9c10a10b10c11a11b11c11d
1MAX50.01.01.01.01.02.02.02.02.02.01.00.50.51.00.50.51.01.01.01.01.01.02.02.05.01.02.02.02.02.02.01.02.02.01.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/README.md b/README.md index 9aa21edd..66885746 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ 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-PS5.ipynb", "18.06-PS5.ipynb" )` +`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS6.ipynb", "18.06-PS6.ipynb" )` -## Instructions for Problem Set 5 (and so on) +## Instructions for Problem Set 6 (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-PS5.ipynb", "18.06-PS5.ipynb" )` +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-PS6.ipynb", "18.06-PS6.ipynb" )`
in a new cell and execute -4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 5 +4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 6 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 @@ -23,6 +23,6 @@ For those who don't read instructions:
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-PS5.ipynb", "18.06-PS5_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. +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-PS6.ipynb", "18.06-PS6_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 From e381910d0b4649ffb079e2f071ba11c62c020c39 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sun, 25 Oct 2015 23:31:43 +0530 Subject: [PATCH 70/77] fixes to question 5 --- 18.06-PS6.ipynb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/18.06-PS6.ipynb b/18.06-PS6.ipynb index 20e8f3c3..f1a512f2 100644 --- a/18.06-PS6.ipynb +++ b/18.06-PS6.ipynb @@ -1024,7 +1024,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "What is the eigenvector with eigenvalue $λ_2$?\n", + "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)" ] @@ -1069,8 +1069,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "5e) (0.25pts)\n", - "What is the eigenvector with eigenvalue $\\lambda_1$?\n", + "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)" ] @@ -1093,8 +1093,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "5f) (0.25pts)\n", - "What is the eigenvector with eigenvalue $\\lambda_2$?\n", + "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" ] From 68111322615b22055bd7274f24db16ca1d0d1c8a Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sun, 25 Oct 2015 23:46:13 +0530 Subject: [PATCH 71/77] Remove save_problemset --- 18.06-PS6.ipynb | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/18.06-PS6.ipynb b/18.06-PS6.ipynb index f1a512f2..5cacf1cf 100644 --- a/18.06-PS6.ipynb +++ b/18.06-PS6.ipynb @@ -2132,30 +2132,6 @@ "outputs": [], "source": [] }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/html": [ - "" - ], - "text/plain": [ - "Html(\"\")" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "Homework.save_problemset()" - ] - }, { "cell_type": "code", "execution_count": 11, From cf0e4cb46c9e86f55dbfa2d9263664463a89ebe0 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Mon, 2 Nov 2015 09:16:56 +0530 Subject: [PATCH 72/77] Remove status metadata, update problem 11 format --- 18.06-PS6.ipynb | 104 ++++++++++++++++-------------------------------- 1 file changed, 35 insertions(+), 69 deletions(-) diff --git a/18.06-PS6.ipynb b/18.06-PS6.ipynb index 5cacf1cf..bbdadb63 100644 --- a/18.06-PS6.ipynb +++ b/18.06-PS6.ipynb @@ -760,8 +760,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "1a", - "status": 1 + "question": "1a" }, "outputs": [], "source": [] @@ -781,8 +780,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "1b", - "status": 1 + "question": "1b" }, "outputs": [], "source": [] @@ -802,8 +800,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "1c", - "status": 1 + "question": "1c" }, "outputs": [], "source": [] @@ -823,8 +820,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "1d", - "status": 1 + "question": "1d" }, "outputs": [], "source": [] @@ -851,8 +847,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "2a", - "status": 1 + "question": "2a" }, "outputs": [], "source": [] @@ -872,8 +867,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "2b", - "status": 1 + "question": "2b" }, "outputs": [], "source": [] @@ -904,8 +898,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "3a", - "status": 1 + "question": "3a" }, "outputs": [], "source": [] @@ -929,8 +922,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "3b", - "status": 1 + "question": "3b" }, "outputs": [], "source": [] @@ -957,8 +949,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "4", - "status": 1 + "question": "4" }, "outputs": [], "source": [] @@ -990,8 +981,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "5a", - "status": 1 + "question": "5a" }, "outputs": [], "source": [] @@ -1014,8 +1004,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 0.5, - "question": "5b", - "status": 1 + "question": "5b" }, "outputs": [], "source": [] @@ -1037,8 +1026,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 0.5, - "question": "5c", - "status": 1 + "question": "5c" }, "outputs": [], "source": [] @@ -1059,8 +1047,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "5d", - "status": 1 + "question": "5d" }, "outputs": [], "source": [] @@ -1083,8 +1070,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 0.5, - "question": "5e", - "status": 1 + "question": "5e" }, "outputs": [], "source": [] @@ -1107,8 +1093,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 0.5, - "question": "5f", - "status": 1 + "question": "5f" }, "outputs": [], "source": [] @@ -1136,8 +1121,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "5g", - "status": 1 + "question": "5g" }, "outputs": [], "source": [] @@ -1164,8 +1148,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "5h", - "status": 1 + "question": "5h" }, "outputs": [], "source": [] @@ -1202,8 +1185,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "6a", - "status": 1 + "question": "6a" }, "outputs": [], "source": [] @@ -1231,8 +1213,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "6b", - "status": 1 + "question": "6b" }, "outputs": [], "source": [] @@ -1260,8 +1241,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "6c", - "status": 1 + "question": "6c" }, "outputs": [], "source": [] @@ -1289,8 +1269,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "6d", - "status": 1 + "question": "6d" }, "outputs": [], "source": [] @@ -1321,8 +1300,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "7a", - "status": 1 + "question": "7a" }, "outputs": [], "source": [] @@ -1344,8 +1322,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "7b", - "status": 1 + "question": "7b" }, "outputs": [], "source": [] @@ -1614,8 +1591,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 5, - "question": "8", - "status": 1 + "question": "8" }, "outputs": [], "source": [ @@ -1753,8 +1729,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 1, - "question": "9a", - "status": 1 + "question": "9a" }, "outputs": [], "source": [] @@ -1775,8 +1750,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "9b", - "status": 1 + "question": "9b" }, "outputs": [], "source": [] @@ -1796,8 +1770,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "9c", - "status": 1 + "question": "9c" }, "outputs": [], "source": [] @@ -1899,8 +1872,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "10a", - "status": 1 + "question": "10a" }, "outputs": [], "source": [] @@ -1922,8 +1894,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "10b", - "status": 1 + "question": "10b" }, "outputs": [], "source": [] @@ -1945,8 +1916,7 @@ "collapsed": false, "max_attempts": 1000, "max_score": 2, - "question": "10c", - "status": 1 + "question": "10c" }, "outputs": [], "source": [] @@ -2054,8 +2024,7 @@ "max_attempts": 1000, "max_score": 1, "precision": 3, - "question": "11a", - "status": 1 + "question": "11a" }, "outputs": [], "source": [] @@ -2066,7 +2035,7 @@ "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: Array{Float64, 2}" + "Format: a number" ] }, { @@ -2078,8 +2047,7 @@ "max_attempts": 1000, "max_score": 2, "precision": 3, - "question": "11b", - "status": 1 + "question": "11b" }, "outputs": [], "source": [] @@ -2102,8 +2070,7 @@ "max_attempts": 1000, "max_score": 2, "precision": 3, - "question": "11c", - "status": 1 + "question": "11c" }, "outputs": [], "source": [] @@ -2126,8 +2093,7 @@ "max_attempts": 1000, "max_score": 1, "precision": 3, - "question": "11d", - "status": 1 + "question": "11d" }, "outputs": [], "source": [] From 51cceede8bc46c7d3315d72851d6020b9d38689e Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 6 Nov 2015 10:07:11 +0530 Subject: [PATCH 73/77] PS7 --- 18.06-PS7.ipynb | 1306 +++++++++++++++++++++++++++++++++++++++++++++++ README.md | 10 +- 2 files changed, 1311 insertions(+), 5 deletions(-) create mode 100644 18.06-PS7.ipynb 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": [ + "
Namestotal1a1b2a2b3a3b3c4a4b4c4d4e4f5a5b5c67a7b7c8910a10b
1MAX50.01.02.01.01.02.02.01.01.01.01.01.01.01.01.01.01.03.01.01.01.08.08.05.04.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": [ + "
Namestotal1a1b2a2b3a3b3c4a4b4c4d4e4f5a5b5c67a7b7c8910a10b
1MAX50.01.02.01.01.02.02.01.01.01.01.01.01.01.01.01.01.03.01.01.01.08.08.05.04.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/README.md b/README.md index 66885746..e5db0c5a 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ 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-PS6.ipynb", "18.06-PS6.ipynb" )` +`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS7.ipynb", "18.06-PS7.ipynb" )` -## Instructions for Problem Set 6 (and so on) +## Instructions for Problem Set 7 (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-PS6.ipynb", "18.06-PS6.ipynb" )` +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-PS7.ipynb", "18.06-PS7.ipynb" )`
in a new cell and execute -4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 6 +4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 7 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 @@ -23,6 +23,6 @@ For those who don't read instructions:
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-PS6.ipynb", "18.06-PS6_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. +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-PS7.ipynb", "18.06-PS7_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 From 3924f4743edfe3cc9c3e53f7c9e55517b2828155 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 13 Nov 2015 23:26:35 +0530 Subject: [PATCH 74/77] PS8 --- 18.06-PS8.ipynb | 1713 +++++++++++++++++++++++++++++++++++++++++++++++ README.md | 10 +- 2 files changed, 1718 insertions(+), 5 deletions(-) create mode 100644 18.06-PS8.ipynb diff --git a/18.06-PS8.ipynb b/18.06-PS8.ipynb new file mode 100644 index 00000000..cbcee4b3 --- /dev/null +++ b/18.06-PS8.ipynb @@ -0,0 +1,1713 @@ +{ + "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": [] + }, + { + "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": [ + "
Namestotal1a1b2a2b3a3b3c3d3e456a6b6c7a7b7c7d8a8b8c8d9a9b10a10b10c10d
1MAX45.02.01.01.01.01.01.01.01.01.03.02.02.02.02.00.250.250.250.251.01.01.01.04.05.02.02.02.04.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/README.md b/README.md index e5db0c5a..ec91b7cf 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ 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-PS7.ipynb", "18.06-PS7.ipynb" )` +`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS8.ipynb", "18.06-PS8.ipynb" )` -## Instructions for Problem Set 7 (and so on) +## Instructions for Problem Set 8 (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-PS7.ipynb", "18.06-PS7.ipynb" )` +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-PS8.ipynb", "18.06-PS8.ipynb" )`
in a new cell and execute -4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 7 +4. Go back to the notebooks tab (or hit the IJ icon), refresh, and enjoy pset 8 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 @@ -23,6 +23,6 @@ For those who don't read instructions:
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-PS7.ipynb", "18.06-PS7_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. +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-PS8.ipynb", "18.06-PS8_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 From 7045d4c769daffef09872fefa35c35c46d682961 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Sun, 15 Nov 2015 07:43:54 +0530 Subject: [PATCH 75/77] fix 9b --- 18.06-PS8.ipynb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/18.06-PS8.ipynb b/18.06-PS8.ipynb index cbcee4b3..34a83c82 100644 --- a/18.06-PS8.ipynb +++ b/18.06-PS8.ipynb @@ -1308,7 +1308,9 @@ "question": "9a" }, "outputs": [], - "source": [] + "source": [ + "simplify(inv(A)[1,3])" + ] }, { "cell_type": "markdown", From 085df04a539195f44e764b822b1d500858a008c6 Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Mon, 16 Nov 2015 13:47:52 +0530 Subject: [PATCH 76/77] update problem 6a format --- 18.06-PS8.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/18.06-PS8.ipynb b/18.06-PS8.ipynb index 34a83c82..4e0e382a 100644 --- a/18.06-PS8.ipynb +++ b/18.06-PS8.ipynb @@ -961,7 +961,7 @@ "\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]]" + "Format: M=[[a b],[c d]]" ] }, { From 1e8d5d5d9654f504b62b32bd9ac75c6108c3780c Mon Sep 17 00:00:00 2001 From: Shashi Gowda Date: Fri, 20 Nov 2015 19:57:59 +0530 Subject: [PATCH 77/77] PS9 --- 18.06-PS9.ipynb | 1373 +++++++++++++++++++++++++++++++++++++++++++++++ README.md | 10 +- 2 files changed, 1378 insertions(+), 5 deletions(-) create mode 100644 18.06-PS9.ipynb 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": [ + "
Namestotal1a1b1c234a4b4c5a5b6a7a7b7c
1MAX40.02.02.02.02.05.01.01.01.02.02.02.06.06.06.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 ec91b7cf..8e79c8d1 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,17 @@ 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-PS8.ipynb", "18.06-PS8.ipynb" )` +`download("https://raw.githubusercontent.com/alanedelman/18.06_Spring_2015/master/18.06-PS9.ipynb", "18.06-PS9.ipynb" )` -## Instructions for Problem Set 8 (and so on) +## 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-PS8.ipynb", "18.06-PS8.ipynb" )` +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 8 +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 @@ -23,6 +23,6 @@ For those who don't read instructions:
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-PS8.ipynb", "18.06-PS8_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. +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