Skip to content

Instantly share code, notes, and snippets.

@tobydriscoll
Created January 18, 2017 20:24
Show Gist options
  • Save tobydriscoll/d1fe4e61d05e2b423a55979982a2d38a to your computer and use it in GitHub Desktop.
Save tobydriscoll/d1fe4e61d05e2b423a55979982a2d38a to your computer and use it in GitHub Desktop.
TB-Lecture32
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Lecture 32: Sparse matrices and iterative methods"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sparse format\n",
"\n",
"Large matrices whose entries are mostly zeros are typically called *sparse*. They can be stored more efficiently than \"dense\" or full matrices, but must explicitly be constructed as a sparse type. "
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" A 706 KB 10000×10000 SparseMatrixCSC{Float…\n",
" Base 34747 KB Module\n",
" Compat 4975 KB Module\n",
" Core 12753 KB Module\n",
" IJulia 5950 KB Module\n",
" JSON 5037 KB Module\n",
" Main 43071 KB Module\n",
" Nettle 4963 KB Module\n",
" ZMQ 4973 KB Module\n"
]
}
],
"source": [
"A = sprandn(10000,10000,0.0004);\n",
"whos()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The equivalent full (or \"dense\") matrix would require 800 MB of storage. \n",
"\n",
"Two common ways to inspect a sparse matrix are `nnz`, the number of nonzeros, and `spy`, which shows the locations of the nonzeros."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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2muv1Z///GctWbJECxYs0NatW/W9731PJ0+eDKhds2aNiouLdcUVV2jlypW65pprVFJSoieeeCKgzhijSZMm6Ze//KWz/eDBg8rJydGf/vSnkJ4rAACIDr2744fce++9+va3v62TJ0/q0KFDAdsWL14sv9+v9957T4MHD5Yk/f3f/72++93v6plnntE//dM/SZKampr0k5/8RN///ve1adMmSdKsWbPU1tam0tJSzZ49W/369ZMkvfTSS9qxY4e2bNmim266SZI0bdo0ZWZm6uGHH9aGDRu647QBAEAPFvKZpDfeeEPl5eVavny5dXt5ebmmTJniBCRJuu6665SZmakXX3zRaXv99dfV2NiouXPnBux/99136/jx49q6davTtmXLFqWlpTkBSZJSU1NVWFiol19+Wa2trV11egAAIEqFNCS1t7erpKRExcXFuvzyy4O279+/X/X19RozZkzQtrFjxwasIer4c3Z2dkBddna23G53UO3o0aOtfZ44cUI1NTXnfE4AACA2hDQklZWV6S9/+YtKS0ut2+vq6iRJ6enpQdvS09PV2NjozPrU1dWpV69eSk1NDaiLi4tTSkqK9u/fH9BvZ31KCqgFAACwCVlIamxs1MMPP6yHHnpIycnJ1hq/3y9JSkhICNrm8XgCavx+v+Lj4639eDwep66jtrM+jTEBtQAAADYhW7j94IMPKiUlRfPmzeu0xuv1SpKam5uDtjU1NQXUeL1etbS0WPtpampy6jpqO+vT5XIF1HbmnnvucRaCd5g+fbqmT59+xn0BAEDnNm7cqI0bNwa0HTlyJExH07mQhKRPPvlEa9eu1b//+7+rtrZW0lcfy29qalJra6s+++wz9e3b17n91XHb7VR1dXVKTk5WXFycpK9ulbW1tamhoSHglltra6sOHTqkjIwMpy09Pb3TPiUF1HZm2bJl1nVNAADg/NgmHaqrq4PWHYdbSG631dbWyhijkpISDR06VEOHDtVFF12kd999V3/84x910UUXqbS0VBkZGRowYIAqKyuD+qioqFBWVpbz96ysLBljgmp37dql9vb2oNrq6uqgPnfu3Kk+ffooMzOzC88WAABEo5DMJI0cOVK/+tWvgtoffPBBHT9+XCtWrNBFF10kSZo6daqee+451dbWOo8B2L59u2pqanTvvfc6++bm5io5OVllZWXKy8tz2svK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AAAALAhJYcBtGgAAIh8hKQy4TROZCK8AgFMRkoC/IrwCAE5FSAIAALAgJAEAAFgQkgAAACwISQAAABaEJAAAAAtCEroUH6MHAEQLQhK6FB+jBwBEC0ISAACABSEJAABYxfoSCkISgJgV6xcA4ExifQkFIQlAzIr1CwCA0yMkAQAAWBCSAAAALAhJAAAAFoQkAAAAC0ISAACABSEJAADAgpAEACHAM5iAno+QBAAhwDOYgJ6PkAQAAGBBSALQ43ArC0B3ICQB6HG4lQWgOxCSAAAALAhJAAAAFoQkAAAAC0ISAACABSEJ54xPGAEAohkhCeeMTxgBAKJZSENSZWWlbrjhBmVkZCgxMVHDhw9XaWmp/H5/QN2ePXuUl5enpKQkpaSkqKioSA0NDdY+169frxEjRsjr9SozM1MrV6601h05ckSzZ8/WwIED5fP5lJubq927d3f5OQIAgOjUO1Qdf/DBB7r22muVnp6uf/mXf1FycrJ27Nihhx9+WNXV1frVr34lSaqtrdW1116r/v37a8mSJTp27JieeOIJffDBB6qoqFDv3n87xDVr1mjOnDmaNm2a7r33Xr355psqKSmR3+/XggULnDpjjCZNmqT3339f9913n1JSUrRq1Srl5OSourpaF198cahOGwAARAsTIg8++KBxu93m448/Dmi//fbbjdvtNocPHzbGGDNnzhyTmJho9u3b59Rs27bNuFwus3btWqfN7/eb1NRUk5+fH9DfzJkzTVJSktOfMcZs2rTJuFwuU15e7rQdPHjQ9O/f38yYMeO0x11VVWUkmaqqqrM/aQAAcE4i8fobstttHo9HkjRw4MCA9rS0NLndbsXHx0uSysvLNWXKFA0ePNipue6665SZmakXX3zRaXv99dfV2NiouXPnBvR399136/jx49q6davTtmXLFqWlpemmm25y2lJTU1VYWKiXX35Zra2tXXeiAAAgKoUsJN11110aNGiQZs2apT/84Q/at2+fNm3apNWrV2v+/Pnyer3av3+/6uvrNWbMmKD9x44dG7CGqOPP2dnZAXXZ2dlyu91BtaNHj7b2eeLECdXU1HTVaQLdjk8VAkD3CFlIysjI0FtvvaU9e/Zo1KhRuvDCC3XrrbeqpKRES5culSTV1dVJktLT04P2T09PV2NjozPrU1dXp169eik1NTWgLi4uTikpKdq/f7/T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",
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x323746ed0>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"40217"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"using PyPlot\n",
"spy(A)\n",
"nnz(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Sparse matrices are not just more memory-efficient; they are able to ignore zeros when taking sums and products."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"elapsed time: 0.069820412 seconds\n"
]
},
{
"data": {
"text/plain": [
"0.069820412"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"v = rand(10000,1);\n",
"tic() \n",
"for k = 1:100 \n",
" A*v; \n",
"end\n",
"toc()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"elapsed time: 11.732426896 seconds\n"
]
},
{
"data": {
"text/plain": [
"11.732426896"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"F = full(A);\n",
"tic()\n",
"for k = 1:100\n",
" F*v; \n",
"end\n",
"toc()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"One thing to watch out for, though: the way a sparse matrix is stored can make column operations a lot faster than row operations, so plan accordingly. "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"elapsed time: 0.482169476 seconds\n"
]
},
{
"data": {
"text/plain": [
"0.482169476"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"B = A;\n",
"tic()\n",
"B[:,1000] = sum(B[:,1:10000],2); \n",
"toc()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"elapsed time: 0.326613577 seconds\n"
]
},
{
"data": {
"text/plain": [
"0.326613577"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"B = A;\n",
"tic()\n",
"B[1000,:] = sum(B[1:10000,:],1); \n",
"toc()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Sparse backslash\n",
"\n",
"There are algorithms that attempt to exploit sparsity when solving linear systems of equations. They will be called automatically when backslash is used on a sparse matrix. The time required varies wildly, but these methods can be surprisingly effective, especially for well-known common problems such as the 5-point Laplacian approximation. "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"m = n ^ 2 = 249001\n",
"elapsed time: 1.240244023 seconds\n"
]
},
{
"data": {
"text/plain": [
"1.240244023"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"n = 499; \n",
"@show m = n^2\n",
"o = ones(m);\n",
"A = spdiagm((-o[1:m-n],-o[1:m-1],4o,-o[1:m-1],-o[1:m-n]),[-n -1 0 1 n],m,m);\n",
"b = ones(m);\n",
"tic() \n",
"x = A\\b; \n",
"toc()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As you can see, a 250,000 by 250,000 matrix might not be considered 'large' in every sense!"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Jacobi and Gauss-Seidel\n",
"\n",
"Sooner or later, though, one encounters $Ax=b$ problems of a type and size where the sparse direct algorithms take too long. At this point one turns to iterative methods, which can be halted before complete convergence. \n",
"\n",
"A classical iterative idea is to split the matrix additively: $A=M-N$, so that $Mx=Nx+b$. This is turned into a fixed-point iteration, $Mx^{(k+1)}=Nx^{(k)}+b$. If $M$ is the \"diagonal part\" of $A$, this is the **Jacobi** iteration, and if $M$ is the lower triangle of $A$, it's the **Gauss--Seidel** iteration."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAroAAAIhCAYAAAChXBmZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xl0VPX9//HXTPaQBYxGkyiLAoIshtVALgUXtFDckKVQI63A11Os9GCtiJUfClaB0opUrKUqYakUpCBYVBapFkNYBBFFYlDZDGEnxIRASPL5/THNlJCFbYY7y/NxDmecz/3M3PedSfDFnfd8rsMYYwQAAAAEGKfdBQAAAADeQNAFAABAQCLoAgAAICARdAEAABCQCLoAAAAISARdAAAABCSCLgAAAAISQRcAAAABiaALAACAgETQBQA/8c033+j+++9XUlKSnE6nrrjiCrtL8ohnn31WTqdT//nPf877MT169JDTef7/C2vcuLGuv/76iynPp13MawcEE4Iu4AVff/21HnvsMbVp00b169dXRESEUlJS1KdPH7355psqLS21u0T4mYqKCt1777364IMPdPfdd+vZZ5/VU089dc7HOZ1OhYSEXIYKL57D4ZDD4bjgx1xI0K1pH7NmzZLT6dTs2bMvaN+X07lqvJjXDggmoXYXAASa8ePHa/z48TLGqEuXLrr99tsVGxurAwcO6D//+Y+GDx+u1157TRs2bLC7VPiRnTt3avv27XrkkUf0l7/8xe5ybDdnzhydOHHivOevXr26xnF/CIl11fjYY49p0KBBatiw4WWsCPAfBF3Ag1544QU9++yzatSokd5++2117Nix2pwVK1Zo8uTJNlQHf5aXlydJSkpKsrkS33Dttdde0PwmTZpUGzPGeKocrzlXjVdccUXAtLAAXmEAeMSuXbtMeHi4iYiIMF999VWdc0tLS6uNzZ8/33Tr1s3Ex8ebqKgo06ZNG/Piiy+aU6dOVZvbqFEj06RJE1NcXGyeeOIJ07BhQxMREWGaNm1qJk2aVGXuunXrjMPhMH379q21nhYtWpjIyEhz7NixKuMffPCB6dWrl7nyyitNRESEueGGG8xvf/tbU1BQUGtNhYWFZtSoUaZx48YmLCzMPPfcc+45+fn55uc//7lJTEw0UVFRJjU11cyaNct89NFHxuFwVJlb6ejRo+app54yLVu2NFFRUSY+Pt7cfvvtZsWKFdXmZmZmGofDYWbNmmVWr15tevToYWJjY01cXJz5yU9+YrZv317j8Z84ccJMnDjRdOzY0cTGxpqYmBjTsmVLM3LkSHPw4MFqc1944QWTmppq6tWrZ2JiYkyXLl3MvHnzan19a7Np0ybTt29fk5iYaCIiIkyjRo3MiBEjTH5+fpV5Doejxj81vV5nczgcxul0VhufOXOmeeCBB8z1119voqKiTFxcnElPTzdz586t9bmOHj1qnn76adO6dWsTHR1t4uPjzc0332yeeuopc+LEiSpzd+zYYTIyMkxKSooJDw83ycnJ5qGHHjI7duyo9rzPPvuscTqd5uOPPzaZmZmmXbt2JioqyiQmJpqHH37Y7N+/v9pjunfvbhwOxzmPv1Llz2elHj16uF+bM19Tp9Npdu/e7Z5XVlZmpk+fbtLS0kxcXJyJjo427dq1M6+88oqpqKioso9du3YZh8NhfvGLX5jc3FwzYMAAk5iY6D42Y1zv+ciRI83NN99srrjiChMZGWmaNWtmfvOb31T7/TufGseNG2ccDof7+c+0atUqc9ddd5krrrjCREREmObNm5unnnrKHD9+vMbX0+l0mvLycvP73//eNGvWzERERJjrrrvOjB49usa/swB/wBldwEPefPNNnT59WoMHD1bLli3rnBsWFlbl/tNPP62JEyfqqquu0s9+9jPFxMTo/fff19NPP60VK1ZoxYoVCg3936+rw+HQ6dOndddddyk/P1+9e/dWaGio3nnnHT311FM6deqUxo4dK0m65ZZbdOONN+q9997TsWPH1KBBgyr73rhxo77++mv1799f9evXd48/99xzeu6555SQkKA+ffooMTFRW7du1ZQpU/T+++8rOztbMTExVWoqLS3VbbfdpmPHjumuu+5SXFyc+0zaoUOHlJaWpr1796p79+7q0qWL9u/fr0cffVQ9e/as8ePZPXv2qHv37tqzZ4+6deumXr16qbi4WP/617/04x//WDNmzNDQoUOrPMbhcOjdd9/VkiVL1Lt3b/3yl7/UV199pWXLlunTTz/VV199VeUMWEFBgXr06KGtW7eqRYsWGjp0qMLDw/Xtt98qMzNTDzzwgK666ipJ0vHjx3Xrrbfq888/V/v27TV06FBVVFRo+fLlGjx4sL766iuNHz++zve+0r/+9S/169dPktSvXz81atRImzZt0l/+8hctXbpUn3zyiRo1aiTJ9YWjXbt2KTMzUz169FCPHj0kyX17MUaMGKHWrVure/fuSkpK0pEjR/Tee+8pIyNDubm5eu6556rM37Vrl3r06KG9e/eqQ4cOGjFihCoqKpSbm6upU6fql7/8pfvj840bN+qOO+5QcXGx7rnnHt10003KycnR3LlztWTJEn344Yfq0KFDtZr+9Kc/aeXKlRo4cKB69eqlTz75RDNnztTHH3+s9evXKyEhwT33QntTz577i1/8Qg0aNNCSJUt03333KTU11T2v8vegrKxMffr00YoVK9SiRQv97Gc/U2RkpP7973/rscce04YNGzRr1qxq+/rmm2/cv3cPPvigSkpKFBcXJ0n629/+pnfeeUfdu3dXz549VVFRoU2bNulPf/qTPvjgA61fv1716tU77xprex3++te/asSIEYqJiVH//v2VmJiojz76SJMmTdK//vUvZWVluWs68/UZNGiQPvnkE/Xq1UtxcXF67733NHnyZB06dEhvvPHGeb/egM+wO2kDgeL22283TqfTvPHGGxf0uOzsbONwOEzjxo2rnD0sLy83d999t3E6nebFF1+s8pjGjRsbp9Np+vTpY06ePOkeP3jwoKlfv75p0KCBKSsrc4+/+OKLxul0munTp1fb/4gRI4zT6TTLli1zj61evdo4HA5jWZYpLCysMn/WrFnG4XCYxx9/vMaa7rzzzmpn94wx5uGHHzZOp9OMGTOmyvjWrVtNRESEcTqd1c5Qdu/e3YSEhJgFCxZUGT9+/LhJTU010dHRVV6zyjO6YWFh5t///neVx4wZM8Y4nU7zhz/8ocr4oEGDjNPpNI8++mi1mouLi6sc/5AhQ4zT6TRTpkypMu/UqVPmxz/+sQkJCTGff/55tec5W1FRkbniiitMaGioycrKqrJt8uTJxuFwmLvuuqvKeF1nvetS2xnd7777rtrY6dOnze23327Cw8PNvn37qmzr0qWLcTqd1T4xMMaYI0eOVPnkoUWLFsbpdFY7y71gwQLjcDhMy5Ytq4w/++yzxuFwmIiIiGqv36hRo4zD4TDDhg2rMt6jR48aj6s2jRs3rnJG1xjXz4vT6TSzZs2q8TGVZ0t//etfVzl7W1FRYYYOHWqcTqdZunSpe7zyjK7T6TTPPPNMjc+5Z8+eameCjTHmzTffNA6Hw0yePPmCajzzbHil3bt3m4iICBMfH29yc3OrzB8xYoRxOBzmkUceqTJeefa4Y8eOVT6xOXHihGnatKkJDQ01Bw4cqLEGwJcRdAEPuemmm4zT6TTLly+/oMcNGzbMOJ1O8/rrr1fblpuba0JCQswNN9xQZbwyVNYUVirD2LZt29xj33//vQkJCTGdO3euMre0tNQkJCSYa665xpSXl7vH77vvPuN0OmttwWjXrp25+uqra6zpiy++qDa/tLTUREdHmwYNGpiioqJq24cPH14t6H7++efG4XCYAQMG1FjDkiVLjNPpNH/5y1/cY5VB96GHHqo2f+fOncbhcJj+/fu7xw4ePGhCQkJMSkpKjeH8TEeOHDGhoaHVXsOz6x09enSdz2OMMX//+9+Nw+EwDz74YLVtZWVlpkmTJsbpdJq9e/e6xz0ddGuzaNEi43Q6zZw5c9xjmzZtMg6Hw3To0OGcj8/KynL/I6km3bp1M06n06xZs8Y9Vhl0hw8fXm3+8ePHTf369U10dHSVj8+9HXQrKipMQkKCSU5OrvK7UamgoMA4nU4zcOBA91hl0E1KSrrgj/orKircbTnnW6MxNQfd559/vtawfezYMXcLRk2v5+rVq6s9Zty4cdX+MQz4C1oXAJt99tlnkqRbb7212rZmzZrp2muv1c6dO/XDDz8oNjbWvS0+Pr7GL9hcd911kqRjx465x1JSUnT77bdr1apVysnJUYsWLSRJS5cu1dGjR/Wb3/ymylJN69atU1hYmBYsWFBjzaWlpTp06FC1VojIyEi1bt262vyvv/5aJSUl6tSpk/tj2TNZlqXXX3+9ylh2drYkV7vA2R+jS9LBgwdljNH27durbavpY/GaXpeNGzeqoqJCP/rRjxQVFVXjsZ45t7y8XA6Ho8Z6KpeMq6mes23evFkOh6PG9zwkJEQ/+tGPNGfOHH322WcX/KWr87V3715NnDhRq1ev1p49e1RSUuLe5nA43F9+k1w/D5J05513nvN5N2/eLKnmn2dJuu2225SVlaXPPvtMlmVV2eePfvSjavPj4uKUmpqq//znP9q+fbvatm17fgd4iXJzc3X06FE1b95cEyZMqLbdGKOoqKga3++bb765WntSpbKyMr322muaP3++vvrqKx0/flwVFRXu7We+7herrr9T6tevr3bt2mnNmjXKyclRmzZtqmw/398dwF8QdAEPSUpKUk5OzgX/j+r48ePux9f2vHv37lVBQUGVoHtmP+2ZKnt5y8vLq4z//Oc/18qVKzVr1iy9+OKLklxrdDocDj300ENV5h45ckTl5eV19ps6HA4VFRVVCbqJiYl1HuPVV19d4/aaxo8cOSJJWrlypVauXFlrDcXFxdXGanptKteSPfN1KSgokOT6h8C5VNazceNGbdy48bzrqcn5vOdn1udpO3fuVKdOnXT8+HF169ZNd911l+Lj4xUSEqJdu3Zp1qxZOnXqlHt+QUGBHA7Heb1Ox48fl8PhqPPYjDE1HlttPx/XXHON+7kvl8r3e8eOHXX+HtT0flfWW5MBAwbonXfe0Q033KD77rtP11xzjSIiIiRJL730UpXX/WJdys/XmX27lWr7OwXwBwRdwEMsy9Lq1av14Ycf6he/+MV5Py4+Pl6StH///hrP0Obn51eZd7Huv/9+xcXFae7cuXrhhRd0+PBhffDBB0pNTa12Vic+Pl7GGB0+fPiC9lHbl4Mq/+d54MCBGrfXNF55vC+//LJ+9atfXVAd56syEJ/PP04q6xk1apSmTJlySfs98z2viafe89r88Y9/1LFjx5SZmamMjIwq2/7xj38oMzOzylj9+vVljDnv18kYU+exORyOGo+ttp+Pyufy1utRk8p93X///Vq4cOEFPba234NNmzbpnXfe0Z133qn33nuvyqcoxhhNmjTp4gs+w5k/XzV9MdbbP1+AL+HKaICH/OIXv1BYWJj++c9/Kicnp865Z14ZrV27dpKkjz76qNq8b7/9Vt9//72aNGlS45mWCxEZGakBAwZo3759WrVqlf7+97+rrKxMQ4YMqTY3LS1Nx44dO6+P4c9HixYtFBUVpa1bt9Z4BmzNmjXVwkFaWpp7m7d07tzZffnUMz+6r2uuJ+pp166djDE1vufl5eXufbRv3/6S91WTb7/9VpLUt2/fats++uijWt+L5cuXn/O56/p5lv534Yazj80Yo48//rja/MLCQm3ZskWRkZHnXM3kQoWEhMgYU+OZyhYtWqh+/fpat26dx85kfvPNN5Kku+++u9pV3davX1/jz2BdNdamrp+v48ePe+31BHwRQRfwkEaNGunZZ5/VqVOn1Lt3b23atKnGee+//75+/OMfu+8//PDDMsbo+eefr3IGtaKiQr/5zW9kjNGwYcM8UuPPf/5zGWM0a9YszZkzR2FhYRo8eHC1eaNGjZIxRsOHD3ef/TnTiRMntH79+vPeb1hYmAYOHKiCggI9//zzVbZ9/vnnmjNnTrXHdOjQQd26ddOiRYs0c+bMGp/3yy+/1KFDh867jrNdeeWV+ulPf6p9+/bpiSeeqLY4f3FxsQoLCyXJvfTbp59+queff75KX2Wl7777Trt27Trnfu+77z5dccUVmjdvXrXX8aWXXtLOnTvVs2dPr/XnNm7cWFL1MLp8+fIal5Bq3769unbtqi1btmjixInVth89etT9kXt6erpuvPFGffLJJ/rnP/9ZZd7ChQv1ySef6MYbb6zSn1tpzpw52rJlS5WxcePG6fjx4xo8eHCtfa8Xq3K5sj179lTbFhISoscee0z79u3TY489ppMnT1abs3///gv6x2Btr/vBgwdr/dSirhpr8+CDDyosLEx//vOf3f+oqfTMM8+osLBQGRkZHn89AV9E6wLgQWPGjFF5ebmee+45derUSV27dlXHjh0VExPjvgTwjh071LlzZ/djunTpoieffFJ/+MMf1Lp1a/Xr10/16tXT+++/r23btqlbt2564oknPFJf165d1bRpU7399ts6ffq07rnnHl155ZXV5t12222aNGmSxowZo2bNmql3795q0qSJioqKtHv3bn388cfq1q2b3nvvvfPed+UXnyZPnqx169apa9eu2rdvn95++2395Cc/0TvvvFPtLNdbb72l22+/XcOGDdO0adN0yy23qH79+vr++++1detWbdu2TdnZ2e51bqULv9rVK6+8om3btum1117Tv//9b911110KDw/Xd999pxUrVujdd991f0nqlVde0TfffKNx48Zpzpw5sixLV199tfbt26ft27fr008/1bx589yBpjb16tXTm2++qQEDBqh79+7q37+/GjZsqE2bNmnFihVKTk7Wa6+9dkHHcSFGjBihmTNnql+/furXr5+Sk5P15Zdfavny5RowYID+8Y9/VHvM3Llzdeutt+p3v/ud/vnPf6pHjx4yxig3N9f9JcfKdXRnzZqlO++8UwMHDtS9996rFi1aKCcnR0uWLFF8fLxmz55dY129evVSenq6BgwYoKSkJK1Zs0ZZWVm6/vrr3X3lntSlSxdFR0dr6tSpOnz4sLu3duTIkYqNjdXYsWO1detW/fWvf9W7776r2267TSkpKTp48KB27NihrKwsvfDCC+d9ZrRTp05KT0/XokWLlJ6eLsuydODAAb3//vtq0aKFkpOTL7jGmjRq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PsaKa1ixJl+sYcWafLGGFWvyxRpWrMkXa1ixJl+sYcWafLGGFWtq6DFpadKnnzb+GG/kNYIuLC0uTios/O6+n590771STY1UXf3dLQAAsK5u3aSTJxuf44285u+RZwG8pFOnukG3X7/6/yM0DNfFJaqrpUcekXbv/u5YcrK0dWvdubf+/sQTUn5+3fnvv994TU19jBXXsGJNvljDijX5Yg0r1uSLNaxYky/WsGJNvljDijX5Yg0r1tTQY6KjG5/vNUYbsH//fkOSsX//frNLQROVlRlGWpphdOvmui0rM3e+XdawYk2+WMOKNfliDSvW5Is1rFiTL9awYk2+WMOKNfliDSvW1NzHeCOvWXbrwvLly7Vy5Up98cUXmj17tl588cV6c3bt2iWn06l58+Zp5syZt30uti4AAABYmzfymmXPuhATE6O5c+cqPT29weOGYei5555TcnKyjysDAABAa2DZPbrDhg2TJG29dYPlLVasWKGUlBRdunTJl2UBAACglWjyO7rXrl1TVlaWBg8erMjISPn5+Wnt2rUNzq2qqtL06dMVGxur0NBQpaSkaNu2bS0u+vz581qyZInmzp0ri+68AAAAgMmaHHTPnTunefPm6ciRI0pKSpLj+ycnvcXYsWO1ePFiZWZmaunSpfL399eQIUOUl5fXoqJnz56tqVOnKiIiokXPA/tav3692SXAh+h320K/2xb6jZZoctCNiYlRaWmpTp06pVdeeeW276jm5+drw4YNWrBggRYsWKDx48dr+/btiouL07Rp0+rMXbduncLDwxUREaGJEyc2uv7Bgwe1d+9ejR8/vqmlow3hH8a2hX63LfS7baHfaIkm79ENCAhQVFTUHedt3LhR/v7+mjBhgnssKChI48aN06xZs1RUVKTY2FhJ0ujRozV69Oi7Wv/jjz/WsWPHFBsbK8MwdOnSJQUEBOjkyZNatWpVU18OAAAAbMprX0Y7ePCgEhISFBYWVmf85lkSDh486A66DamtrVV1dbX7trKyUgEBAfrd736nUaNGuedNnjxZ3bp10wsvvOCdFwIAAIBWyWunFyspKVF0A5fBiI6OlmEYKi4ubvTx8+fPV2hoqFatWqWXXnpJoaGhysnJUXBwsKKiotw/oaGhCgsLY78uAAAA6vDaO7rl5eUKCgqqNx4cHOw+3pisrCxlZWXdcZ0333zzrmqR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",
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x32381da90>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"PyObject <matplotlib.text.Text object at 0x31e530310>"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n",
"WARNING: Base.writemime is deprecated.\n",
" likely near /Users/driscoll/.julia/v0.5/IJulia/src/kernel.jl:31\n",
"in show at /Users/driscoll/.julia/v0.5/PyCall/src/PyCall.jl\n"
]
}
],
"source": [
"m = 20000;\n",
"A = sprandn(m,m,0.001) + m/100*speye(m);\n",
"b = ones(m);\n",
"dA = diag(A);\n",
"N = - triu(A,1) - tril(A,-1);\n",
"x = 0*b;\n",
"normres = [];\n",
"for k = 1:50\n",
" x = (N*x + b)./dA;\n",
" normres = [normres;norm(b-A*x)];\n",
"end\n",
"semilogy(normres,\".-\");\n",
"title(\"Convergence of Jacobi iteration\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"Iterative methods come at a price: the convergence of the method depends very strongly on the matrix $A$, as well as the method chosen. Unlike LU factorization and the related direct methods, these methods are far from \"plug-n-play.\" "
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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tV27dk0oFAoRExNj19dkMonAwEARGhoqLBaLrX3EiBFCluVblmB07dpVhISEOI3p2LFjDv1NJpPw9PQU/v7+ori42OH41KlTHRLdI0eOCEmSxJgxY5zGsHbtWiHLsvjiiy9sbZWJ7oQJExz6X7x4UUiSJEaPHm1ry8zMFAqFQoSHhztNzqvKyckRbm5uDs/w5njffPPN276OEEJ89913QpIk8cILLzgcM5vNolWrVkKWZXH16lVbe00nureyatUqIcuySExMtLWlpKQISZJE9+7d73j+zp07bX8kOdOvXz8hy7L4/fffbW2Vie7UqVMd+hcUFAg/Pz/h6elp9/F5bSe6VqtVBAYGirCwMLufjUr5+flClmUxduxYW1tloqvT6e76o36r1Wory6lujEI4T3TnzJlzy2Q7Ly/PVoLh7Hlu27bN4Zy4uDiHP4aJGgqWLhC52KFDhwAAjzzyiMOxtm3bolmzZrh48SKKiorg4+NjO+br6+t0gk3z5s0BAHl5eba28PBwDBw4EFu3bsWpU6fQvn17AMC6deuQm5uL1157zW6ppj179kCpVOL77793GrPJZEJWVpZDKYS7uzuioqIc+p8+fRplZWXo2bOn7WPZqvr27Yuvv/7arm337t0ArpcL3PwxOgBkZmZCCIGTJ086HHP2sbiz57J//35YrVY8/PDD8PDwcHqvVftaLBZIkuQ0nsol45zFc7ODBw9CkiSn77lCocDDDz+MxMREHDp06K4nXVXX1atX8dFHH2Hbtm24cuUKysrKbMckSbJNfgOufz8AwOOPP37H1z148CAA59/PAPDoo49i586dOHToEPr27Wt3zYcfftihv0ajQXR0NH777TecPHkSnTt3rt4N3qczZ84gNzcX7dq1wwcffOBwXAgBDw8Pp+93ly5dHMqTKpnNZixevBjLly/HiRMnUFBQAKvVajte9bnfq9v9TvHz80PXrl3x+++/49SpU+jUqZPd8er+7BA1FEx0iWqITqfDqVOn7vofqoKCAtv5t3rdq1evIj8/3y7RrVpPW1VlLa/FYrFrnzRpErZs2YKEhAR8+OGHAK6v0SlJEiZMmGDXNycnBxaL5bb1ppIkobi42C7R1Wq1t73HkJAQp8edtefk5AAAtmzZgi1bttwyhpKSEoc2Z8+mci3Zqs8lPz8fwPU/BO6kMp79+/dj//791Y7H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",
"text/plain": [
"PyPlot.Figure(PyObject <matplotlib.figure.Figure object at 0x31d99cd90>)"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"PyObject <matplotlib.text.Text object at 0x31e3e5410>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mu = sqrt(m);\n",
"for i = 1:4\n",
" A = sprandn(m,m,0.001) + mu*speye(m);\n",
" dA = diag(A);\n",
" N = - triu(A,1) - tril(A,-1);\n",
" x = 0*b;\n",
" normres = [];\n",
" for k = 1:50\n",
" x = (N*x + b)./dA;\n",
" normres = [normres;norm(b-A*x)];\n",
" end\n",
" semilogy(normres,\".-\")\n",
" mu = mu/4;\n",
"end\n",
"title(\"Convergence of Jacobi iteration\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"Although Jacobi, Gauss-Seidel, and friends are helpful in some circumstances, they have been largely overtaken by **Krylov subspace methods**. They are more robust over a wider range of problems, they allow the incorporation of partial knowledge of the matrix or crude approximate solutions, and they can be used without even needing to know the matrix $A$! This last part sounds strange but is extremely important. "
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## Matrix-free iterations\n",
"\n",
"A matrix is the expression of a linear transformation on vectors. Krylov subspace methods require the matrix $A$ only in the form, \"find $Av$ given any vector $v$.\" That is, any representation of the linear transformation is just as good as having the matrix. \n",
"\n",
"For instance, consider the PageRank algorithm that made Google the king of the internet search. PageRank represents the web as an undirected graph, or equivalently as a weighted adjacency matrix, where adjacency means a link in one page to another. This is an *enormous* graph that is *incredibly* sparse. You don't need to worry about representing the adjacency matrix $A$. Instead, you just need the capability to perform the mapping \"given the probability of being on every page, follow links randomly to calculate the probabilities of visiting every page next.\" \n",
"\n",
"In differential equations, we don't need a matrix representation of a discretized differentiation operator, which could be a headache on 2D or 3D regions. You just need the operation (for example), \"find the values of the derivative of an interpolant to these values.\" This matrix-free viewpoint is often easier to code and faster to compute. "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 0.5.0",
"language": "julia",
"name": "julia-0.5"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "0.5.0"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment