From d34ee7155856ed1f53de836cfd03f1c9a9763bf6 Mon Sep 17 00:00:00 2001 From: "Ryan C. Cooper" Date: Mon, 27 Feb 2017 11:51:22 -0500 Subject: [PATCH] updated lecture notes --- .../lecture_11-checkpoint.ipynb | 699 ++++++++ lecture_11/det_A.png | Bin 0 -> 20397 bytes lecture_11/lecture_11.ipynb | 163 +- lecture_11/midterm_date.png | Bin 0 -> 26061 bytes lecture_11/octave-workspace | Bin 178581 -> 0 bytes .../lecture_13-checkpoint.ipynb | 737 +++++++++ lecture_13/lecture_13.ipynb | 1401 +++++++++++++++++ lecture_13/octave-workspace | 0 8 files changed, 2955 insertions(+), 45 deletions(-) create mode 100644 lecture_11/.ipynb_checkpoints/lecture_11-checkpoint.ipynb create mode 100644 lecture_11/det_A.png create mode 100644 lecture_11/midterm_date.png create mode 100644 lecture_13/.ipynb_checkpoints/lecture_13-checkpoint.ipynb create mode 100644 lecture_13/lecture_13.ipynb create mode 100644 lecture_13/octave-workspace diff --git a/lecture_11/.ipynb_checkpoints/lecture_11-checkpoint.ipynb b/lecture_11/.ipynb_checkpoints/lecture_11-checkpoint.ipynb new file mode 100644 index 0000000..e2aa425 --- /dev/null +++ b/lecture_11/.ipynb_checkpoints/lecture_11-checkpoint.ipynb @@ -0,0 +1,699 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What is the determinant of A?\n", + "\n", + "$A=\\left[ \\begin{array}{ccc}\n", + "10 & 2 & 1 \\\\\n", + "0 & 1 & 1 \\\\\n", + "0 & 0 & 10\\end{array} \\right]$\n", + "\n", + "![responses to determinant of A](det_A.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LU Decomposition\n", + "### efficient storage of matrices for solutions\n", + "\n", + "Considering the same solution set:\n", + "\n", + "$y=Ax$\n", + "\n", + "Assume that we can perform Gauss elimination and achieve this formula:\n", + "\n", + "$Ux=d$ \n", + "\n", + "Where, $U$ is an upper triangular matrix that we derived from Gauss elimination and $d$ is the set of dependent variables after Gauss elimination. \n", + "\n", + "Assume there is a lower triangular matrix, $L$, with ones on the diagonal and same dimensions of $U$ and the following is true:\n", + "\n", + "$L(Ux-d)=Ax-y=0$\n", + "\n", + "Now, $Ax=LUx$, so $A=LU$, and $y=Ld$.\n", + "\n", + "$2x_{1}+x_{2}=1$\n", + "\n", + "$x_{1}+3x_{2}=1$\n", + "\n", + "\n", + "$\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "1 & 3 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]=\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "1\\end{array}\\right]$\n", + "\n", + "f21=0.5\n", + "\n", + "A(2,1)=1-1 = 0 \n", + "\n", + "A(2,2)=3-0.5=2.5\n", + "\n", + "y(2)=1-0.5=0.5\n", + "\n", + "$L(Ux-d)=\n", + "\\left[ \\begin{array}{cc}\n", + "1 & 0 \\\\\n", + "0.5 & 1 \\end{array} \\right]\n", + "\\left(\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "0 & 2.5 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]-\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "0.5\\end{array}\\right]\\right)=0$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000\n", + " 0.50000 1.00000\n", + "\n", + "U =\n", + "\n", + " 2.00000 1.00000\n", + " 0.00000 2.50000\n", + "\n", + "ans =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "d =\n", + "\n", + " 1.00000\n", + " 0.50000\n", + "\n", + "y =\n", + "\n", + " 1\n", + " 1\n", + "\n" + ] + } + ], + "source": [ + "A=[2,1;1,3]\n", + "L=[1,0;0.5,1]\n", + "U=[2,1;0,2.5]\n", + "L*U\n", + "\n", + "d=[1;0.5]\n", + "y=L*d" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pivoting for LU factorization\n", + "\n", + "LU factorization uses the same method as Gauss elimination so it is also necessary to perform partial pivoting when creating the lower and upper triangular matrices. \n", + "\n", + "Matlab and Octave use pivoting in the command \n", + "\n", + "`[L,U,P]=lu(A)`\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'lu' is a built-in function from the file libinterp/corefcn/lu.cc\n", + "\n", + " -- Built-in Function: [L, U] = lu (A)\n", + " -- Built-in Function: [L, U, P] = lu (A)\n", + " -- Built-in Function: [L, U, P, Q] = lu (S)\n", + " -- Built-in Function: [L, U, P, Q, R] = lu (S)\n", + " -- Built-in Function: [...] = lu (S, THRES)\n", + " -- Built-in Function: Y = lu (...)\n", + " -- Built-in Function: [...] = lu (..., \"vector\")\n", + " Compute the LU decomposition of A.\n", + "\n", + " If A is full subroutines from LAPACK are used and if A is sparse\n", + " then UMFPACK is used.\n", + "\n", + " The result is returned in a permuted form, according to the\n", + " optional return value P. For example, given the matrix 'a = [1, 2;\n", + " 3, 4]',\n", + "\n", + " [l, u, p] = lu (A)\n", + "\n", + " returns\n", + "\n", + " l =\n", + "\n", + " 1.00000 0.00000\n", + " 0.33333 1.00000\n", + "\n", + " u =\n", + "\n", + " 3.00000 4.00000\n", + " 0.00000 0.66667\n", + "\n", + " p =\n", + "\n", + " 0 1\n", + " 1 0\n", + "\n", + " The matrix is not required to be square.\n", + "\n", + " When called with two or three output arguments and a spare input\n", + " matrix, 'lu' does not attempt to perform sparsity preserving column\n", + " permutations. Called with a fourth output argument, the sparsity\n", + " preserving column transformation Q is returned, such that 'P * A *\n", + " Q = L * U'.\n", + "\n", + " Called with a fifth output argument and a sparse input matrix, 'lu'\n", + " attempts to use a scaling factor R on the input matrix such that 'P\n", + " * (R \\ A) * Q = L * U'. This typically leads to a sparser and more\n", + " stable factorization.\n", + "\n", + " An additional input argument THRES, that defines the pivoting\n", + " threshold can be given. THRES can be a scalar, in which case it\n", + " defines the UMFPACK pivoting tolerance for both symmetric and\n", + " unsymmetric cases. If THRES is a 2-element vector, then the first\n", + " element defines the pivoting tolerance for the unsymmetric UMFPACK\n", + " pivoting strategy and the second for the symmetric strategy. By\n", + " default, the values defined by 'spparms' are used ([0.1, 0.001]).\n", + "\n", + " Given the string argument \"vector\", 'lu' returns the values of P\n", + " and Q as vector values, such that for full matrix, 'A (P,:) = L *\n", + " U', and 'R(P,:) * A (:, Q) = L * U'.\n", + "\n", + " With two output arguments, returns the permuted forms of the upper\n", + " and lower triangular matrices, such that 'A = L * U'. With one\n", + " output argument Y, then the matrix returned by the LAPACK routines\n", + " is returned. If the input matrix is sparse then the matrix L is\n", + " embedded into U to give a return value similar to the full case.\n", + " For both full and sparse matrices, 'lu' loses the permutation\n", + " information.\n", + "\n", + " See also: luupdate, ilu, chol, hess, qr, qz, schur, svd.\n", + "\n", + "Additional help for built-in functions and operators is\n", + "available in the online version of the manual. Use the command\n", + "'doc ' to search the manual index.\n", + "\n", + "Help and information about Octave is also available on the WWW\n", + "at http://www.octave.org and via the help@octave.org\n", + "mailing list.\n" + ] + } + ], + "source": [ + "help lu" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t5e-05\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0001\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.00015\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0002\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.00025\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0003\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t100\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tLU decomp\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tLU decomp\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tOctave \\\\\n", + "\n", + "\t\n", + "\t\tOctave \\\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "% time LU solution vs backslash\n", + "t_lu=zeros(100,1);\n", + "t_bs=zeros(100,1);\n", + "for N=1:100\n", + " A=rand(N,N);\n", + " y=rand(N,1);\n", + " [L,U,P]=lu(A);\n", + "\n", + " tic; d=L\\y; x=U\\d; t_lu(N)=toc;\n", + "\n", + " tic; x=A\\y; t_bs(N)=toc;\n", + "end\n", + "plot([1:100],t_lu,[1:100],t_bs) \n", + "legend('LU decomp','Octave \\\\')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Consider the problem again from the intro to Linear Algebra, 4 masses are connected in series to 4 springs with K=10 N/m. What are the final positions of the masses? \n", + "\n", + "![Springs-masses](../lecture_09/mass_springs.svg)\n", + "\n", + "The masses haves the following amounts, 1, 2, 3, and 4 kg for masses 1-4. Using a FBD for each mass:\n", + "\n", + "$m_{1}g+k(x_{2}-x_{1})-kx_{1}=0$\n", + "\n", + "$m_{2}g+k(x_{3}-x_{2})-k(x_{2}-x_{1})=0$\n", + "\n", + "$m_{3}g+k(x_{4}-x_{3})-k(x_{3}-x_{2})=0$\n", + "\n", + "$m_{4}g-k(x_{4}-x_{3})=0$\n", + "\n", + "in matrix form:\n", + "\n", + "$\\left[ \\begin{array}{cccc}\n", + "2k & -k & 0 & 0 \\\\\n", + "-k & 2k & -k & 0 \\\\\n", + "0 & -k & 2k & -k \\\\\n", + "0 & 0 & -k & k \\end{array} \\right]\n", + "\\left[ \\begin{array}{c}\n", + "x_{1} \\\\\n", + "x_{2} \\\\\n", + "x_{3} \\\\\n", + "x_{4} \\end{array} \\right]=\n", + "\\left[ \\begin{array}{c}\n", + "m_{1}g \\\\\n", + "m_{2}g \\\\\n", + "m_{3}g \\\\\n", + "m_{4}g \\end{array} \\right]$" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K =\n", + "\n", + " 20 -10 0 0\n", + " -10 20 -10 0\n", + " 0 -10 20 -10\n", + " 0 0 -10 10\n", + "\n", + "y =\n", + "\n", + " 9.8100\n", + " 19.6200\n", + " 29.4300\n", + " 39.2400\n", + "\n" + ] + } + ], + "source": [ + "k=10; % N/m\n", + "m1=1; % kg\n", + "m2=2;\n", + "m3=3;\n", + "m4=4;\n", + "g=9.81; % m/s^2\n", + "K=[2*k -k 0 0; -k 2*k -k 0; 0 -k 2*k -k; 0 0 -k k]\n", + "y=[m1*g;m2*g;m3*g;m4*g]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This matrix, K, is symmetric. \n", + "\n", + "`K(i,j)==K(j,i)`\n", + "\n", + "Now we can use,\n", + "\n", + "## Cholesky Factorization\n", + "\n", + "We can decompose the matrix, K into two matrices, $U$ and $U^{T}$, where\n", + "\n", + "$K=U^{T}U$\n", + "\n", + "each of the components of U can be calculated with the following equations:\n", + "\n", + "$u_{ii}=\\sqrt{a_{ii}-\\sum_{k=1}^{i-1}u_{ki}^{2}}$\n", + "\n", + "$u_{ij}=\\frac{a_{ij}-\\sum_{k=1}^{i-1}u_{ki}u_{kj}}{u_{ii}}$\n", + "\n", + "so for K" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K =\n", + "\n", + " 20 -10 0 0\n", + " -10 20 -10 0\n", + " 0 -10 20 -10\n", + " 0 0 -10 10\n", + "\n" + ] + } + ], + "source": [ + "K" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "u11 = 4.4721\n", + "u12 = -2.2361\n", + "u13 = 0\n", + "u14 = 0\n", + "u22 = 3.8730\n", + "u23 = -2.5820\n", + "u24 = 0\n", + "u33 = 3.6515\n", + "u34 = -2.7386\n", + "u44 = 1.5811\n", + "U =\n", + "\n", + " 4.47214 -2.23607 0.00000 0.00000\n", + " 0.00000 3.87298 -2.58199 0.00000\n", + " 0.00000 0.00000 3.65148 -2.73861\n", + " 0.00000 0.00000 0.00000 1.58114\n", + "\n" + ] + } + ], + "source": [ + "u11=sqrt(K(1,1))\n", + "u12=(K(1,2))/u11\n", + "u13=(K(1,3))/u11\n", + "u14=(K(1,4))/u11\n", + "u22=sqrt(K(2,2)-u12^2)\n", + "u23=(K(2,3)-u12*u13)/u22\n", + "u24=(K(2,4)-u12*u14)/u22\n", + "u33=sqrt(K(3,3)-u13^2-u23^2)\n", + "u34=(K(3,4)-u13*u14-u23*u24)/u33\n", + "u44=sqrt(K(4,4)-u14^2-u24^2-u34^2)\n", + "U=[u11,u12,u13,u14;0,u22,u23,u24;0,0,u33,u34;0,0,0,u44]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 20.00000 -10.00000 0.00000 0.00000\n", + " -10.00000 20.00000 -10.00000 0.00000\n", + " 0.00000 -10.00000 20.00000 -10.00000\n", + " 0.00000 0.00000 -10.00000 10.00000\n", + "\n" + ] + } + ], + "source": [ + "U'*U" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "average time spent for Cholesky factored solution = 1.623154e-05+/-1.166726e-05\n", + "average time spent for backslash solution = 1.675844e-05+/-1.187234e-05\n" + ] + } + ], + "source": [ + "% time solution for Cholesky vs backslash\n", + "t_chol=zeros(1000,1);\n", + "t_bs=zeros(1000,1);\n", + "for i=1:1000\n", + " tic; d=U'*y; x=U\\d; t_chol(i)=toc;\n", + " tic; x=K\\y; t_bs(i)=toc;\n", + "end\n", + "fprintf('average time spent for Cholesky factored solution = %e+/-%e',mean(t_chol),std(t_chol))\n", + "\n", + "fprintf('average time spent for backslash solution = %e+/-%e',mean(t_bs),std(t_bs))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_11/det_A.png b/lecture_11/det_A.png new file mode 100644 index 0000000000000000000000000000000000000000..50f6ac16d1f2fceee6f8b39a8f94e0f07f6fb92e GIT binary patch literal 20397 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 literal 0 HcmV?d00001 diff --git a/lecture_11/lecture_11.ipynb b/lecture_11/lecture_11.ipynb index c290a47..41f1870 100644 --- a/lecture_11/lecture_11.ipynb +++ b/lecture_11/lecture_11.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 18, + "execution_count": 1, "metadata": { "collapsed": true }, @@ -13,7 +13,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 2, "metadata": { "collapsed": true }, @@ -22,6 +22,51 @@ "setdefaults" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## My question from last class \n", + "\n", + "$A=\\left[ \\begin{array}{ccc}\n", + "10 & 2 & 1 \\\\\n", + "0 & 1 & 1 \\\\\n", + "0 & 0 & 10\\end{array} \\right]$\n", + "\n", + "![responses to determinant of A](det_A.png)\n", + "\n", + "## Your questions from last class\n", + "\n", + "1. Need more linear algebra review\n", + " \n", + " -We will keep doing Linear Algebra, try the practice problems in 'linear_algebra'\n", + "\n", + "2. How do I do HW3? \n", + " \n", + " -demo today\n", + "\n", + "3. For hw4 is the spring constant (K) suppose to be given? \n", + " \n", + " -yes, its 30 N/m\n", + " \n", + "4. Deapool or Joker?\n", + "\n", + "\n", + "## Midterm preference\n", + "\n", + "![responses to midterm date](midterm_date.png)\n", + "\n", + "### Midterm Questions\n", + "\n", + "1. Notes allowed\n", + " \n", + " -no\n", + "\n", + "2. Will there be a review/study sheet\n", + "\n", + " -yes" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -137,6 +182,35 @@ "y=L*d" ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans = 5.0000\n", + "ans = 1\n", + "ans = 5\n", + "ans = 5\n", + "ans = 5.0000\n" + ] + } + ], + "source": [ + "% what is the determinant of L, U and A?\n", + "\n", + "det(A)\n", + "det(L)\n", + "det(U)\n", + "det(L)*det(U)\n", + "det(L*U)" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -250,7 +324,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 9, "metadata": { "collapsed": false }, @@ -297,68 +371,58 @@ "\n", "\n", "\t\n", - "\t\t\n", + "\t\t\n", "\t\n", "\n", "\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t0\n", "\t\n", "\n", "\n", - "\t\t\n", - "\t\t5e-05\n", + "\t\t\n", + "\t\t0.0005\n", "\t\n", "\n", "\n", - "\t\t\n", - "\t\t0.0001\n", + "\t\t\n", + "\t\t0.001\n", "\t\n", "\n", "\n", - "\t\t\n", - "\t\t0.00015\n", + "\t\t\n", + "\t\t0.0015\n", "\t\n", "\n", "\n", - "\t\t\n", - "\t\t0.0002\n", + "\t\t\n", + "\t\t0.002\n", "\t\n", "\n", "\n", - "\t\t\n", - "\t\t0.00025\n", - "\t\n", - "\n", - "\n", - "\t\t\n", - "\t\t0.0003\n", - "\t\n", - "\n", - "\n", - "\t\t\n", + "\t\t\n", "\t\t0\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t20\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t40\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t60\n", "\t\n", "\n", "\n", - "\t\t\n", + "\t\t\n", "\t\t80\n", "\t\n", "\n", @@ -370,7 +434,7 @@ "\n", "\n", "\n", - "\t\n", + "\t\n", "\n", "\n", "\n", @@ -386,7 +450,7 @@ "\t\n", "\n", "\n", - "\t\n", + "\t\n", "\t\n", "\tOctave \\\\\n", "\n", @@ -395,7 +459,7 @@ "\t\n", "\n", "\n", - "\t\n", + "\t\n", "\t\n", "\n", "\n", @@ -425,9 +489,9 @@ " y=rand(N,1);\n", " [L,U,P]=lu(A);\n", "\n", - " tic; d=L\\y; x=U\\d; t_lu(N)=toc;\n", + " tic; d=inv(L)*y; x=inv(U)*d; t_lu(N)=toc;\n", "\n", - " tic; x=A\\y; t_bs(N)=toc;\n", + " tic; x=inv(A)*y; t_bs(N)=toc;\n", "end\n", "plot([1:100],t_lu,[1:100],t_bs) \n", "legend('LU decomp','Octave \\\\')" @@ -474,7 +538,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 10, "metadata": { "collapsed": false }, @@ -538,7 +602,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 11, "metadata": { "collapsed": false }, @@ -563,7 +627,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 12, "metadata": { "collapsed": false }, @@ -608,7 +672,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 17, "metadata": { "collapsed": false }, @@ -619,21 +683,21 @@ "text": [ "ans =\n", "\n", - " 20.00000 -10.00000 0.00000 0.00000\n", - " -10.00000 20.00000 -10.00000 0.00000\n", - " 0.00000 -10.00000 20.00000 -10.00000\n", - " 0.00000 0.00000 -10.00000 10.00000\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", "\n" ] } ], "source": [ - "U'*U" + "(U'*U)'==U'*U" ] }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 18, "metadata": { "collapsed": false }, @@ -642,8 +706,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "average time spent for Cholesky factored solution = 1.623154e-05+/-1.166726e-05\n", - "average time spent for backslash solution = 1.675844e-05+/-1.187234e-05\n" + "average time spent for Cholesky factored solution = 1.465964e-05+/-9.806001e-06\n", + "average time spent for backslash solution = 1.555967e-05+/-1.048561e-05\n" ] } ], @@ -659,6 +723,15 @@ "\n", "fprintf('average time spent for backslash solution = %e+/-%e',mean(t_bs),std(t_bs))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/lecture_11/midterm_date.png b/lecture_11/midterm_date.png new file mode 100644 index 0000000000000000000000000000000000000000..4dd066395aba013c45d83b088fc22f810120c608 GIT binary patch literal 26061 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 literal 0 HcmV?d00001 diff --git a/lecture_11/octave-workspace b/lecture_11/octave-workspace index 2e1bdfa519a4a95dfba5dc55851ecd65f7eb66fd..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 GIT binary patch literal 0 HcmV?d00001 literal 178581 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 Jy{xSG{{VxH-Q)lO diff --git a/lecture_13/.ipynb_checkpoints/lecture_13-checkpoint.ipynb b/lecture_13/.ipynb_checkpoints/lecture_13-checkpoint.ipynb new file mode 100644 index 0000000..6a5dc68 --- /dev/null +++ b/lecture_13/.ipynb_checkpoints/lecture_13-checkpoint.ipynb @@ -0,0 +1,737 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## My question from last class \n", + "\n", + "\n", + "## Your questions from last class\n", + "\n", + "1. Need more linear algebra review\n", + " \n", + " -We will keep doing Linear Algebra, try the practice problems in 'linear_algebra'\n", + "\n", + "2. How do I do HW3? \n", + " \n", + " -demo today\n", + "\n", + "3. For hw4 is the spring constant (K) suppose to be given? \n", + " \n", + " -yes, its 30 N/m\n", + " \n", + "4. Deapool or Joker?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# LU Decomposition\n", + "### efficient storage of matrices for solutions\n", + "\n", + "Considering the same solution set:\n", + "\n", + "$y=Ax$\n", + "\n", + "Assume that we can perform Gauss elimination and achieve this formula:\n", + "\n", + "$Ux=d$ \n", + "\n", + "Where, $U$ is an upper triangular matrix that we derived from Gauss elimination and $d$ is the set of dependent variables after Gauss elimination. \n", + "\n", + "Assume there is a lower triangular matrix, $L$, with ones on the diagonal and same dimensions of $U$ and the following is true:\n", + "\n", + "$L(Ux-d)=Ax-y=0$\n", + "\n", + "Now, $Ax=LUx$, so $A=LU$, and $y=Ld$.\n", + "\n", + "$2x_{1}+x_{2}=1$\n", + "\n", + "$x_{1}+3x_{2}=1$\n", + "\n", + "\n", + "$\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "1 & 3 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]=\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "1\\end{array}\\right]$\n", + "\n", + "f21=0.5\n", + "\n", + "A(2,1)=1-1 = 0 \n", + "\n", + "A(2,2)=3-0.5=2.5\n", + "\n", + "y(2)=1-0.5=0.5\n", + "\n", + "$L(Ux-d)=\n", + "\\left[ \\begin{array}{cc}\n", + "1 & 0 \\\\\n", + "0.5 & 1 \\end{array} \\right]\n", + "\\left(\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "0 & 2.5 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]-\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "0.5\\end{array}\\right]\\right)=0$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000\n", + " 0.50000 1.00000\n", + "\n", + "U =\n", + "\n", + " 2.00000 1.00000\n", + " 0.00000 2.50000\n", + "\n", + "ans =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "d =\n", + "\n", + " 1.00000\n", + " 0.50000\n", + "\n", + "y =\n", + "\n", + " 1\n", + " 1\n", + "\n" + ] + } + ], + "source": [ + "A=[2,1;1,3]\n", + "L=[1,0;0.5,1]\n", + "U=[2,1;0,2.5]\n", + "L*U\n", + "\n", + "d=[1;0.5]\n", + "y=L*d" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans = 5.0000\n", + "ans = 1\n", + "ans = 5\n", + "ans = 5\n", + "ans = 5.0000\n" + ] + } + ], + "source": [ + "% what is the determinant of L, U and A?\n", + "\n", + "det(A)\n", + "det(L)\n", + "det(U)\n", + "det(L)*det(U)\n", + "det(L*U)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pivoting for LU factorization\n", + "\n", + "LU factorization uses the same method as Gauss elimination so it is also necessary to perform partial pivoting when creating the lower and upper triangular matrices. \n", + "\n", + "Matlab and Octave use pivoting in the command \n", + "\n", + "`[L,U,P]=lu(A)`\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'lu' is a built-in function from the file libinterp/corefcn/lu.cc\n", + "\n", + " -- Built-in Function: [L, U] = lu (A)\n", + " -- Built-in Function: [L, U, P] = lu (A)\n", + " -- Built-in Function: [L, U, P, Q] = lu (S)\n", + " -- Built-in Function: [L, U, P, Q, R] = lu (S)\n", + " -- Built-in Function: [...] = lu (S, THRES)\n", + " -- Built-in Function: Y = lu (...)\n", + " -- Built-in Function: [...] = lu (..., \"vector\")\n", + " Compute the LU decomposition of A.\n", + "\n", + " If A is full subroutines from LAPACK are used and if A is sparse\n", + " then UMFPACK is used.\n", + "\n", + " The result is returned in a permuted form, according to the\n", + " optional return value P. For example, given the matrix 'a = [1, 2;\n", + " 3, 4]',\n", + "\n", + " [l, u, p] = lu (A)\n", + "\n", + " returns\n", + "\n", + " l =\n", + "\n", + " 1.00000 0.00000\n", + " 0.33333 1.00000\n", + "\n", + " u =\n", + "\n", + " 3.00000 4.00000\n", + " 0.00000 0.66667\n", + "\n", + " p =\n", + "\n", + " 0 1\n", + " 1 0\n", + "\n", + " The matrix is not required to be square.\n", + "\n", + " When called with two or three output arguments and a spare input\n", + " matrix, 'lu' does not attempt to perform sparsity preserving column\n", + " permutations. Called with a fourth output argument, the sparsity\n", + " preserving column transformation Q is returned, such that 'P * A *\n", + " Q = L * U'.\n", + "\n", + " Called with a fifth output argument and a sparse input matrix, 'lu'\n", + " attempts to use a scaling factor R on the input matrix such that 'P\n", + " * (R \\ A) * Q = L * U'. This typically leads to a sparser and more\n", + " stable factorization.\n", + "\n", + " An additional input argument THRES, that defines the pivoting\n", + " threshold can be given. THRES can be a scalar, in which case it\n", + " defines the UMFPACK pivoting tolerance for both symmetric and\n", + " unsymmetric cases. If THRES is a 2-element vector, then the first\n", + " element defines the pivoting tolerance for the unsymmetric UMFPACK\n", + " pivoting strategy and the second for the symmetric strategy. By\n", + " default, the values defined by 'spparms' are used ([0.1, 0.001]).\n", + "\n", + " Given the string argument \"vector\", 'lu' returns the values of P\n", + " and Q as vector values, such that for full matrix, 'A (P,:) = L *\n", + " U', and 'R(P,:) * A (:, Q) = L * U'.\n", + "\n", + " With two output arguments, returns the permuted forms of the upper\n", + " and lower triangular matrices, such that 'A = L * U'. With one\n", + " output argument Y, then the matrix returned by the LAPACK routines\n", + " is returned. If the input matrix is sparse then the matrix L is\n", + " embedded into U to give a return value similar to the full case.\n", + " For both full and sparse matrices, 'lu' loses the permutation\n", + " information.\n", + "\n", + " See also: luupdate, ilu, chol, hess, qr, qz, schur, svd.\n", + "\n", + "Additional help for built-in functions and operators is\n", + "available in the online version of the manual. Use the command\n", + "'doc ' to search the manual index.\n", + "\n", + "Help and information about Octave is also available on the WWW\n", + "at http://www.octave.org and via the help@octave.org\n", + "mailing list.\n" + ] + } + ], + "source": [ + "help lu" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0005\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.001\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0015\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.002\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t100\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tLU decomp\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tLU decomp\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tOctave \\\\\n", + "\n", + "\t\n", + "\t\tOctave \\\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "% time LU solution vs backslash\n", + "t_lu=zeros(100,1);\n", + "t_bs=zeros(100,1);\n", + "for N=1:100\n", + " A=rand(N,N);\n", + " y=rand(N,1);\n", + " [L,U,P]=lu(A);\n", + "\n", + " tic; d=inv(L)*y; x=inv(U)*d; t_lu(N)=toc;\n", + "\n", + " tic; x=inv(A)*y; t_bs(N)=toc;\n", + "end\n", + "plot([1:100],t_lu,[1:100],t_bs) \n", + "legend('LU decomp','Octave \\\\')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Consider the problem again from the intro to Linear Algebra, 4 masses are connected in series to 4 springs with K=10 N/m. What are the final positions of the masses? \n", + "\n", + "![Springs-masses](../lecture_09/mass_springs.svg)\n", + "\n", + "The masses haves the following amounts, 1, 2, 3, and 4 kg for masses 1-4. Using a FBD for each mass:\n", + "\n", + "$m_{1}g+k(x_{2}-x_{1})-kx_{1}=0$\n", + "\n", + "$m_{2}g+k(x_{3}-x_{2})-k(x_{2}-x_{1})=0$\n", + "\n", + "$m_{3}g+k(x_{4}-x_{3})-k(x_{3}-x_{2})=0$\n", + "\n", + "$m_{4}g-k(x_{4}-x_{3})=0$\n", + "\n", + "in matrix form:\n", + "\n", + "$\\left[ \\begin{array}{cccc}\n", + "2k & -k & 0 & 0 \\\\\n", + "-k & 2k & -k & 0 \\\\\n", + "0 & -k & 2k & -k \\\\\n", + "0 & 0 & -k & k \\end{array} \\right]\n", + "\\left[ \\begin{array}{c}\n", + "x_{1} \\\\\n", + "x_{2} \\\\\n", + "x_{3} \\\\\n", + "x_{4} \\end{array} \\right]=\n", + "\\left[ \\begin{array}{c}\n", + "m_{1}g \\\\\n", + "m_{2}g \\\\\n", + "m_{3}g \\\\\n", + "m_{4}g \\end{array} \\right]$" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K =\n", + "\n", + " 20 -10 0 0\n", + " -10 20 -10 0\n", + " 0 -10 20 -10\n", + " 0 0 -10 10\n", + "\n", + "y =\n", + "\n", + " 9.8100\n", + " 19.6200\n", + " 29.4300\n", + " 39.2400\n", + "\n" + ] + } + ], + "source": [ + "k=10; % N/m\n", + "m1=1; % kg\n", + "m2=2;\n", + "m3=3;\n", + "m4=4;\n", + "g=9.81; % m/s^2\n", + "K=[2*k -k 0 0; -k 2*k -k 0; 0 -k 2*k -k; 0 0 -k k]\n", + "y=[m1*g;m2*g;m3*g;m4*g]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This matrix, K, is symmetric. \n", + "\n", + "`K(i,j)==K(j,i)`\n", + "\n", + "Now we can use,\n", + "\n", + "## Cholesky Factorization\n", + "\n", + "We can decompose the matrix, K into two matrices, $U$ and $U^{T}$, where\n", + "\n", + "$K=U^{T}U$\n", + "\n", + "each of the components of U can be calculated with the following equations:\n", + "\n", + "$u_{ii}=\\sqrt{a_{ii}-\\sum_{k=1}^{i-1}u_{ki}^{2}}$\n", + "\n", + "$u_{ij}=\\frac{a_{ij}-\\sum_{k=1}^{i-1}u_{ki}u_{kj}}{u_{ii}}$\n", + "\n", + "so for K" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K =\n", + "\n", + " 20 -10 0 0\n", + " -10 20 -10 0\n", + " 0 -10 20 -10\n", + " 0 0 -10 10\n", + "\n" + ] + } + ], + "source": [ + "K" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "u11 = 4.4721\n", + "u12 = -2.2361\n", + "u13 = 0\n", + "u14 = 0\n", + "u22 = 3.8730\n", + "u23 = -2.5820\n", + "u24 = 0\n", + "u33 = 3.6515\n", + "u34 = -2.7386\n", + "u44 = 1.5811\n", + "U =\n", + "\n", + " 4.47214 -2.23607 0.00000 0.00000\n", + " 0.00000 3.87298 -2.58199 0.00000\n", + " 0.00000 0.00000 3.65148 -2.73861\n", + " 0.00000 0.00000 0.00000 1.58114\n", + "\n" + ] + } + ], + "source": [ + "u11=sqrt(K(1,1))\n", + "u12=(K(1,2))/u11\n", + "u13=(K(1,3))/u11\n", + "u14=(K(1,4))/u11\n", + "u22=sqrt(K(2,2)-u12^2)\n", + "u23=(K(2,3)-u12*u13)/u22\n", + "u24=(K(2,4)-u12*u14)/u22\n", + "u33=sqrt(K(3,3)-u13^2-u23^2)\n", + "u34=(K(3,4)-u13*u14-u23*u24)/u33\n", + "u44=sqrt(K(4,4)-u14^2-u24^2-u34^2)\n", + "U=[u11,u12,u13,u14;0,u22,u23,u24;0,0,u33,u34;0,0,0,u44]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + "\n" + ] + } + ], + "source": [ + "(U'*U)'==U'*U" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "average time spent for Cholesky factored solution = 1.465964e-05+/-9.806001e-06\n", + "average time spent for backslash solution = 1.555967e-05+/-1.048561e-05\n" + ] + } + ], + "source": [ + "% time solution for Cholesky vs backslash\n", + "t_chol=zeros(1000,1);\n", + "t_bs=zeros(1000,1);\n", + "for i=1:1000\n", + " tic; d=U'*y; x=U\\d; t_chol(i)=toc;\n", + " tic; x=K\\y; t_bs(i)=toc;\n", + "end\n", + "fprintf('average time spent for Cholesky factored solution = %e+/-%e',mean(t_chol),std(t_chol))\n", + "\n", + "fprintf('average time spent for backslash solution = %e+/-%e',mean(t_bs),std(t_bs))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_13/lecture_13.ipynb b/lecture_13/lecture_13.ipynb new file mode 100644 index 0000000..c687623 --- /dev/null +++ b/lecture_13/lecture_13.ipynb @@ -0,0 +1,1401 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%plot --format svg" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "setdefaults" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## My question from last class \n", + "\n", + "\n", + "## Your questions from last class\n", + "\n", + "1. Need more linear algebra review\n", + " \n", + " -We will keep doing Linear Algebra, try the practice problems in 'linear_algebra'\n", + "\n", + "2. How do I do HW3? \n", + " \n", + " -demo today\n", + "\n", + "3. For hw4 is the spring constant (K) suppose to be given? \n", + " \n", + " -yes, its 30 N/m\n", + " \n", + "4. Deapool or Joker?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Matrix Inverse and Condition\n", + "\n", + "\n", + "Considering the same solution set:\n", + "\n", + "$y=Ax$\n", + "\n", + "If we know that $A^{-1}A=I$, then \n", + "\n", + "$A^{-1}y=A^{-1}Ax=x$\n", + "\n", + "so \n", + "\n", + "$x=A^{-1}y$\n", + "\n", + "Where, $A^{-1}$ is the inverse of matrix $A$.\n", + "\n", + "$2x_{1}+x_{2}=1$\n", + "\n", + "$x_{1}+3x_{2}=1$\n", + "\n", + "$Ax=y$\n", + "\n", + "$\\left[ \\begin{array}{cc}\n", + "2 & 1 \\\\\n", + "1 & 3 \\end{array} \\right]\n", + "\\left[\\begin{array}{c} \n", + "x_{1} \\\\ \n", + "x_{2} \\end{array}\\right]=\n", + "\\left[\\begin{array}{c} \n", + "1 \\\\\n", + "1\\end{array}\\right]$\n", + "\n", + "$A^{-1}=\\frac{1}{2*3-1*1}\\left[ \\begin{array}{cc}\n", + "3 & 1 \\\\\n", + "-1 & 2 \\end{array} \\right]=\n", + "\\left[ \\begin{array}{cc}\n", + "3/5 & -1/5 \\\\\n", + "-1/5 & 2/5 \\end{array} \\right]$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "invA =\n", + "\n", + " 0.60000 -0.20000\n", + " -0.20000 0.40000\n", + "\n", + "ans =\n", + "\n", + " 1.00000 0.00000\n", + " 0.00000 1.00000\n", + "\n", + "ans =\n", + "\n", + " 1.00000 0.00000\n", + " 0.00000 1.00000\n", + "\n" + ] + } + ], + "source": [ + "A=[2,1;1,3]\n", + "invA=1/5*[3,-1;-1,2]\n", + "\n", + "A*invA\n", + "invA*A" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "How did we know the inverse of A? \n", + "\n", + "for 2$\\times$2 matrices, it is always:\n", + "\n", + "$A=\\left[ \\begin{array}{cc}\n", + "A_{11} & A_{12} \\\\\n", + "A_{21} & A_{22} \\end{array} \\right]$\n", + "\n", + "$A^{-1}=\\frac{1}{det(A)}\\left[ \\begin{array}{cc}\n", + "A_{22} & -A_{12} \\\\\n", + "-A_{21} & A_{11} \\end{array} \\right]$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "$AA^{-1}=\\frac{1}{A_{11}A_{22}-A_{21}A_{12}}\\left[ \\begin{array}{cc}\n", + "A_{11}A_{22}-A_{21}A_{12} & -A_{11}A_{12}+A_{12}A_{11} \\\\\n", + "A_{21}A_{22}-A_{22}A_{21} & -A_{21}A_{12}+A_{22}A_{11} \\end{array} \\right]\n", + "=\\left[ \\begin{array}{cc}\n", + "1 & 0 \\\\\n", + "0 & 1 \\end{array} \\right]$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What about bigger matrices?\n", + "\n", + "We can use the LU-decomposition\n", + "\n", + "$A=LU$\n", + "\n", + "$A^{-1}=(LU)^{-1}=U^{-1}L^{-1}$\n", + "\n", + "if we divide $A^{-1}$ into n-column vectors, $a_{n}$, then\n", + "\n", + "$Aa_{1}=\\left[\\begin{array}{c} \n", + "1 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$Aa_{2}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "1 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$Aa_{n}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "1 \\end{array} \\right]$\n", + "\n", + "\n", + "Which we can solve for each $a_{n}$ with LU-decomposition, knowing the lower and upper triangular decompositions, then \n", + "\n", + "$A^{-1}=\\left[ \\begin{array}{cccc}\n", + "| & | & & | \\\\\n", + "a_{1} & a_{2} & \\cdots & a_{3} \\\\\n", + "| & | & & | \\end{array} \\right]$\n", + "\n", + "\n", + "$Ld_{1}=\\left[\\begin{array}{c} \n", + "1 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$;~Ua_{1}=d_{1}$\n", + "\n", + "$Ld_{2}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "1 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$;~Ua_{2}=d_{2}$\n", + "\n", + "$Ld_{n}=\\left[\\begin{array}{c} \n", + "0 \\\\ \n", + "1 \\\\ \n", + "\\vdots \\\\\n", + "n \\end{array} \\right]$\n", + "$;~Ua_{n}=d_{n}$\n", + "\n", + "Consider the following matrix:\n", + "\n", + "$A=\\left[ \\begin{array}{ccc}\n", + "2 & -1 & 0\\\\\n", + "-1 & 2 & -1\\\\\n", + "0 & -1 & 1 \\end{array} \\right]$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 -1 0\n", + " -1 2 -1\n", + " 0 -1 1\n", + "\n", + "U =\n", + "\n", + " 2.00000 -1.00000 0.00000\n", + " 0.00000 1.50000 -1.00000\n", + " 0.00000 -1.00000 1.00000\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " -0.50000 1.00000 0.00000\n", + " 0.00000 0.00000 1.00000\n", + "\n" + ] + } + ], + "source": [ + "A=[2,-1,0;-1,2,-1;0,-1,1]\n", + "U=A;\n", + "L=eye(3,3);\n", + "U(2,:)=U(2,:)-U(2,1)/U(1,1)*U(1,:)\n", + "L(2,1)=A(2,1)/A(1,1)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "L =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " -0.50000 1.00000 0.00000\n", + " 0.00000 -0.66667 1.00000\n", + "\n", + "U =\n", + "\n", + " 2.00000 -1.00000 0.00000\n", + " 0.00000 1.50000 -1.00000\n", + " 0.00000 0.00000 0.33333\n", + "\n" + ] + } + ], + "source": [ + "L(3,2)=U(3,2)/U(2,2)\n", + "U(3,:)=U(3,:)-U(3,2)/U(2,2)*U(2,:)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now solve for $d_1$ then $a_1$, $d_2$ then $a_2$, and $d_3$ then $a_{3}$\n", + "\n", + "$Ld_{1}=\\left[\\begin{array}{c} \n", + "1 \\\\ \n", + "0 \\\\ \n", + "\\vdots \\\\\n", + "0 \\end{array} \\right]$\n", + "$;~Ua_{1}=d_{1}$" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d1 =\n", + "\n", + " 1.00000\n", + " 0.50000\n", + " 0.33333\n", + "\n" + ] + } + ], + "source": [ + "d1=zeros(3,1);\n", + "d1(1)=1;\n", + "d1(2)=0-L(2,1)*d1(1);\n", + "d1(3)=0-L(3,1)*d1(1)-L(3,2)*d1(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a1 =\n", + "\n", + " 1.00000\n", + " 1.00000\n", + " 1.00000\n", + "\n" + ] + } + ], + "source": [ + "a1=zeros(3,1);\n", + "a1(3)=d1(3)/U(3,3);\n", + "a1(2)=1/U(2,2)*(d1(2)-U(2,3)*a1(3));\n", + "a1(1)=1/U(1,1)*(d1(1)-U(1,2)*a1(2)-U(1,3)*a1(3))" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d2 =\n", + "\n", + " 0.00000\n", + " 1.00000\n", + " 0.66667\n", + "\n" + ] + } + ], + "source": [ + "d2=zeros(3,1);\n", + "d2(1)=0;\n", + "d2(2)=1-L(2,1)*d2(1);\n", + "d2(3)=0-L(3,1)*d2(1)-L(3,2)*d2(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a2 =\n", + "\n", + " 1.0000\n", + " 2.0000\n", + " 2.0000\n", + "\n" + ] + } + ], + "source": [ + "a2=zeros(3,1);\n", + "a2(3)=d2(3)/U(3,3);\n", + "a2(2)=1/U(2,2)*(d2(2)-U(2,3)*a2(3));\n", + "a2(1)=1/U(1,1)*(d2(1)-U(1,2)*a2(2)-U(1,3)*a2(3))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "d3 =\n", + "\n", + " 0\n", + " 0\n", + " 1\n", + "\n" + ] + } + ], + "source": [ + "d3=zeros(3,1);\n", + "d3(1)=0;\n", + "d3(2)=0-L(2,1)*d3(1);\n", + "d3(3)=1-L(3,1)*d3(1)-L(3,2)*d3(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a3 =\n", + "\n", + " 1.00000\n", + " 2.00000\n", + " 3.00000\n", + "\n" + ] + } + ], + "source": [ + "a3=zeros(3,1);\n", + "a3(3)=d3(3)/U(3,3);\n", + "a3(2)=1/U(2,2)*(d3(2)-U(2,3)*a3(3));\n", + "a3(1)=1/U(1,1)*(d3(1)-U(1,2)*a3(2)-U(1,3)*a3(3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Final solution for $A^{-1}$ is $[a_{1}~a_{2}~a_{3}]$" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "invA =\n", + "\n", + " 1.00000 1.00000 1.00000\n", + " 1.00000 2.00000 2.00000\n", + " 1.00000 2.00000 3.00000\n", + "\n", + "ans =\n", + "\n", + " 1.00000 0.00000 0.00000\n", + " 0.00000 1.00000 -0.00000\n", + " -0.00000 -0.00000 1.00000\n", + "\n" + ] + } + ], + "source": [ + "invA=[a1,a2,a3]\n", + "A*invA" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now the solution of $x$ to $Ax=y$ is $x=A^{-1}y$" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y =\n", + "\n", + " 1\n", + " 2\n", + " 3\n", + "\n", + "x =\n", + "\n", + " 6.0000\n", + " 11.0000\n", + " 14.0000\n", + "\n", + "xbs =\n", + "\n", + " 6.0000\n", + " 11.0000\n", + " 14.0000\n", + "\n", + "ans =\n", + "\n", + " -3.5527e-15\n", + " -8.8818e-15\n", + " -1.0658e-14\n", + "\n", + "ans = 2.2204e-16\n" + ] + } + ], + "source": [ + "y=[1;2;3]\n", + "x=invA*y\n", + "xbs=A\\y\n", + "x-xbs\n", + "eps" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0005\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.001\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0015\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.002\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t100\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tinversion\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tinversion\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tbackslash\n", + "\n", + "\t\n", + "\t\tbackslash\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tmultiplication\n", + "\n", + "\t\n", + "\t\tmultiplication\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N=100;\n", + "n=[1:N];\n", + "t_inv=zeros(N,1);\n", + "t_bs=zeros(N,1);\n", + "t_mult=zeros(N,1);\n", + "for i=1:N\n", + " A=rand(i,i);\n", + " tic\n", + " invA=inv(A);\n", + " t_inv(i)=toc;\n", + " b=rand(i,1);\n", + " tic;\n", + " x=A\\b;\n", + " t_bs(i)=toc;\n", + " tic;\n", + " x=invA*b;\n", + " t_mult(i)=toc;\n", + "end\n", + "plot(n,t_inv,n,t_bs,n,t_mult)\n", + "axis([0 100 0 0.002])\n", + "legend('inversion','backslash','multiplication','Location','NorthWest')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Condition of a matrix \n", + "### *just checked in to see what condition my condition was in*\n", + "### Matrix norms\n", + "\n", + "The Euclidean norm of a vector is measure of the magnitude (in 3D this would be: $|x|=\\sqrt{x_{1}^{2}+x_{2}^{2}+x_{3}^{2}}$) in general t" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "A =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "L =\n", + "\n", + " 1.00000 0.00000\n", + " 0.50000 1.00000\n", + "\n", + "U =\n", + "\n", + " 2.00000 1.00000\n", + " 0.00000 2.50000\n", + "\n", + "ans =\n", + "\n", + " 2 1\n", + " 1 3\n", + "\n", + "d =\n", + "\n", + " 1.00000\n", + " 0.50000\n", + "\n", + "y =\n", + "\n", + " 1\n", + " 1\n", + "\n" + ] + } + ], + "source": [ + "A=[2,1;1,3]\n", + "L=[1,0;0.5,1]\n", + "U=[2,1;0,2.5]\n", + "L*U\n", + "\n", + "d=[1;0.5]\n", + "y=L*d" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans = 5.0000\n", + "ans = 1\n", + "ans = 5\n", + "ans = 5\n", + "ans = 5.0000\n" + ] + } + ], + "source": [ + "% what is the determinant of L, U and A?\n", + "\n", + "det(A)\n", + "det(L)\n", + "det(U)\n", + "det(L)*det(U)\n", + "det(L*U)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Pivoting for LU factorization\n", + "\n", + "LU factorization uses the same method as Gauss elimination so it is also necessary to perform partial pivoting when creating the lower and upper triangular matrices. \n", + "\n", + "Matlab and Octave use pivoting in the command \n", + "\n", + "`[L,U,P]=lu(A)`\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'lu' is a built-in function from the file libinterp/corefcn/lu.cc\n", + "\n", + " -- Built-in Function: [L, U] = lu (A)\n", + " -- Built-in Function: [L, U, P] = lu (A)\n", + " -- Built-in Function: [L, U, P, Q] = lu (S)\n", + " -- Built-in Function: [L, U, P, Q, R] = lu (S)\n", + " -- Built-in Function: [...] = lu (S, THRES)\n", + " -- Built-in Function: Y = lu (...)\n", + " -- Built-in Function: [...] = lu (..., \"vector\")\n", + " Compute the LU decomposition of A.\n", + "\n", + " If A is full subroutines from LAPACK are used and if A is sparse\n", + " then UMFPACK is used.\n", + "\n", + " The result is returned in a permuted form, according to the\n", + " optional return value P. For example, given the matrix 'a = [1, 2;\n", + " 3, 4]',\n", + "\n", + " [l, u, p] = lu (A)\n", + "\n", + " returns\n", + "\n", + " l =\n", + "\n", + " 1.00000 0.00000\n", + " 0.33333 1.00000\n", + "\n", + " u =\n", + "\n", + " 3.00000 4.00000\n", + " 0.00000 0.66667\n", + "\n", + " p =\n", + "\n", + " 0 1\n", + " 1 0\n", + "\n", + " The matrix is not required to be square.\n", + "\n", + " When called with two or three output arguments and a spare input\n", + " matrix, 'lu' does not attempt to perform sparsity preserving column\n", + " permutations. Called with a fourth output argument, the sparsity\n", + " preserving column transformation Q is returned, such that 'P * A *\n", + " Q = L * U'.\n", + "\n", + " Called with a fifth output argument and a sparse input matrix, 'lu'\n", + " attempts to use a scaling factor R on the input matrix such that 'P\n", + " * (R \\ A) * Q = L * U'. This typically leads to a sparser and more\n", + " stable factorization.\n", + "\n", + " An additional input argument THRES, that defines the pivoting\n", + " threshold can be given. THRES can be a scalar, in which case it\n", + " defines the UMFPACK pivoting tolerance for both symmetric and\n", + " unsymmetric cases. If THRES is a 2-element vector, then the first\n", + " element defines the pivoting tolerance for the unsymmetric UMFPACK\n", + " pivoting strategy and the second for the symmetric strategy. By\n", + " default, the values defined by 'spparms' are used ([0.1, 0.001]).\n", + "\n", + " Given the string argument \"vector\", 'lu' returns the values of P\n", + " and Q as vector values, such that for full matrix, 'A (P,:) = L *\n", + " U', and 'R(P,:) * A (:, Q) = L * U'.\n", + "\n", + " With two output arguments, returns the permuted forms of the upper\n", + " and lower triangular matrices, such that 'A = L * U'. With one\n", + " output argument Y, then the matrix returned by the LAPACK routines\n", + " is returned. If the input matrix is sparse then the matrix L is\n", + " embedded into U to give a return value similar to the full case.\n", + " For both full and sparse matrices, 'lu' loses the permutation\n", + " information.\n", + "\n", + " See also: luupdate, ilu, chol, hess, qr, qz, schur, svd.\n", + "\n", + "Additional help for built-in functions and operators is\n", + "available in the online version of the manual. Use the command\n", + "'doc ' to search the manual index.\n", + "\n", + "Help and information about Octave is also available on the WWW\n", + "at http://www.octave.org and via the help@octave.org\n", + "mailing list.\n" + ] + } + ], + "source": [ + "help lu" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/svg+xml": [ + "\n", + "\n", + "Gnuplot\n", + "Produced by GNUPLOT 5.0 patchlevel 3 \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\t\n", + "\t \n", + "\t \n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0005\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.001\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.0015\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0.002\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t0\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t20\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t40\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t60\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t80\n", + "\t\n", + "\n", + "\n", + "\t\t\n", + "\t\t100\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\t\n", + "\tLU decomp\n", + "\n", + "\n", + "\n", + "\t\n", + "\t\tLU decomp\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\tOctave \\\\\n", + "\n", + "\t\n", + "\t\tOctave \\\n", + "\t\n", + "\n", + "\n", + "\t\n", + "\t\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "% time LU solution vs backslash\n", + "t_lu=zeros(100,1);\n", + "t_bs=zeros(100,1);\n", + "for N=1:100\n", + " A=rand(N,N);\n", + " y=rand(N,1);\n", + " [L,U,P]=lu(A);\n", + "\n", + " tic; d=inv(L)*y; x=inv(U)*d; t_lu(N)=toc;\n", + "\n", + " tic; x=inv(A)*y; t_bs(N)=toc;\n", + "end\n", + "plot([1:100],t_lu,[1:100],t_bs) \n", + "legend('LU decomp','Octave \\\\')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "Consider the problem again from the intro to Linear Algebra, 4 masses are connected in series to 4 springs with K=10 N/m. What are the final positions of the masses? \n", + "\n", + "![Springs-masses](../lecture_09/mass_springs.svg)\n", + "\n", + "The masses haves the following amounts, 1, 2, 3, and 4 kg for masses 1-4. Using a FBD for each mass:\n", + "\n", + "$m_{1}g+k(x_{2}-x_{1})-kx_{1}=0$\n", + "\n", + "$m_{2}g+k(x_{3}-x_{2})-k(x_{2}-x_{1})=0$\n", + "\n", + "$m_{3}g+k(x_{4}-x_{3})-k(x_{3}-x_{2})=0$\n", + "\n", + "$m_{4}g-k(x_{4}-x_{3})=0$\n", + "\n", + "in matrix form:\n", + "\n", + "$\\left[ \\begin{array}{cccc}\n", + "2k & -k & 0 & 0 \\\\\n", + "-k & 2k & -k & 0 \\\\\n", + "0 & -k & 2k & -k \\\\\n", + "0 & 0 & -k & k \\end{array} \\right]\n", + "\\left[ \\begin{array}{c}\n", + "x_{1} \\\\\n", + "x_{2} \\\\\n", + "x_{3} \\\\\n", + "x_{4} \\end{array} \\right]=\n", + "\\left[ \\begin{array}{c}\n", + "m_{1}g \\\\\n", + "m_{2}g \\\\\n", + "m_{3}g \\\\\n", + "m_{4}g \\end{array} \\right]$" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K =\n", + "\n", + " 20 -10 0 0\n", + " -10 20 -10 0\n", + " 0 -10 20 -10\n", + " 0 0 -10 10\n", + "\n", + "y =\n", + "\n", + " 9.8100\n", + " 19.6200\n", + " 29.4300\n", + " 39.2400\n", + "\n" + ] + } + ], + "source": [ + "k=10; % N/m\n", + "m1=1; % kg\n", + "m2=2;\n", + "m3=3;\n", + "m4=4;\n", + "g=9.81; % m/s^2\n", + "K=[2*k -k 0 0; -k 2*k -k 0; 0 -k 2*k -k; 0 0 -k k]\n", + "y=[m1*g;m2*g;m3*g;m4*g]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This matrix, K, is symmetric. \n", + "\n", + "`K(i,j)==K(j,i)`\n", + "\n", + "Now we can use,\n", + "\n", + "## Cholesky Factorization\n", + "\n", + "We can decompose the matrix, K into two matrices, $U$ and $U^{T}$, where\n", + "\n", + "$K=U^{T}U$\n", + "\n", + "each of the components of U can be calculated with the following equations:\n", + "\n", + "$u_{ii}=\\sqrt{a_{ii}-\\sum_{k=1}^{i-1}u_{ki}^{2}}$\n", + "\n", + "$u_{ij}=\\frac{a_{ij}-\\sum_{k=1}^{i-1}u_{ki}u_{kj}}{u_{ii}}$\n", + "\n", + "so for K" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "K =\n", + "\n", + " 20 -10 0 0\n", + " -10 20 -10 0\n", + " 0 -10 20 -10\n", + " 0 0 -10 10\n", + "\n" + ] + } + ], + "source": [ + "K" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "u11 = 4.4721\n", + "u12 = -2.2361\n", + "u13 = 0\n", + "u14 = 0\n", + "u22 = 3.8730\n", + "u23 = -2.5820\n", + "u24 = 0\n", + "u33 = 3.6515\n", + "u34 = -2.7386\n", + "u44 = 1.5811\n", + "U =\n", + "\n", + " 4.47214 -2.23607 0.00000 0.00000\n", + " 0.00000 3.87298 -2.58199 0.00000\n", + " 0.00000 0.00000 3.65148 -2.73861\n", + " 0.00000 0.00000 0.00000 1.58114\n", + "\n" + ] + } + ], + "source": [ + "u11=sqrt(K(1,1))\n", + "u12=(K(1,2))/u11\n", + "u13=(K(1,3))/u11\n", + "u14=(K(1,4))/u11\n", + "u22=sqrt(K(2,2)-u12^2)\n", + "u23=(K(2,3)-u12*u13)/u22\n", + "u24=(K(2,4)-u12*u14)/u22\n", + "u33=sqrt(K(3,3)-u13^2-u23^2)\n", + "u34=(K(3,4)-u13*u14-u23*u24)/u33\n", + "u44=sqrt(K(4,4)-u14^2-u24^2-u34^2)\n", + "U=[u11,u12,u13,u14;0,u22,u23,u24;0,0,u33,u34;0,0,0,u44]" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ans =\n", + "\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + " 1 1 1 1\n", + "\n" + ] + } + ], + "source": [ + "(U'*U)'==U'*U" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "average time spent for Cholesky factored solution = 1.465964e-05+/-9.806001e-06\n", + "average time spent for backslash solution = 1.555967e-05+/-1.048561e-05\n" + ] + } + ], + "source": [ + "% time solution for Cholesky vs backslash\n", + "t_chol=zeros(1000,1);\n", + "t_bs=zeros(1000,1);\n", + "for i=1:1000\n", + " tic; d=U'*y; x=U\\d; t_chol(i)=toc;\n", + " tic; x=K\\y; t_bs(i)=toc;\n", + "end\n", + "fprintf('average time spent for Cholesky factored solution = %e+/-%e',mean(t_chol),std(t_chol))\n", + "\n", + "fprintf('average time spent for backslash solution = %e+/-%e',mean(t_bs),std(t_bs))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Octave", + "language": "octave", + "name": "octave" + }, + "language_info": { + "file_extension": ".m", + "help_links": [ + { + "text": "MetaKernel Magics", + "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md" + } + ], + "mimetype": "text/x-octave", + "name": "octave", + "version": "0.19.14" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture_13/octave-workspace b/lecture_13/octave-workspace new file mode 100644 index 0000000..e69de29