Konditionszahl-Rechner
Die Konditionszahl-API nimmt eine quadratische Matrix entgegen und liefert ihre Konditionszahl in der 2-Norm: das Verhältnis zwischen dem größten und dem kleinsten Singulärwert der Matrix.
Im Browser ausführen – kostenlos
Diese eine Zahl sagt Ihnen, wie stark ein kleiner Fehler in Ihren Daten — eine Rundung, ein Messrauschen, ein abgeschnittener Koeffizient — verstärkt werden kann, wenn Sie ein lineares Gleichungssystem lösen oder die Matrix invertieren. Eine Konditionszahl nahe 1 bedeutet, dass das Problem stabil ist; eine große warnt davor, dass Ihre Antwort vom Rauschen dominiert sein kann. Die Berechnung erfolgt in einem einzigen deterministischen Durchlauf: Die Matrix wird geprüft, A-Transponierte-A wird gebildet, und ihre Eigenwerte werden mit einer klassischen Jacobi-Iteration bestimmt, deren Quadratwurzeln die Singulärwerte sind.
Was eine Konditionszahl wirklich misst
Wenn Sie ein System Ax = b numerisch lösen, arbeiten Sie fast nie mit exakten A und b. Koeffizienten stammen aus Messungen, aus früheren Berechnungen oder aus Dezimaleingaben, die unterwegs gerundet wurden. Die Konditionszahl von A ist der Verstärkungsfaktor dieser Unsicherheit im schlimmsten Fall: Ändert sich die Eingabe um einen relativen Betrag epsilon, kann sich die Lösung um bis zu kappa mal epsilon ändern. Bei kappa = 10 kann ein Fehler von einem Prozent in Ihren Daten einen Fehler von zehn Prozent in der Antwort erzeugen. Bei kappa = 1,000,000 können Sie sechs der rund sechzehn Dezimalstellen verlieren, die ein Double fasst. Die hier berechnete Konditionszahl in der 2-Norm, kappa_2, wird über die Singulärwerte von A definiert: Der größte Singulärwert sigma_max misst, wie stark die Matrix einen Vektor höchstens streckt, der kleinste sigma_min, wie stark sie ihn höchstens staucht, und ihr Verhältnis ist kappa_2. Eine orthogonale Matrix wie eine Rotation hat kappa_2 exakt 1 — das bestmögliche Ergebnis. Eine Matrix mit linear abhängigen Zeilen hat sigma_min = 0 und kappa_2 unendlich, und genau deshalb lehnt diese Fähigkeit singuläre Matrizen ab, statt eine riesige, sinnlose Zahl auszugeben.
Wie die Zahl hier berechnet wird
Der Algorithmus ist deterministisch und eigenständig, ohne externe numerische Bibliothek. Zuerst wird Ihre Eingabe normalisiert: Die Koeffizienten können als Array von Zeilen oder als reiner Text gesendet werden, mit Zeilen getrennt durch Zeilenumbrüche oder Semikolons und Werten durch Kommas oder Leerzeichen. Jeder Koeffizient muss eine endliche Zahl sein, alle Zeilen müssen gleich lang sein, und die Matrix muss quadratisch sein — eine 2-mal-3-Matrix hat in diesem Sinne keine Konditionszahl, daher wird die Anfrage mit einem klaren Fehler abgelehnt, der das verantwortliche Feld nennt. Der Code bildet anschließend die symmetrische Matrix G = A^T A und ermittelt ihre Eigenwerte mit der klassischen zyklischen Jacobi-Iteration: einer festen Folge ebener Rotationen, die die Einträge außerhalb der Diagonale nacheinander auf null setzen, bis die Matrix auf Arbeitsgenauigkeit diagonal ist. Da die Rotationsreihenfolge, die Vorzeichenkonvention und die Sweep-Obergrenze feststehen, liefert dieselbe Matrix immer dieselbe Antwort, Bit für Bit. Die Eigenwerte von G sind die Quadrate der Singulärwerte von A, ihre Quadratwurzeln ergeben also sigma_max und sigma_min, und das Verhältnis, für eine stabile Ausgabe auf zwölf Dezimalstellen gerundet, ist die zurückgegebene Konditionszahl. Matrizen, deren kleinster Singulärwert unter eine skalierte numerische Untergrenze fällt — etwa kappa_2 oberhalb von zehn Milliarden — werden als numerisch singulär gemeldet, weil die doppelte Genauigkeit sie nicht ehrlich von einer rangdefizienten Matrix unterscheiden kann.
Das Ergebnis lesen und richtig nutzen
Die Antwort liefert Ihnen vier Dinge: die Konditionszahl selbst, sigma_max, sigma_min und eine verständliche Nachricht, die die Matrix einordnet. Betrachten Sie jedes kappa unter etwa 10 als gut konditioniert — direkte Löser verhalten sich gut. Zwischen hundert und einer Million sollten Sie mit sichtbarem Genauigkeitsverlust rechnen und stabile Verfahren bevorzugen: QR-Zerlegung oder LU mit partieller Pivotisierung statt der expliziten Bildung einer Inversen, die den Fehler der Berechnung quadriert, die sie speist. Oberhalb einer Million lautet die ehrliche Lesart, dass die Antwort stärker vom Rauschen Ihrer Daten abhängt als vom Löser, und der richtige Schritt ist meist, das Problem neu zu skalieren, zu regularisieren oder zu prüfen, ob die Modellmatrix die passende ist. Zwei praktische Gewohnheiten zahlen sich aus: Prüfen Sie die Konditionszahl, bevor Sie einen Löser für eine schlechte Antwort verantwortlich machen, denn eine schlecht konditionierte Matrix erzeugt falsche Antworten mit korrektem Code; und vergleichen Sie Konditionszahlen zwischen Formulierungen, denn dasselbe physikalische Problem, mit anderen Einheiten oder Basisfunktionen geschrieben, kann sich in kappa um Größenordnungen unterscheiden. Derselbe Code, der hier läuft, wird auf dieser Seite kostenlos in Ihrem Browser ausgeführt — Sie können also eine Matrix einfügen und das Ergebnis sehen, bevor Sie $0.002 pro Anfrage für die Automatisierung zahlen.
Anwendungsfälle
Ein lineares System vor dem Lösen prüfen
Schätzen Sie, wie viele Stellen der Lösung vertrauenswürdig sind, bevor Sie eine LU- oder QR-Lösung über gemessene Koeffizienten laufen lassen.
Eine Regression diagnostizieren, die nicht konvergiert
Eine fast kollineare Designmatrix zeigt sich als riesige Konditionszahl von X-Transponierte-X, lange bevor der Löser scheitert.
Diskretisierungen desselben Problems vergleichen
Zwei Finite-Elemente- oder Basisfunktions-Formulierungen desselben physikalischen Modells können sich in der Konditionierung um Größenordnungen unterscheiden; wählen Sie die stabile.
Häufige Fragen
Was kostet das?
$0.002 pro Anfrage. Die Ausführung in Ihrem Browser auf dieser Seite ist ebenfalls kostenlos.
Warum wurde meine Matrix als singulär abgelehnt?
Weil ihr kleinster Singulärwert numerisch null ist, wodurch die Konditionszahl unendlich wird. Das schließt auch Matrizen ein, die technisch invertierbar sind, aber bei doppelter Genauigkeit rangdefizient (kappa oberhalb von etwa zehn Milliarden).
Warum muss die Matrix quadratisch sein?
Die Konditionszahl in der 2-Norm, kappa_2 = sigma_max / sigma_min, wird über die Singulärwerte einer quadratischen Koeffizientenmatrix definiert. Für rechteckige Kleinste-Quadrate-Probleme konditionieren Sie stattdessen die quadratische Matrix X-Transponierte-X.
Wie kann ich die Matrix senden?
Als Array gleich langer numerischer Zeilen oder als Text mit Zeilen getrennt durch Zeilenumbrüche oder Semikolons und Koeffizienten durch Kommas oder Leerzeichen. Beide Formen liefern identische Ergebnisse.
Welche Matrixgröße wird akzeptiert?
Bis zu 32 mal 32, mit absoluten Koeffizientenwerten bis 1e12. Die Berechnung ist exakte Arithmetik in doppelter Genauigkeit mit einer deterministischen Jacobi-Iteration.
Ist das Ergebnis reproduzierbar?
Ja. Die Jacobi-Iteration verwendet eine feste Rotationsreihenfolge, Vorzeichenkonvention und Sweep-Obergrenze, sodass dieselbe Eingabe stets dieselbe, auf zwölf Dezimalstellen gerundete Ausgabe erzeugt.
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/math/condition-number \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"matrix":[[2,1],[1,2]]}'const res = await fetch("https://api.kit.forhosting.com/math/condition-number", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"matrix": [
[
2,
1
],
[
1,
2
]
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/condition-number",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"matrix": [
[
2,
1
],
[
1,
2
]
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/condition-number", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"matrix":[[2,1],[1,2]]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"matrix":[[2,1],[1,2]]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/condition-number", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"matrix": [
[
2,
1
],
[
1,
2
]
]
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.condition_number",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_rows | 32 |
max_cols | 32 |
max_abs | 1000000000000 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |