Einheit 5 / 11

Numerische Berechnung, Python und Codegenerierung

Gewinne:

  • Fähigkeit, zwischen symbolischer und numerischer Berechnung zu unterscheiden und für jedes Problem das richtige Werkzeug (SymPy oder NumPy/SciPy) auszuwählen
  • Fähigkeit, den von künstlicher Intelligenz erzeugten numerischen Code zu lesen und zu verstehen, ihn selbst auszuführen und ihn durch einen gesunden Menschenverstandstest mit einer bekannten Eingabe zu überprüfen.
  • Verstehen Sie die Grenzen der Genauigkeit von Gleitkommazahlen, verwenden Sie Toleranz anstelle von exakter Gleichheit und verwalten Sie die Auswirkungen anfänglicher Schätzungen auf numerische Methoden.

Die symbolische Analysis gibt die genaue Formel eines Integrals oder einer Gleichung an; Die meisten praktischen Probleme in der Mathematik können jedoch nicht durch eine geschlossene Formel gelöst werden. Hier kommt die numerische Berechnung ins Spiel: Sie liefert ein ungefähres numerisches Ergebnis mit der gewünschten Präzision und nicht eine exakte Formel. Den Wert eines Integrals mit einer Genauigkeit von 0,001 ermitteln, die Wurzel einer Gleichung mit der Dezimalnäherung berechnen, Statistiken aus einem Datensatz extrahieren – das sind alles numerische Berechnungen. In Python sind die Werkzeuge dafür die Bibliotheken NumPy (numerische Arrays und Mathematik) und SciPy (wissenschaftliches Rechnen). In dieser Einheit lernen Sie, KI als Assistenten zu verwenden, der Python-Code für numerische Berechnungen generiert und die Richtigkeit des Codes überprüft.

Eine wichtige Definition: Eine Gleitkommazahl ist ein Format, in dem ein Computer Dezimalzahlen mit begrenzter Genauigkeit speichert. Deshalb kann sich in der Computerarithmetik herausstellen, dass 0,1 + 0,2 0,30000000000000004 ergibt und nicht genau 0,3. Das ist kein Fehler, es liegt in der Natur der numerischen Berechnung – aber wenn Sie sich dessen nicht bewusst sind, führt es zu falschen Ergebnissen. Bei der numerischen Berechnung wird eher mit „nahe genug“ als mit „exakter Gleichheit“ gearbeitet.

Symbolisch oder numerisch? Das richtige Werkzeug auswählen

Status

Symbolisch (SymPy)

Numerisch (NumPy/SciPy)

Es gibt eine geschlossene Formel

bevorzugt

nicht notwendig

Keine Formel/zu komplex

Kann nicht gelöst werden

bevorzugt

Absolute Präzision erforderlich

Ja

Ca.

Big Data / Multi-Processing

langsam

sehr schnell

Das Ergebnis mit Dezimalzahl ist ausreichend

geeignet

Ein guter Praktiker verwendet beides: wenn möglich symbolisch lösen, wenn nicht, numerisch vorgehen und wann immer möglich das eine mit dem anderen vergleichen.

Schritt für Schritt: Sicheres Zahlenrechnen mit KI

1. Identifizieren Sie das Problem und die Empfindlichkeit. „Wie viele Dezimalstellen?“ und „in welchem ​​Bereich?“ Klären Sie Ihre Fragen.

2. Code in die KI schreiben, nicht ausgeben. Denken Sie an Einheit 4: Lassen Sie die KI die Codeausgabe nicht vorhersagen. Sie führen den Code aus.

3. Lesen und verstehen Sie den Code. Verstehen Sie den generierten Code Zeile für Zeile. Richtige Bibliothek, richtige Funktion, richtige Parameter? Führen Sie keinen Code aus, den Sie nicht verstehen.

4. Testen Sie mit einer bekannten Situation. Probieren Sie den Code mit einer einfachen Eingabe aus, für die Sie die Antwort bereits kennen. Beispielsweise ist sin(0)=0, wie der Wert eines bekannten Integrals. Wenn der Code es richtig ausgibt, werden Sie ihm mehr vertrauen.

5. Gegenprüfung symbolisch oder manuell durchführen. Bestätigen Sie das gleiche Ergebnis nach Möglichkeit mit SymPy oder einem manuellen Ansatz.

6. Hüten Sie sich vor Gleitkommafallen. Verwenden Sie anstelle einer strikten Gleichheit mit == Toleranzen wie abs(a - b) < 1e-9.

Tipp: Testen Sie einen Zahlencode immer „mit einer Ihnen bekannten Antwort“. Wenn Sie einen Wurzelfinder geschrieben haben, wenden Sie ihn zunächst auf eine Gleichung mit einer bekannten Wurzel (x=±2) an, beispielsweise x²−4=0. Wenn der Code feststellt, dass dies korrekt ist, ist es wahrscheinlicher, dass er bei Gleichungen, die Sie nicht kennen, zuverlässig ist. Dieser „Sanity Check“ ist die günstigste Verifizierung.

Die Falle der numerischen Analysis: Konvergenz und Fehlerakkumulation.

Die meisten numerischen Methoden arbeiten iterativ: Sie beginnen mit einer anfänglichen Vermutung und nähern sich schrittweise der tatsächlichen Antwort. Diese Annäherung wird als Konvergenz bezeichnet. Aber nicht jede iterative Methode konvergiert immer; Einige weichen voneinander ab (entfernen sich vom Ergebnis) oder konvergieren zu einem falschen Wert. Wenn ein von der KI generierter Code nicht prüft, ob die Methode konvergiert, kann es sein, dass Sie stillschweigend eine falsche Zahl erhalten. Nur weil ein numerisches Ergebnis „eine Zahl hervorgebracht“ hat, heißt das nicht, dass es wahr ist; Es muss auch bestätigt werden, dass diese Zahl tatsächlich mit der gesuchten Lösung konvergiert.

Eine zweite Feinheit ist die Fehlerakkumulation. In einer langen Berechnungskette können sich bei jedem Schritt kleine Gleitkomma-Rundungsfehler anhäufen und größer werden; Insbesondere wenn man die Differenz zweier sehr nahe beieinander liegender großer Zahlen bildet (dies wird als katastrophale Stornierung bezeichnet), können signifikante Stellen des Ergebnisses verloren gehen. Künstliche Intelligenz kann solche numerischen Stabilitätsprobleme nicht immer vorhersagen. Bei kritischen Berechnungen deckt die Neuberechnung und der Vergleich des Ergebnisses mit einer anderen Methode oder mit höherer Präzision versteckte Fehleranhäufungen auf.

Achtung: „Ein Ergebnis liefern“ und „zum richtigen Ergebnis konvergieren“ einer numerischen Methode sind zwei verschiedene Dinge. Stellen Sie sicher, dass der Code eine Konvergenzprüfung enthält (z. B. dass der Unterschied zwischen zwei aufeinanderfolgenden Schritten klein genug wird); Wenn es nicht enthalten ist, lassen Sie die künstliche Intelligenz dieses Steuerelement hinzufügen.

drei Mini-Koffer

Fall 1 – Falsche Funktionsauswahl. Ein Student bat die KI um Code, um die Wurzel einer Funktion zu finden. Die KI verwendete scipy.optimize.fsolve, wählte jedoch eine schlechte Anfangsschätzung und konvergierte zur falschen Wurzel. Der Schüler untersuchte zunächst die Funktion, indem er sie grafisch darstellte (siehe Visualisierungseinheit), gab die richtige Anfangsschätzung ab und fand die tatsächliche Wurzel. Lektion: Numerische Wurzelfinder reagieren empfindlich auf den Startpunkt.

Fall 2 – Gleitkommafalle. Ein Ingenieur führte einen KI-Code aus, der Folgendes schrieb: if 0.1 + 0.2 == 0.3: und stellte fest, dass die Bedingung niemals wahr war. Die KI hatte die Gleitkomma-Präzision ignoriert. Der Code wurde mit abs((0,1+0,2) - 0,3) < 1e-9 korrigiert. 1e-9 bedeutet „zehn hoch minus neun“, eine sehr kleine Toleranz.

Fall 3 – Tests mit gesundem Menschenverstand haben den Fehler entdeckt. Ein Lehrer erhielt von scipy.integrate.quad Code, der ein bestimmtes Integral numerisch berechnet. Er testete es zunächst mit einem bekannten Integral wie ∫₀¹ x dx = 0,5; Der Code ergab 0,5. Anschließend berechnete er das tatsächliche Integral und bestätigte das Ergebnis mit SymPy. Er vertraute, wenn zwei unabhängige Methoden zum gleichen Ergebnis führten. Gesamtzeit: 6 Minuten.

Vier kopierbare Vorlagen

1) Anfordern eines numerischen Kontocodes:

Schreiben Sie Python-Code, der das folgende Problem NUMERISCH löst: [Problem]. Verwenden Sie NumPy/SciPy. Empfindlichkeit: [z.B. 6 Dezimalstellen]. Ich werde den Code ausführen; Vorhersage der Ausgabe. Erklären Sie kurz in einer Kommentarzeile, welche Funktion Sie gewählt haben und warum.

2) Hinzufügen eines gesunden Menschenverstandstests:

Fügen Sie diesem Code eine Prüfung auf gesunden Menschenverstand hinzu, um seine RICHTIGKEIT zu testen, bevor Sie ihn ausführen: Versuchen Sie es mit einer einfachen Eingabe, bei der die Antwort bereits bekannt ist (z. B. Wurzel ±2 für x²-4=0) und prüfen Sie, ob er das erwartete Ergebnis liefert.Code: [hier]

3) Symbolisch-numerischer Gegencheck:

Schreiben Sie Code, der das folgende Integral/die folgende Gleichung sowohl mit SymPy (symbolisch) als auch mit SciPy (numerisch) löst: [Problem]. Drucken Sie die beiden Ergebnisse aus, damit ich sie vergleichen kann. Fügen Sie eine Zeile hinzu, die mit abs() nach Unterschieden sucht.

4) Gleitkomma-Sicherheit:

Sehen Sie sich die Vergleiche von Gleitkommazahlen in diesem Code an. Wenn es strikte „==“-Gleichheiten gibt, ersetzen Sie diese durch eine entsprechende Toleranz (abs(a-b) < 1e-9) und erklären Sie, warum. Code: [hier]

Schwache Eingabeaufforderung / Starke Eingabeaufforderung

Schwach: „Finden Sie die Wurzel dieser Gleichung: x³ − 2x − 5 = 0. Schreiben Sie die Antwort.“
Ergebnis: Die KI passt eine Dezimalzahl an (z. B. „2.0946…“). Es kann wahr sein oder auch nicht; Es wurde nicht überprüft, da es nicht ausgeführt wurde.
Leistungsstark: „Schreiben Sie mit SciPy einen Code, der die tatsächliche Wurzel der Gleichung x³ − 2x − 5 = 0 findet. Geben Sie für die erste Schätzung zunächst das Intervall an, in dem die Funktion das Vorzeichen ändert. Fügen Sie eine Zeile hinzu, die die Wurzel ersetzt und überprüft, ob das Ergebnis ~0 ist. Ich werde die Ausgabe sehen.“
Ergebnis: Ausführbarer Code, genaue anfängliche Schätzung, integrierte Hashes. Die Gültigkeit der Wurzel ist bewiesen.

Häufige Fehler

  • Dem Ergebnis vertrauen, ohne den Code auszuführen. Die numerische Ausgabe, die die KI „vorhersagt“, ist keine Validierung.
  • Gleitkommagleichheit mit „==“ testen. Es ist fast immer falsch; Nutzen Sie Toleranz.
  • Schlechte erste Prognose. Numerische Wurzel-/Optimierungsmethoden reagieren empfindlich auf den Startpunkt; Möglicherweise konvergiert es zur falschen Wurzel.
  • Keine Sensibilität ausdrücken. „Wie viele Schritte?“ Wenn Sie nicht gefragt werden, entspricht das Ergebnis möglicherweise nicht den Anforderungen.
  • Ich mache keinen gesunden Menschenverstandstest. Code auf ein echtes Problem anzuwenden, ohne ihn mit einer bekannten Eingabe zu testen, ist riskant.
  • Den Code ausführen, ohne ihn zu verstehen. Code, den Sie nicht verstehen, verwendet möglicherweise die falsche Funktion. Verstehe jede Zeile.
Achtung: Numerische Ergebnisse sind immer Näherungswerte. Anstatt zu sagen „das Ergebnis ist genau das“, sagen Sie „das ist genau das“. In einem technischen oder wissenschaftlichen Bericht gehört die Angabe der verwendeten Methode und Präzision zur Genauigkeit. Es ist irreführend, ein ungefähres Ergebnis als endgültig darzustellen.

Zusammenfassend

Die numerische Analysis liefert ungefähre, aber praktische Ergebnisse für Probleme, die nicht durch geschlossene Formeln gelöst werden können. In Python sind die Tools NumPy und SciPy. KI generiert schnell Code für diese Bibliotheken, aber Sie müssen den Code ausführen, ihn lesen und verstehen und ihn mit bekannten Eingaben testen. Seien Sie vorsichtig mit der Gleitkomma-Präzision: Verwenden Sie Toleranz statt exakter Gleichheit. Wenn möglich, vergleichen Sie symbolische und numerische Methoden. Tests und Substitution auf gesunden Menschenverstand sind die kostengünstigsten und effektivsten Überprüfungen.

Anwendungsaufgabe

Wählen Sie ein Problem, das mit einer geschlossenen Formel schwer zu lösen ist (z. B. die Wurzel x³ − 2x − 5 = 0 oder den bestimmten Wert eines nichtelementaren Integrals). Lassen Sie die KI sowohl den numerischen Code als auch, wenn möglich, den symbolisch-numerischen Gegenprüfcode mit den Vorlagen 1 und 3 drucken. Führen Sie den Code in einer echten Python-Umgebung aus. Führen Sie zunächst einen gesunden Menschenverstandstest mit einer bekannten Eingabe durch und lösen Sie dann das eigentliche Problem. Achten Sie darauf, Toleranzen zu verwenden, wenn ein Gleitkommavergleich erfolgt. Notieren Sie sich das Ergebnis und seine Empfindlichkeit.

Checkliste

  • [ ] Ich habe das Problem und die erforderliche Sensibilität erkannt.
  • [ ] Ich habe den von der KI erzeugten Code Zeile für Zeile gelesen und verstanden.
  • [ ] Ich habe den Code in einer echten Python-Umgebung ausgeführt.
  • [ ] Ich habe einen gesunden Menschenverstandstest mit einer bekannten Eingabe durchgeführt.
  • [ ] Ich habe, wenn möglich, eine symbolische/manuelle Gegenprüfung hinzugefügt.
  • [ ] Ich habe Toleranz bei Gleitkommavergleichen verwendet.