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
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