Casus Irreducibilis

Der Casus Irreducibilis ist ein Fall, der bei der Berechnung von Nullstellen von Polynomen (siehe Nullstellen von Polynomen bestimmen) auftreten kann. Z.B. dann, wenn ein kubisches Polynom, also ein Polynom mit Grad 3, drei reelle Nullstellen hat. Während der Rechnung kommt man bei solchen Polynomen an eine Stelle, an der die drei Kubikwurzeln einer komplexen Zahl zu bestimmen sind.

Um diese drei Kubikwurzeln zu finden, wechselt man zu einer Darstellung der komplexen Zahl in Polarkoordinaten. Der Grund dafür ist die Wirkung der Multiplikation in dieser Darstellung: Für das Produkt zweier Zahlen in Polarkoordinaten sind die beiden Abstände zum Ursprung zu multiplizieren und die beiden Winkel zu addieren.

Für die dritte Wurzel bedeutet das im Umkehrschluss, dass die dritte Wurzel des Abstands gebildet wird (beim Abstand handelt es sich um eine reelle Zahl - deren dritte Wurzel kann also beispielsweise mit dem Newton-Verfahren berechnet werden) und man den Winkel drittelt. Es gibt insgesamt drei dritte Wurzeln. Alle haben den gleichen Abstand zum Ursprung, liegen aber jeweils 120 Grad (2/3 π) auseinander.

(defmethod all-cubic-roots ((power complex) precision)
  t
  (let
    ((polar (to-polar power precision)))
    (let
      ((root-radius (cubic-root (first polar) precision))
       (root-angle (/ (second polar) 3)))
      (list
        (from-polar root-radius root-angle precision)
        (from-polar root-radius (+ root-angle (* 2/3 (pi precision))) precision)
        (from-polar root-radius (+ root-angle (* 4/3 (pi precision))) precision)))))

Ist das Argument reell, so ist auch eine der drei Wurzeln reell. Für die anderen gilt wie oben: Sie liegen jeweils 120 Grad auseinander.

(defmethod all-cubic-roots (power precision)
  (number? power)
  (let
    ((root (cubic-root power precision))
     (root-of-3 (new complex 0 (square-root 3 precision))))
    (list
      root
      (* 1/2 root (- root-of-3 1))
      (* -1/2 root (+ root-of-3 1)))))

Ähnlich liegt der Fall bei den beiden Quadratwurzeln einer komplexen Zahl. Man bildet die Quadratwurzel des Abstands und halbiert den Winkel. Die zweite Quadratwurzel liegt 180 Grad weiter. Die Drehung um 180 Grad entspricht genau der Bildung des additiven Inversen.

(defmethod all-square-roots ((power complex) precision)
  t
  (let
    ((polar (to-polar power precision)))
    (let
      ((root-radius (square-root (first polar) precision))
       (root-angle (/ (second polar) 2)))
       (let
         ((root (from-polar root-radius root-angle precision)))
         (list root (- root))))))

(defmethod all-square-roots (power precision)
  (number? power)
  (let
    ((root
      (if
        (< power 0)
        (new complex 0 (square-root (- power) precision))
        (square-root power precision))))
    (list root (- root))))


casus-irreducibilis.sheet.xml