<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Thomas-Algorithmus</id>
	<title>Thomas-Algorithmus - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Thomas-Algorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Thomas-Algorithmus&amp;action=history"/>
	<updated>2026-05-25T23:23:49Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Thomas-Algorithmus&amp;diff=1620323&amp;oldid=prev</id>
		<title>imported&gt;Meinichselbst: Parameter fix</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Thomas-Algorithmus&amp;diff=1620323&amp;oldid=prev"/>
		<updated>2025-10-03T18:18:37Z</updated>

		<summary type="html">&lt;p&gt;Parameter fix&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Thomas-Algorithmus&amp;#039;&amp;#039;&amp;#039; (nach [[Llewellyn Thomas]]) oder auch &amp;#039;&amp;#039;&amp;#039;Tridiagonalmatrix-Algorithmus (TDMA)&amp;#039;&amp;#039;&amp;#039; ist eine vereinfachte Form des [[Gaußsches Eliminationsverfahren|Gaußschen Eliminationsverfahrens]], der zum schnellen Lösen von [[lineares Gleichungssystem|linearen Gleichungssystemen]] mit einer [[Tridiagonalmatrix]] benutzt wird.&lt;br /&gt;
&lt;br /&gt;
== Verfahren ==&lt;br /&gt;
Ein tridiagonales System mit &amp;#039;&amp;#039;n&amp;#039;&amp;#039; Unbekannten &amp;lt;math&amp;gt; x_{i} \,\!&amp;lt;/math&amp;gt; kann geschrieben werden als&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
a_i x_{i - 1}  + b_i x_i  + c_i x_{i + 1}  = d_i , \,\!&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei gelten soll: &amp;lt;math&amp;gt; a_1  = 0\, &amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt; c_n = 0\, &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In [[Matrix (Mathematik)|Matrizen]]&amp;lt;nowiki/&amp;gt;form wird das System geschrieben als:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left[&lt;br /&gt;
\begin{matrix}&lt;br /&gt;
   {b_1} &amp;amp; {c_1} &amp;amp; {   } &amp;amp; {   } &amp;amp; { 0 } \\&lt;br /&gt;
   {a_2} &amp;amp; {b_2} &amp;amp; {c_2} &amp;amp; {   } &amp;amp; {   } \\&lt;br /&gt;
   {   } &amp;amp; {a_3} &amp;amp; {b_3} &amp;amp; \ddots &amp;amp; {   } \\&lt;br /&gt;
   {   } &amp;amp; {   } &amp;amp; \ddots &amp;amp; \ddots &amp;amp; {c_{n-1}}\\&lt;br /&gt;
   { 0 } &amp;amp; {   } &amp;amp; {   } &amp;amp; {a_n} &amp;amp; {b_n}\\&lt;br /&gt;
\end{matrix}&lt;br /&gt;
\right]&lt;br /&gt;
\left[&lt;br /&gt;
\begin{matrix}&lt;br /&gt;
   {x_1 }  \\&lt;br /&gt;
   {x_2 }  \\&lt;br /&gt;
   {x_3 }   \\&lt;br /&gt;
   \vdots  \\&lt;br /&gt;
   {x_n }  \\&lt;br /&gt;
\end{matrix}&lt;br /&gt;
\right]&lt;br /&gt;
=&lt;br /&gt;
\left[&lt;br /&gt;
\begin{matrix}&lt;br /&gt;
   {d_1 }  \\&lt;br /&gt;
   {d_2 }  \\&lt;br /&gt;
   {d_3 }   \\&lt;br /&gt;
   \vdots   \\&lt;br /&gt;
   {d_n }  \\&lt;br /&gt;
\end{matrix}&lt;br /&gt;
\right].&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiele für diese Matrizen entstehen üblicherweise aus der [[Diskretisierung]] der eindimensionalen [[Poisson-Gleichung]] (z.&amp;amp;nbsp;B. eindimensionale [[Wärmeleitungsgleichung|Diffusionsprobleme]]) und aus der natürlichen kubischen [[Spline-Interpolation]].&lt;br /&gt;
&lt;br /&gt;
Für solche Systeme kann die Lösung mit dem Thomas-Algorithmus nach [[Landau-Notation|&amp;lt;math&amp;gt; \mathcal{O}(n) &amp;lt;/math&amp;gt;]] Operationen gefunden werden: Ein erster Durchlauf eliminiert die &amp;lt;math&amp;gt;a_i&amp;lt;/math&amp;gt;s, anschließend erhält man die Lösung mit Hilfe eines [[gaußsches Eliminationsverfahren#Rückwärtseinsetzen|Rückwärts-Einsetzverfahrens]].&lt;br /&gt;
&lt;br /&gt;
Der erste Schritt ist es, die [[Koeffizient]]en folgendermaßen [[rekursiv]] zu modifizieren (die „neuen“ modifizierten Koeffizienten sind mit einem Strich gekennzeichnet):&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;c&amp;#039;_i =&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\begin{array}{lcl}&lt;br /&gt;
  \cfrac{c_1}{b_1}                  &amp;amp; ; &amp;amp; i = 1 \\&lt;br /&gt;
  \cfrac{c_i}{b_i - c&amp;#039;_{i - 1} a_i} &amp;amp; ; &amp;amp; i = 2, 3, \dots, n - 1 \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;d&amp;#039;_i =&lt;br /&gt;
\begin{cases}&lt;br /&gt;
\begin{array}{lcl}&lt;br /&gt;
  \cfrac{d_1}{b_1}                  &amp;amp; ; &amp;amp; i = 1 \\&lt;br /&gt;
  \cfrac{d_i - d&amp;#039;_{i - 1} a_i}{b_i - c&amp;#039;_{i - 1} a_i} &amp;amp; ; &amp;amp; i = 2, 3, \dots, n \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\end{cases}&lt;br /&gt;
\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ist der vorwärts gerichtete Durchlauf. Die Lösung ergibt sich dann durch ein Rückwärts-Einsetzverfahren:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;x_n = d&amp;#039;_n\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;x_i = d&amp;#039;_i - c&amp;#039;_i x_{i + 1} \qquad ; \ i = n - 1, n - 2, \ldots, 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Varianten ==&lt;br /&gt;
In manchen Situationen, insbesondere in solchen mit [[Periodizität (Mathematik)|periodischen]] [[Randbedingung]]en, kann es sein, dass eine leicht veränderte Form des tridiagonalen Systems zu lösen ist:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
a_1 x_{n}  + b_1 x_1  + c_1 x_2  &amp;amp; = d_1, \\&lt;br /&gt;
a_i x_{i - 1}  + b_i x_i  + c_i x_{i + 1}  &amp;amp; = d_i,\quad\quad i = 2,\ldots,n-1 \\&lt;br /&gt;
a_n x_{n-1}  + b_n x_n  + c_n x_1  &amp;amp; = d_n.&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Matrizenform:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\left[&lt;br /&gt;
\begin{matrix}&lt;br /&gt;
   {b_1} &amp;amp; {c_1} &amp;amp; {   } &amp;amp; {   } &amp;amp; { a_1 } \\&lt;br /&gt;
   {a_2} &amp;amp; {b_2} &amp;amp; {c_2} &amp;amp; {   } &amp;amp; {   } \\&lt;br /&gt;
   {   } &amp;amp; {a_3} &amp;amp; {b_3} &amp;amp; \ddots &amp;amp; {   } \\&lt;br /&gt;
   {   } &amp;amp; {   } &amp;amp; \ddots &amp;amp; \ddots &amp;amp; {c_{n-1}}\\&lt;br /&gt;
   { c_n } &amp;amp; {   } &amp;amp; {   } &amp;amp; {a_n} &amp;amp; {b_n}\\&lt;br /&gt;
\end{matrix}&lt;br /&gt;
\right]&lt;br /&gt;
\left[&lt;br /&gt;
\begin{matrix}&lt;br /&gt;
   {x_1 }  \\&lt;br /&gt;
   {x_2 }  \\&lt;br /&gt;
   {x_3 }   \\&lt;br /&gt;
   \vdots  \\&lt;br /&gt;
   {x_n }  \\&lt;br /&gt;
\end{matrix}&lt;br /&gt;
\right]&lt;br /&gt;
=&lt;br /&gt;
\left[&lt;br /&gt;
\begin{matrix}&lt;br /&gt;
   {d_1 }  \\&lt;br /&gt;
   {d_2 }  \\&lt;br /&gt;
   {d_3 }   \\&lt;br /&gt;
   \vdots   \\&lt;br /&gt;
   {d_n }  \\&lt;br /&gt;
\end{matrix}&lt;br /&gt;
\right].&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall kann die [[Sherman-Morrison-Woodbury-Formel]] benutzt werden, um den Thomas-Algorithmus zu nutzen und die zusätzlichen Operationen des Gaußschen Eliminationsverfahrens zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
In anderen Fällen kann das Gleichungssystem &amp;#039;&amp;#039;block&amp;#039;&amp;#039;-tridiagonal sein, d.&amp;amp;nbsp;h. die Elemente des obigen Gleichungssystems sind kleinere [[Blockmatrix#Blocktridiagonalmatrix|Blockmatrizen]] (z.&amp;amp;nbsp;B. bei der zweidimensionalen [[Poisson-Gleichung]]). Für diese Fälle wurden ebenfalls vereinfachte Varianten der Gauß-Elimination entwickelt.&lt;br /&gt;
&lt;br /&gt;
Eine weitere Variante des Thomas-Algorithmus ist der Hu-Gallash-Algorithmus, der statt des Rückwärts-Einsetzverfahrens ein Vorwärts-Einsetzverfahren nutzt.&lt;br /&gt;
&lt;br /&gt;
== Herleitung ==&lt;br /&gt;
&lt;br /&gt;
Die Unbekannten seien &amp;lt;math&amp;gt;x_1,\ldots, x_n&amp;lt;/math&amp;gt;. Die zu lösenden Gleichungen seien:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
b_1 x_1 + c_1 x_2 &amp;amp; = d_1;&amp;amp; i &amp;amp; = 1 \\&lt;br /&gt;
a_i x_{i - 1} + b_i x_i  + c_i x_{i + 1} &amp;amp; = d_i;&amp;amp; i &amp;amp; = 2, \ldots, n - 1 \\&lt;br /&gt;
a_n x_{n - 1} + b_n x_n &amp;amp; = d_n;&amp;amp; i &amp;amp; = n&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die zweite Gleichung (&amp;lt;math&amp;gt;i = 2&amp;lt;/math&amp;gt;) wird nun wie folgt mit der ersten Gleichung modifiziert:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
(\mbox{Gleichung 2}) \cdot b_1 - (\mbox{Gleichung 1}) \cdot a_2&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ergibt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
(a_2 x_1 + b_2 x_2  + c_2 x_3) b_1 - (b_1 x_1  + c_1 x_2) a_2 &amp;amp; = d_2 b_1 - d_1 a_2 \\&lt;br /&gt;
(b_2 b_1 - c_1 a_2) x_2  + c_2 b_1 x_3 &amp;amp; = d_2 b_1 - d_1 a_2&lt;br /&gt;
\,\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch wurde &amp;lt;math&amp;gt;x_1&amp;lt;/math&amp;gt; aus der zweiten Gleichung eliminiert. Mit einer analogen Vorgehensweise ergibt sich aus der modifizierten zweiten und der dritten Gleichung:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
(a_3 x_2 + b_3 x_3 + c_3 x_4) (b_2 b_1 - c_1 a_2) -&lt;br /&gt;
((b_2 b_1 - c_1 a_2) x_2 + c_2 b_1 x_3) a_3&lt;br /&gt;
&amp;amp; = d_3 (b_2 b_1 - c_1 a_2) - (d_2 b_1 - d_1 a_2) a_3&lt;br /&gt;
\\&lt;br /&gt;
(b_3 (b_2 b_1 - c_1 a_2) - c_2 b_1 a_3 )x_3 + c_3 (b_2 b_1 - c_1 a_2) x_4&lt;br /&gt;
&amp;amp; = d_3 (b_2 b_1 - c_1 a_2) - (d_2 b_1 - d_1 a_2) a_3&lt;br /&gt;
\,\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt wurde &amp;lt;math&amp;gt;x_2&amp;lt;/math&amp;gt; eliminiert. Wird diese Vorgehensweise bis zur &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-ten Zeile wiederholt, enthält die modifizierte &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-te Gleichung nur eine Unbekannte. Diese Gleichung wird nun gelöst und das Ergebnis genutzt, um die &amp;lt;math&amp;gt;(n - 1)&amp;lt;/math&amp;gt;-te Gleichung zu lösen. Dies wird so lange fortgeführt, bis alle Unbekannten bekannt sind.&lt;br /&gt;
&lt;br /&gt;
Verständlicherweise werden die Koeffizienten mit jedem Schritt komplizierter, wenn sie explizit dargestellt werden. Die Koeffizienten können jedoch auch rekursiv dargestellt werden:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\tilde a_i &amp;amp; = 0  \\&lt;br /&gt;
\tilde b_1 &amp;amp; = b_1  \\&lt;br /&gt;
\tilde b_i &amp;amp; = b_i \tilde b_{i - 1} - \tilde c_{i - 1} a_i  \\&lt;br /&gt;
\tilde c_1 &amp;amp; = c_1  \\&lt;br /&gt;
\tilde c_i &amp;amp; = c_i \tilde b_{i - 1}  \\&lt;br /&gt;
\tilde d_1 &amp;amp; = d_1  \\&lt;br /&gt;
\tilde d_i &amp;amp; = d_i \tilde b_{i - 1} - \tilde d_{i - 1} a_i&lt;br /&gt;
\,\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Lösungsprozess weiter zu beschleunigen, wird &amp;lt;math&amp;gt;\tilde b_i&amp;lt;/math&amp;gt; herausdividiert (wenn &amp;lt;math&amp;gt;\tilde b_i \ne 0&amp;lt;/math&amp;gt;). Die neuen Koeffizienten lauten:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
a&amp;#039;_i &amp;amp; = 0  \\&lt;br /&gt;
b&amp;#039;_i &amp;amp; = 1  \\&lt;br /&gt;
c&amp;#039;_1 &amp;amp; = \frac{c_1}{b_1}  \\&lt;br /&gt;
c&amp;#039;_i &amp;amp; = \frac{c_i}{b_i - c&amp;#039;_{i - 1} a_i}  \\&lt;br /&gt;
d&amp;#039;_1 &amp;amp; = \frac{d_1}{b_1} \\&lt;br /&gt;
d&amp;#039;_i &amp;amp; = \frac{d_i - d&amp;#039;_{i - 1} a_i}{b_i - c&amp;#039;_{i - 1} a_i}&lt;br /&gt;
\,\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies ergibt:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{array}{llcl}&lt;br /&gt;
x_i + c&amp;#039;_i x_{i + 1} &amp;amp; = d&amp;#039;_i \qquad &amp;amp;;&amp;amp; \ i = 1, \ldots, n - 1 \\&lt;br /&gt;
x_n                  &amp;amp; = d&amp;#039;_n \qquad &amp;amp;;&amp;amp; \ i = n \\&lt;br /&gt;
\end{array}&lt;br /&gt;
\,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die letzte Gleichung enthält nur eine Unbekannte. Bestimmt man sie, reduziert man die Anzahl der Unbekannten in der vorletzten Gleichung auf eins, so dass dieses Rückwärts-Einsetzverfahren genutzt werden kann, um alle Unbekannten zu bestimmen.&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
x_n &amp;amp; = d&amp;#039;_n  \\&lt;br /&gt;
x_i &amp;amp; = d&amp;#039;_i - c&amp;#039;_i x_{i + 1} \qquad ; \ i = n - 1, n - 2, \ldots, 1&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
*{{cite book|author=Conte, S.D., and deBoor, C.|year=1972|title=Elementary Numerical Analysis|publisher= McGraw-Hill, New York |language=en}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Numerische lineare Algebra]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Meinichselbst</name></author>
	</entry>
</feed>