(*********************************************************************** Mathematica-Compatible Notebook This notebook can be used on any computer system with Mathematica 3.0, MathReader 3.0, or any compatible application. The data for the notebook starts with the line of stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. ***********************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 21843, 685]*) (*NotebookOutlinePosition[ 22898, 721]*) (* CellTagsIndexPosition[ 22854, 717]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{Cell[TextData[ "Cross-well travel time tomography"], "Title", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ StyleBox["From the article\n``Geophysical Inverse Problems''\n\nin\n", Evaluatable->False, AspectRatioFixed->True], StyleBox["Mathematica", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[ " in Education\nVol.3 No.2\nSpring 1994\n(C) TELOS/Springer-Verlag", Evaluatable->False, AspectRatioFixed->True] }], "Subtitle", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ StyleBox["by\nJohn Scales\n", Evaluatable->False, AspectRatioFixed->True], StyleBox[ "Department of Geophysics\nColorado School of Mines\nGolden, Colorado \ 80401-1887\njscales@dix.mines.colorado.edu", Evaluatable->False, AspectRatioFixed->True, FontSize->12] }], "Subsubtitle", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["Bug fix: 2.0 -> 2.2"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[{ StyleBox["If you are running Version 2.2 of ", Evaluatable->False, AspectRatioFixed->True], StyleBox["Mathematica", Evaluatable->False, AspectRatioFixed->True, FontSlant->"Italic"], StyleBox[ ", you will have to evaluate the following code in order for the Transpose \ function to work properly with the multi-dimensional lists in this notebook. \ ", Evaluatable->False, AspectRatioFixed->True] }], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "Unprotect[Transpose];\nTranspose[v_?VectorQ] := v\nProtect[Transpose]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ {\"Transpose\"}\ \>", "\<\ {Transpose}\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]], Cell[CellGroupData[{Cell[TextData["Set up basic arrays for sources/receivers"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "nsources = 25;\nnreceivers = 25;\nnx = 20;\nnz = 20;\nxmax = 10.;\nzmax = \ 10.;\nncells = nx nz;\nnrays = nsources nreceivers;\n\ndr = zmax/(nreceivers \ - 1);\nds = zmax/(nsources - 1);\nzsrc = Table[(i-1) ds,{i,nsources}];\nzrec \ = Table[(i-1) dr,{i,nreceivers}];\nxsrc = Table[0, {i,nsources}];\nxrec = \ Table[xmax, {i,nreceivers}];\n\nnrays = nsources nreceivers;\nncells = nx nz;\ \ndx = xmax/nx;\ndz = zmax/nz;\ngridx = Table[(i-1) dx,{i,nx+1}];\ngridz = \ Table[(i-1) dz,{i,nz+1}];\n\nizsrc = \ Table[Min[Floor[zsrc[[i]]/dz]+1,nz],{i,nsources}];\nixsrc = \ Table[Min[Floor[xsrc[[i]]/dx]+1,nx],{i,nsources}];\nizrec = \ Table[Min[Floor[zrec[[i]]/dz]+1,nz],{i,nreceivers}];\nixrec = \ Table[Min[Floor[xrec[[i]]/dx]+1,nx],{i,nreceivers}];\n\n\n"], "Input", AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Compute the Jacobian matrix. "], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "This form of the Jacobian calculation is due to Lydia Deng"], "Text", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Times", FontSize->16], Cell[TextData[ "raynum = 1;\nJac = Table[0.,{i,nrays},{j,ncells}];\n\nDo[ (* loop over \ sources *)\n ixs = ixsrc[[i]]; izs = izsrc[[i]];\n Do[ (* loop over receivers \ *)\n delz = zrec[[j]]-zsrc[[i]];\n delx = xrec[[j]]-xsrc[[i]];\n \ tang=delz/delx;\n ix = ixs; iz = izs;\n xbeg = xsrc[[i]]; zbeg = \ zsrc[[i]];\n While[ix<=nx && iz<=nz && iz>0,\n \ cellnum = ix + (iz -1) nx;\n (*Print[\"ix=\",ix,\" \ iz=\",iz,\" ncell=\",cellnum];\n \ Print[\"nray=\",raynum,\" ncell= \",cellnum];*)\n \ ix=ix+1; xend=gridx[[ix]];\n zend = zbeg + tang \ (xend-xbeg);\n Which [delz>0,\n \ Which[\n zend>gridz[[iz+1]],\n \ zend=gridz[[iz+1]];\n \ xend = xbeg + (zend-zbeg)/tang;\n ix=ix-1; \ iz=iz+1,\n zend == gridz[[iz+1]],\n \ iz=iz+1;\n ],\n \ delz<0,\n Which[ \ zendTrue], Cell["", "Input", AspectRatioFixed->True], Cell[TextData[ "\nThis is the Jacobian matrix (Frechet derivative). It mainly consists of \ zeros."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "ListDensityPlot[Jac, \n\tMesh -> False,\n\tColorFunction :> (Hue[# + \ .67]&)]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ DensityGraphics[\"<<>>\"]\ \>", "\<\ -DensityGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "Show[%, ColorFunction :> (RGBColor[0,0,#]&),\n\tAspectRatio -> 532/416,\n\t\ Axes -> False,\n\tFrame -> False];"], "Input", AspectRatioFixed->True], Cell[TextData[ "\nSum the jacobian over rays for each cell. This tells us how many rays \ pierce each cell. This is called the \"hit count\" and is a crude measure of \ resolution. Clearly cells which have only a few rays in there are unlikely \ to be very well resolved. ListPlot3D is a nice option. But it's much slower \ if you have lots of pixels.\n"], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "\nhitcount = Table[Sum[Jac[[i,j]],{i,nrays}],{j,ncells}];\n\ ListDensityPlot[Partition[hitcount,nx],PlotRange->All]\n"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ DensityGraphics[\"<<>>\"]\ \>", "\<\ -DensityGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]], Cell[CellGroupData[{Cell[TextData["A simple example of travel time tomography"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "\nNow we'll generate a veocity model whose features we'll recover from \ travel times. The background model we'll choose is identical but for the \ cross shaped perturbation in the center."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "back = Table[1.,{i,nx},{j,nz}];\ntmp = back;\nDo[\n\tDo[\n\t\tIf[((i-10)^2 + \ (j-10)^2) < 5 , tmp[[i,j]] = 2];\n\t\t\t,{i,nx}];\n\t\t\t\t,{j,nz}];\n\ perturbed = Flatten[tmp];\nbackgr = Flatten[back];\n\n\t"], "Input", AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["\nListPlot3D[tmp]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ SurfaceGraphics[\"<<>>\"]\ \>", "\<\ -SurfaceGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "Compute the travel times through the true and background model. The \ background model is supposed to be our first guess in an iterative \ reconstruction. Since this problem is, by construction, completely linear, \ we only do one iteration."], "Subsection", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "ttback = Table[ Sum[Jac[[i,k]]/backgr[[k]],{k,ncells} ],{i,nrays}];\ntttrue \ = Table[ Sum[Jac[[i,k]]/perturbed[[k]],{k,ncells} ],{i,nrays}];\nttdelta = \ tttrue - ttback;"], "Input", AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData["ListPlot[tttrue,PlotJoined->True]\n"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Graphics[\"<<>>\"]\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]]}, Open]], Cell[CellGroupData[{Cell[TextData[ "Look in the singular value reconstruction of the solution in detail"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "First, do the SVD, then reconstruct the solution piece by piece.\n"], "Subsection", Evaluatable->False, AspectRatioFixed->True], Cell[TextData["\n{v,mm,u} = SingularValues[Jac];\n"], "Input", AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "\nsvalues = 10;\nmodelpert = Sum[u[[i]]( (v[[i]].ttdelta) /mm[[i]]),\n\t\t\ {i,svalues}];\nupdatedmodel = 1./((1./backgr) + modelpert);\n\ ListPlot3D[Partition[updatedmodel,nx],\n\tPlotRange->All]\n"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ SurfaceGraphics[\"<<>>\"]\ \>", "\<\ -SurfaceGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "svalues = 50;\nmodelpert = Sum[u[[i]]( (v[[i]].ttdelta) /mm[[i]]),\n\t\t\ {i,svalues}];\nupdatedmodel = 1./((1./backgr) + modelpert);\n\ ListPlot3D[Partition[updatedmodel,nx],\n\t\tPlotRange->All]\n"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ SurfaceGraphics[\"<<>>\"]\ \>", "\<\ -SurfaceGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "svalues = Length[mm];\nmodelpert = Sum[u[[i]]( (v[[i]].ttdelta) /mm[[i]]),\n\ \t\t{i,svalues}];\nupdatedmodelsvd = 1./((1./backgr) + modelpert);\n\ ListPlot3D[Partition[updatedmodelsvd,nx],\n\t\tPlotRange->All]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ SurfaceGraphics[\"<<>>\"]\ \>", "\<\ -SurfaceGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[{ StyleBox["\n", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Times", FontSize->18], StyleBox["We could plot each model singular vector a list", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Times", FontSize->16] }], "Text", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Times", FontSize->18], Cell[CellGroupData[{Cell[TextData["ListPlot[u[[1]],PlotJoined->True]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Graphics[\"<<>>\"]\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "\nBut each of these singular vectors is a legitimate model,\nsort of an \ elemental model out of which all others are built,\nlike the sines and \ cosines of a Fourier series, or the normal \nmodes of a mechanical system."], "Text", Evaluatable->False, AspectRatioFixed->True, FontFamily->"Times", FontSize->16]}, Open]], Cell[CellGroupData[{Cell[TextData[ "Plot the two most well resolved and poorly resolved eigenvectors"], "Subsection", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "nd = Length[mm];\nsvalplot = ListPlot[mm,PlotJoined->True]\ndataplot = \ ListPlot[datacomp,PlotJoined->True,PlotRange->All]\n\ ListPlot3D[Partition[u[[1]],nx],PlotRange->All]\n\ ListPlot3D[Partition[u[[2]],nx],PlotRange->All]\nListPlot3D[Partition[u[[nd - \ 1]],nx],PlotRange->All]\nListPlot3D[Partition[u[[nd]],nx],PlotRange->All]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ SurfaceGraphics[\"<<>>\"]\ \>", "\<\ -SurfaceGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True], Cell[OutputFormData["\<\ SurfaceGraphics[\"<<>>\"]\ \>", "\<\ -SurfaceGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True], Cell[OutputFormData["\<\ SurfaceGraphics[\"<<>>\"]\ \>", "\<\ -SurfaceGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True], Cell[OutputFormData["\<\ SurfaceGraphics[\"<<>>\"]\ \>", "\<\ -SurfaceGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]]}, Open]], Cell[CellGroupData[{Cell[TextData[ "Next we will compare the results of the direct SVD\ncalculation with an \ iterative method based on conjugate\ngradients. "], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "(* This one took 4748.28 seconds on a NeXT turbo with 48 MB ram. *)"], "Input", AspectRatioFixed->True], Cell[TextData[ "nits = 150;\nx = Table[0,{i,ncells}];\ns = ttdelta;\np = Transpose[Jac].s;\n\ rold = p;\nq = Jac.p;\nDo[\n\talpha = (rold.rold)/(q.q);\n\tx = x + alpha p;\n\ \ts = s - alpha q;\n\tr = Transpose[Jac].s;\n\tbeta = (r.r)/(rold.rold);\n\t\ rold = r;\n\tp = r + beta p;\n\tq = Jac.p;\n,{i,nits}];\n\t"], "Input", AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "updatedmodelcg = 1./((1./backgr) + x);\n\ ListPlot3D[Partition[updatedmodelcg,nx],PlotRange->All]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ SurfaceGraphics[\"<<>>\"]\ \>", "\<\ -SurfaceGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "\nNow look at the difference between the SVD and the CG solutions. \nWe \ could make this smaller by doing more CG iterations, but note\nthat this \ residual looks a lot like the singular vector associated\nwith the small \ singular value."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "ListPlot3D[Partition[ (updatedmodelsvd - updatedmodelcg),nx]]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ SurfaceGraphics[\"<<>>\"]\ \>", "\<\ -SurfaceGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "Finally, we can look at the scaling factors that weight each model\n\ eigenvector in the SVD reconstruction. Each factor is proportional\nto the \ component of the data vector in each data eigenvector, and\ninversely \ proportional to the associated singular value.\n"], "Subsection", Evaluatable->False, AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "nd = Length[mm];\ndatacomp = Table[v[[i]].ttdelta, {i,nd}];\nsvalplot = \ ListPlot[mm,PlotJoined->True]\ndataplot = ListPlot[datacomp,PlotJoined->True,\ \n\tPlotRange->All]\nListPlot[datacomp/mm,PlotJoined->True,PlotRange->All]\n\ "], "Input", AspectRatioFixed->True], Cell[OutputFormData[ "\<\ The Unformatted text for this cell was not generated. Use options in the Actions Preferences dialog box to control when Unformatted text is generated.\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True], Cell[OutputFormData[ "\<\ The Unformatted text for this cell was not generated. Use options in the Actions Preferences dialog box to control when Unformatted text is generated.\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True], Cell[OutputFormData[ "\<\ The Unformatted text for this cell was not generated. Use options in the Actions Preferences dialog box to control when Unformatted text is generated.\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]]}, Open]], Cell[CellGroupData[{Cell[TextData["Scales Figure 13"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "Here is a simple example with a 2 by 2 diagonal matrix. The condition \ number is 10. First, steepest descent. This implementation is due to Herman \ Jaramillo. It's a little more complicated than required by the basic \ iteration, but that's so we can keep track of the path of the solution for \ the pictures.\n"], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "nits = 19;\nR = Table[{0,0},{i,nits+1}];\nX = Table[{0,0},{i,nits+1}];\nlam1 \ = 10.;\nlam2 = 1.;\nA = {{lam1,0},{0,lam2}};\nx = {0.,0.};\nh = {1.,-1.};\n"], "Input", AspectRatioFixed->True], Cell[TextData[ "quad[x1_,x2_] := {x1,x2} . (A . {x1,x2})/2 - h . {x1,x2};\ncont = \ {quad[x[[1]],x[[2]]]};\nr = h - A . x;\nR[[1]] = r;\nX[[1]] = x;\nerr = \ Sqrt[r.r];\nits = 0;\n"], "Input", AspectRatioFixed->True], Cell[TextData[ "While[its < nits,\n\t{\n\t\ta = (r . r)/(r . (A . r));\n\t\tx = x + a r;\n\t\ \tcont = Join[cont,{quad[x[[1]],x[[2]]]}];\n\t\tX[[its + 2]] = x;\n\t\tr = h \ - A . x;\n\t\tR[[its + 2]] = r;\n\t\terr = Sqrt[r.r];\n\t\tits = its + 1;}\n\t\ ];"], "Input", AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "plot1 = \nListPlot[X, PlotJoined -> True,\n\tAspectRatio -> Automatic,\n\t\ Axes -> False,\n\tDisplayFunction -> Identity]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Graphics[\"<<>>\"]\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "plot2 = \nContourPlot[quad[x1,x2], \n\t{x1,-.25,.45}, {x2,-2.2,0.2},\n\t\ ContourShading -> False,\n\tAspectRatio -> Automatic, Contours -> cont,\n\t\ PlotPoints -> 50, FrameLabel -> None,\n\tDisplayFunction -> Identity]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ ContourGraphics[\"<<>>\"]\ \>", "\<\ -ContourGraphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "Show[plot1, plot2,\n\tDisplayFunction -> $DisplayFunction]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Graphics[\"<<>>\"]\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "You can readily convince yourself that the only way steepest descent can \ terminate in a finite number of steps is if the starting point lies along one \ of the principle axes of the quadratic form. \n"], "Text", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData["Scales Figure 15"], "Section", Evaluatable->False, AspectRatioFixed->True], Cell[TextData["Now let's see what conjugate gradient does."], "Text", Evaluatable->False, AspectRatioFixed->True], Cell[TextData[ "nits = 3;\nR = Table[{0,0},{i,nits+1}];\nX = Table[{0,0},{i,nits+1}];\nlam1 \ = 10.;\nlam2 = 1.;\nA = {{lam1,0},{0,lam2}};\nx = {0.,0.};\nh = {1.,-1.};"], "Input", AspectRatioFixed->True], Cell[TextData[ "quad[x1_,x2_] := {x1,x2} . (A . {x1,x2})/2 - h . {x1,x2};\ncont = \ {quad[x[[1]],x[[2]]]};\nr = h - A . x;\nR[[1]] = r;\nX[[1]] = x;\nerr = \ Sqrt[r.r];\nits = 0;\n"], "Input", AspectRatioFixed->True], Cell[TextData[ "p = r;\nrold = r;\nWhile[its < nits,\n {\n a = (rold . \ rold)/(p . (A . p));\n x = x + a p;\n cont = \ Join[cont,{quad[x[[1]],x[[2]]]}];\n X[[its + 2]] = x;\n \ r = rold - a (A . p);\n b = (r . r)/(rold . rold);\n \ R[[its + 2]] = r;\n rold = r;\n p \ = r + b p;\n err = Sqrt[r.r];\n its = its + 1;}\ \n ];\n"], "Input", AspectRatioFixed->True], Cell[CellGroupData[{Cell[TextData[ "plot3 =\nListPlot[X, PlotJoined -> True,\n\tAspectRatio -> Automatic,\n\t\ Axes -> False,\n\tDisplayFunction -> Identity]\n"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Graphics[\"<<>>\"]\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[CellGroupData[{Cell[TextData[ "Show[plot3, plot2,\n\tDisplayFunction -> $DisplayFunction]"], "Input", AspectRatioFixed->True], Cell[OutputFormData["\<\ Graphics[\"<<>>\"]\ \>", "\<\ -Graphics-\ \>"], "Output", Evaluatable->False, AspectRatioFixed->True]}, Open]], Cell[TextData[ "Finally, ask yourself: what is implied by finite termination? In other \ words, under what circumstances is the residual at the i-th step equal to \ zero for CG?"], "Text", Evaluatable->False, AspectRatioFixed->True]}, Open]]}, Open]] }, FrontEndVersion->"Macintosh 3.0", ScreenRectangle->{{0, 640}, {0, 460}}, WindowToolbars->{}, CellGrouping->Manual, WindowSize->{520, 365}, WindowMargins->{{20, Automatic}, {15, Automatic}}, PrivateNotebookOptions->{"ColorPalette"->{RGBColor, -1}}, ShowCellLabel->True, ShowCellTags->False, RenderingOptions->{"ObjectDithering"->True, "RasterDithering"->False}, MacintoshSystemPageSetup->"\<\ AVU/IFiQKFD000000V:^/09R]g0000000OVaH097bCP0AP1Y06`0I@1^0642HZj` 0V:gT0000001nK500TO9>000000000000000009R[[0000000000000000000000 00000000000000000000000000000000\>" ] (*********************************************************************** Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. ***********************************************************************) (*CellTagsOutline CellTagsIndex->{} *) (*CellTagsIndex CellTagsIndex->{} *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[1731, 51, 109, 3, 70, "Title", Evaluatable->False], Cell[1843, 56, 444, 14, 70, "Subtitle", Evaluatable->False], Cell[2290, 72, 368, 12, 70, "Subsubtitle", Evaluatable->False], Cell[CellGroupData[{ Cell[2681, 86, 96, 2, 70, "Section", Evaluatable->False], Cell[2780, 90, 506, 16, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[3309, 108, 126, 3, 70, "Input"], Cell[3438, 113, 129, 7, 70, "Output", Evaluatable->False] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[3608, 122, 118, 2, 70, "Section", Evaluatable->False], Cell[3729, 126, 805, 12, 70, "Input"] }, Closed]], Cell[CellGroupData[{ Cell[4566, 140, 106, 2, 70, "Section", Evaluatable->False], Cell[4675, 144, 172, 5, 70, "Text", Evaluatable->False], Cell[4850, 151, 1957, 27, 70, "Input"], Cell[6810, 180, 43, 1, 70, "Input"], Cell[6856, 183, 158, 4, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[7037, 189, 132, 3, 70, "Input"], Cell[7172, 194, 145, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[7329, 203, 165, 3, 70, "Input"], Cell[7497, 208, 417, 7, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[7937, 217, 171, 3, 70, "Input"], Cell[8111, 222, 145, 7, 70, "Output", Evaluatable->False] }, Open ]] }, Closed]], Cell[CellGroupData[{ Cell[8297, 231, 119, 2, 70, "Section", Evaluatable->False], Cell[8419, 235, 264, 5, 70, "Text", Evaluatable->False], Cell[8686, 242, 261, 4, 70, "Input"], Cell[CellGroupData[{ Cell[8970, 248, 70, 1, 70, "Input"], Cell[9043, 251, 145, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[9220, 260, 324, 6, 70, "Subsection", Evaluatable->False], Cell[9547, 268, 225, 4, 70, "Input"], Cell[CellGroupData[{ Cell[9795, 274, 88, 1, 70, "Input"], Cell[9886, 277, 131, 7, 70, "Output", Evaluatable->False] }, Open ]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[10067, 286, 148, 4, 70, "Section", Evaluatable->False], Cell[CellGroupData[{ Cell[10238, 292, 150, 4, 70, "Subsection", Evaluatable->False], Cell[10391, 298, 88, 1, 70, "Input"], Cell[CellGroupData[{ Cell[10502, 301, 253, 4, 70, "Input"], Cell[10758, 307, 145, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[10935, 316, 253, 4, 70, "Input"], Cell[11191, 322, 145, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[11368, 331, 265, 4, 70, "Input"], Cell[11636, 337, 145, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[11793, 346, 384, 15, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[12200, 363, 86, 1, 70, "Input"], Cell[12289, 366, 131, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[12432, 375, 338, 8, 70, "Text", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[12802, 385, 148, 4, 70, "Subsection", Evaluatable->False], Cell[CellGroupData[{ Cell[12973, 391, 388, 7, 70, "Input"], Cell[13364, 400, 145, 7, 70, "Output", Evaluatable->False], Cell[13512, 409, 145, 7, 70, "Output", Evaluatable->False], Cell[13660, 418, 145, 7, 70, "Output", Evaluatable->False], Cell[13808, 427, 145, 7, 70, "Output", Evaluatable->False] }, Open ]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[14003, 436, 200, 4, 70, "Section", Evaluatable->False], Cell[14206, 442, 124, 3, 70, "Input"], Cell[14333, 447, 349, 5, 70, "Input"], Cell[CellGroupData[{ Cell[14705, 454, 151, 3, 70, "Input"], Cell[14859, 459, 145, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[15016, 468, 314, 6, 70, "Text", Evaluatable->False], Cell[CellGroupData[{ Cell[15353, 476, 115, 2, 70, "Input"], Cell[15471, 480, 145, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[15648, 489, 349, 6, 70, "Subsection", Evaluatable->False], Cell[CellGroupData[{ Cell[16020, 497, 285, 5, 70, "Input"], Cell[16308, 504, 265, 10, 70, "Output", Evaluatable->False], Cell[16576, 516, 265, 10, 70, "Output", Evaluatable->False], Cell[16844, 528, 265, 10, 70, "Output", Evaluatable->False] }, Open ]] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[17159, 540, 93, 2, 70, "Section", Evaluatable->False], Cell[17255, 544, 393, 7, 70, "Text", Evaluatable->False], Cell[17651, 553, 211, 4, 70, "Input"], Cell[17865, 559, 218, 4, 70, "Input"], Cell[18086, 565, 293, 5, 70, "Input"], Cell[CellGroupData[{ Cell[18402, 572, 176, 3, 70, "Input"], Cell[18581, 577, 131, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[18744, 586, 277, 5, 70, "Input"], Cell[19024, 593, 145, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[19201, 602, 112, 2, 70, "Input"], Cell[19316, 606, 131, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[19459, 615, 279, 5, 70, "Text", Evaluatable->False] }, Closed]], Cell[CellGroupData[{ Cell[19770, 622, 93, 2, 70, "Section", Evaluatable->False], Cell[19866, 626, 117, 2, 70, "Text", Evaluatable->False], Cell[19986, 630, 208, 4, 70, "Input"], Cell[20197, 636, 218, 4, 70, "Input"], Cell[20418, 642, 542, 8, 70, "Input"], Cell[CellGroupData[{ Cell[20983, 652, 177, 3, 70, "Input"], Cell[21163, 657, 131, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[CellGroupData[{ Cell[21326, 666, 112, 2, 70, "Input"], Cell[21441, 670, 131, 7, 70, "Output", Evaluatable->False] }, Open ]], Cell[21584, 679, 238, 5, 70, "Text", Evaluatable->False] }, Closed]] }, Open ]] } ] *) (*********************************************************************** End of Mathematica Notebook file. ***********************************************************************)