Lineare Algebra : Gaußsches Eleminationsverfahren
Quellen
Wikipedia : 
Gaußsches Eliminationsverfahren
Übersicht
Für ein lineares Gleichungssystem mit $N, N \in \mathbb{N_2}$ Unbekannten $\vec x = (x_1, .., x_N)$ 
und $N \times (1 + N)$ bekannten Koeffizienten $a_{ij}$ wird der eben der Lösungsvektor  $\vec x$ gesucht.
Gegeben
$N$ : Dimension des Lösungsvektors, $N \in \mathbb{N_2}$ 
$a_{ij}$ : $N \times (1 + N)$ bekannte Koeffizienten, $a_{ij} \in \mathbb{R}, i \in [1 .. N], j \in [1 .. (1+N)] $
Gesucht
$\vec x = (x_1, .., x_N)$ : Lösungsvektor
Herleitung
Das vorgestellte Problem schreibt sich unter diesen Vorgaben als ein 
lineares Gleichungssystem LES: 
 
$ \begin{pmatrix}
a_{11} & a_{12} & .. & a_{1N} \\
a_{21} & a_{22} & .. & a_{2N} \\
.. & .. & .. & .. \\
a_{N1} & a_{N2} & .. & a_{NN} \\
\end{pmatrix} \cdot
\begin{pmatrix}
x_{1} \\
x_{2} \\
.. \\
x_{N} \\
\end{pmatrix}=
\begin{pmatrix}
a_{1(1+N)} \\
a_{2(1+N)} \\
.. \\
a_{N(1+N)} \\
\end{pmatrix}$     (LES) 
 
Durch zeilenweise Multiplikation / Subtraktion der $a_{ij}$ von $a_{kj}$ : 
 
$a_{ij} = a_{ij} - \dfrac{a_{kj} a_{ik}}{a_{kk}}$    (vgl. Listing unten) 
 
und Hauptdiagonalen-Normierung der Matrix ergibt sich ein Gleichungssystem (SES), 
aus dem der Lösungsvektor $\vec x = (s_1, s_2, .., s_N)$ direkt abgelesen werden kann: 
 
$ \begin{pmatrix}
1 & 0 & .. & 0 \\
0 & 1 & .. & 0 \\
.. & .. & .. & .. \\
0 & 0 & .. & 1 \\
\end{pmatrix} \cdot
\begin{pmatrix}
x_{1} \\
x_{2} \\
.. \\
x_{N} \\
\end{pmatrix}=
\begin{pmatrix}
s_1 \\
s_2 \\
.. \\
s_N \\
\end{pmatrix}$     (SES) 
Python-Programm: Gauss-Elemination
Im Folgenden findet sich der Python-Code für die Gauss-Elemination: 
 
 
 #
 #--------------------------------------------------------------------
 #   Include
 #--------------------------------------------------------------------
 import math as M
 #
 #--------------------------------------------------------------------
 #   Helper
 #--------------------------------------------------------------------
 def Error(text):
     print('Error: ' + text + '!')
     return
 #
 def PrintMatrix(title, name, m):
     if (None == m):
         Error('Zero Matrix')
         return
     NR = len(m)
     NC = len(m[0])
     print('{0}({1})[{2}|{3}]:'.format(title, name, NR, NC))
     for IR in range(0, NR):
         for IC in range(0, NC):
             print('%+7.2f' % (m[IR][IC]), end='')
         print('')
     return
 #
 def PrintSolution(title, name, m):
     if (None == m):
         Error('Zero Matrix')
         return
     NR = len(m)
     NC = len(m[0])
     if (NR != NC - 1):
         Error('Invalid Matrix-Dimension')
         return
     print('{0}[{1}|{2}]:'.format(title, NR, NC))
     for IR in range(0, NR):
         print('%s[%d]=%+6.2f' % (name, IR, m[IR][NC - 1]))
     return
 #
 #--------------------------------------------------------------------
 #   Solver
 #--------------------------------------------------------------------
 def SolverNormalizeMatrix(m):
     if (None == m):
         Error('Zero Matrix')
         return []
     NR = len(m)
     NC = len(m[0])
     for IR in range(0, NR):
         D = m[IR][IR]
         if (0 == D):
             Error('Division by zero')
             return []
         for IC in range(0, NC):
             m[IR][IC] = m[IR][IC] / D
     return m
 #
 def SolverLowerElemination(m):
     NR = len(m)
     NC = len(m[0])
     for IT in range(0, NR):
         for IR in range(1 + IT, NR):
             F = m[IR][IT] / m[IT][IT]
             for IC in range(0, NC):
                 m[IR][IC] = m[IR][IC] - F * m[IT][IC]             
     return m
 #
 def SolverGaussElemination(m):
     NR = len(m)
     NC = len(m[0])
     for IT in range(0, NR):
         for IR in range(0, IT):
             F = m[IR][IT] / m[IT][IT]
             for IC in range(0, NC):
                 m[IR][IC] = m[IR][IC] - F * m[IT][IC]
         for IR in range(1 + IT, NR):
             F = m[IR][IT] / m[IT][IT]
             for IC in range(0, NC):
                 m[IR][IC] = m[IR][IC] - F * m[IT][IC]
     return m
 #
 #--------------------------------------------------------------------
 #   Main
 #--------------------------------------------------------------------
 if ('__main__' == __name__):
     print('*** GaussElemination: begin')   
     #
     M = [[-1,  1,  1,  0],
          [ 1, -3, -2,  5],
          [ 5,  1,  4,  3]]
     PrintMatrix('Matrix', 'Source', M)
     M = SolverGaussElemination(M)
     PrintMatrix('Matrix', 'GaussEleminated', M)
     M = SolverNormalizeMatrix(M)
     PrintMatrix('Matrix', 'Normalized', M)
     PrintSolution('GaussSolution', 'X', M)
     #
     print('*** GaussElemination: end')
       
 
 
Download des Python-Programms: 2206211055_GaussElemination_01V01.zip 
Ausgabe des Python-Programms "Gauss-Elemination": 
 
 
*** GaussElemination: begin
Matrix(Source)[3|4]:
  -1.00  +1.00  +1.00  +0.00
  +1.00  -3.00  -2.00  +5.00
  +5.00  +1.00  +4.00  +3.00
Matrix(GaussEleminated)[3|4]:
  -1.00  +0.00  +0.00  +1.00
  +0.00  -2.00  +0.00  +8.00
  +0.00  +0.00  +6.00 +18.00
Matrix(Normalized)[3|4]:
  +1.00  -0.00  -0.00  -1.00
  -0.00  +1.00  -0.00  -4.00
  +0.00  +0.00  +1.00  +3.00
GaussSolution[3|4]:
X[0]= -1.00
X[1]= -4.00
X[2]= +3.00
*** GaussElemination: end
 
        
        WebSites   
        Module   
        Mathematik