Cramersche Regel

Die Cramersche Regel ist ein Verfahren zum Lösen von linearen Gleichungssystemen, das auf Determinanten (siehe Determinanten berechnen) beruht.

Angenommen, für das Gleichungssystem A x = b mit einer gegebenen quadratischen Matrix A mit n Zeilen und Spalten und einem gegebenen Spaltenvektor b sollen die Unbekannten x = (x1 x2 .. xn) bestimmt werden.

Nach der Cramerschen Regel berechnet man ein xi wie folgt:

- man bildet die Matrix Ai aus A, wobei die i-te Spalte durch b ersetzt ist,
- dann wird die Determinante dieser Matrix Ai bestimmt
- und schließlich durch die Determinante von A dividiert.

Das Ersetzen der i-ten Spalte erledigt die Funktion replace-column:

(defproc replace-column (rows column index)
  (if
    (= index 1)
    (zip-with
      (lambda (c r) (cons (first c) r))
      column
      (map-with rest rows))
    (zip-with
      cons
      (map-with first rows)
      (replace-column
        (map-with rest rows)
        column
        (- index 1)))))

Die Funktion cramer verwendet replace-column und berechnet die Liste der xi.

(defproc cramer (this that index divisor)
  (if
    (> index (. this rows))
    nil
    (cons
      (/
        (determinant
          (new matrix
            (. this rows)
            (. this columns)
            (replace-column (. this elements) (. that elements) index)))
        divisor)
      (cramer this that (+ index 1) divisor))))

Die Funktion solve-linear-equations berechnet die Determinante der Matrix und ruft die Funktion cramer auf.

(defmethod solve-linear-equations ((this matrix) (that column-vector))
  (= (. this rows) (. that rows))
  (new column-vector
    (. this rows)
    (cramer this that 1 (determinant this))))

Quelle
https://de.wikipedia.org/wiki/Cramersche_Regel


solve-linear-equations.sheet.xml