<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v3.0 20080202//EN" "journalpublishing3.dtd">
<article article-type="research-article" dtd-version="3.0" xml:lang="en" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink">


	<front>
		<journal-meta>
			<journal-id journal-id-type="publisher-id">ARBOR</journal-id>
			<journal-title-group>
				<journal-title>ARBOR Ciencia, Pensamiento y Cultura</journal-title>
				<abbrev-journal-title>ARBOR</abbrev-journal-title>
			</journal-title-group>
			<issn pub-type="epub">0210-1963</issn>
			<publisher>
				<publisher-name>Consejo Superior de Investigaciones Cient&#x00ED;ficas</publisher-name>
			</publisher>
		</journal-meta>
		<article-meta>
			 <article-id pub-id-type="publisher-id">arbor.2013.764n6007</article-id>
			 <article-id pub-id-type="doi">10.3989/arbor.2013.764n6007</article-id>
			
			<article-categories>
				<subj-group subj-group-type="heading">
				<subject>EL LEGADO DE ALAN TURING / THE LEGACY OF ALAN TURING</subject>
				</subj-group>
			</article-categories>
			
			<title-group>
				<article-title>Alan Turing and the origins of modern Gaussian elimination<xref ref-type="fn" rid="NOTE01">1</xref></article-title>
				<trans-title-group xml:lang="es">
				<trans-title>Alan Turing y los or&#x00ED;genes de la eliminación gaussiana moderna</trans-title>
				</trans-title-group>
				<alt-title alt-title-type="running-head">Alan Turing</alt-title>
			</title-group>
			
			<contrib-group>
			  <contrib contrib-type="author" corresp="yes"> 
				<name>
				 <surname>Dopico</surname>
				 <given-names>Froil&#x00E1;n M.</given-names>
				</name>
				<xref ref-type="aff" rid="U1"/>
			  </contrib>
			  <aff id="U1">Instituto de Ciencias Matem&#x00E1;ticas CSIC-UAM-UC3M-UCM and Departamento de Matem&#x00E1;ticas, Universidad Carlos III de Madrid</aff>
			</contrib-group>
			
			<author-notes>
				<corresp id="cor1">e-mail: <email xlink:href="dopico@math.uc3m.es">dopico@math.uc3m.es</email>
				</corresp>
			</author-notes>
		
			<pub-date pub-type="collection">
			<year>2013</year>
			</pub-date>
			
			<volume>189</volume>
			<issue>764</issue>
			
			<elocation-id content-type="doi">10.3989/arbor.2013.764n6007</elocation-id>

			<history>
				<date date-type="received">
					<day>10</day>
					<month>07</month>
					<year>2013</year>
				</date>
				<date date-type="accepted">
					<day>15</day>
					<month>09</month>
					<year>2013</year>
				</date>
			</history>
		 
			<permissions>
				<copyright-statement>&#x00A9; 2013 CSIC</copyright-statement>
				<copyright-year>2013</copyright-year>
				<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by-nc/3.0/">
				<license-p>This is an open-access article distributed under the terms of the Creative Commons Attribution-Non Commercial (by-nc) Spain 3.0 License.</license-p>
				</license>
			</permissions>
		
			<abstract xml:lang="en">
				<title>ABSTRACT</title>
				<p>The solution of a system of linear equations is by far the most important problem in Applied Mathematics. It is important both in itself and because it is an intermediate step in many other important problems. Gaussian elimination is nowadays the standard method for solving this problem numerically on a computer and it was the first numerical algorithm to be subjected to rounding error analysis. In <xref ref-type="bibr" rid="CIT20">1948</xref>, Alan Turing published a remarkable paper on this topic: “Rounding-off errors in matrix processes” (<italic>Quart. J. Mech. Appl. Math.</italic> 1, pp. 287-308). In this paper, Turing formulated Gaussian elimination as the matrix LU factorization and introduced the “condition number of a matrix”, both of them fundamental notions of modern Numerical Analysis. In addition, Turing presented an error analysis of Gaussian elimination for general matrices that deeply influenced the spirit of the definitive analysis developed by James Wilkinson in <xref ref-type="bibr" rid="CIT24">1961</xref>. Alan Turing’s work on Gaussian elimination appears in a fascinating period for modern Numerical Analysis. Other giants of Mathematics, as John von Neumann, Herman Goldstine, and Harold Hotelling were also working in the mid-1940s on Gaussian elimination. The goal of these researchers was to find an efficient and reliable method for solving systems of linear equations in modern “automatic computers”. At that time, it was not clear at all whether Gaussian elimination was a right choice or not. The purpose of this paper is to revise, at an introductory level, the contributions of Alan Turing and other authors to the error analysis of Gaussian elimination, the historical context of these contributions, and their influence on modern Numerical Analysis.</p>
			</abstract>
			
			<trans-abstract xml:lang="es">
				<title>RESUMEN</title>
				<p>La resoluci&#x00F3;n de sistemas de ecuaciones lineales es sin duda el problema m&#x00E1;s importante en Matem&#x00E1;tica Aplicada. Es importante en s&#x00ED; mismo y tambi&#x00E9;n porque es un paso intermedio en la resoluci&#x00F3;n de muchos otros problemas de gran relevancia. La eliminaci&#x00F3;n Gaussiana es hoy en d&#x00ED;a el m&#x00E9;todo est&#x00E1;ndar para resolver este problema en un ordenador y, adem&#x00E1;s, fue el primer algoritmo num&#x00E9;rico para el que se realiz&#x00F3; un an&#x00E1;lisis de errores de redondeo. En <xref ref-type="bibr" rid="CIT20">1948</xref>, Alan Turing public&#x00F3; un art&#x00ED;culo de gran relevancia sobre este tema: “Rounding-off errors in matrix processes” (<italic>Quart. J. Mech. Appl. Math.</italic> 1, pp. 287-308). En este art&#x00ED;culo, Turing formul&#x00F3; la eliminaci&#x00F3;n Gaussiana en t&#x00E9;rminos de la factorizaci&#x00F3;n LU de una matriz e introdujo la noci&#x00F3;n de n&#x00FA;mero de condici&#x00F3;n de una matriz, que son dos de las nociones m&#x00E1;s fundamentales del An&#x00E1;lisis Num&#x00E9;rico moderno. Adem&#x00E1;s, Turing present&#x00F3; un an&#x00E1;lisis de errores de la eliminaci&#x00F3;n Gaussiana para matrices generales que influy&#x00F3; profundamente en el esp&#x00ED;ritu del an&#x00E1;lisis de errores definitivo desarrollado por Wilkinson en <xref ref-type="bibr" rid="CIT24">1961</xref>.   El trabajo de Alan Turing sobre la eliminaci&#x00F3;n Gaussiana aparece en un  periodo fascinante del An&#x00E1;lisis Num&#x00E9;rico moderno. Otros gigantes de las matem&#x00E1;ticas como John von Neumann, Herman Goldstine y Harold Hotelling tambi&#x00E9;n realizaron investigaciones sobre la eliminaci&#x00F3;n Gaussiana en la d&#x00E9;cada de 1940-50. El objetivo de estos investigadores era encontrar un m&#x00E9;todo eficiente y fiable para resolver  sistemas de ecuaciones lineales en los ordenadores modernos que estaban desarroll&#x00E1;ndose por entonces. En aquella &#x00E9;poca, no estaba claro en absoluto si utilizar la eliminaci&#x00F3;n Gaussiana era una elecci&#x00F3;n adecuada o no. El prop&#x00F3;sito de este art&#x00ED;culo es revisar, a nivel b&#x00E1;sico, las contribuciones realizadas por Alan Turing y otros investigadores al an&#x00E1;lisis de errores de la eliminaci&#x00F3;n Gaussiana, el contexto hist&#x00F3;rico de esas contribuciones y su influencia en el An&#x00E1;lisis Num&#x00E9;rico moderno.</p>
			</trans-abstract>
			
			<kwd-group xml:lang="es">
				<title>PALABRAS CLAVE</title>
				<kwd>&#x00E1;lgebra lineal num&#x00E9;rica</kwd>
				<kwd>an&#x00E1;lisis de errores de redondeo</kwd>
				<kwd>an&#x00E1;lisis num&#x00E9;rico</kwd>
				<kwd>eliminaci&#x00F3;n Gaussiana</kwd>
				<kwd>errores regresivos</kwd>
				<kwd>factorizaci&#x00F3;n LU de una matriz</kwd>
				<kwd>Goldstine</kwd>
				<kwd>n&#x00FA;mero de condici&#x00F3;n de una matriz</kwd>
				<kwd>Turing</kwd>
				<kwd>von Neumann</kwd>
				<kwd>Wilkinson</kwd>
			</kwd-group>
			
			<kwd-group xml:lang="en">
				<title>KEYWORDS</title>
				<kwd>backward errors</kwd>
				<kwd>condition number of a matrix</kwd>
				<kwd>Gaussian elimination</kwd>
				<kwd>Goldstine</kwd>
				<kwd>LU factorization of matrices</kwd>
				<kwd>numerical analysis</kwd>
				<kwd>numerical linear algebra</kwd>
				<kwd>rounding error analysis</kwd>
				<kwd>Turing</kwd>
				<kwd>von Neumann</kwd>
				<kwd>Wilkinson</kwd>
			</kwd-group>
		</article-meta>
	</front>		
	

	<body>
		
		<sec id="S1">
			<title>1. INTRODUCTION </title>
			
			<p>Alan Turing made several contributions that are considered fundamental in Mathematics and Computer Science and that are widely known by all mathematicians and computer scientists. Even more, the names of some of these contributions are also very well known by many educated people (who are not necessarily specialists) as, for instance, the name <italic>Turing Machine</italic> or the name <italic>Enigma</italic>. In addition, Alan Turing made other fundamental contributions that remain almost unknown for most mathematicians and computer scientists and, of course, completely unknown outside the academic world. One of these contributions is Alan Turing’s work on the error analysis of the method of <italic>Gaussian Elimination</italic> (GE) for solving systems of linear equations, <italic>which is one of the most important and ubiquitous numerical algorithms </italic>and, perhaps, the most, since it is used by many other numerical algorithms. Curiously enough, basic versions of GE are explained in high school courses of Mathematics and, therefore, GE is one of the best known algorithms by common people, but most professional mathematicians and computer scientists are unaware of its relationship with Alan Turing’s scientific contributions. </p>
			
			<p>Many numerical analysts know that Alan Turing was one of the first researchers working on the error analysis of GE. This is clearly explained in some standard references on Numerical Analysis. In particular, an excellent text that gives a detailed account on Turing’s contributions to the analysis of GE is Nicholas Higham’s <italic>“Accuracy and Stability of Numerical Algorithms” </italic>(Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>). Not incidentally, Nicholas Higham is “Richardson Professor” of Applied Mathematics in the School of Mathematics at Alan Turing Building in The University of Manchester, precisely the institution where Alan Turing spent the last part (1948-1954) of his short life, and Higham's book is dedicated to Alan Turing and James Wilkinson, who will be another important character in our story (see <xref ref-type="fig" rid="F1">Figure 1</xref>). Concerning Alan Turing’s work on GE, one can read the following paragraph in Higham (<xref ref-type="bibr" rid="CIT12">2002</xref>, pp. 184-185): </p>
			
			<p>“The experiences of Fox, Huskey, and Wilkinson prompted Turing to write a remarkable paper “Rounding-off errors in matrix processes” (Turing, <xref ref-type="bibr" rid="CIT20">1948</xref>). In this paper, Turing made several important con­tributions. He formulated the LU factorization of a matrix ... showing that Gaussian elimination computes an LU factorization. He introduced the term “condition number” and defined two matrix condition numbers ... He exploited backward error ideas ... Finally, and perhaps most importantly, he analysed Gaussian elimination with partial pivoting for general matrices and obtained a bound for (the error) ...”</p>
			
			<p>I am not mentioning above all the contributions of Turing listed by N. Higham (<xref ref-type="bibr" rid="CIT12">2002</xref>), but only those that I will consider in this manuscript because, in my opinion, they are the most interesting for a general audience. </p>
			
			<p> </p>
			
			
			
			
				<fig id="Foto1">
					  <label>Figure 1</label>
					  <caption>
						<title>(1) Alan Turing (1912-1954) and (2) James Wilkinson (1919-1986)</title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/foto1_web.png"/>
				</fig>
			
			
			<p>Probably most mathematicians and computer scientists, and certainly most common people, are unaware that Alan Turing was not the only great mathematician working on the error analysis of GE in the 1940’s. However, for numerical analysts it is well known that, before him, other giants of Mathematics considered the error analysis of GE as a very important problem and worked on it in the 1940’s. In fact, although Alan Turing certainly made a number of key and original contributions, some of the results presented in Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>) were previously known or were closely related to previous work by other authors. This has been pointed out in the complete recent survey <italic>“John von Neumann’s Analysis of Gaussian Elimination and the Origins of Modern Numerical Analysis</italic><xref ref-type="fn" rid="NOTE02">2</xref> by Joseph Grcar (<xref ref-type="bibr" rid="CIT09">2011b</xref>, p. 633), where one can find the following: </p>
			
			<p><disp-quote>“Turing coined the name “condition number” ... for measures of sensitivity of problems to error, and the acronym “LU” for the general decomposition. Textbooks tend to intimate that Turing introduced modern concepts by introducing the modern nomenclature, but the history is more complex. Algorithms had been described with matrix decompositions before Turing’s paper ... Measures of sensitivity evolved from as early as Wittmeyer in the 1930s ...” </disp-quote></p>
			
			<p>In this context, the main goal of this manuscript is to bring to the attention of the “widest as possible” audience the work of Alan Turing on GE and to explain why this problem was (<italic>“is”</italic>) so important in Numerical Analysis in particular, and in Mathematics in general. For this purpose, I aim to explain at an introductory level, accessible to readers with a basic background in Mathematics (the level of a last <italic>high school course</italic>), the most important ideas included in Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>) and their role in modern Numerical Analysis. I also want to briefly describe the fascinating historical period in which Alan Turing’s paper (<xref ref-type="bibr" rid="CIT20">1948</xref>) was written and published, as well as the work made by other very relevant researchers (Hotelling, von Neumann, Goldstine, Wilkinson) on the rounding error analysis of GE <italic>before and after</italic> Turing’s paper. I will stress <italic>the unique spirit of Alan Turing’s approach</italic> to the problem and its influence on modern Numerical Analysis. In my opinion, this spirit reflects very well the genius of Turing and establishes a difference between his work and the work by others. Finally, I will discuss a couple of very recent developments on error analysis of GE and the main problem still open on this topic. </p>
			
			
			<p>Before starting, let me say a few words about what this paper is not. <italic>It is not a rigorous</italic> mathematical paper, since Numerical Analysis is a branch of Mathematics full of technical details that can hide the main ideas for non-specialist readers. Therefore, I will omit to state many rigorous theorems in the exposition, although I will provide references where interested readers may find complete information. Moreover, <italic>this paper is not a work on the History of Mathematics</italic>. After reading with detail Turing’s paper (<xref ref-type="bibr" rid="CIT20">1948</xref>) and some recent works on the History of Numerical Analysis, I am convinced that Turing's paper deserves to be analysed in depth, both from the point of view of Turing’s scientific biography and from the point of view of the History of Numerical Analysis. An extensive study in the spirit of the recent paper by Joseph Grcar (<xref ref-type="bibr" rid="CIT09">2011b</xref>) on von Neumann’s contribution to GE is clearly necessary. However, this would lead to a very long paper or to a paper for specialists who already know the error analysis of GE and are interested in its origins and evolution. Therefore, I have chosen to write a paper on modern mathematical results, with modern mathematical notation, and where the history enters in the form of comments and remarks instead as explicit statements of original results from the 1940’s. </p>
			
			<p>The paper is organized as follows. In Section 2, a brief history of GE is presented and the classic and modern descriptions of GE are refreshed for those readers who have forgotten GE or who are not familiar with its modern treatment. Section 3 describes the historical context, from the point of view of Mathematics and Computer Science, in which the paper was published. Since the title of Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>) is <italic>“Rounding-off errors in matrix processes”</italic>, it is essential to describe in Section 4 in simple terms which are the errors committed by GE when it is run on a computer. This will allow us to understand why this problem is so interesting and difficult and to understand why a complete solution still remains an open problem. The error analysis of GE currently accepted was not developed in the 1940’s. It was developed by James Wilkinson in <xref ref-type="bibr" rid="CIT24">1961</xref>. Therefore, we discuss in Section 5 some key points about what Alan Turing did and did not in Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>). It is important to note that rounding error analysis of GE is still an active area of research and some recent works in this area are briefly described in Section 6. Finally, some conclusions are presented in Section 7. </p>
			
		</sec>
			
			
		<sec id="S2">
			<title>2. A BRIEF HISTORY AND DESCRIPTION OF GAUSSIAN ELIMINATION </title>
			
			<p>Classic books on the History of Mathematics, as well as recent studies on this subject, place the origins of GE in a variety of ancient texts from different places and times: China, Greece, Rome, India, medieval Arabic countries, and European Renaissance. However, in my opinion, it is not exact to say that these ancient/medieval/renaissance texts describe what we understand today as the <italic>method of GE</italic>, since these texts mainly present some specific problems that are solved in a way that fits in what today is accepted as GE, but they do not include any explicit statement of the set of rules that constitute the method of GE. In this context, I refer the reader to the excellent recent papers by Grcar (<xref ref-type="bibr" rid="CIT08">2011a</xref> y <xref ref-type="bibr" rid="CIT10">2011c</xref>) for a detailed account of the History of GE (including many interesting technical details) and of the researchers who contributed to its development. Here, for the sake of brevity and simplicity, I will only highlight the most important contributions and contributors. </p>
			
			<p>The developments of GE that include explicit statements of algorithmic rules can be organized essentially in three periods (Grcar, <xref ref-type="bibr" rid="CIT10">2011c</xref>) that are called the <italic>schoolbook elimination </italic>period, the <italic>professional elimination</italic> period, and the <italic>modern elimination</italic> period. </p>
			
			<p>The <italic>schoolbook elimination</italic> period corresponds to the development of GE essentially as it is presented in current high school textbooks. This period started with Isaac Newton (see <xref ref-type="fig" rid="F2a">Figure 2a</xref>), who lectured on Algebra as it appeared in Renaissance texts while working for his promotion to the Lucasian professorship. In 1669-1670 Newton wrote some notes where he established the systematic rules for solving systems of linear equations via the <italic>extermination</italic> (today <italic>elimination</italic>) method (Grcar, <xref ref-type="bibr" rid="CIT08">2011a</xref>). Taking into account Newton’s extremely powerful and systematic mind, I conjecture that he was not satisfied with the unsystematic way in which Renaissance Algebra texts described the solution of linear systems of equations and that this motivated him to write his notes. These notes remained unpublished until they were published in Latin in 1707 and in English in 1720. The clarity of these notes, as well as the immense prestige of Newton, led to many Algebra textbooks in the eighteenth century presenting the solution of systems of linear equations by following essentially Newton’s rules. We only mention here the very well-presented text <italic>“Element d’algèbre“</italic> (Paris, 5th ed., 1804) by Sylvestre Lacroix, where the modern word <italic>elimination</italic> was used for the first time instead of <italic>extermination</italic>. </p>
			
				<fig id="Foto2a">
					  <label>Figure 2a</label>
					  <caption>
						<title>Isaac Newton established first the rules of Gaussian elimination as they are still presented in current high school textbooks</title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/foto3.png"/>
				</fig>
				 
				<fig id="Foto2b">
					  <label>Figure 2b</label>
					  <caption>
						<title>Carl Friedrich Gauss developed efficient methods for solving normal equations, i.e., the special type of linear systems arising in the solution of least squares problems, via Gaussian elimination</title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/foto4.png"/>
				</fig>
			
			<p>The way GE is presented in high school textbooks is highly inefficient for solving moderately large systems of linear equations via <italic>hand</italic> computations. This was not a problem for some time, because large systems of linear equations did not arise in relevant real-world applications. This abruptly changed with the invention of the <italic>method of least squares</italic> by Adrien-Marie Legrendre (1805) and Carl Friedrich Gauss (1809) (or by Gauss and Legendre in reverse order!) at the beginning of the nineteenth century. </p>
			
			<p>The <italic>method of least squares</italic> answered the question of how to make accurate predictions from measurements with errors, a question that was motivated by practical measurements in astronomy and, more important in real-life applications, by geodetic research for cartography, an activity that was generously funded by governments in the nineteenth century. The least squares method finds a minimum of a certain quadratic function of many variables, but the important point for our story is that <italic>this minimum is the solution of a linear system of equations</italic> that are called <italic>normal equations</italic>. These systems of equations are very particular since, in modern nomenclature, their coefficient matrices are symmetric and positive definite. At the time of Gauss, normal equations might have as much as 20 equations and 20 unknowns and this was a formidable task for <italic>professional human computers</italic> if the elimination method was applied as described by Newton to compute the solution. </p>
			
			<p>These difficulties motivated Gauss to modify the high school elimination method of Newton in a nontrivial way and this is the start of the <italic>professional elimination</italic> period of GE. The details are too technical to be explained here (see Grcar, <xref ref-type="bibr" rid="CIT08">2011a</xref>), but the key point of Gauss’s method is to avoid writing symbolic algebraic equations and unknowns. By the use of a clever notation, Gauss computations were stored in lists of numbers. In addition, he halved the number of arithmetic operations needed with respect the high school elimination method by taking into account the symmetry of normal equations. Gauss’s method does not superficially resemble either high school elimination method or modern GE, but it was very important from the point of view of applications and it became part of the syllabus of geodesists, cartographers, and military engineers. </p>
			
			<p>Gauss’s method was significantly improved by Myrick Doolittle (1881), Andr&#x00E9;-Louis Cholesky (1924), who adapted it for being used with mechanical multiplying calculators, and Prescott Durand Grout (1941), who developed a method valid for general systems of equations and not only for normal equations. This essentially closes the <italic>professional elimination</italic> period of GE, since modern computers came into scene in the next few years. </p>
			
			<p>The <italic>modern elimination</italic> period of GE started in <xref ref-type="bibr" rid="CIT21">1947</xref> with the key paper by John von Neumann and Herman Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>), and continued one year later with the paper by Alan Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>), that motivates this manuscript. These authors considered implementations of GE with the aim of being used on <italic>digital, electronic, and programmable computers,</italic> i.e., modern computers. The motivation was not just to get an efficient implementation, but also a <italic>guaranteed and reliable implementation from the point of view of the rounding errors</italic> committed by modern computers. This required the development both of algorithmic improvements and of error analyses of GE. The interest on error analysis represents a fundamental difference with respect the activity in previous periods. The definitive error analysis of GE accepted today was presented by James Wilkinson (<xref ref-type="bibr" rid="CIT24">1961</xref>). The contents of the references mentioned in this paragraph will be described in more detail in next sections. </p>
			
			<p>It is important to observe that, since the 1940’s, the research on different aspects of GE has remained, and still remains, very active. The interested reader is invited to consult the wide collection of references included in Higham (<xref ref-type="bibr" rid="CIT12">2002</xref>, Chapters 8-14), as well as, the recent, complete, and easy-to-read review by Higham (<xref ref-type="bibr" rid="CIT13">2011</xref>). It may be also interesting to know that during the early stages of the modern elimination period GE took the name <italic>“Gaussian”</italic> (before, it was known simply as the <italic>“elimination method”</italic>)<italic>, </italic>apparently as a consequence of misattributing high school elimination to Gauss instead of Newton. More precisely, Turing writes “...Gauss’s <italic>elimination method. This is the method almost universally taught in schools...”</italic> in the first page of Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>) and it seems that George Forsythe was the first to call it “Gaussian <italic>elimination”</italic> in 1953 (Grcar, <xref ref-type="bibr" rid="CIT08">2011a</xref>; Grcar, <xref ref-type="bibr" rid="CIT10">2011c</xref>). </p>
			
			
			<sec id="S2.1">
			<title>2.1. Refreshing Gaussian elimination from high school with Newton </title>
			
			<p>In this section, I refresh the method of GE as it appears in high school textbooks via an example. Later, I will use the same example to illustrate how modern GE is presented in Numerical Analysis textbooks at the University-level. So, I propose that readers to imagine themselves to be young again, living the good times of high school, and, to make this exercise even more exciting, that they imagine that Newton is their teacher! </p>
			
			<p>Consider that we are asked to solve the following system of equations.  </p>
			
			
			
				<fig id="F1">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F1.png"/>
				</fig>
			
			
			<p>The key point of <italic>Gaussian elimination</italic> is to <italic>eliminate</italic> unknowns from certain equations. For describing the method of GE in a precise way, we number the equations in (1) from top to bottom, i.e., the top equa­tion is equation(1) and the bottom equation is equation(4). In a <italic>first stage</italic>, we eliminate <font face="times"><italic>x</italic></font><sub>1</sub> in all equa­tions below the first one via the following <italic>replacement operations:</italic> replace “equation(2)” by “equation(2) – (–2)×equation(1)”; replace “equation(3)” by “equation(3) – 3×equation(1)’’; and replace “equation(4)” by “equation(4) – 1×equation(1)”. So, we obtain the linear system </p>
			
			
				<fig id="I1">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I1.png"/>
				</fig>
			
			
			<p>Next, we perform the <italic>second stage</italic>, where we eliminate <font face="times"><italic>x</italic></font><sub>2</sub> in all equations below the second one via the replacement operations: replace, “equation(3)” by “equation(3) – (–4)×equation(2)”; and replace, “equation(4)” by “equation(4) – 2×equation(2)”. So, we obtain the linear system </p>
			
			
			
				<fig id="I2">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I2.png"/>
				</fig>
			
			
			
			<p>Finally, we perform the <italic>third stage</italic>, where we eliminate <font face="times"><italic>x</italic></font><sub>3</sub> in all equations below the third one via the replace­ment operation: replace “equation(4)” by “equation(4) – (–7)×equation(3)”. This leads to the following <italic>upper triangular </italic>linear system </p>
			
			
			
				<fig id="F2">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F2.png"/>
				</fig>
			
			
			
			<p>This is the end of the GE process that has transformed the linear system (1), which we did not know how to solve, into the linear system (2), which has the same solution and that can be solved very easily: from equation(4) we compute <font face="times"><italic>x</italic></font><sub>4</sub>; next from equation(3) we compute <font face="times"><italic>x</italic></font><sub>3</sub>; next from equation(2) we compute <font face="times"><italic>x</italic></font><sub>2</sub>; and, finally, from equation(1) we compute <font face="times"><italic>x</italic></font><sub>1</sub>. This procedure of solving (2) is known as <italic>backward substitution</italic>, and it computes the following solution:</p>
			
			
				<fig id="F3">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F3.png"/>
				</fig>
			
			
			<p>The process above can be easily generalized to systems with any number of equations and unknowns. </p>
			
			<p>The linear system (1) has some key features that ought to be mentioned. First note that (1) has the same numbers of equations as unknowns and that its solution is unique. In more advanced mathematical language, this is equivalent to say that <italic>the coefficient matrix of</italic> (1) <italic>is nonsingular. This is the only case in which GE is used on modern computers and is the only case that is considered in this paper</italic><xref ref-type="fn" rid="NOTE03">3</xref>. Probably, many readers recall from their high school days that GE was also used for linear systems with any number of equations and unknowns for determining whether they have solution or not, and/or, in the case they have, to find a parametric description of the infinite number of solutions. However, in these cases, GE is not reliable from a numerical point of view and other methods are used in actual numerical computations (Demmel, <xref ref-type="bibr" rid="CIT03">1997</xref>; Golub and van Loan, <xref ref-type="bibr" rid="CIT07">1996</xref>; Trefethen and Bau, <xref ref-type="bibr" rid="CIT19">1997</xref>). </p>
			
			<p>Another feature of (1) is that GE has run without <italic>interchanging equations</italic>. Interchanges of equations are needed, for instance, if after the second stage <font face="times"><italic>x</italic></font><sub>3</sub> does not appear in equation(3). I will discuss later how equations are interchanged when GE is currently implemented on computers. Finally, the readers might recall that at high school they used, in addition to replacement and interchange operations, <italic>scaling</italic> of equations, i.e., to multiply an equation by a nonzero number. Scaling operations are never used in modern GE. </p>
			
			<p>I am almost sure that most readers, apart from many happy memories in high school, have also recalled that to perform GE <italic>by hand</italic> is a long and boring process and that it is easy to make mistakes that spoil the whole solution. An important point to be noted is that, although GE, as explained by Newton, is very efficient from the point of view of the number of arithmetic operations, it is necessary to write several systems of equations. In our toy example (1), we have written just 4, but for solving a system of 20 equations with 20 unknowns, we should write 20 large systems! This makes Newton’s high school elimination very inefficient for solving large systems and motivated Gauss to developed his nontrivial <italic>professional elimination method</italic>. We will skip the description of this procedure and move directly to the description of modern GE. </p>
			
			</sec>
			
			<sec id="S2.2">
			<title>2.2. From high school to modern GE: the LU Matrix Factorization </title>
			
			<p>The most important mathematical concept of modern GE is the LU matrix factorization. It allows us to state in a compact and elegant matrix language the GE method described above, it plays an important role in the implementation of GE in modern computers, and, finally, it is essential to facilitate the rounding error analysis of the algorithm. To explain the LU factorization, we use again the linear system (1). To begin with, let us write (1) in <italic>matrix</italic> notation as </p>
			
			
				<fig id="F4">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F4.png"/>
				</fig>
			
			
			<p>The matrix <italic>A</italic> is called the coefficient matrix of system (1), <font face="times"><italic>x</italic></font> the unknown vector, and <italic>b</italic> the vector of inde­pendent terms (since it does not depend on the unknowns). The replacement operations for equations that were performed for transforming (1) into the upper triangular system (2) can be translated into <italic>replacement operations for rows</italic> of the matrix <italic>A</italic> and by applying them</p>
			
			
				<fig id="F5">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F5.png"/>
				</fig>
			
			
			<p>where <italic>U</italic> is the coefficient matrix of the system (2). Note that, at the moment, we are not paying attention to the vector <italic>b</italic> in (4). Let us collect the information in the paragraphs after (1) and list the row replacement operations applied in (5).</p>
			
			
				<fig id="F6">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F6.png"/>
				</fig>
			
			
			<p>The numbers –2, 3, 1, –4, 2, and –7 that multiply rows in each row replacement operation in (6) are called the <italic>multipliers of GE</italic> and our next step is to store them in a 4 x 4 matrix <italic>L</italic>. The entries where they are stored are easily determined by the two rows involved in each replacement operation in (6): –2 is stored in the entry (2, 1), 3 is stored in the entry (3, 1), 1 is stored in the entry (4, 1), and so on. Clearly, the multipliers only fill the entries below the diagonal of <italic>L</italic>. The remaining entries are defined as follows: all diagonal entries are set equal to one and all entries above the diagonal are set equal to zero. In this way we get </p>
			
			
				<fig id="F7">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F7.png"/>
				</fig>
			
			
			<p>So far, the matrix <italic>L</italic> is nothing else that a table where the multipliers of GE are stored, but from (5) and (7), the reader may check that the following <italic>miracle</italic> happens!!  </p>
			
			
				<fig id="F8">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F8.png"/>
				</fig>
			
			
			<p>which is the very famous <italic>LU factorization</italic> of the matrix <italic>A</italic>. This factorization expresses <italic>A</italic> as a product of a lower triangular matrix <italic>L</italic> with 1’s on the diagonal times an upper triangular matrix <italic>U</italic>. The LU factorization exists for almost all matrices and was introduced by von Neumann and Goldstine in <xref ref-type="bibr" rid="CIT21">1947</xref> in their celebrated paper. It was also considered later by Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>), where its current name LU was introduced. Here L stands for “lower” (triangular) and U for “upper” (triangular). Turing also stated the condition for the existence and uniqueness of the LU factorization in terms of the nonsingularity of the leading principal minors of <italic>A</italic> (Turing, <xref ref-type="bibr" rid="CIT20">1948</xref>, p. 289), as it is still stated today in standard texts on matrix computations (Demmel, <xref ref-type="bibr" rid="CIT03">1997</xref>; Golub and van Loan, <xref ref-type="bibr" rid="CIT07">1996</xref>; Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>). </p>
			
			<p>I would like to mention that we have constructed (8) via the multipliers of GE and the final matrix <italic>U </italic>obtained by the GE method. Conversely, if a matrix <italic>A</italic> is constructed as a product of an arbitrary lower triangular matrix <italic>L</italic> with 1’s on the diagonal times an arbitrary upper triangular matrix <italic>U</italic>, then the multipliers of GE applied on <italic>A</italic> are the lower triangular entries of <italic>L</italic> and <italic>U</italic> is the final matrix obtained by GE. </p>
			
			<p>The LU factorization is not the only factorization of a matrix involving triangular factors that is important in Numerical Analysis. In fact, accurate and efficient algorithms for computing different triangular factorizations of matrices were considered among the <italic>top ten</italic> algorithms of the twentieth century (Dongarra and Sullivan, <xref ref-type="bibr" rid="CIT05">2000</xref>), since they are widely used in the numerical solution of many applied problems. </p>
			
			
			</sec>
			
			<sec id="S2.3">
			
			<title>2.3. Modern GE: Solving linear systems via the LU factorization </title>
			
			<p>Nowadays, the solution of a linear system <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic>, where <italic>A</italic> is an <italic>n x n</italic> matrix, via the LU factorization is performed in three steps: </p>
			
			<p>1. Compute the LU factorization of <italic>A</italic>: <italic>A</italic> = <italic>LU </italic>.</p>
			
			<p>2. Solve for <font face="times"><italic>y</italic></font> the lower triangular linear system <italic>L</italic><font face="times"><italic>y</italic></font> = <italic>b</italic> by <italic>forward substitution</italic>, i.e., start by computing the first unknown <font face="times"><italic>y</italic></font><sub>1</sub> = <italic>b</italic><sub>1</sub> from the first equation, then use <font face="times"><italic>y</italic></font><sub>1</sub> to compute the second unknown <font face="times"><italic>y</italic></font><sub>2</sub> from the second equation, then use <font face="times"><italic>y</italic></font><sub>1</sub>, <font face="times"><italic>y</italic></font><sub>2</sub> to compute the third unknown <font face="times"><italic>y</italic></font><sub>3</sub> from the third equation, and so on. </p>
			
			<p>3. Solve for <font face="times"><italic>x</italic></font> the upper triangular linear system <italic>U</italic><font face="times"><italic>x</italic></font> = <font face="times"><italic>y</italic></font> by <italic>backward substitution</italic> as in (3). </p>
			
			<p>It is easy to see that these steps compute the solution, because if we substitute <font face="times"><italic>y</italic></font> from the third step into the equation in the second step, then we get <italic>L</italic>(<italic>U</italic><font face="times"><italic>x</italic></font>) = <italic>b</italic>, which is <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic>. This three-step approach was suggested first by Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>, p. 291), together with several other approaches for solving <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic>. However, it is interesting to mention that Turing did not identify the three-step approach as preferred over other options. Today, it is widely recognized that the three-step approach has several important advantages such as, for instance that it allows us to solve very easily, and almost without extra computational cost, other linear systems <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b'</italic> with the same coefficient matrix but different right-hand sides (a common situation in applications), and that it considerably simplifies the rounding error analysis of solving <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic> on a computer. </p>
			
			<p>Explicit algorithms for solving the triangular systems <italic>L</italic><font face="times"><italic>y</italic></font> = <italic>b</italic> and <italic>U</italic><font face="times"><italic>x</italic></font> = <font face="times"><italic>y</italic></font> appearing in the three-step approach can be written very easily and are not discussed here (see the standard references Demmel, <xref ref-type="bibr" rid="CIT03">1997</xref>; Golub and van Loan, <xref ref-type="bibr" rid="CIT07">1996</xref>; Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>). However, the computation of the LU factorization of <italic>A</italic> deserves some comments. The first one is that it is only needed to store the strictly lower triangular part of <italic>L</italic>, i.e., the entries below the diagonal, since the remaining entries are known to be zeros below or ones on the diagonal. Analogously, it is only needed to store the upper triangular part of <italic>U</italic>, i.e., the entries above and on the diagonal. Therefore, the nontrivial parts of <italic>L</italic> and <italic>U</italic> fit into the original matrix <italic>A</italic> and this saves storage requirements in computers and allows us to write the elegant and simple Algorithm 1 for computing the LU factorization of a matrix. I do not pretend at this level that average readers understand Algorithm 1. It is not difficult, but it requires some work and familiarity with programming matrix algorithms (see Demmel, <xref ref-type="bibr" rid="CIT03">1997</xref>; Golub and van Loan, <xref ref-type="bibr" rid="CIT07">1996</xref>; Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>). However, please take my word for it. This simple algorithm does really compute the LU factorization! Also, please look closely at Algorithm 1 before reading my comments below. </p>
			
			
				<fig id="I3">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I3.png"/>
				</fig>
			
			
			<p>Observe that Algorithm 1 consists only of <italic>two lines</italic> of arithmetic operations and <italic>three for-loops. Its simplicity is fascinating</italic>, particularly when it is compared with the long explanation process that is required to present GE and the construction of the LU factorization in most textbooks. Although it may not be obvious, note that the outer <italic>for-loop</italic> of Algorithm 1 corresponds to the <italic>“stages”</italic> of GE, i.e., the <italic>k</italic>-th step in the loop corresponds to the operations needed to eliminate (to set to zero) all entries below the diagonal in the <italic>k</italic>th column. </p>
			
			<p>The computational cost of Algorithm 1 is 2<italic>n</italic><sup>3</sup>/3 + <italic>O</italic>(<italic>n</italic><sup>2</sup>) arithmetic operations and this is also the cost of the three-step approach for solving <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic>, since the solution of the triangular systems <italic>L</italic><font face="times"><italic>y</italic></font> = <italic>b</italic> and <italic>U</italic><font face="times"><italic>x</italic></font> = <font face="times"><italic>y</italic></font> costs 2<italic>n</italic><sup>2</sup> – <italic>n</italic> arithmetic operations. </p>
			
			</sec>
			
			
			<sec id="S2.4">
			<title>2.4. Modern GE: Partial pivoting </title>
			
			<p>Algorithm 1 may produce huge errors when it is implemented on a computer if a very small <italic>pivot</italic> <italic>a</italic><sub>kk</sub> appears in some <italic>k</italic>th stage<xref ref-type="fn" rid="NOTE04">4</xref>, <italic>k</italic> = 1, 2, ... , <italic>n</italic> – 1. In actual computational practice, it is necessary to permute the rows of the matrix <italic>A</italic> (equivalently, the equations of the system <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic>) for obtaining a reliable algorithm. The permutations are performed “on line” as GE proceeds and several permutation (or pivoting) strategies are described in textbooks on <italic>Numerical Linear Algebra </italic>(Demmel, <xref ref-type="bibr" rid="CIT03">1997</xref>; Golub and van Loan, <xref ref-type="bibr" rid="CIT07">1996</xref>; Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>). However, only one of these strategies is universally adopted in professional software for solving linear systems. This is the <italic>partial pivoting</italic> strategy. </p>
			
			<p>For describing <italic>partial pivoting</italic>, it is convenient to introduce some additional notation. Let us define the matrices <italic>A</italic><sup>(1)</sup> := <italic>A</italic>, <italic>A</italic><sup>(k)</sup> as the matrix produced by GE at the start of the <italic>k</italic>th stage for <italic>k</italic> = 1, 2, ... , <italic>n</italic> – 1, and <italic>A</italic><sup>(n)</sup> := <italic>U</italic> as the upper triangular <italic>U</italic> factor obtained at the end of GE. The entries of <italic>A</italic><sup>(k)</sup> are denoted by <italic>a</italic><sub>ij</sub><sup>(k)</sup>, as usual. Recall that the <italic>k</italic>th stage of GE sets to zero the entries below the diagonal in the <italic>k</italic>th column. <italic>Partial pivoting</italic> interchanges at the start of the <italic>k</italic>th stage the <italic>k</italic>th and <italic>r</italic>th rows, where </p>
			
			
				<fig id="I4">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I4.png"/>
				</fig>
			
			
			<p>and after that an standard <italic>k</italic>th stage of GE is performed. To understand better how partial pivoting proceeds, let us apply it to the matrix <italic>A</italic> = <italic>A</italic><sup>(1)</sup> in (4). Note that the entry with largest absolute value in the first column of <italic>A</italic><sup>(1)</sup> is 6 in position (3, 1). Then <italic>partial pivoting exchanges</italic> rows 1 and 3 and after that the replacement operations “row(2) → row(2) –(–2/3)×row(1)”, “row(3) → row(3) –(1/3)×row(1)”, and “row(4) → row(4) –(1/3)×row(1)” are performed to obtain <italic>A</italic><sup>(2)</sup>. This is summarized in the following equation: </p>
			
			
				<fig id="I5">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I5.png"/>
				</fig>
			
			
			<p>Next, observe that the entry with largest absolute value in the second column of <italic>A</italic><sup>(2)</sup> <italic>on and below the diagonal</italic> is –10 in position (4, 2). Then <italic>partial pivoting exchanges</italic> rows 2 and 4 and after that the replacement operations “row(3) → row(3) –(2/5)×row(2)” and “row(4) → row(4)  –(–1/2)×row(2)” are performed to obtain <italic>A</italic><sup>(3)</sup>. This is summarized in the following equation: </p>
			
			
				<fig id="I6">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I6.png"/>
				</fig>
			
			
			<p>Next observe that the entry with largest absolute value in the third column of <italic>A</italic><sup>(3)</sup> <italic>on and below the diagonal</italic> is –12 in position (4, 3). Then <italic>partial pivoting exchanges </italic>rows 3 and 4 and after that the replacement operation “row(4) → row(4) –(–13/15) ×row(3)” is performed to obtain the upper triangular matrix <italic>A</italic><sup>(4)</sup>=: <italic>U</italic><sub><italic>P</italic></sub>, and the process of GE with <italic>partial pivoting</italic> finishes. This is summarized in the following equation: </p>
			
			
				<fig id="I7">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I7.png"/>
				</fig>
			
			
			<p>Once the row exchanges that have been done by partial pivoting are known, it is clear that the process is mathematically equivalent to permute <italic>A</italic> in advance accordingly and then to perform GE without any pivoting. Therefore GE with partial pivoting computes an LU factorization of a matrix <italic>PA</italic> = <italic>L<sub>P</sub>U<sub>P</sub></italic> that is obtained by exchanging rows 1 and 3 of <italic>A</italic>, after that rows 2 and 4, and, finally rows 3 and 4. We already know the matrix <italic>U<sub>P</sub></italic> and I propose the reader to deduce from the replacement operations performed above and <italic>taking into account the row interchanges</italic> the lower triangular factor <italic>L<sub>P</sub></italic>. The final factorization is </p>
			
			
				<fig id="F9">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F9.png"/>
				</fig>
			
			
			<p>The comparison of the LU factorization of <italic>PA</italic> in (9) with the one of the original matrix A<italic> </italic>in (8)–(7)–(5) reveals that row permutations in <italic>A</italic> induce drastic changes in the LU factors: <italic>L</italic> and <italic>L<sub>P</sub></italic> are very different, as well as <italic>U</italic> and <italic>U<sub>P</sub></italic>. This is an indicator of why rounding errors in GE depend deeply on the pivoting strategy and why the error analysis of GE is extremely difficult. A key observation is that all entries of <italic>L<sub>P</sub></italic> coming from partial pivoting have absolute values less than or equal to 1, while this does not happen for <italic>L</italic>. This property is of fundamental importance and readers can find more information about it in Demmel (<xref ref-type="bibr" rid="CIT03">1997</xref>), Golub and van Loan (<xref ref-type="bibr" rid="CIT07">1996</xref>), Higham (<xref ref-type="bibr" rid="CIT12">2002</xref>). </p>
			
			<p>Partial pivoting can be easily and elegantly incorporated in Algorithm 1. The details are omitted, but can be found in Demmel (<xref ref-type="bibr" rid="CIT03">1997</xref>), Golub and van Loan (<xref ref-type="bibr" rid="CIT07">1996</xref>), Higham (<xref ref-type="bibr" rid="CIT12">2002</xref>). Partial pivoting allows us to write the definitive algorithm of modern Gaussian elimination. </p>
			
			<p><bold>Algorithm 2</bold> (Modern Gaussian Elimination) </p>
			
			<p><font face="typewriter">Input</font>: <italic>A matrix of size n x n and b vector of size n x 1 </italic></p>
			
			<p><font face="typewriter">Output</font>: <italic>Solution of linear system A<font face="times">x</font> = b given as vector <font face="times">x</font> of size n x 1 </italic></p>
			
			<p>1. <italic>Compute the LU factorization of A with partial pivoting: PA = LU</italic>. </p>
			
			<p>2. <italic>Solve for <font face="times">y</font> the lower triangular L<font face="times">y</font> = Pb by forward substitution</italic>. </p>
			
			<p>3. <italic>Solve for <font face="times">x</font> the upper triangular system U<font face="times">x</font> = <font face="times">y</font> by backward substitution</italic>. </p>
			
						
			<p>The term “partial pivoting” was introduced by Wilkinson (<xref ref-type="bibr" rid="CIT24">1961</xref>), but pivoting techniques were in use in the 1940s and it is not clear who can be said to have invented them. </p>
			
			
			</sec>
			
		</sec>
			
			
		<sec id="S3">
			
			<title>3. HISTORICAL CONTEXT OF ALAN TURING’S PAPER ON ROUNDING ERRORS </title>
			
			
			<p>In the 1940s there were three very famous papers giving error analyses of GE. The first one was written by Harold Hotelling in <xref ref-type="bibr" rid="CIT15">1943</xref>; the second one was written by John von Neumann and Herman Goldstine in <xref ref-type="bibr" rid="CIT21">1947</xref>; and the third one is the paper published by Alan Turing in <xref ref-type="bibr" rid="CIT20">1948</xref>. There were, of course, other papers published in the 1940’s on the same subject, but they have had much less influence than the three papers mentioned above and, therefore, are not considered in this work. Among the three papers (Hotelling, <xref ref-type="bibr" rid="CIT15">1943</xref>; von Neumann and Goldstine, <xref ref-type="bibr" rid="CIT21">1947</xref>; Turing, <xref ref-type="bibr" rid="CIT20">1948</xref>), the one by von Neumann and Goldstine in the best known and, without any doubt, the most influential. It is a key paper that has been considered by several top numerical analysts as <italic>the first paper of modern Numerical Analysis</italic>, where <italic>“modern”</italic> has here the sense, already used before, of <italic>“analyzing methods to be used on digital, electronic, programmable computers”</italic>. More information on von Neumann and Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>) can be found in Grcar (<xref ref-type="bibr" rid="CIT09">2011b</xref>) and in Wilkinson (<xref ref-type="bibr" rid="CIT27">1971a</xref>). </p>
			
			<p>The three papers were written before modern computers existed, but they were motivated by the existence of several projects for constructing the first <italic>“modern computers”</italic> in United Kingdom and USA. In this work, as usual, the term <italic>“modern computer”</italic> should be understood as a <italic>“digital, electronic, and programmable computer”</italic>. To fully realize the context in the 1940s with respect numerical computations, we can imagine ourselves as researchers in the 1940s. Then, it would be clear for us that modern computers would come very soon and that they would offer a huge power of computation compared with that of available desk electro-mechanical calculators. For taking advantage of this “computational giant step”, a key question would be to determine whether the numerical methods used in the 1940s and before would be accurate and efficient on modern computers or not. For those problems where a negative answer was obtained, new methods had to be developed. </p>
			
			<p>In the 1940s, as well as today, one of the most important numerical problems was the solution of “large” (the precise meaning of “large” changes continuously with time) systems of linear equations, since they appear in many applications. In addition, in Turing’s own words (<xref ref-type="bibr" rid="CIT20">1948</xref>, p. 287), <italic>“The best known method for the solution of linear equations is Gauss’s elimination method. This is the method almost universally taught in schools”</italic>. Therefore, we can see as very natural for a researcher in the 1940s to study GE from a new perspective: its practical use on modern computers. </p>
			
			<p>The paper by Hotelling (<xref ref-type="bibr" rid="CIT15">1943</xref>) was mainly motivated by applications in Statistics. GE was considered in pages 6-7, where Hotelling presented a very simple error analysis that produces an <italic>error bound that increases exponentially with the number of equations n</italic>, more precisely, it increases as 4<sup><italic>n-1</italic></sup>. This error bound led Hotelling (<xref ref-type="bibr" rid="CIT15">1943</xref>, pp. 7-8) to state: <italic>“The rapidity with which this increases with n is a caution against relying on the results of ... elimination methods ... when the number of equations and unknowns is at all large</italic>.” and <italic>“There is here a distinct need of using an iterative process ...” </italic></p>
			
			<p>Hotelling’s results led to general pessimism in mid 1940s about the practical use of GE for solving large systems of equations and motivated the papers by von Neumann and Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>) and by Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>). In particular we can read in the first page of Turing’s paper: <italic>“(GE) has, unfortunately, recently come into disrepute on the ground that rounding off will give rise to very large errors. It has, for instance, been argued by Hotelling (ref. 5) that in solving a set of n equations we should keep</italic> <italic>n</italic>log<sub>10</sub>4 <italic>extra or “guarding” figures.”</italic> A key point of this discussion is to realize that during a period of five years GE was almost discarded as a reliable method for solving linear systems of equations in modern computers and, as a consequence, that several other methods were actively investigated. In addition, note that the cause of this situation was the absence of an <italic>adequate rounding error analysis of GE</italic> guaranteeing good error bounds for the computed solution, but that GE was accepted in the 1940s to be very efficient with respect the number of needed arithmetic operations. <italic>The technical discipline</italic>, often considered boring and too specialized in the 21st century, <italic>of rounding error analysis came on to the scene as a lead actor, and it was essentially created in the 1940s for solving the GE problem. </italic></p>
			
			<p>The error analyses developed by von Neumann and Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>) and by Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>) are much more sophisticated than the one by Hotelling and they restored the confidence on GE. However, it should be remarked that none of these papers solved satisfactorily the problem of the error analysis of GE: this problem was too formidable even for geniuses such as von Neumann and Turing, two of the greatest mathematicians in history, who are famous for solving some of the hardest problems in the History of Mathematics. This difficulty in the analysis is in stark contrast with the fact that GE is a very simple algorithm taught at high school level. The error analysis of GE accepted nowadays came much later, in <xref ref-type="bibr" rid="CIT24">1961</xref>, with the pioneer work by James Wilkinson (<xref ref-type="bibr" rid="CIT24">1961</xref>) and it will be discussed with detail in Subsection 4.3. However, <italic>a complete rigorous solution of the problem of the rounding error analysis of GE remains as one of the major unsolved problems in Numerical Analysis</italic>, and its precise formulation will be discussed in Subsection 4.4. </p>
			
			<p>The results in von Neumann and Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>) deserve a few words. The long, difficult, and rigorous error analysis by von Neumann and Goldstine is not general because it is only valid for systems of the type <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic> where the matrix <italic>A</italic> is positive definite. This covers the important case of the normal equations arising in least squares problems<xref ref-type="fn" rid="NOTE05">5</xref>, but not many other linear systems that are important in applications. After developing a theory of GE and LU factorization for general matrices <italic>A</italic>, von Neumann and Goldstine honestly recognize at the beginning of Section 5.1 in von Neumann and Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>) that they are unable to perform a general rounding error analysis and they limit their analysis to positive definite matrices. We quote from von Neumann and Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>, p. 1056): <italic>"We have not so far been able to obtain satisfactory error estimates for the pseudo-operational equivalent of the elimination method in its general form, ... We did, however, succeed in securing everything that is needed in the special case of a definite A". </italic></p>
			
			<p>In contrast, Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>) considered the error analysis of GE in the general case. Facing a problem that von Neumann could not solve is a very strong indicator of Turing’s great courage, self-confidence, and unbounded ambition as a researcher. However, the analysis done by Turing has some important drawbacks, although his conclusions on the errors committed by GE with partial pivoting and its practical use on modern computers still remain valid today. These questions will be further discussed in Section 5. </p>
			
			<p>Next, two additional points on the three papers are discussed. The three papers (Hotelling, <xref ref-type="bibr" rid="CIT15">1943</xref>; von Neumann and Goldstine, <xref ref-type="bibr" rid="CIT21">1947</xref>; Turing, 1948) were written by top researchers, who considered the problem very important from an applied point of view, but also, <italic>from a fundamental point of view</italic>, since GE was the first algorithm to be subjected to rounding error analysis and the fundamentals of rounding error analysis had to be established for the first time. This is especially evident in the paper by von Neumann and Goldstine that spends 19 pages establishing the sources of errors in computations and the rules to perform rounding error analyses of algorithms running on modern computers. </p>
			
			<sec id="S3.1">
			<title>3.1. A few words on the authors of the three papers </title>
			
			<p>I will not explain in detail the mathematical contributions of John von Neumann (see <xref ref-type="fig" rid="F3">Figure 3</xref>) and Alan Turing (see <xref ref-type="fig" rid="F1">Figure 1</xref>), since both are very well-known and are considered as two of the most important mathematicians in history. Jean Dieudonn&#x00E9; (<xref ref-type="bibr" rid="CIT04">1981</xref>) wrote that John von Neumann has been <italic>“the last of great mathematicians”</italic>, as a consequence of the large number of different fields where von Neumann made major contributions. These fields include, among others, set theory, functional analysis, numerical analysis, quantum mechanics, game theory, and computer science. In fact, von Neumann was a founder of some of these fields as, for instance, game theory and computer science. Alan Turing made also fundamental contributions in several areas. He solved the famous “decision problem” posed by David Hilbert in 1928 via the invention of Turing’s machines. In addition, Turing was one of the founders of modern cryptanalysis, of computers science, of artificial intelligence, of modern numerical analysis, and of mathematical biology. The definitive source of information about Turing’s life and contributions is the monumental biography by Andrew Hodges (<xref ref-type="bibr" rid="CIT14">2012</xref>). </p>
			
			 <fig id="Foto3a">
					  <label>Figure 3a</label>
					  <caption>
						<title>John von Neumann and Herman Goldstine were the authors of “Numerical inverting of matrices of high order” in 1967, often considered as the first paper of modern Numerical Analysis</title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/foto5.png"/>
				 </fig>
				 
				  <fig id="Foto3b">
					  <label>Figure 3b</label>
					  <caption>
						<title>John von Neumann and Herman Goldstine were the authors of “Numerical inverting of matrices of high order” in 1967, often considered as the first paper of modern Numerical Analysis</title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/foto6.png"/>
				 </fig>
				 
				  <fig id="Foto3c">
					  <label>Figure 3c</label>
					  <caption>
						<title>Harold Hotelling was an influential statistician who introduced principal component analysis, among other contributions. In 1943, he did an error analysis of GE which led to general pessimism about its practical use in modern computers</title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/foto7.png"/>
				 </fig>
			
			<p>Harold Hotelling and Herman Goldstine (see <xref ref-type="fig" rid="F3">Figure 3</xref>), the other authors of the <italic>three papers</italic>, were also top researchers in their day, although not of the same level as von Neumann and Turing. Hotelling was born in Minnesota in 1895. He was a mathematical statistician and an influential economic theorist. He held positions in prestigious institutions as Stanford University (1927-31), Columbia University (1931-46), and finally he became Professor of Mathematical Statistics at the University of North Carolina at Chapel-Hill (1946-1973). He received the North Carolina Award for contributions to science in 1972 and a street in Chapel Hill bears his name. He is widely known to statisticians because he introduced the Hotelling T-square distribution and, more importantly, the canonical correlation or principal component analysis, which is a fundamental technique in statistics. </p>
			
			
			
			<p>Herman Goldstine was born in Chicago in 1913. He was awarded bachelor (1933), master (1934) and PhD (1936) degrees in mathematics from the University of Chicago. In 1941 he wrote the technical description for ENIAC (Electronic Numerical Integrator And Computer), which was the first electronic computer starting to work in 1946 (up to 1955). He joined the Army in 1942, when the United States entered World War II and he persuaded the Army to fund the construction of ENIAC in 1943 and subsequently became programme manager of ENIAC. Although ENIAC was thousands of times faster than previously available electro-mechanical machines and was programmable, there was no way to issue orders at electronic speed (modern programs)<xref ref-type="fn" rid="NOTE06">6</xref> and ENIAC had to be configured with patch cords and rotary switches for each task. Therefore, the need for ENIAC’s successor was evident even before ENIAC was completed and this motivated a contribution that was indirect, but extremely important for the history of computer science and GE, by Goldstine: In 1944 Goldstine involved von Neumann in planning ENIAC’s successor and this resulted in the famous von Neumann’s 1945 report <italic>“First draft of a report on the EDVAC”</italic> on how to build a modern computer (available in Aspray and Burks, <xref ref-type="bibr" rid="CIT01">1987</xref>), and in a long and fruitful collaboration between Goldstine and von Neumann. Goldstine was awarded the USA National Medal of Science in 1985. </p>
			
			<p>An additional information may be of interest for readers on the fascinating 1940’s: It is often said that von Neumann’s famous report <italic>“First draft of a report on the EDVAC”</italic>, together with Turing’s also famous 1946 report <italic>“Proposed Electronic Calculator”</italic> (available in Carpenter and Doran, <xref ref-type="bibr" rid="CIT02">1986</xref>) are the foundational documents of computer architecture and that most of the ideas stated in them still remain valid today. </p>
			
			</sec>
			
			<sec id="S3.2">
			<title>3.2. Turing’s and von Neumann’s projects for building modern computers </title>
			
			<p>Many projects for constructing modern computers got underway in the 1940s. A brief account of them may be found in Grcar (<xref ref-type="bibr" rid="CIT09">2011b</xref>) and a complete history in Rojas and Hashagen (<xref ref-type="bibr" rid="CIT17">2000</xref>). Here, I will say just a few words on the projects in which Alan Turing and John von Neumann were involved, because at that time they simultaneously became interested in the error analysis of GE. This stresses further the fact that the research on rounding error analysis of GE is motivated by applications and runs parallel with the development of modern computers. </p>
			
			<p>Turing was involved in the NPL Pilot ACE (National Physical Laboratory Pilot Automatic Computing Engine) project developed in Teddington, England. Turing worked at NPL from 1945 to 1948 and during this period he also worked in rounding error analysis of GE. Basically, Turing did the first design of Pilot ACE in 1946 which was, probably, very ambitious for the resources of NPL and was never constructed. The Pilot ACE started to work in May 1950, without Turing, based mainly on ideas of Harry Huskey and James Wilkinson (see more comments in Wilkinson, <xref ref-type="bibr" rid="CIT28">1971b</xref>). </p>
			
			<p>Turing moved to The University of Manchester in September 1948. There, he collaborated in the Baby/Mark 1 project. The Small-Scale Experimental Machine, known as the ‘Baby”, made its first successful run of a program on June 21st 1948. It was the first machine that had all the components now regarded as characteristic of a modern computer. Most importantly it was the first computer that could store not only data but any user program in electronic memory and process it at electronic speed. From the ‘Baby” a full-sized machine was designed and built, the Manchester Mark 1, which by April 1949 was generally available for computation in scientific research in the University of Manchester. Turing worked in the project and helped to design the program language of the computer. </p>
			
			<p>Von Neumann started to lead the computer project at the Institute of Advanced Studies at Princeton (USA) (the “IAS computer project”) in 1946 and Goldstine joined him from the very beginning. In this period they became interested in rounding errors in GE. The first IAS computer started to work in 1951, i.e., later than its UK competitors. However, its influence on modern computers is, probably, more important, since several clones of the IAS computer were built from 1952 to 1957, including the first IBM mainframe. </p>
			
			</sec>
			
		</sec>
			
		<sec id="S4">
			<title>4. ROUNDING ERROR BOUNDS FOR GAUSSIAN ELIMINATION </title>
			
			<p>After explaining the history of GE and its particular historical context in the 1940’s, now the key properties of the rounding errors committed by GE are considered. This is the most technical section of the paper and “for encouraging” the reader, I will start with a quotation from the Preface of one of the most popular textbooks on Numerical Linear Algebra, written by Lloyd N. Trefethen and David Ban (<xref ref-type="bibr" rid="CIT19">1997</xref>): </p>
			
			<p>“... <italic>We have departed from the customary by not starting with </italic>Gaussian elimination. <italic>That algorithm is atypical of Numerical Linear Algebra</italic>, exceptionally difficult to analyze, <italic>yet at the same time tediously familiar to every student...” </italic></p>
			
			<p>In plain words, this means that GE is recognized by professional numerical analysts as very easy to explain, but <italic>very difficult to analyse</italic>. Therefore, I am asking the reader an extra effort for understanding its analysis! </p>
			
			
			<sec id="S4.1">		
			<title>4.1 The axioms of rounding error analysis </title>
			
			<p>Rounding errors in computers come from two facts. First, computers can only represent a finite subset of the real numbers, which is called the set of <italic>floating point numbers</italic>, and is usually denoted by <img src="images/letraF.png" align="absmiddle" />. This fact alone, obviously, produces errors when storing the data of any problem on the computer. Second, <img src="images/letraF.png" align="absmiddle" /> is not closed under the basic arithmetic operations (+, –, x, /), however when these operations are performed on a computer, they must give another number of , and this fact produces further errors. These two facts are encapsulated into the <italic>axioms of rounding error analysis, </italic>that can be found in many textbooks (Demmel, <xref ref-type="bibr" rid="CIT03">1997</xref>; Golub and van Loan, <xref ref-type="bibr" rid="CIT07">1996</xref>; Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>; Trefethen and Bau, <xref ref-type="bibr" rid="CIT19">1997</xref>). These axioms are: </p>
			
			<p><bold>Axiom 1</bold> (Rounding) <italic>If <font face="times">x</font> &#x2208; <img src="images/letraR.png" align="absmiddle" /> lies in the range of <img src="images/letraF.png" align="absmiddle" />, then <font face="times">x</font> is approximated by a number &#x0192;<font face="times">l</font>(<font face="times">x</font>) &#x2208; <img src="images/letraF.png" align="absmiddle" /> such that</italic></p>
				
				
				<fig id="I9">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I8.png"/>
				 </fig>
			
			
			<p><italic>where</italic> <bold>u</bold> <italic>is the</italic> unit roundoff of the computer. </p>
			
			<p>In current computers <bold>u</bold> = 2<sup>–53</sup> ≈ 1.11 x 10<sup>–16</sup> in double precision and <bold>u</bold> = 2<sup>–24</sup> ≈ 5.96 x 10<sup>–8</sup> in single precision. In Axiom 1, the exact meaning of the sentence “<font face="times">x</font> &#x2208; <img src="images/letraR.png" align="absmiddle" /> lies in the range of <img src="images/letraF.png" align="absmiddle" />” is that the absolute value of <font face="times">x</font> is smaller than or equal to the largest absolute value of the numbers in <img src="images/letraF.png" align="absmiddle" /> and larger than or equal to the smallest absolute value of the nonzero numbers in <img src="images/letraF.png" align="absmiddle" />.</p>
			
			<p><bold>Axiom 2</bold> (Floating Point Arithmetic) <italic>If <font face="times">x</font>, <font face="times">y</font></italic> &#x2208; <img src="images/letraF.png" align="absmiddle" /> <italic>and</italic> <bold>op</bold> &#x2208; {+, –, x, /}, <italic>then</italic></p>
			
			
			<fig id="I10">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I9.png"/>
				 </fig>
			
			
			<p><italic>where</italic> (<font face="times"><italic>x</italic></font> <bold>op</bold> <font face="times"><italic>y</italic></font>) <italic>is the exact result of the operation, that may not be in <img src="images/letraF.png" align="absmiddle" />, and</italic> computed (<font face="times"><italic>x</italic></font> <bold>op</bold> <font face="times"><italic>y</italic></font>) <italic>is the result produced by the computer </italic>.</p>
			
			<p>Axiom 2 is sometimes called the <italic>“exact-round principle”</italic> and, in plain words, it can be stated as <italic>“computers should be thought of as performing each arithmetic operation exactly and then rounding to a floating point number”</italic>. The reader should note the key role that the unit roundoff <bold>u</bold> plays in Axioms 1 and 2. All algorithms are combinations of (many) basic {+, –, x, /} operations and the idea of rounding error analysis is to combine via the axioms above the errors in all these operations to produce a final relative error in the computed magnitude. In most cases, only the first order term in <bold>u</bold> of the relative error is necessary and this makes the analyses much simpler. So, <italic>in this paper, we will restrict ourselves to stating first order rounding error bounds</italic>.</p>
			
			<p>From a historical point of view, it should be noted that Axioms 1 and 2 of floating point arithmetic were introduced by Wilkinson in <xref ref-type="bibr" rid="CIT23">1960</xref>, but that the original idea of establishing simple axioms for rounding error analysis goes back to von Neumann and Goldstine in their <xref ref-type="bibr" rid="CIT21">1947</xref> paper, where they introduced corresponding axioms for the fixed point arithmetic used in the 1940s. The error analysis in Turing’s <xref ref-type="bibr" rid="CIT20">1948</xref>-paper does not include axioms for rounding errors and, in this sense, is very far from current error analyses. </p>
			
			</sec>
			
			<sec id="S4.2">
			<title>4.2. A simple explanation of Hotelling’s exponentially-increasing error bound </title>
			
			<p>The main reason why Hotelling obtained a rounding error bound for GE that increases exponentially with the size of the matrix is easy to understand by combining Axioms 1 and 2 (that Hotelling did not know!) with Algorithm 1, and <italic>performing a naive direct rounding error analysis</italic>. If Algorithm 1 is written in formal mathematical language, i.e., avoiding equalities like <font face="times"><italic><big>a</big><sub>ij</sub> = <big>a</big><sub>ij</sub> – <big>a</big><sub>ik</sub><big>a</big><sub>kj</sub></italic></font> that in formal Mathematics have the only meaning of <font face="times"><italic><big>a</big><sub>ik</sub><big>a</big><sub>kj</sub></italic></font> = 0, then the following updating is obtained </p>
			
			
			<fig id="F10">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F10.png"/>
				 </fig>
			
			
			<p>Here <img src="images/M2.png" align="absmiddle"/> are entries of the matrix <italic>A</italic><sup>(k)</sup>, <italic>k</italic> = 1, 2, ... , <italic>n</italic>, defined in Subsection 2.4 and note that only the entries <italic>k</italic> + 1 ≤ <italic>i, j</italic> ≤ <italic>n</italic> are updated at the <italic>k</italic>th stage, so we define <img src="images/M3.png" align="absmiddle"/> for the remaining entries. In addition, due to the fact that Algorithm 1 stores the nontrivial entries of the <italic>L</italic> factor in the strictly lower triangular part of <italic>A</italic>, the matrix <italic>A</italic><span class="superindice"><small><small>(k)</small></small></span> has the following structure: it has zeros below the diagonal in the first <italic>k</italic> – 1 columns and the rest of the entries are the <img src="images/M2.png" align="absmiddle"/> entries defined above. </p>
			
			<p>Now, let us proceed with a simplified analysis and denote by <italic>Â</italic><span class="superindice"><small><small>(k)</small></small></span> the computed matrix in floating point arithmetic by Algorithm 1 corresponding to the exact matrix <italic>A</italic><span class="superindice"><small><small>(k)</small></small></span>. <italic>Â</italic><span class="superindice"><small><small>(1)</small></small></span> does not involve any arithmetic operation, since it comes from storing <italic>A</italic><span class="superindice"><small><small>(1)</small></small></span> := <italic>A</italic> in the computer and, therefore, Axiom 1 implies that <img src="images/M6.png" align="absmiddle"/>. This is equivalent to the following bound for the relative error<xref ref-type="fn" rid="NOTE07">7</xref> in each entry: <img src="images/M7.png" align="absmiddle"/>. Assume now that the entries of <italic>Â</italic><span class="superindice"><small><small>(k)</small></small></span> satisfy the relative error bound </p>
			
			
				<fig id="F11">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F11.png"/>
				</fig>
			
			
			<p>i.e., <bold>e<sub>k</sub></bold> is an upper bound on <italic>the maximum relative error at the kth stage of GE</italic>. This is what we want to determine by induction and by taking into account that we know <bold>e<sub>1</sub></bold> = <bold>u</bold>. Next, let us pay attention to the last term in (10), i.e., <img src="images/M8.png" align="absmiddle"/>, which is in fact the responsible of the exponential growth of the error bound. As most readers learnt when they were very young (probably, even before they learnt GE or, for sure, no later than the first year in the University), the relative error of <italic>an exact </italic>series of products and quotients of numbers affected by relative errors is the sum of the relative errors of each individual number. So, from (11), </p>
			
			
				<fig id="F12">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F12.png"/>
				</fig>
			
			
			<p>where 2nd-order terms in the errors have been discarded. Of course, there are still more errors, coming from Axiom 2, when computing (10) in floating point arithmetic, but their effect is <italic>to increase the error bound in</italic> (12), they are not essential in our simplified analysis, and they are omitted. Therefore, a bound on the <italic>maximum relative error at</italic> (<italic>k</italic> + 1)th stage of GE, i.e., <bold>e<sub>k+1</sub></bold>, satisfies <bold>e<sub>k+1</sub></bold> &#x2273; 3<bold>e<sub>k</sub></bold>, and, since <bold>e<sub>l</sub></bold> = <bold>u</bold> ≈ 10<sup>-16</sup> and GE performs (<italic>n</italic> – 1) stage transitions for an <italic>n</italic> x <italic>n</italic> matrix, the following error bound </p>
			
			
				<fig id="F13">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F13.png"/>
				</fig>
			
			
			<p>is finally obtained. The error bound in (13) is really huge even for small sized matrices: for <italic>n</italic> = 30, <bold>e<sub>n</sub></bold> &#x2273; 6.9 x 10<sup>–3</sup> ; for <italic>n</italic> = 40, <bold>e<sub>n</sub></bold> &#x2273; 4.1 x 10<sup>2</sup>; and, for <italic>n</italic> = 50, <bold>e<sub>n</sub></bold> &#x2273; 2.4 x 10<sup>7</sup>. Therefore, for <italic>n</italic> ≥ 40, the error bound (13) does not guarantee a single digit of accuracy in the results of GE! As it was explained in Section 3, this led to general pessimism in mid 1940s about the practical use of GE and motivated the papers by von Neumann and Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>) and by Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>). However, the error analysis that appears in modern textbooks is the one presented by James Wilkinson in his fundamental <xref ref-type="bibr" rid="CIT24">1961</xref>-paper. This is discussed in next subsection. </p>
			
			</sec>
			
			<sec id="S4.3">
			<title>4.3. James Wilkinson’s backward error analysis of GE </title>
			
			<p><italic>Backward error analysis represents a drastic change of approach</italic>. The natural approach to rounding error analysis seems to be to bound the difference between the exact solution <font face="times"><italic>x</italic></font> of the linear system <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic> and the approximate solution <img src="images/letrax.png" align="absmiddle"/> computed in floating point arithmetic by Algorithm 2, i.e., by modern GE. In contrast, <italic>backward error analysis</italic> bounds the difference between the matrix <italic>A</italic> and a certain matrix <italic>A</italic> + &#x2206;<italic>A</italic> such that (<italic>A</italic> + &#x2206;<italic>A</italic>)<img src="images/letrax.png" align="absmiddle"/> = <italic>b</italic>. If this difference is small, then <italic>backward error analysis establishes that the computed solution is the exact solution of a nearby linear system</italic>. Although this might seem odd at a first glance, note that the exact matrix <italic>A</italic> is never available for the computer, because errors are made just by storing <italic>A</italic> in the computer (see Axiom 1) and, in addition, very often in practice the entries of <italic>A</italic> are affected by experimental or modelling errors. Therefore, even in the ideal case that GE does not make errors after storing <italic>A</italic> and <italic>b</italic> in the computer, the computed solution would be just the solution of a nearby linear system and <italic>backward error analysis aims to describe the best possible situation</italic> that one can imagine in practice. </p>
			
			<p>Before stating Wilkinson’s famous result, it is necessary to establish effective ways to measure differences between matrices (<italic>A</italic> and <italic>A</italic> + &#x2206;<italic>A</italic>) and vectors (<font face="times"><italic>x</italic></font> and <img src="images/letrax.png" align="absmiddle"/>). This is done via matrix and vector norms (Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>, Chapter 6). In this paper only the infinite-norm is used. If <font face="times"><italic>x</italic></font> is an <italic>n</italic> x 1 vector and <italic>A</italic> is an <italic>n</italic> x <italic>n</italic> matrix, then their vector and matrix infinite-norms are defined as </p>
			
			
				<fig id="I11">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I11.png"/>
				</fig>
			
			
			<p>Nowadays, every numerical analyst is familiar with matrix norms, but this was not the case in the 1940’s. In fact, the paper by von Neumann and Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>) was the first to bring matrix norms to the attention of numerical analysts in a systematic way. Now we can state (to first order in <bold>u</bold>) the result by Wilkinson. </p>
			
			<p><bold>Theorem 1 (Wilkinson, <xref ref-type="bibr" rid="CIT24">1961</xref>. Backward errors in GE.)</bold> <italic>Let A be a real n x n nonsingular matrix, let b be a real n x 1 vector, and let <img src="images/letrax.png" align="absmiddle"/> be the approximate solution of the linear system <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic> computed by GE with partial pivoting in a computer with unit roundoff <bold>u</bold>. Then <img src="images/letrax.png" align="absmiddle"/> satisfies </italic></p>
			
			
				<fig id="F14">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F14.png"/>
				</fig>
			
			
			<p><italic>where</italic> </p>
			
			
				<fig id="F15">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F15.png"/>
				</fig>
			
			
			
			<p><italic>is the growth factor of GE with partial pivoting. Here A<sup>(1)</sup> = A, A<sup>(2)</sup>, ... , A<sup>(n)</sup> = U are the matrices appearing in the GE process as they were defined in Section 2.4. </italic></p>
			
			<p>The proof of Theorem 1 is not difficult with the tools currently available, but it requires some technical work so is omitted here. Interested readers can found two different modern proofs in Higham (<xref ref-type="bibr" rid="CIT12">2002</xref>) (shorter and sharper) and Golub and van Loan (<xref ref-type="bibr" rid="CIT07">1996</xref>) (following step by step Algorithm 2). Observe that equation (14) indeed states that the computed solution <img src="images/letrax.png" align="absmiddle"/> is the exact solution of a linear system that is very close to the original one, i.e., to <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic>, as long as the growth factor <img src="images/letrapn.png" align="absmiddle"/> is not large. This is in fact the case as we will discuss in Subsection 4.4 and, so, it is said that GE with partial pivoting is a <italic>backward stable algorithm</italic>. Theorem 1 is an instance of the “mantra” that every numerical analyst working on matrix computations should repeat again and again: <italic>“The ideal objective of an algorithm is to compute outputs that are exact for nearby inputs, because this means that the algorithm achieves as much accuracy as the data warrants”</italic>. The most reputed algorithms of Numerical Linear Algebra are backward stable, but not all algorithms used in practice are. </p>
			
			
			<p>Some modern texts (Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>, p. 185) and papers (Grcar, <xref ref-type="bibr" rid="CIT09">2011b</xref>) indicate that von Neumann &#x0026; Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>) and Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>) introduced “backward error analysis”. In my opinion, <italic>this is not completely true</italic>. Von Neumann &#x0026; Goldstine and Turing indeed mentioned backward errors (without the name) in these papers, but in a rather marginal way, and did not realize the importance of this concept. For instance, Turing mentions backward errors in the last page of his 22-page paper and von Neumann &#x0026; Goldstine in page 71 of their 79-page paper. Wilkinson (<xref ref-type="bibr" rid="CIT27">1971a</xref>) attributed the credit for the first backward error analysis to Wallace Givens in <xref ref-type="bibr" rid="CIT22">1954</xref> for an analysis of an algorithm for computing the eigenvalues of symmetric tridiagonal matrices by using the Sturm sequence property of their leading principal minors. <italic>Nowadays, backward error analysis is one of the most fundamental and powerful ideas in Numerical Analysis and this is mostly a consequence of the monumental research work done by James Wilkinson on rounding errors</italic>(see <xref ref-type="fig" rid="F1">Figure 1</xref>). </p>
			
			<p>James Wilkinson was a Cambridge-trained English mathematician who worked as Turing’s assistant at NPL (1946-48). He is considered the founder of modern rounding error analysis by using systematically backward errors for analysing many numerical algorithms for matrix computations. He wrote two influential books on Numerical Analysis: <italic>Rounding Errors in Algebraic Processes</italic> in <xref ref-type="bibr" rid="CIT25">1963</xref> and <italic>The Algebraic Eigenvalne Problem</italic> in <xref ref-type="bibr" rid="CIT26">1965</xref>. James Wilkinson (<xref ref-type="bibr" rid="CIT28">1971b</xref>, pp. 143-144) said that his first contact with backward errors happened while he was serving in the United Kingdom <italic>Armament Research Department</italic> during World War II. At that time, he had to solve a system <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic> of twelve linear equations and decided to use GE with partial pivoting. Wilkinson was sure that the computed solution <img src="images/letrax.png" align="absmiddle"/> had errors several orders of magnitude larger than the unit roundoff (of those times!).  However, when he substituted <img src="images/letrax.png" align="absmiddle"/> in the equations to his <italic>“astonishment the left-hand side agreed with the given right-hand side to”</italic> full accuracy. In modern language, this means that <italic>the residual</italic> <italic>b</italic> - <italic>A</italic><img src="images/letrax.png" align="absmiddle"/> satisfied ||<italic>b</italic> - <italic>A</italic><img src="images/letrax.png" align="absmiddle"/>||<sub>∞</sub> ≈ <bold>u</bold>||<italic>b</italic>||<sub>∞</sub>, a fact that is deeply connected to backward errors, as we will discuss in Section 4.6. Wilkinson claimed at that time <italic>“I have the exact solution corresponding to a right-hand side which differs only in the tenth figure from the given one”</italic>. Unfortunately, Wilkinson did not pursue then this line of research since it was not appreciated by his taskmaster at the Armament Research Department. </p>
			
			</sec>
			
			
			<sec id="S4.4">
			<title>4.4. One of the major unsolved problems in Numerical Analysis </title>
			
			<p>The backward error bound (14) for GE with partial pivoting (GEPP) includes the growth factor <img src="images/letrapn.png" align="absmiddle"/> of the matrix <italic>A</italic>. This factor is the ratio of the maximum absolute value of the entries of the matrices arising in GEPP and the maximum absolute value of the entries of the original matrix <italic>A</italic>. Example 1 illustrates the growth factor in a matrix that has been arranged, for simplicity, in such a way that GEPP does not require any permutation. </p>
			
			<p><bold>Example 1</bold> </p>
			
			
				<fig id="I12">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I12.png"/>
				</fig>
			
			
			<p>The maximum absolute value of the entries of <italic>A</italic> is 10 and the maximum absolute value of the entries of <italic>A</italic><sup>(2)</sup>, <italic>A</italic><sup>(3)</sup>, and <italic>A</italic><sup>(4)</sup> is 11.76. Therefore </p>
			
			
				<fig id="I13">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I13.png"/>
				</fig>
			
			
			<p>Note that the growth factor is larger than or equal to one for any matrix <italic>A</italic> by definition. </p>
			
			<p>The key question in this context is to determine whether there exist matrices with very large growth factors or not. The answer is given in Theorem 2 and is <italic>yes</italic>. Wilkinson knew this fact as early as in <xref ref-type="bibr" rid="CIT22">1954</xref>, long before developing his backward error analysis. </p>
			
			<p><bold>Theorem 2 (Wilkinson, <xref ref-type="bibr" rid="CIT22">1954</xref>)</bold> <italic>Let A be an n x n nonsingular matrix. Then the growth factor of A for GE with partial pivoting satisfies  </italic></p>
			
				<fig id="I14">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I14.png"/>
				</fig>
			
			
			<p><italic>and this bound is attained for the n x n matrix </italic></p>
			
			
			
				<fig id="I15">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I15.png"/>
				</fig>
			
			
			
			<p>Combining Theorem 2 with the bound in (14) for the unit roundoff <bold>u</bold> = 2<sup>–53</sup> of double precision, one obtains </p>
			
			
				<fig id="F16">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F16.png"/>
				</fig>
			
			
			<p>which is a huge bound for matrices with <italic>n</italic> ≥ 54, i.e., for very small matrices, and would make GEPP useless in practice. In a sense, (16) tells us that Hotelling was right: there is no way of avoiding in GEPP errors that increase exponentially with the size of the matrix. However, note that Wilkinson’s analysis gives us much more information than Hotelling’s, since (14) implies that the backward errors are tiny whenever the growth factor <img src="images/letrapn.png" align="absmiddle"/> of <italic>A</italic> is moderate. Therefore, <italic>GEPP would be a reliable algorithm in practice if matrices with large growth factors are very rare</italic>, otherwise it may produce frequently large errors. This is indeed the case: large growth factors are extremely rare, as it is stated in the next paragraph by Nick Higham (<xref ref-type="bibr" rid="CIT12">2002</xref>, p. 168): </p>
			
			<p><disp-quote>“To summarize, although there are practically occurring matrices for which partial pivoting yields a moderately large, or even exponentially large, growth factor, the growth factor is almost invariably found to be small. Explaining this fact remains one of the major unsolved problems in Numerical Analysis.”</disp-quote> </p>
			
			<p>How should we pose precisely this unsolved problem? One option is to consider random matrices whose entries are independent random variables and to prove that the probability of encountering a growth factor <img src="images/letrapn.png" align="absmiddle"/> &gt; <font face="times">α</font> decreases extremely fast as <font face="times">α</font> increases (perhaps, exponentially fast!). More information on the solution of this problem, including a money prize, can be found in Trefethen (<xref ref-type="bibr" rid="CIT18">2012</xref>). Here, I want to stress some important facts on this open problem. First, its solution would not change at all the algorithm of modern GE. Second, <italic>GEPP has not waited for the solution of the open problem for being widely used, since GEPP is nowadays the standard method for solving linear systems of equations on computers, despite the fact that its stability is not rigorously proved</italic>. This is based on years of practical experience with GEPP that have shown that large growth factors never occur in real computing. Third, the idea that practical numerical methods do not need to be fully supported by proofs to be useful goes back to Turing’s paper (<xref ref-type="bibr" rid="CIT20">1948</xref>), as will be discussed in Section 5. Finally, there are methods that are perfectly backward stable for solving linear systems (like the one based on the QR factorization (Trefethen and Bau, <xref ref-type="bibr" rid="CIT19">1997</xref>)), but they are not used in practice since they are computationally more expensive than GEPP. </p>
			
			</sec>
			
			
			<sec id="S4.5">
			<title>4.5 From backward to forward errors: The condition number of a matrix </title>
			
			<p>The fact that a numerical algorithm is <italic>“backward stable”</italic> is very satisfactory for numerical analysts, since it is equivalent to say that the errors are the best that can be expected from the input data. However, for users of software it may be a somewhat obscure concept and many times a bound on the <italic>forward errors </italic>is preferred. In the case of GEPP, the forward error is ||<img src="images/letrax.png" align="absmiddle"/> – <font face="times"><italic>x</italic></font>||<sub>∞</sub>/||<font face="times"><italic>x</italic></font>||<sub>∞</sub>, where <font face="times"><italic>x</italic></font> and <img src="images/letrax.png" align="absmiddle"/> are, respectively, the exact and the computed solution of <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic>. From Theorem 1, the problem of bounding the forward error in the solution can be posed as a pure mathematical problem of <italic>perturbation theory</italic>, i.e., if the input matrix <italic>A</italic> is perturbed, how much does the solution change? We use the notation of Theorem 1 and present the solution of this problem as it was stated by Wilkinson (<xref ref-type="bibr" rid="CIT25">1963</xref>, p. 93).  </p>
			
			
				<fig id="F17">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F17.png"/>
				</fig>
			
			
			<p>where it is assumed that ||<italic>A</italic><sup>–1</sup>||<sub>∞</sub>||&#x2206;<italic>A</italic>||<sub>∞</sub>&lt; 1. By discarding second order terms in the perturbation ||&#x2206;<italic>A</italic>||<sub>∞</sub> and by using (14), equation (17) becomes </p>
			
			
				<fig id="F18">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F18.png"/>
				</fig>
			
			
			<p>The inequalities in (18) tell us that <italic>tiny relative perturbations of the matrix A may produce large relative variations in the solution if the number</italic> ||<italic>A</italic>||<sub>∞</sub>||<italic>A</italic><sup>–1</sup>||<sub>∞</sub> <italic>is huge and that, even in the case that the growth factor of A is moderate, the “forward errors” committed by GEPP may he large if</italic> ||<italic>A</italic>||<sub>∞</sub>||<italic>A</italic><sup>–1</sup>||<sub>∞</sub> <italic>is huge</italic>. We see that the number ||<italic>A</italic>||<sub>∞</sub>||<italic>A</italic><sup>–1</sup>||<sub>∞</sub> plays a fundamental role in the perturbation theory of the solution of linear systems and in the “forward errors” committed by GEPP. It is the very famous <italic>condition number of a matrix</italic> :</p>
			
			
				<fig id="F19">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F19.png"/>
				</fig>
			
			
			<p>I want to insist more on a fact that is very familiar to numerical analysts, but that it is still surprising for many users of numerical software. <italic>There are not numerical algorithms that solve linear systems of equations with guaranteed tiny forward errors</italic>, i.e., with forward errors that are always of order unit roundoff. Bounds <italic>O</italic>(<bold>u</bold>)<italic>k</italic><sub>∞</sub>(<italic>A</italic>) as the one in (18) are the best that hold for linear solvers valid for general matrices. There is no way to avoid in general the presence of the condition number. </p>
			
			
			<p>The condition number <italic>k</italic><sub>∞</sub>(<italic>A</italic>) (or in other norms) arises in many other problems in matrix computations and from the point of view of perturbation theory and numerical applications is the most important single number attached to a matrix (Demmel, <xref ref-type="bibr" rid="CIT03">1997</xref>; Golub and van Loan, <xref ref-type="bibr" rid="CIT07">1996</xref>; Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>). It is not easy to determine who discovered the <italic>“condition number”</italic>. No question that the name was introduced by Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>) and, in my opinion, Turing also deserves the credit for the concept. The essentials are in his 1948-paper, although it is true that Turing gives an “unusual” definition of “condition number” and also that shows in an unusual way its relationship with the variation of the solution of a linear system <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic> under perturbations of <italic>A</italic> and <italic>b</italic>. Before Turing’s paper, von Neumann &#x0026; Goldstine used the condition number (in the 2-norm and with the name “figure of merit”) in their error bounds, but they do not show any clear perturbation inequality involving the condition number. The first fully rigorous perturbation results on condition numbers were proved by Bauer in 1959 for matrix inverses and by Wilkinson in <xref ref-type="bibr" rid="CIT25">1963</xref> for linear systems (see Grcar, <xref ref-type="bibr" rid="CIT09">2011b</xref> for more details). </p>
			
			</sec>
			
			<sec id="4.6">
			<title>4.6 Backward errors and residuals </title>
			
			<p>Theorem 1 presents backward errors of GEPP, but it does not show how Wilkinson reached this “at a first-glance unnatural” way of presenting/analysing rounding errors. I have already commented in the last paragraph of Section 4.3 that Wilkinson was motivated by a few numerical tests that always produced tiny residuals. In fact, we will see in Section 5 that this was also Turing’s motivation for undertaking his error analysis of GE. Therefore, I discuss in this section the deep connection existing between backward errors and residuals and how residuals can be used to give sharp optimal estimates of backward errors. The results can be applied to any algorithm for solving linear systems and not just to GEPP. </p>
			
			<p>First, observe that if the approximated solution, <img src="images/letrax.png" align="absmiddle"/>, of <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic> computed by a certain algorithm satisfies (<italic>A</italic> + &#x2206;<italic>A</italic>)<img src="images/letrax.png" align="absmiddle"/> = <italic>b</italic>, with ||&#x2206;<italic>A</italic>||<sub>∞</sub> = <italic>O</italic>(<bold>u</bold>)||<italic>A</italic>||<sub>∞</sub> then <italic>b</italic> – <italic>A</italic><img src="images/letrax.png" align="absmiddle"/> = &#x2206;A<italic>A</italic><img src="images/letrax.png" align="absmiddle"/>. So, ||<italic>b</italic> – <italic>A</italic><img src="images/letrax.png" align="absmiddle"/>||<sub>∞</sub> ≤ ||&#x2206;<italic>A</italic>||<sub>∞</sub>||<img src="images/letrax.png" align="absmiddle"/>||<sub>∞</sub> = <italic>O</italic>(<bold>u</bold>)||<italic>A</italic>||<sub>∞</sub>||<img src="images/letrax.png" align="absmiddle"/>||<sub>∞</sub>. In plain words, this means that a tiny relative backward error of order <bold>u</bold> implies a tiny <italic>relative residual</italic> ||<italic>b</italic> – <italic>A</italic><img src="images/letrax.png" align="absmiddle"/>||<sub>∞</sub>/(||<italic>A</italic>||<sub>∞</sub> ||<img src="images/letrax.png" align="absmiddle"/>||<sub>∞</sub>) also of order <bold>u</bold>. Much more surprising is that the implication in the opposite direction is also true, i.e., that a tiny relative residual implies a tiny relative backward error. In fact, for any matrix <italic>A</italic> and for any vectors <img src="images/letrax.png" align="absmiddle"/> and <italic>b</italic>, it can be proved that </p>
			
			
				<fig id="F20">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/F20.png"/>
				</fig>
			
			
			<p>According to the discussion in Higham (<xref ref-type="bibr" rid="CIT12">2002</xref>, pages 12 and 29), the result in (20) was proved by Wilkinson for the 2-norm in some moment in the 1950s and, after discovering it, he began to develop backward error analysis systematically. Rigal and Gaches proved in <xref ref-type="bibr" rid="CIT16">1967</xref> a result much more general than (20), where they allow perturbations in <italic>A </italic>and <italic>b </italic>and the use of any vector norm and the corresponding subordinate matrix norm. An excellent modern reference on different relationships between residuals and backward errors for linear systems is Higham (<xref ref-type="bibr" rid="CIT12">2002</xref>, Chapter 7). </p>
			
			<p>Now, the reader can fully appreciate why the fact that GEPP computed solutions <img src="images/letrax.png" align="absmiddle"/> with relative residuals ||<italic>b</italic> – <italic>A</italic><img src="images/letrax.png" align="absmiddle"/>||<sub>∞</sub>/(||<italic>A</italic>||<sub>∞</sub> ||<img src="images/letrax.png" align="absmiddle"/>||<sub>∞</sub>) = <italic>O</italic>(<bold>u</bold>) in all the numerical tests that Wilkinson performed was a strong motivation for trying to prove a result in the spirit of Theorem 1, but the proof had to wait for some years and came from the hand of the nontrivial growth factor. Also note that the left-hand side of (20) provides a simple practical way for computing the “best possible backward error” of the approximate solution <img src="images/letrax.png" align="absmiddle"/> with respect the linear system <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic>. We finish this section with an example that illustrates the presented concepts. </p>
			
			<p><bold>Example 2</bold> Consider the matrix </p>
			
			
				<fig id="I16">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I16.png"/>
				</fig>
			
			
			<p>and store it in the MATLAB program (Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>, p. 575), which uses double precision floating point arithmetic. MATLAB gives the following value for the condition number of <italic>A</italic>: <italic>k</italic><sub>∞</sub>(<italic>A</italic>) ≈ 1.06x10<sup>22</sup>. Define the 3 x 1 vector <font face="times"><italic>x</italic></font> = [1, 1, 1]<sup>T</sup> and compute in MATLAB <italic>b</italic> = <italic>A</italic><font face="times"><italic>x</italic></font>. So, we have constructed a linear system whose exact solution is known. Compute the solution <img src="images/letrax.png" align="absmiddle"/> by using the <italic>backslash</italic> command (\) of MATLAB, which uses GEPP. Then we get, also in MATLAB, </p>
			
			
			
				<fig id="I17">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I17.png"/>
				</fig>
			
			
			<p>The growth factor (15) of <italic>A</italic> for GEPP is 1. Observe that the relative error in the solution is huge, which is explained by (18) with <bold>u</bold> ≈ 10<sup>–16</sup>. However, the relative residual is of order <bold>u</bold>, according to (14) and (20). As Wilkinson used to say, huge errors in the solution must be “diabolically correlated” to give tiny residuals. </p>
			
			</sec>
			
		</sec>
			
			
		<sec id="S5">
			
			<title>5. REMARKS ON ALAN TURING’S PAPER ON ROUNDING ERRORS </title>
			
			<p>Alan Turing wrote his famous “rounding-off error” paper (<xref ref-type="bibr" rid="CIT20">1948</xref>) when he and James Wilkinson were in the National Physical Laboratory. The story of the genesis of the paper is told by Wilkinson (<xref ref-type="bibr" rid="CIT28">1971b</xref>, pp. 144-145), where one can read the following </p>
			
			<p><disp-quote>“... <italic>it happened that some time after my arrival, a system of 18 equations arrived in Mathematics Divison and ... we finally decided to abandon theorizing and to solve it ... The operation was manned by Fox, Goodwin, Turing, and me, and we decided on Gaussian elimination with complete pivoting</italic>. Turing was not particularly enthusiastic ... <italic>partly</italic> because he was convinced that it would be a failure. <italic>History repeated ... and the residuals were again of order </italic>10<sup>-10</sup><italic>, that is of the size corresponding to the exact solution rounded to ten decimals. ... I suppose this must be regarded as a defeat for </italic>Turing since he, <italic>at that time</italic>, was a keener adherent than any of the rest of us to the pessimistic school. <italic>However, I’m sure that this experience made quite an impression on him and set him thinking afresh on the problem of rounding errors in elimination processes. About a year later he produced his famous paper “Rounding-off errors in matrix processes” ...” </italic></disp-quote></p>
			
			<p>In the modern language introduced in Section 4.6 what Turing, Wilkinson and coworkers observed was that the relative residual was of order unit roundoff. Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>, p. 287) recognised that he was prompted to carry out his <italic>“research largely by the practical work of L. Fox in applying the elimination method”</italic>. Curiously, Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>) did not mention here to Wilkinson, although he cited among the references a paper by Fox, Huskey, and Wilkinson on this subject published in the same journal and volume as Turing’s paper but 140 pages before. </p>
			
			<p>Turing believed, <italic>based on a few numerical tests available in the 1940s</italic>, that GE with pivoting was a stable method for solving <italic>general</italic> systems of linear equations on a computer, and he undertook for first time the task of developing the corresponding rounding error analysis. Recall, in this context, that von Neumann and Goldstine (<xref ref-type="bibr" rid="CIT21">1947</xref>) only analysed the stability of positive definite linear systems. However, <italic>Turing knew that GE could fail, although only in exceptional cases</italic>. This is made explicit in the first page of Turing (<xref ref-type="bibr" rid="CIT20">1948</xref>), where one finds </p>
			
			<p><disp-quote><italic>“Actually, although examples can be constructed where as many as n</italic>log<sub>10</sub>2 <italic>extra figures would be required, these are exceptional. In the present paper the magnitude of the error is described in terms of quantities not considered in Hotelling’s analysis; from the inequalities proved here it can immediately be seen that in all normal cases the Hotelling estimate is far too pessimistic.” </italic></disp-quote></p>
			
			<p>Therefore, <italic>Turing essentially reached in the 1940s the same conclusion that remains valid today</italic> and that has been discussed in Section 4.4: although the error bounds of GEPP may increase exponentially with the size for some matrices, these matrices are very rare and GEPP can be used with confidence in practice. <italic>This Turing’s pioneer insight has influenced in depth Numerical Analysis in general, and Matrix Computations in particular</italic>. Observe also in this point, the differences between Turing’s way of thinking and those of Hotelling and von Neumann &#x0026; Goldstine. Hotelling discovered that GE may produce errors that increase exponentially with the size of the matrix, something that is entirely true, and this led him to pessimism on the use of GE. He was not able to determine if these exponentially increasing error bounds happen very rarely or not. On the other hand von Neumann &#x0026; Goldstine did not consider even the possibility of performing an error analysis of GE for general matrices, since they were unable to avoid the exponential error bound. </p>
			
			<p>However, it should be also remarked that Turing’s analysis is non-standard from a modern point of view. In particular, it is based on the key assumption (Turing, <xref ref-type="bibr" rid="CIT20">1948</xref>, pp. 302 and 306), that I quote literally </p>
			
			<p><disp-quote>“<italic>We assume that in the calculation of each quantity </italic></disp-quote></p>
			
			
			
				<fig id="I18">
					  <label></label>
					  <caption>
						<title></title>
					  </caption>
					  <graphic xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="../images/I18.png"/>
				</fig>
			
			
			<p><disp-quote><italic>an error of at most <i><small>&#x2208;</small></i> is made. How this is to be secured need not he specified, but it is clear that the number of figures to be retained in <img src="images/M9.png" align="absmiddle"/> will have to depend on the values of the <img src="images/M10.png" align="absmiddle"/>.”</italic></disp-quote></p>
			
			<p>The difficulty with this assumption is that no computer, either present or past, can guarantee a rounding error bound like this in finite precision arithmetic. In fact, <italic>“the error at most <i><small>&#x2208;</small></i>”</italic> eliminates from Turing’s analysis any possibility of discovering the <italic>growth factor</italic>, which does not appear at all in his <xref ref-type="bibr" rid="CIT20">1948</xref>-paper. Turing’s rounding error bound for the solution of <italic>A</italic><font face="times"><italic>x</italic></font> = <italic>b</italic> are expressed in terms of the unknown quantity <i><small>&#x2208;</small></i>. Even with the unrealistic and ideal assumption <i><small>&#x2208;</small></i> = <bold>u</bold>||<italic>A</italic>||<sub>∞</sub>, Turing’s error bound for the approximate solution <img src="images/letrax.png" align="absmiddle"/> computed by GEPP becomes a non optimal bound of the type ||<font face="times"><italic>x</italic></font> – <img src="images/letrax.png" align="absmiddle"/>||<sub>∞</sub>/||<font face="times"><italic>x</italic></font>||<sub>∞</sub> &#x2272; (||<italic>A</italic>||<sub>∞</sub>||<italic>A</italic><sup>–1</sup>||∞)<sup>2</sup> <italic>p</italic>(<italic>n</italic>)<bold>u</bold>, with <italic>p</italic>(<italic>n</italic>) a low degree polynomial in <italic>n</italic> that does not depend on the growth factor. A trivial change in the last steps of Turing’s analysis would produce ||<font face="times"><italic>x</italic></font> – <img src="images/letrax.png" align="absmiddle"/>||<sub>∞</sub>/||<font face="times"><italic>x</italic></font>||<sub>∞</sub> &#x2272; (||<italic>A</italic>||<sub>∞</sub>||<italic>A</italic><sup>–1</sup>||∞) (<italic>p</italic>(<italic>n</italic>)<bold>u</bold>), which has the standard form (18) but does not include the growth factor. </p>
			
		</sec>
			
			
		<sec id="S6">
			<title>6. RESEARCH ON ERROR ANALYSIS OF GAUSSIAN ELIMINATION IS STILL ACTIVE </title>
			
			<p>Since Wilkinson’s pioneer paper was published in <xref ref-type="bibr" rid="CIT24">1961</xref> many papers have been written on rounding error analysis of GE. This is a consequence of the fact that Wilkinson’s Theorem 1 is essentially the best that can be proved for general nonsingular matrices <italic>A</italic> via a normwise analysis, i.e., bounding just the norm of  &#x2206;<italic>A</italic>. However, if the matrix <italic>A</italic> belongs to some particular classes, then the properties of those classes can be exploited to obtain better bounds. It is also possible to perform a <italic>componentwise</italic> backward error analysis that often produces sharper results. The discussion of these topics is beyond the scope of this introductory paper, and I refer the reader to Higham (<xref ref-type="bibr" rid="CIT12">2002</xref>) and the references therein for more complete information on these topics. </p>
			
			<p>As examples of very recent activities on the error analysis of GE, I discuss here very briefly the research presented in the papers Grigori, Demmel and Xiang (<xref ref-type="bibr" rid="CIT11">2011</xref>) and Dopico and Molera (<xref ref-type="bibr" rid="CIT06">2012</xref>) published in the last two years. Grigori, Demmel and Xiang (<xref ref-type="bibr" rid="CIT11">2011</xref>) consider the LU factorization in the context of one of the hottest topics of numerical computations of the last years: “communication avoiding algorithms”. In current and future computers the cost of communication (moving data between different levels of memory or between different processors) greatly exceeds the cost of performing arithmetic operations, therefore there is a strong motivation for developing new algorithms that communicate as little as possible, even if they do more arithmetic. In GE, this prevents the use of partial pivoting and a new strategy known as “tournament pivoting” has been proposed, which has required a new error analysis to prove its backward stability. Dopico and Molera (<xref ref-type="bibr" rid="CIT06">2012</xref>) develop and analyse a framework that uses special implementations of GE with complete pivoting that allow us to compute solutions of linear systems with relative errors <italic>O</italic>(<bold>u</bold>), i.e., removing the condition number in the bound (18), for the largest class of structured matrices known so far. </p>
			
		</sec>
			
		<sec id="S7">
			<title>7. CONCLUSIONS </title>
			
			<p>I have reviewed at an introductory level the first research works on the rounding error analysis of one of the most important numerical algorithms in Mathematics: Gaussian elimination for solving systems of linear equations. The pioneer work on this topic published by Alan Turing in <xref ref-type="bibr" rid="CIT20">1948</xref> has received particular attention, as well as the key results proved by James Wilkinson in <xref ref-type="bibr" rid="CIT24">1961</xref>. In addition, other works published in the 1940’s on the error analysis of GE have been discussed and the historical context of all these works has been considered in connection with the construction of modern computers in the 1940s. It has been pointed out that a complete and rigorous solution for the stability problem of GE still remains as an open problem. </p>

		</sec>
		
	</body>

	<back>
		
		<ack>
		
			<title>ACKNOWLEDGEMENTS </title>
			
			<p>The author thanks Profs. Manuel de Le&#x00F3;n, David R&#x00ED;os Insua, and Jes&#x00FA;s Mar&#x00ED;a Sanz Serna, from the <italic>Real Academia de Ciencias Exactas, F&#x00ED;sicas y Naturales</italic> of Spain, for the invitation to present a talk in the International Symposium <italic>“The Alan Turing Legacy”</italic>. That talk was the seed of the present paper. The author also thanks Profs. Fernando de Ter&#x00E1;n and Juan Manuel Molera for reading preliminary versions of this manuscript and for providing valuable suggestions, and Prof. Cristina Br&#x00E4;ndle for sharing with him her LaTeX and Beamer expertise. Finally, the author thanks his son Froil&#x00E1;n for “running by hand” with him several examples of GE, for providing a fresh and young point of view about GE, and for reading a preliminary draft of this manuscript and correcting several errata. </p>
		
		</ack>
		
		
		
		<sec id="notas">
		 <title>NOTES</title>
		 <fn-group>
		  
		  <fn id="NOTE01"><label>1</label><p>This work was partially supported by the Ministerio de Econom&#x00ED;a y Competitividad of Spain through grant MTM-2009-09281 and was originated by a talk with the same title presented in the International Symposium "The Alan Turing Legacy" held in Madrid (Spain) in October 23-24, 2012. This symposium was organized and funded by the Real Academia de Ciencias Exactas, F&#x00ED;sicas y Naturales of Spain and Fundaci&#x00F3;n Ram&#x00F3;n Areces.</p></fn>
		  
		  <fn id="NOTE02"><label>2</label><p>The title of Grcar (<xref ref-type="bibr" rid="CIT09">2011b</xref>) and the present paper are rather similar and this is not by chance!!</p></fn>   
		  
		  <fn id="NOTE03"><label>3</label><p>Readers should note that for systems having the same number of equations as unknowns this is, by far, the most frequent case in practice, since the probability that a square matrix is singular is zero.</p></fn>   
		  
		  <fn id="NOTE04"><label>4</label><p>Note  that <font face="times"><italic>a</italic></font><sub><italic>kk</italic></sub> at <italic>k</italic>th stage is not the (<italic>k, k</italic>) entry of the original matrix since the entries of <italic>A</italic> are updated by Algorithm 1. Although it is very rare, <font face="times"><italic>a</italic></font><sub><italic>kk</italic></sub> = 0 may happen and, in this case, Algorithm 1 fails.</p></fn>   
		  
		  <fn id="NOTE05"><label>5</label><p>It should be noted that today, it is widely known that the use of normal equations for solving least squares problems may be unstable and they are never used in professional software. The standard algorithm for least squares problems is based on another famous matrix factorization: the QR factorization (Demmel, <xref ref-type="bibr" rid="CIT03">1997</xref>; Golub and van Loan, <xref ref-type="bibr" rid="CIT07">1996</xref>; Higham, <xref ref-type="bibr" rid="CIT12">2002</xref>). However, this was unknown when the paper by von Neumann and Goldstine was published.</p></fn>   
		  
		  <fn id="NOTE06"><label>6</label><p>Therefore ENIAC is not considered a “modern computer”.</p></fn>   
		  
		  <fn id="NOTE07"><label>7</label><p>In this informal analysis, it is assumed that all entries <img src="images/M1.png" align="absmiddle"/>, for 1 &#x2264; <italic>k</italic> &#x2264; <italic>n</italic> and <italic>k</italic> &#x2264; <italic>i, j</italic> &#x2264; <italic>n</italic>, are different from zero. This assumption is generic and allows us to avoid technicalities that would obscure the main ideas.</p></fn>   
			 
		 </fn-group>
		</sec>

		<ref-list>
			<title>REFERENCES</title>

			<ref id="CIT01">
			<element-citation publication-type="book">
			  <person-group person-group-type="editor">
				  <name>
				  <surname>Aspray</surname>
				  <given-names>W.</given-names>
				  </name> 
				  <name>
				  <surname>Burks</surname>
				  <given-names>A.</given-names>
				  </name> 
			  </person-group>
			  <year>1987</year>
			  <source>Papers of John von Neumann on Computing and Computer Theory</source> 
			  <publisher-loc>Cambridge, MA</publisher-loc>
			  <publisher-name>MIT Press</publisher-name>
			</element-citation>
			</ref>

			<ref id="CIT02"> 
			<element-citation publication-type="book">
			  <person-group person-group-type="editor">
				  <name>
				  <surname>Carpenter</surname>
				  <given-names>B. E.</given-names>
				  </name>
				  <name>
				  <surname>Doran</surname>
				  <given-names>R. W.</given-names>
				  </name>	   
			  </person-group>
			  <year>1986</year>
			  <source>A. M. Turing's ACE report of 1946 and other papers</source> 
			  <publisher-loc>Cambridge, MA</publisher-loc>
			  <publisher-name>MIT Press</publisher-name>
			</element-citation>
			</ref>

			<ref id="CIT03">
			<element-citation publication-type="book">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Demmel</surname>
				  <given-names>J. W.</given-names>
				  </name>  
			  </person-group> 
			  <year>1997</year>   
			  <source>Applied Numerical Linear Algebra</source>
			  <publisher-loc>Philadelphia, PA</publisher-loc>
			  <publisher-name>Society for Industrial and Applied Mathematics (SIAM)</publisher-name>
			</element-citation> 
			</ref>

			<ref id="CIT04">
			<element-citation publication-type="book">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Dieudonné</surname>
				  <given-names>J.</given-names>
				  </name>
			  </person-group> 
			  <year>1981</year>   
			  <chapter-title>von Neumann, Johan (or John)</chapter-title>
			  <person-group person-group-type="editor">
				  <name>
				  <surname>Gillispie</surname>
				  <given-names>C. C.</given-names>
				  </name>  
			  </person-group>    
			  <source>Dictionary of Scientific Biographies, Vol. 14</source>
			  <publisher-loc>New York</publisher-loc>
			  <publisher-name>Charles Scribner's Sons</publisher-name>
			  <comment>pp. 89-92</comment>
			</element-citation> 
			</ref>

			<ref id="CIT05">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Dongarra</surname>
				  <given-names>J.</given-names>
				  </name> 
				  <name>
				  <surname>Sullivan</surname>
				  <given-names>F.</given-names>
				  </name> 	  
			  </person-group>
			  <year>2000</year>
			  <article-title>The top 10 algorithms of the century</article-title>
			  <source>Compnt. Sci. Eng.</source> 
			  <volume>2</volume>
			  <fpage>22</fpage>
			  <lpage>23</lpage>  
			</element-citation>
			</ref>

			<ref id="CIT06">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Dopico</surname>
				  <given-names>F. M.</given-names>
				  </name> 
				  <name>
				  <surname>Molera</surname>
				  <given-names>J. M.</given-names>
				  </name> 	  
			  </person-group>
			  <year>2012</year>
			  <article-title>Accurate solution of structured linear systems via rank-revealing decompositions</article-title>
			  <source>IMA J. Nnmer. Anal.</source> 
			  <volume>32</volume>
			  <issue>3</issue>
			  <fpage>1096</fpage>
			  <lpage>1116</lpage>  
			</element-citation>
			</ref>

			<ref id="CIT07">
			<element-citation publication-type="book">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Golub</surname>
				  <given-names>G.</given-names>
				  </name>
				  <name>
				  <surname>Van Loan</surname>
				  <given-names>C.</given-names>
				  </name>	   
			  </person-group>
			  <year>1996</year>
			  <source>Matrix, Computations</source> 
			  <publisher-loc>Baltimore, MD</publisher-loc>
			  <publisher-name>Johns Hopkins University Press, 3rd edition</publisher-name>
			</element-citation>
			</ref>

			<ref id="CIT08">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Grcar</surname>
				  <given-names>J. F.</given-names>
				  </name> 
			  </person-group>
			  <year>2011a</year>
			  <article-title>How ordinary elimination became Gaussian elimination</article-title>
			  <source>Historia Math.</source> 
			  <volume>38</volume>
			  <issue>2</issue>
			  <fpage>163</fpage>
			  <lpage>218</lpage>  
			</element-citation>
			</ref>

			<ref id="CIT09">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Grcar</surname>
				  <given-names>J. F.</given-names>
				  </name> 
			  </person-group>
			  <year>2011b</year>
			  <article-title>John von Neumann's analysis of Gaussian elimination and the origins of modern Numerical Analysis</article-title>
			  <source>SIAM Rev.</source> 
			  <volume>53</volume>
			  <issue>4</issue>
			  <fpage>607</fpage>
			  <lpage>682</lpage>  
			</element-citation>
			</ref>

			<ref id="CIT10"> 
			<element-citation publication-type="journal">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Grcar</surname>
				  <given-names>J. F.</given-names>
				  </name> 
			  </person-group>
			  <year>2011c</year>
			  <article-title>Mathematicians of Gaussian elimination</article-title>
			  <source>Notices Amer. Math. Soc.</source> 
			  <volume>58</volume>
			  <issue>6</issue>
			  <fpage>782</fpage>
			  <lpage>792</lpage>  
			</element-citation>
			</ref>

			<ref id="CIT11"> 
			<element-citation publication-type="journal">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Grigori</surname>
				  <given-names>L.</given-names>
				  </name> 
				  <name>	  
				  <surname>Demmel</surname>
				  <given-names>J. W.</given-names>
				  </name> 
				  <name>	  
				  <surname>Xiang</surname>
				  <given-names>H.</given-names>
				  </name> 	  	   
			  </person-group>
			  <year>2011</year>
			  <article-title>CALU: a communication optimal LU factorization algorithm</article-title>
			  <source>SIAM J. Matrix, Anal. Appl.</source> 
			  <volume>32</volume>
			  <issue>4</issue>
			  <fpage>1317</fpage>
			  <lpage>1350</lpage> 
			</element-citation> 
			</ref>

			<ref id="CIT12">
			<element-citation publication-type="book">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Higham</surname>
				  <given-names>N. J.</given-names>
				  </name> 	  	     	  
			  </person-group>
			  <year>2002</year>
			  <source>Accuracy and Stability of Numerical Algorithms</source> 
			  <publisher-loc>Philadelphia, PA</publisher-loc>
			  <publisher-name>Society for Industrial and Applied Mathematics (SIAM)</publisher-name>
			  <comment>second edition</comment>
			</element-citation> 
			</ref>

			<ref id="CIT13">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Higham</surname>
				  <given-names>N. J.</given-names>
				  </name> 	  	     	  
			  </person-group>
			  <year>2011</year>
			  <article-title>Gaussian elimination</article-title>
			  <source>Wiley Interdisciplinary Reviews: Computational Statistics</source> 
			  <volume>3</volume>
			  <fpage>230</fpage>
			  <lpage>238</lpage> 
			</element-citation> 
			</ref>

			<ref id="CIT14">
			<element-citation publication-type="book">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Hodges</surname>
				  <given-names>A.</given-names>
				  </name>    	    	  
			  </person-group>
			  <year>2012</year>
			  <source>Alan Turing: the Enigma</source> 
			  <publisher-loc>Princeton, NJ</publisher-loc>
			  <publisher-name>Princeton University Press</publisher-name>
			  <comment>centenary edition</comment>
			</element-citation> 
			</ref>

			<ref id="CIT15">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Hotelling</surname>
				  <given-names>H.</given-names>
				  </name> 
			  </person-group>
			  <year>1943</year>
			  <article-title>Some new methods in matrix calculation</article-title>
			  <source>Ann. Math. Statistics</source> 
			  <volume>14</volume>
			  <fpage>1</fpage>
			  <lpage>34</lpage> 
			</element-citation> 
			</ref>

			<ref id="CIT16">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Rigal</surname>
				  <given-names>J.-L.</given-names>
				  </name> 
				  <name>
				  <surname>Gaches</surname>
				  <given-names>J.</given-names>
				  </name> 	  
			  </person-group>
			  <year>1967</year>
			  <article-title>On the compatibility of a given solution with the data of a linear system</article-title>
			  <source>J. Assoc. Compnt. Mach.</source> 
			  <volume>14</volume>
			  <fpage>543</fpage>
			  <lpage>548</lpage> 
			</element-citation> 
			</ref>

			<ref id="CIT17">
			<element-citation publication-type="book">
			  <person-group person-group-type="editor">
				  <name>
				  <surname>Rojas</surname>
				  <given-names>R.</given-names>
				  </name> 
				  <name>
				  <surname>Hashagen</surname>
				  <given-names>U.</given-names>
				  </name>    	    	  
			  </person-group>
			  <year>2000</year>
			  <source>The First Computers. History and Architectures</source> 
			  <publisher-loc>Cambridge, MA</publisher-loc>
			  <publisher-name>MIT Press</publisher-name>
			</element-citation> 
			</ref>

			<ref id="CIT18">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author"> 
				  <name>
				  <surname>Trefethen</surname>
				  <given-names>L. N.</given-names>
				  </name> 	  	   
			  </person-group>
			  <year>2012</year>
			  <article-title>The Smart Money's on Numerical Analysts</article-title>
			  <source>SIAM News</source> 
			  <volume>45</volume>
			  <issue>9</issue>
			  <fpage>1</fpage>
			  <lpage>5</lpage> 
			</element-citation> 
			</ref>

			<ref id="CIT19">
			<element-citation publication-type="book">
			  <person-group person-group-type="author">
				  <name>
				  <surname>Trefethen</surname>
				  <given-names>L. N.</given-names>
				  </name> 	  	   
				  <name>
				  <surname>David Bau</surname>
				  <given-names>III</given-names>
				  </name>    	    	  
			  </person-group>
			  <year>1997</year>
			  <source>Numerical Linear Algebra</source> 
			  <publisher-loc>Philadelphia, PA</publisher-loc>
			  <publisher-name>Society for Industrial and Applied Mathematics (SIAM)</publisher-name>
			</element-citation> 
			</ref>

			<ref id="CIT20">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author"> 
				  <name>
				  <surname>Turing</surname>
				  <given-names>A. M.</given-names>
				  </name> 	  	   
			  </person-group>
			  <year>1948</year>
			  <article-title>Rounding-off errors in matrix processes</article-title>
			  <source>Quart. J. Mech. Appl. Math.</source> 
			  <volume>1</volume>
			  <fpage>287</fpage>
			  <lpage>308</lpage> 
			</element-citation> 
			</ref>

			<ref id="CIT21">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author"> 
				  <name>
				  <surname>von Neumann</surname>
				  <given-names>J.</given-names>
				  </name> 
				  <name>
				  <surname>Goldstine</surname>
				  <given-names>H. H.</given-names>
				  </name> 
			  </person-group>
			  <year>1947</year>
			  <article-title>Numerical inverting of matrices of high order</article-title>
			  <source>Bull. Amer. Math. Soc.</source> 
			  <volume>53</volume>
			  <fpage>1021</fpage>
			  <lpage>1099</lpage> 
			</element-citation> 
			</ref>

			<ref id="CIT22">
			<element-citation publication-type="book">
			  <person-group person-group-type="author"> 
				  <name>
				  <surname>Wilkinson</surname>
				  <given-names>J. H.</given-names>
				  </name> 
			  </person-group>
			  <year>1954</year>
			  <chapter-title>Linear Algebra on the Pilot ACE</chapter-title>
			  <source>Automatic Digital Computation</source> 
			  <publisher-loc>London</publisher-loc>
			  <publisher-name>Her Majesty's Stationery Office</publisher-name>
			</element-citation> 
			</ref>

			<ref id="CIT23">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author"> 
				  <name>
				  <surname>Wilkinson</surname>
				  <given-names>J. H.</given-names>
				  </name> 
			  </person-group>
			  <year>1960</year>
			  <article-title>Error analysis of floating-point computation</article-title>
			  <source>Numer. Math.</source> 
			  <volume>2</volume>
			  <fpage>319</fpage>
			  <lpage>340</lpage> 
			</element-citation> 
			</ref>

			<ref id="CIT24">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author"> 
				  <name>
				  <surname>Wilkinson</surname>
				  <given-names>J. H.</given-names>
				  </name> 
			  </person-group>
			  <year>1961</year>
			  <article-title>Error analysis of direct methods of matrix inversion. I</article-title>
			  <source>J. Assoc. Comput. Mach.</source> 
			  <volume>8</volume>
			  <fpage>281</fpage>
			  <lpage>330</lpage> 
			</element-citation> 
			</ref>

			<ref id="CIT25">
			<element-citation publication-type="book">
			  <person-group person-group-type="author"> 
				  <name>
				  <surname>Wilkinson</surname>
				  <given-names>J. H.</given-names>
				  </name> 
			  </person-group>
			  <year>1963</year>
			  <source>Rounding Errors in Algebraic Processes</source> 
			  <publisher-loc>Englewood Cliffs, N.J.</publisher-loc>
			  <publisher-name>Prentice-Hall Inc.</publisher-name>
			</element-citation> 
			</ref>

			<ref id="CIT26">
			<element-citation publication-type="book">
			  <person-group person-group-type="author"> 
				  <name>
				  <surname>Wilkinson</surname>
				  <given-names>J. H.</given-names>
				  </name> 
			  </person-group>
			  <year>1965</year>
			  <source>The Algebraic Eigenvalue Problem</source> 
			  <publisher-loc>Oxford</publisher-loc>
			  <publisher-name>Clarendon Press</publisher-name>
			</element-citation> 
			</ref>

			<ref id="CIT27">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author"> 
				  <name>
				  <surname>Wilkinson</surname>
				  <given-names>J. H.</given-names>
				  </name> 
			  </person-group>
			  <year>1971a</year>
			  <article-title>Modern error analysis</article-title>
			  <source>SIAM Rev.</source> 
			  <volume>13</volume>
			  <fpage>548</fpage>
			  <lpage>568</lpage> 
			</element-citation> 
			</ref>

			<ref id="CIT28">
			<element-citation publication-type="journal">
			  <person-group person-group-type="author"> 
				  <name>
				  <surname>Wilkinson</surname>
				  <given-names>J. H.</given-names>
				  </name> 
			  </person-group>
			  <year>1971b</year>
			  <article-title>Some comments from a numerical analyst</article-title>
			  <source>J. Assoc. Comput. Mach.</source> 
			  <volume>18</volume>
			  <fpage>137</fpage>
			  <lpage>147</lpage> 
			</element-citation> 
			</ref>

		</ref-list>
	</back>
</article>