{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Stanford CS205a \n", "\n", "## Designing and Analyzing Linear Systems\n", "Supplemental Julia Notebook\n", "\n", "Prof. Doug James" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Example: Tikhonov regularization " ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "400002.0000028382" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = [1 1; \n", " 1 1.00001] ## An ill-conditioned matrix\n", "cond(A)" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [], "source": [ "b = [1; 0.99];" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2-element Array{Float64,1}:\n", " 1001.0\n", " -1000.0" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = A \\ b" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "6.46964603432798e-15" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "norm(A*x-b)/norm(b)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1414.920845833358" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "norm(x)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Regularized solve" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2×2 Array{Float64,2}:\n", " 2.0 2.00001\n", " 2.00001 2.00002" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "α = 0.00000000001\n", "B = A'*A + α*eye(2) ## Regularized " ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2-element Array{Float64,1}:\n", " 1000.99 \n", " -999.995" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = B \\ (A'*b) ## Solve Normal equations " ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2.552917567500873e-8" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "relErr = norm(A*x-b)/norm(b)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1414.9136610830515" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "norm(x)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "slide" } }, "source": [ "## Cholesky Factorization" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "search: \u001b[1mc\u001b[22m\u001b[1mh\u001b[22m\u001b[1mo\u001b[22m\u001b[1ml\u001b[22m \u001b[1mc\u001b[22m\u001b[1mh\u001b[22m\u001b[1mo\u001b[22m\u001b[1ml\u001b[22mfact \u001b[1mc\u001b[22m\u001b[1mh\u001b[22m\u001b[1mo\u001b[22m\u001b[1ml\u001b[22mfact! sear\u001b[1mc\u001b[22m\u001b[1mh\u001b[22ms\u001b[1mo\u001b[22mrted\u001b[1ml\u001b[22mast \u001b[1mC\u001b[22mac\u001b[1mh\u001b[22mingP\u001b[1mo\u001b[22mo\u001b[1ml\u001b[22m \u001b[1mc\u001b[22m\u001b[1mh\u001b[22m\u001b[1mo\u001b[22mp \u001b[1mc\u001b[22m\u001b[1mh\u001b[22m\u001b[1mo\u001b[22mwn \u001b[1mc\u001b[22m\u001b[1mh\u001b[22m\u001b[1mo\u001b[22mmp\n", "\n" ] }, { "data": { "text/markdown": [ "```\n", "chol(A) -> U\n", "```\n", "\n", "Compute the Cholesky factorization of a positive definite matrix `A` and return the UpperTriangular matrix `U` such that `A = U'U`.\n", "\n", "```\n", "chol(x::Number) -> y\n", "```\n", "\n", "Compute the square root of a non-negative number `x`.\n" ], "text/plain": [ "```\n", "chol(A) -> U\n", "```\n", "\n", "Compute the Cholesky factorization of a positive definite matrix `A` and return the UpperTriangular matrix `U` such that `A = U'U`.\n", "\n", "```\n", "chol(x::Number) -> y\n", "```\n", "\n", "Compute the square root of a non-negative number `x`.\n" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "?(chol)" ] }, { "cell_type": "code", "execution_count": 245, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "ename": "LoadError", "evalue": "ArgumentError: matrix is not symmetric/Hermitian. This error can be avoided by calling chol(Hermitian(A)) which will ignore either the upper or lower triangle of the matrix.", "output_type": "error", "traceback": [ "ArgumentError: matrix is not symmetric/Hermitian. This error can be avoided by calling chol(Hermitian(A)) which will ignore either the upper or lower triangle of the matrix.", "", " in chol(::Array{Float64,2}) at ./linalg/cholesky.jl:166" ] } ], "source": [ "chol(rand(3,3))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3×3 UpperTriangular{Float64,Array{Float64,2}}:\n", " 1.0 0.0 0.0\n", " ⋅ 1.0 0.0\n", " ⋅ ⋅ 1.0" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "U = chol(eye(3))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3×3 Array{Float64,2}:\n", " 1.0 0.0 0.0\n", " 0.0 1.0 0.0\n", " 0.0 0.0 1.0" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "U'*U" ] }, { "cell_type": "code", "execution_count": 247, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "text/plain": [ "3×3 Array{Float64,2}:\n", " 1.03716 0.485069 0.700163\n", " 0.485069 0.273739 0.295844\n", " 0.700163 0.295844 0.765217" ] }, "execution_count": 247, "metadata": {}, "output_type": "execute_result" } ], "source": [ "R = rand(3,3);\n", "A = R' * R" ] }, { "cell_type": "code", "execution_count": 248, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3×3 LowerTriangular{Float64,Array{Float64,2}}:\n", " 1.01841 ⋅ ⋅ \n", " 0.476301 0.216509 ⋅ \n", " 0.687507 -0.14603 0.520793" ] }, "execution_count": 248, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L = chol(A)'" ] }, { "cell_type": "code", "execution_count": 249, "metadata": { "collapsed": false }, "outputs": [], "source": [ "b=ones(3);" ] }, { "cell_type": "code", "execution_count": 250, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3-element Array{Float64,1}:\n", " -6.84456\n", " 13.0564 \n", " 2.5217 " ] }, "execution_count": 250, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A \\ b" ] }, { "cell_type": "code", "execution_count": 251, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3-element Array{Float64,1}:\n", " 0.981924\n", " 2.45859 \n", " 1.31328 " ] }, "execution_count": 251, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = L \\ b" ] }, { "cell_type": "code", "execution_count": 252, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3-element Array{Float64,1}:\n", " -6.84456\n", " 13.0564 \n", " 2.5217 " ] }, "execution_count": 252, "metadata": {}, "output_type": "execute_result" } ], "source": [ "L' \\ y" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Cholesky on Sparse Matrices" ] }, { "cell_type": "code", "execution_count": 253, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "15×15 sparse matrix with 29 Float64 nonzero entries:\n", "\t[1 , 1] = 1.0e-7\n", "\t[2 , 2] = 0.959033\n", "\t[4 , 2] = 0.0536958\n", "\t[5 , 2] = 0.568696\n", "\t[9 , 2] = 0.188129\n", "\t[3 , 3] = 1.11993\n", "\t[5 , 3] = 0.1869\n", "\t[2 , 4] = 0.0536958\n", "\t[4 , 4] = 0.131619\n", "\t[9 , 4] = 0.237006\n", "\t⋮\n", "\t[4 , 9] = 0.237006\n", "\t[9 , 9] = 2.02699\n", "\t[10, 10] = 0.807924\n", "\t[12, 10] = 0.349218\n", "\t[11, 11] = 1.0e-7\n", "\t[10, 12] = 0.349218\n", "\t[12, 12] = 0.150947\n", "\t[6 , 13] = 0.211823\n", "\t[13, 13] = 0.212114\n", "\t[14, 14] = 1.0e-7\n", "\t[15, 15] = 1.0e-7" ] }, "execution_count": 253, "metadata": {}, "output_type": "execute_result" } ], "source": [ "using PyPlot\n", "N = 15;\n", "R = sprand(N, N, 0.1); \n", "A = R*R' + 1.e-7 * speye(N)" ] }, { "cell_type": "code", "execution_count": 254, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 254, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spy(A)" ] }, { "cell_type": "code", "execution_count": 256, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1×15 Array{Float64,2}:\n", " 2.09612 1.34565 1.09208 0.958871 … 1.0e-7 1.0e-7 1.0e-7 1.0e-7" ] }, "execution_count": 256, "metadata": {}, "output_type": "execute_result" } ], "source": [ "svdvals(full(A))'" ] }, { "cell_type": "code", "execution_count": 257, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "ename": "LoadError", "evalue": "Use cholfact() instead of chol() for sparse matrices.", "output_type": "error", "traceback": [ "Use cholfact() instead of chol() for sparse matrices.", "", " in chol(::SparseMatrixCSC{Float64,Int64}) at ./sparse/linalg.jl:918" ] } ], "source": [ "chol(A)" ] }, { "cell_type": "code", "execution_count": 258, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Base.SparseArrays.CHOLMOD.Factor{Float64}\n", "type: LLt\n", "method: simplicial\n", "maxnnz: 22\n", "nnz: 22\n" ] }, "execution_count": 258, "metadata": {}, "output_type": "execute_result" } ], "source": [ "F = cholfact(A)" ] }, { "cell_type": "code", "execution_count": 259, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "15-element Array{Float64,1}:\n", " 1.0e7 \n", " -2.92591 \n", " -0.0943949\n", " 9.39129 \n", " 5.91608 \n", " 6867.08 \n", " 2.21476 \n", " 1.0e7 \n", " -0.333173 \n", " -2.06776e6\n", " 1.0e7 \n", " 4.78381e6\n", " -6852.95 \n", " 1.0e7 \n", " 1.0e7 " ] }, "execution_count": 259, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b = ones(N);\n", "xF = F \\ b" ] }, { "cell_type": "code", "execution_count": 260, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "15-element Array{Float64,1}:\n", " 1.0e7 \n", " -2.92591 \n", " -0.0943949\n", " 9.39129 \n", " 5.91608 \n", " 6867.08 \n", " 2.21476 \n", " 1.0e7 \n", " -0.333173 \n", " -2.06776e6\n", " 1.0e7 \n", " 4.78381e6\n", " -6852.95 \n", " 1.0e7 \n", " 1.0e7 " ] }, "execution_count": 260, "metadata": {}, "output_type": "execute_result" } ], "source": [ "xA = A \\ b ## \"\\\" is smart, and actually uses sparse Cholesky to solve system(!)" ] }, { "cell_type": "code", "execution_count": 261, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "2.5888015819409084e-11" ] }, "execution_count": 261, "metadata": {}, "output_type": "execute_result" } ], "source": [ "norm(xA-xF)/norm(xA)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## 1D Laplacian matrix" ] }, { "cell_type": "code", "execution_count": 174, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "100×100 sparse matrix with 0 Float64 nonzero entries" ] }, "execution_count": 174, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N=100;\n", "A = spzeros(N,N) ## sparse zero matrix" ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "100×100 sparse matrix with 298 Float64 nonzero entries:\n", "\t[1 , 1] = -2.0\n", "\t[2 , 1] = 1.0\n", "\t[1 , 2] = 1.0\n", "\t[2 , 2] = -2.0\n", "\t[3 , 2] = 1.0\n", "\t[2 , 3] = 1.0\n", "\t[3 , 3] = -2.0\n", "\t[4 , 3] = 1.0\n", "\t[3 , 4] = 1.0\n", "\t[4 , 4] = -2.0\n", "\t⋮\n", "\t[96 , 97] = 1.0\n", "\t[97 , 97] = -2.0\n", "\t[98 , 97] = 1.0\n", "\t[97 , 98] = 1.0\n", "\t[98 , 98] = -2.0\n", "\t[99 , 98] = 1.0\n", "\t[98 , 99] = 1.0\n", "\t[99 , 99] = -2.0\n", "\t[100, 99] = 1.0\n", "\t[99 , 100] = 1.0\n", "\t[100, 100] = -2.0" ] }, "execution_count": 175, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## Create 1D Laplacian matrix (h=1)\n", "for i=1:N\n", " A[i,i] = -2.;\n", " if (i>1) A[i,i-1] = 1; end\n", " if (i)" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 178, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spy(A)" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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E09Ye/fute677z7r1FNPtQ4ePDjYSxvSpk+fbm3YsMF67733rMbGRmvmzJnWmWeeaX366aeRc5YtW2aNHDnSev755609e/ZYs2bNssaMGWO1t7cP4sqHrrfffts666yzrPPPP9+67777Ise5zwPnX//6l1VSUmLdcccd1t/+9jfrwIED1muvvWb94x//iJzD/R4YS5Yssc444wzrj3/8o3XgwAHrueees0477TRrxYoVkXO41/1TV1dnLV682NqyZYslyXrhhRdivt6X+1pVVWWNHTvW8vv91u7du60rrrjCmjhxohUMBgd0rSdtOLnooousqqqqmGPnnXee9dBDDw3Sik5MH3/8sSXJ2rZtm2VZlhUOh63CwkJr2bJlkXM+//xzKy8vz1qzZs1gLXPI6ujosM4++2zL7/dbl112WSSccJ8H1oMPPmhdeumlSb/O/R44M2fOtO66666YY9/5znes2267zbIs7vVAcYaTvtzXTz75xBo2bJj17LPPRs45fPiw5Xa7rZdffnlA13dSPtY5duyY6uvrVVlZGXO8srJSO3fuHKRVnZja2tokSaNGjZIkHThwQC0tLTH33ufz6bLLLuPe98Pdd9+tmTNn6qqrroo5zn0eWFu3blVFRYVuvPFGjR49WhdeeKGeeOKJyNe53wPn2muv1Z/+9Cd98MEHkqR3331Xb775pq655hpJ3OtM6ct9ra+v1/Hjx2POKSoqUllZ2YDf+5Ny/m9ra6tCoZAKCgpijhcUFKilpWWQVnXisSxLCxcu1KWXXqqysjJJitzfRPf+4MGDxtc4lD377LPavXu33nnnnbivcZ8H1v79+7V69WrV1NTo4Ycf1jvvvKMFCxYoJydHc+bM4X4PoKqqKh08eFDnnnuuvF6vQqGQHnvsMd18882S+LudKX25ry0tLcrJydHpp58ed85A/9t5UoYTmHHPPfdoz549evPNNwd7KSecQ4cO6b777pPf71dubu5gL+eEFw6HVVFRof/5n/+RJF144YV67733tGbNGs2ZM2eQV3diefzxx7VhwwZt2rRJX//619XY2Kjq6moVFRVxr08iJ+Vjnfz8fHk8HgUCgZjjgUBAhYWFg7SqE8u9996rrVu36vXXX9e4ceMix+37y73/Yurr6/Xxxx9r0qRJ8nq98nq92rZtmx5//HF5vd7I//1wnwfGmDFj9LWvfS3m2IQJE9TU1CSJv9cD6bHHHtOPfvQjffe739U3vvEN3X777Vq4cKFqa2slca8zpS/3tbCwUMeOHdO///3vpOcMlJMynOTk5Ki8vFx+vz/muN/v15QpUwZpVScGy7J0zz33aMuWLfrzn/+s0tLSmK+XlpaqsLAw5t4fO3ZM27Zt496n4corr9SePXvU2NgY+aioqNCtt96qxsZGjR8/nvs8gC655JK4LfEffPCBSkpKJPH3eiCFw+G4t+B6PJ7IVmLudWb05b6Wl5dr2LBhMec0NzfrvffeG/h7P6DttUOIvZV43bp11t69e63q6mrr1FNPtf75z38O9tKGtO9///tWXl6e9cYbb1jNzc2Rj//85z+Rc5YtW2bl5eVZW7Zssfbs2WPdfPPNbAMcANG7dSyL+zyQ3n77bcvr9VqPPfaY9eGHH1rPPPOMdcopp1hPP/105Bzu98CYN2+eNXbs2MhW4i1btlj5+fnWD3/4w8g53Ov+6ejosBoaGqyGhgZLkrV8+XKroaEhMkKjL/e1qqrKGjdunPXaa69Zu3fvtqZNm8ZW4oG2cuVKq6SkxMrJybEmTZoU2e6K/pOU8GPDhg2Rc8LhsPXII49YhYWFls/ns771rW9Ze/bsGbxFnyCc4YT7PLBeeuklq6yszPL5fNZ5551nrV27Nubr3O+B0dHRYdXU1FglJSVWbm6uNX78eGvx4sVWZ2dn5Bzudf+8/vrrCX8/z5kzx7Ksvt3Xzz//3LrnnnusUaNGWcOHD7euvfZaq6mpacDX6rIsyxrYWgwAAED/nZQ9JwAAIHsRTgAAQFYhnAAAgKxCOAEAAFmFcAIAALIK4QQAAGQVwgkAAMgqhBMAAJBVCCcAACCrEE4AAEBWIZwAAICs8v8B5ARksirGGg4AAAAASUVORK5CYII=", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "1-element Array{Any,1}:\n", " PyObject " ] }, "execution_count": 179, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# SOLVE Laplaces equation for point charge: \n", "# A * potential = chargeDensity\n", "chargeDensity = zeros(N); chargeDensity[div(N,2)] = 1.; # point charge at N/2 position\n", "plot(chargeDensity)" ] }, { "cell_type": "code", "execution_count": 185, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "1-element Array{Any,1}:\n", " PyObject " ] }, "execution_count": 185, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot(-A \\ chargeDensity) # electric potential = solution to 1D Laplace's equation (-gradient --> electric field)\n", "# Matrix A is actually only positive semidefinite (!)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Visualizing \"Fill In\"" ] }, { "cell_type": "code", "execution_count": 212, "metadata": { "collapsed": false }, "outputs": [], "source": [ "N = 15;\n", "L = speye(N, N)\n", "L[1:N,1] = ones(N);" ] }, { "cell_type": "code", "execution_count": 213, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 213, "metadata": {}, "output_type": "execute_result" } ], "source": [ "spy(L)" ] }, { "cell_type": "code", "execution_count": 218, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "29" ] }, "execution_count": 218, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nnz(L)" ] }, { "cell_type": "code", "execution_count": 219, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "225" ] }, "execution_count": 219, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nnz(L*L')" ] }, { "cell_type": "code", "execution_count": 220, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "225" ] }, "execution_count": 220, "metadata": {}, "output_type": "execute_result" } ], "source": [ "N*N" ] }, { "cell_type": "code", "execution_count": 241, "metadata": { "collapsed": false, "slideshow": { "slide_type": "slide" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "nnz(L)/(N*N) = 0.052997530864197534" ] }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 241, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## Random sparse lower triangular matrix\n", "N = 225\n", "L = tril(sprand(N,N,0.1) + speye(N))\n", "print(\"nnz(L)/(N*N) = \",(nnz(L)/(N*N)))\n", "spy(L)" ] }, { "cell_type": "code", "execution_count": 242, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAa0AAAGgCAYAAAAZyDjpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJztfW+sXlWV/ipYrpXQO1Skt1eKNhPIREtIpjoKUSFEOjYpjOIH1GRSE8cMjiVTxUwG/UCdGEpIFD+IY2ZijM44qZkEjIlGpwSoEkJCEJPCGIIRpZC2BANvC0xb/pzfB33v79zN+vOstfd7b89715M03Hv23muvvc8+e6/nWZt2Vdd1HSUSiUQiMQCcttwOJBKJRCKBIg+tRCKRSAwGeWglEolEYjDIQyuRSCQSg0EeWolEIpEYDPLQSiQSicRgkIdWIpFIJAaDPLQSiUQiMRjkoZVIJBKJwSAPrUQikUgMBoM9tL75zW/Spk2b6I1vfCNt2bKFfvGLXyy3S6csdu/eTatWrVr0Z25ubqG86zravXs3zc/P05o1a+jyyy+nRx99dBk9PnXw85//nK666iqan5+nVatW0Q9/+MNF5cjcnThxgq6//no655xz6Mwzz6Srr76annrqqaUcxrLDmsdPfvKTr1uj733vexfVWenzuGfPHnr3u99NZ511Fp177rn04Q9/mB577LFFdVbCehzkofWDH/yAdu3aRV/60pfo4Ycfpve///20bds2evLJJ5fbtVMW73znO+nQoUMLfw4cOLBQduutt9Jtt91G3/jGN+jBBx+kubk5uvLKK+nYsWPL6PGpgRdffJEuvvhiuv3229lyZO527dpFd955J+3du5fuu+8+euGFF2j79u306quvLtUwlh3WPBIRfehDH1q0Rn/yk58sKl/p87h//3767Gc/Sw888ADt27ePXnnlFdq6dSu9+OKLC3VWxHrsBoi/+qu/6q677rpFz/7iL/6i++d//udl8ujUxk033dRdfPHFbNlrr73Wzc3NdbfccsvCs+PHj3ezs7Pdt771raVycRAgou7OO+9c+B2Zu+eff75bvXp1t3fv3oU6Tz/9dHfaaad1P/3pT5fO+VMI5Tx2Xdft2LGj+5u/+RuxTc7j6/HMM890RNTt37+/67qVsx4Hx7ROnjxJDz30EG3dunXR861bt9L999+/TF6d+nj88cdpfn6eNm3aRB/72Mfot7/9LRERPfHEE3T48OFF8zkzM0OXXXZZzqcBZO4eeughevnllxfVmZ+fp82bN+f8Frj33nvp3HPPpQsvvJA+/elP0zPPPLNQlvP4eoxGIyIiWrduHRGtnPU4uEPr2WefpVdffZXWr1+/6Pn69evp8OHDy+TVqY33vOc99L3vfY9+9rOf0b//+7/T4cOH6dJLL6U//OEPC3OW8+kHMneHDx+mM844g84++2yxToJo27Zt9P3vf5/uvvtu+upXv0oPPvggXXHFFXTixAkiynks0XUdfe5zn6P3ve99tHnzZiJaOevxDcvtQGLy2LZt28LPF110EV1yySX053/+5/Td7373dcnuRGI5cO211y78vHnzZnrXu95Fb3/72+nHP/4xXXPNNcvo2amJnTt30oEDB+i+++5bbleWHINjWueccw6dfvrpdOTIkUXPjxw5suhGXELGmWeeSRdddBE9/vjjC3OW8+kHMndzc3N08uRJeu6558Q6iddjw4YNdP7559Pjjz9ORDmPfVx//fX0ox/9iO655x4677zzFp6vlPU4uEPrjDPOoC1bttC+ffsWPd+3bx9deumly+TVsHDixAn69a9/TRs2bKBNmzbR3Nzcovk8efIk7d+/P+fTADJ3W7ZsodWrVy+qc+jQIXrkkUdyfhU8++yzdPDgQdqwYQMR5TwS/VES3LlzJ91xxx10991306ZNmxaVr5j1uNw3QSLYu3dvt3r16u7b3/5297//+7/drl27ujPPPLP73e9+t9yunZK44YYbunvvvbf77W9/2z3wwAPd9u3bu7POOmthvm655ZZudna2u+OOO7oDBw50H//4x7sNGzZ0R48eXWbPlx/Hjh3rHn744e7hhx/uiKj72te+1j388MPd73//+67rsLm77rrruvPOO6+76667ul/+8pfdFVdc0V188cXdK6+8slzDWnJo83js2LHuhhtu6O6///7uiSee6O65557ukksu6d761rfmPPbwmc98ppudne3uvffe7tChQwt/XnrppYU6K2E9DvLQ6rquu/3227u3ve1t3RlnnNH95V/+5cK1z8Trce2113YbNmzoVq9e3c3Pz3fXXHNN9+ijjy6Uv/baa91NN93Uzc3NdTMzM90HPvCB7sCBA8vo8amDe+65pyOi1/3ZsWNH13XY3B0/frzbuXNnt27dum7NmjXd9u3buyeffHIZRrN80ObxpZde6rZu3dq95S1v6VavXt2df/753Y4dO143Ryt9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", "text/plain": [ "PyPlot.Figure(PyObject )" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "nnz(L*L')/(N*N) = 0.5019456790123457" ] }, { "data": { "text/plain": [ "PyObject " ] }, "execution_count": 242, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"nnz(L*L')/(N*N) = \",(nnz(L*L')/(N*N)))\n", "spy(L*L')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Julia 0.5.1", "language": "julia", "name": "julia-0.5" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "0.5.1" } }, "nbformat": 4, "nbformat_minor": 1 }