Reading Time: 8 minutes

Sie müssen zwei verschiedene Dinge über eine Simulation wissen: ob der Code die Gleichungen richtig löst und ob das Modell für das reale Problem genau genug ist. Die erste Frage ist die Überprüfung. Die zweite Frage ist die Validierung.

Aber das reicht nicht. Sie müssen auch verstehen, wie sehr Sie den Zahlen vertrauen können, die Ihre Simulation produziert. Hier tritt die Unsicherheitsquantifizierung in den Workflow ein.

Dieser Leitfaden erklärt das vollständige VVUQ-Framework: Verifizierung, Validierung und Unsicherheitsquantifizierung. Es enthält auch praktische Python- und FIPY-Beispiele, die Ihnen helfen können, diese Ideen in Ihrer eigenen Simulationsarbeit anzuwenden.

Schlüssel zum Mitnehmen

  • Verifizierung beantwortet die Frage: Haben wir die Gleichungen richtig gelöst? Es überprüft die Korrektheit des Codes, die numerische Genauigkeit und die Implementierungsfehler.
  • Validierung beantwortet die Frage: Haben wir die richtigen Gleichungen gelöst? Es vergleicht die Simulationsausgabe mit experimentellen Daten, Benchmark-Daten oder vertrauenswürdigen Referenzergebnissen.
  • Die Quantifizierung der Unsicherheit beantwortet die Frage: Wie sehr können wir diesen Ergebnissen vertrauen? Es propagiert Eingabeunsicherheiten durch das Modell und meldet Vertrauensgrenzen für Vorhersagen.
  • UQ wird oft in V & V-Diskussionen erwähnt, aber selten mit praktischen Python-Beispielen implementiert. Dieser Leitfaden gibt konkrete Ausgangspunkte.
  • Das ASME VVUQ-Standardportfolio bietet eine weit verbreitete Struktur für VVUQ-Workflows über Computerdisziplinen hinweg.

Verifizierung, Validierung und Unsicherheit Quantifizierung: Warum sie zusammen gehören

Wenn Sie jemals eine Simulation ausgeführt haben und gefragt haben, ob Sie den Ergebnissen vertrauen können, sind Sie bereits auf das Problem gestoßen, das VVUQ anspricht.

Überprüfung, Validierung und Unsicherheitsquantifizierung sind keine separaten Aufgaben, die Sie unabhängig ausführen. Sie bilden eine Glaubwürdigkeitspipeline:

  1. Die Überprüfung beweist, dass der Code mathematisch und rechnerisch korrekt ist.
  2. Die Validierung prüft, ob das Modell das reale System gut genug für den beabsichtigten Einsatz darstellt.
  3. Die Unsicherheitsquantifizierung zeigt Ihnen, wie sicher Sie in den Vorhersagen sein können.

Das ASME VVUQ-Framework formalisiert diese Pipeline in einem strukturierten Workflow, der für rechnerische Feststoffmechanik, Fluiddynamik, medizinische Geräte und andere simulationslastige Felder verwendet wird. ASME VVUQ

Die Unterscheidung zwischen Verifizierung und Validierung wird häufig durch zwei Fragen zusammengefasst.

Frage Was es bedeutet Was Sie überprüfen
Lösen wir die Gleichungen richtig? Überprüfung Codierung von Fehlern, numerischen Fehlern und Diskretisierungsfehlern
Lösen wir die richtigen Gleichungen? Bestätigung Genauigkeit des physikalischen Modells, Randbedingungen und Annahmen

Die dritte Frage ist: Wie sicher können wir sein? Hier geht die Unsicherheitsquantifizierung in den Prozess ein.

Eine Simulation kann überprüft und validiert werden, erzeugt aber dennoch Vorhersagen mit großen Unsicherheitsintervallen. Wenn diese Intervalle zu breit sind, ist das Ergebnis möglicherweise nicht für Design, Regulierung oder Entscheidungsfindung nützlich.

1. Verifizierung: Der Nachweis Ihres Codes ist korrekt

Die Verifizierung ist mathematisch und rechnerisch. Es testet die reale Welt nicht direkt. Stattdessen wird davon ausgegangen, dass die maßgeblichen Gleichungen korrekt sind und fragt, ob das Computerprogramm sie ohne numerische oder Implementierungsfehler löst.

Die Verifizierung hat zwei Hauptaspekte: die Codeüberprüfung und die Reihenfolge der Genauigkeitsprüfung.

Code-Überprüfung: Entsprach die Implementierung der Mathematik?

Die Codeüberprüfung zeigt, dass der Solver das mathematische Modell korrekt implementiert. Zwei weit verbreitete Methoden sind die Methode der Herstellung von Lösungen und die Reihenfolge der Genauigkeitsprüfung.

Methode der hergestellten Lösungen

Die Methode der hergestellten Lösungen ist eines der stärksten Werkzeuge für die Codeverifizierung in der Computerwissenschaft. Es wird eine bekannte analytische Lösung erstellt, der erforderliche Quellbegriff berechnet und dann überprüft, ob der Code diese Lösung reproduziert.

Das Verfahren ist:

  1. Wählen Sie eine glatte analytische Lösung wie u_m = sin(x) * cos(y) * exp(-t).
  2. Ersetzen Sie die hergestellte Lösung in den PDE-Operator, um den erforderlichen Quellbegriff zu berechnen.
  3. Führen Sie die Simulation mit dem hergestellten Quellterm und übereinstimmenden Grenz- oder Anfangsbedingungen aus.
  4. Vergleichen Sie die numerische Lösung mit der genau hergestellten Lösung.
  5. Führen Sie Studien zur Netzverfeinerung durch, um zu überprüfen, ob die beobachtete Konvergenzreihenfolge mit der theoretischen Reihenfolge übereinstimmt.

Hier ist ein vereinfachtes Beispiel im FIPY-Stil für ein vorübergehendes Diffusionsproblem:

import numpy as np
from fipy import Grid2D, CellVariable, TransientTerm, DiffusionTerm

# Manufactured solution:
# u(x, y, t) = sin(pi*x) * sin(pi*y) * exp(-2*pi^2*t)

nx, ny = 32, 32
Lx, Ly = 1.0, 1.0

dx = Lx / nx
dy = Ly / ny

mesh = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy)

x, y = mesh.cellCenters

u = CellVariable(name="u", mesh=mesh, hasOld=True)

def exact_solution(t):
    return np.sin(np.pi * x) * np.sin(np.pi * y) * np.exp(-2 * np.pi**2 * t)

# Initial condition
u.setValue(exact_solution(0.0))

# For this manufactured solution and diffusion coefficient 1:
# du/dt = Laplacian(u), so the source term is zero.
source = CellVariable(name="source", mesh=mesh, value=0.0)

eq = TransientTerm(var=u) == DiffusionTerm(coeff=1.0, var=u) + source

dt = 0.001
nt = 100

for step in range(nt):
    u.updateOld()
    eq.solve(var=u, dt=dt)

t_final = dt * nt
exact = exact_solution(t_final)

l2_error = np.sqrt(np.mean((u.value - exact) ** 2))

print(f"L2 error at t={t_final:.3f}: {l2_error:.6e}")

Wenn Sie die Maschengröße halbieren und der Fehler um etwa den Faktor vier sinkt, verhält sich ein Schema zweiter Ordnung wie erwartet. Wenn dies nicht der Fall ist, kann die Implementierung einen Fehler enthalten oder die Grenzbehandlung kann die beobachtete Reihenfolge verringern.

Reihenfolge der Genauigkeitsprüfung

Die Reihenfolge der Genauigkeitstests verifiziert, dass der Code die erwartete Konvergenzrate unter Netzverfeinerung erreicht.

Bei einem Finite-Volumen-Schema zweiter Ordnung sollte die Halbierung des Netzabstands den Fehler um etwa den Faktor vier reduzieren.

Das Verfahren ist:

  1. Wählen Sie ein Problem mit einer bekannten exakten Lösung, entweder aus MMS oder einem Lehrbuch-Benchmark.
  2. Lösen Sie das Problem auf einer Folge von verfeinerten Netzen wie 32 × 32, 64 × 64 und 128 × 128.
  3. Berechnen Sie eine Fehlernorm auf jeder Verfeinerungsebene wie L1, L2 oder L∞.
  4. Plotfehler versus Maschengröße in einem Log-Log-Diagramm.
  5. Berechnen Sie die beobachtete Reihenfolge mit order = log(e_coarse / e_fine) / log(h_coarse / h_fine).
  6. Stellen Sie sicher, dass die beobachtete Reihenfolge innerhalb einer angemessenen Toleranz mit der theoretischen Diskretisierungsreihenfolge übereinstimmt.

Dies ist eine Mindestanforderung für jeden PDE-Code, der numerische Korrektheit beansprucht. Ohne sie sind Fehlerschätzungen und Schlussfolgerungen der Netzkonvergenz schwach.

Wichtige Warnung vor Cross-Code-Vergleich

Das Vergleichen von zwei verschiedenen Codes kann als Sanity-Check nützlich sein, ersetzt jedoch nicht die Überprüfung gegen analytische oder hergestellte Lösungen.

Zwei Codes können zustimmen und sind immer noch falsch, wenn beide denselben systematischen Fehler teilen. Der Cross-Code-Vergleich sollte als ergänzende Überprüfung nach ordnungsgemäßer MMS- oder Auftragsprüfung verwendet werden.

2. Validierung: Simulationen mit der Realität vergleichen

Die Validierung beurteilt, ob das Simulationsmodell für die beabsichtigte Verwendung ausreichend genau ist. Dies geschieht, indem Vorhersagen mit unabhängigen experimentellen Daten, Benchmark-Daten oder vertrauenswürdigen Referenzergebnissen verglichen werden.

Eine Schlüsselregel ist, dass Kalibrierung und Validierung getrennt sein müssen. Kalibrierung Passt die Modellparameter an die Daten an. Validierungstests Vorhersagekraft auf unabhängigen Daten. Die Verwendung desselben Datensatzes für beide schafft künstliches Vertrauen.

Benchmark-Probleme als Validierungsziele

Benchmark-Probleme sind standardisierte Testfälle mit gut charakterisierten experimentellen oder High-Fidelity-Referenzdaten. Sie bieten objektive Validierungsziele.

Gemeinsame Benchmark-Kategorien umfassen:

  • Fluiddynamik, wie z.
  • Transportgleichungen wie 1D-Advektionsdiffusion mit bekanntem analytischen Verhalten.
  • Phasenfeldmodelle wie Allen-Cahn- oder Cahn-Hilliard-Muster im Vergleich zum Referenzverhalten.
  • Diffusionsreaktionssysteme wie die Validierung der Wellengeschwindigkeit von Fisher-KPP.

Für die Modellierung von Computermaterialien und das PDE-basierte maschinelle Lernen können Benchmark-Datensätze wie pdebench standardisierte Referenzprobleme bereitstellen.

Wenn experimentelle Daten nicht verfügbar sind

Nicht immer sind hochwertige experimentelle Daten verfügbar. In diesem Fall können Sie immer noch Validierungsnachweise erstellen, indem Sie die besten verfügbaren Alternativen verwenden.

  1. Verwenden Sie High-Fidelity-Referenzlösungen wie DNS für turbulente Strömungen, sofern verfügbar.
  2. Vergleichen Sie mit analytischen Lösungen für vereinfachte Fälle.
  3. Führen Sie Cross-Code-Vergleiche mit unabhängigen, gut verifizierten Codes durch.
  4. Seien Sie transparent in Bezug auf die Einschränkung und charakterisieren Sie die prädiktive Unsicherheit durch Sensitivitätsanalyse.

Hierarchische Validierungsstrategie

Eine praktische Validierungsstrategie sollte hierarchisch sein.

  1. Start with simple benchmark problems that isolate specific physics.
  2. Bauen Sie die Komplexität durch Tests auf Systemebene auf, die mehrere Phänomene kombinieren.
  3. Dokumentieren Sie die Validierungsprobleme, Ergebnisse, Fehlermetriken und Schlussfolgerungen über die Angemessenheit für den beabsichtigten Gebrauch.

Ein Modell wird selten perfekt validiert. Es wird für einen bestimmten Verwendungszweck auf ein bestimmtes Maß an Genauigkeit validiert.

3. Unsicherheitsquantifizierung: Messen des Vertrauens in Vorhersagen

Unsicherheitsquantifizierung ist der Prozess der Charakterisierung, Quantifizierung und Verbreitung von Unsicherheiten in Modelleingaben, Parametern und Approximationen. Es hilft zu bewerten, wie sich die Unsicherheit auf die Modellausgaben und das Vorhersagevertrauen auswirkt.

Kein Modell ist perfekt und jedes reale System umfasst Variabilität und unvollständiges Wissen. UQ hilft Ihnen nicht nur zu verstehen, was das Modell vorhersagt, sondern auch, wie sicher diese Vorhersage ist.

Arten von Unsicherheit

UQ unterscheidet zwei Hauptkategorien der Unsicherheit.

Typ Was es bedeutet Kann es reduziert werden? Beispiele
Zufallsmäßig inhärente Zufälligkeit in einem System Nein, es ist nicht reduzierbar Fertigungstoleranzen und Umweltschwankungen
epistemisch Mangel an Wissen über das System Ja, durch mehr Daten oder bessere Modelle Unbekannte Materialeigenschaften und nicht gemessene Ausgangsbedingungen

Diese Unterscheidung ist wichtig, da sie die Wahl der UQ-Methode beeinflusst. Die aleatorische Unsicherheit wird normalerweise mit Wahrscheinlichkeitsverteilungen beschrieben. Die epistemische Unsicherheit kann oft durch mehr Messungen, bessere Modelle oder verbesserte Kalibrierung verringert werden.

UQ-Methoden: Von einfach bis fortgeschritten

Monte-Carlo-Simulation

Die Monte-Carlo-Simulation ist die einfachste UQ-Methode. Sie führen das Modell wiederholt mit zufällig abgetasteten Eingabewerten aus definierten Verteilungen aus. Das Ergebnis ist eine Verteilung der Ausgabewerte.

import numpy as np

# Example: propagate uncertainty in thermal conductivity.
# Assume k = 200 W/mK +/- 10%, represented as a uniform distribution.
k_samples = np.random.uniform(180, 220, size=10000)

# Simplified steady-state heat transfer:
# T = q * L / (k * A)
q = 1000
L = 0.01
A = 1.0

T = (q * L) / (k_samples * A)

print(f"Mean temperature: {np.mean(T):.2f} K")
print(
    "95% confidence interval: "
    f"[{np.percentile(T, 2.5):.2f}, {np.percentile(T, 97.5):.2f}] K"
)

Monte Carlo ist leicht zu verstehen und umzusetzen. Sein Hauptnachteil sind die Kosten. Wenn jeder Modelllauf teuer ist, können Tausende von Proben unpraktisch sein.

Erweiterung des Polynom-Chaos

Die Polynom-Chaos-Erweiterung erstellt ein Ersatzmodell, das die Ausgabe als Polynomfunktion unsicherer Eingaben darstellt. Es kann viel effizienter sein als Brute-Force Monte Carlo, wenn jeder Simulationslauf teuer ist.

Python-Tools wie EasyVVuq und EasySurrogate können Polynom-Chaos und Surrogat-basierte UQ-Workflows unterstützen.

Sensitivitätsanalyse

Die Sensitivitätsanalyse untersucht, wie Variationen in der Modellausgabe auf Variationen der Modelleingaben zurückzuführen sind. Es hilft zu identifizieren, welche Parameter die Vorhersagen am meisten beeinflussen.

Zwei Hauptkategorien sind:

  • lokale Sensitivitätsanalyse. Dies ändert jeweils eine Eingabe, während andere festgehalten werden. Es ist einfach, erfasst aber keine Parameterinteraktionen.
  • Globale Sensibilitätsanalyse. Dies variiert alle Eingaben zusammen und kann Interaktionen berücksichtigen. Zu den Methoden gehören Sobol-Indizes, Regressionsbasierte Methoden und Derivatmethoden.

Sensitivitätsanalyse ist nützlich für:

  1. Priorisierung der Datenerfassung durch Identifizierung der Parameter, die am wichtigsten sind.
  2. Vereinfachung von Modellen durch Festlegung von Parametern, die vernachlässigbare Auswirkungen haben.
  3. Verstehen, welche Mechanismen Vorhersagen antreiben.

Die integrierte VVUQ-Pipeline: Alles zusammensetzen

Eine integrierte VVUQ-Pipeline folgt einem systematischen Workflow.

  1. Identifizieren und charakterisieren Sie Unsicherheiten in Eingaben, physikalischen Parametern und numerischen Approximationen.
  2. Führen Sie die Code- und Lösungsprüfung durch, um numerische Fehler, Codierungsfehler und Unsicherheiten zu reduzieren.
  3. Übertragen Sie Eingabeunsicherheiten durch das Berechnungsmodell, um Ausgabeverteilungen zu generieren.
  4. Validieren Sie Modellvorhersagen gegen kontrollierte experimentelle Daten oder vertrauenswürdige Benchmark-Ergebnisse.
  5. Unterstützen Sie die Entscheidungsfindung mit probabilistischen, risikoinformierten Ergebnissen und nicht mit einzelnen deterministischen Vorhersagen.

In der Praxis kann dieser Workflow durch Tools wie EasyVVuq, Fabsim3, Ersatzmodellierungsbibliotheken und HPC-orientierte Workflow-Systeme unterstützt werden.

Häufige V & V-Fehler und wie man sie vermeidet

Überprüfungsfehler

  • Angenommen, der Code ist fehlerfrei. Selbst weit verbreitete Codes können unentdeckte Fehler enthalten. Regressionstests mit MMS-Fällen können neue Fehler abfangen.
  • Vernachlässigung der Auftragsgenauigkeit. Ohne die theoretischen Konvergenzraten zu bestätigen, sind Fehlerschätzungen schwach.
  • Verwenden des Cross-Code-Vergleichs als einzige Verifizierungsmethode. Zwei falsche Codes können zustimmen.
  • Verifizierung als einmalige Aktivität behandeln. Jede aussagekräftige Codeänderung sollte eine relevante Neuverifizierung auslösen.

Validierungsfehler

  • Verwirrende Kalibrierung mit Validierung. Das Abstimmen von Parametern auf Daten und dann die Validierung gegen dieselben Daten erhöht das Vertrauen.
  • experimentelle Unsicherheit ignorieren. Eine Diskrepanz kann akzeptabel sein, wenn die experimentelle Unsicherheit größer als der Unterschied ist.
  • Extrapolieren über das validierte Regime hinaus. Ein Modell, das in einem Regime validiert wird, sollte ohne zusätzliche Beweise nicht in einem sehr anderen Regime vertraut werden.
  • Schlechte Dokumentation. Ohne detaillierte Validierungsaufzeichnungen ist die Glaubwürdigkeit der Simulation schwer zu beurteilen.

UQ-spezifische Fehler

  • Angenommen, UQ ist optional. Ohne Unsicherheitsgrenzen fehlt es bei einer validierten Simulation immer noch an einem nutzbaren Konfidenzintervall.
  • Parameterinteraktionen ignorieren. Eine Einzelsensitivitätsanalyse kann Interaktionseffekte übersehen, die globale Methoden erfassen.
  • Alle Unsicherheit als Aleatory behandeln. Einige Unsicherheiten sind epistemisch und können durch bessere Daten oder bessere Modelle verringert werden.

Entscheidungsleitfaden: Wie viel VVUQ-Rigor benötigen Sie?

Der Grad der VVUQ-Rigorität sollte mit den Konsequenzen eines Modellfehlers übereinstimmen.

Lage Empfohlene Genauigkeit Warum
Akademischer Forschungscode Grundprüfung mit MMS und Netzkonvergenz Minimales akzeptables Niveau für Glaubwürdigkeit
Veröffentlichte Simulationsergebnisse Verifizierung plus Validierung gegenüber Benchmarks Unterstützt Reproduzierbarkeit und Peer Review
Entscheidungen zum industriellen Design Voller VVUQ mit UQ-Grenzen Designauswahl und -konformität kann vom Modell abhängen
sicherheitskritische Anwendungen ASME-Framework mit unabhängiger Überprüfung Regulierungs- und Haftungsrisiken sind hoch
Maschinelles Lernen Surrogate-Genauigkeitsprüfung plus UQ der Vorhersagegrenzen Ersatzfehler muss quantifiziert werden
Code-Wartung oder Fehlerbehebungen Gezielte MMS-Tests für betroffene Module Kostengünstige Überprüfung für geänderte Codepfade

Das Fazit ist einfach: VVUQ-Rigor sollte den Folgen des Scheiterns entsprechen. Akademischer Code braucht grundlegende Überprüfung. Veröffentlichte Ergebnisse brauchen eine stärkere Validierung. Industrie- und sicherheitskritische Anwendungen erfordern umfassende, dokumentierte VVUQ.

Zusammenfassung und nächste Schritte

Überprüfung, Validierung und Unsicherheitsquantifizierung sind keine optionalen Extras. Sie sind Kernbestandteile glaubwürdiger wissenschaftlicher Simulation.

Eine praktische VVUQ-Pipeline sollte dieser Reihenfolge folgen:

  1. Beginnen Sie mit der Codeüberprüfung mit MMS- und Auftragsgenauigkeitstests.
  2. Quantifizieren Sie numerische Fehler durch Lösungsüberprüfung für Produktionsläufe.
  3. Erstellen Sie Validierungsnachweise mit Benchmark-Problemen und unabhängigen Daten.
  4. Fügen Sie die Unsicherheitsquantifizierung hinzu, um die Konfidenzgrenzen für Vorhersagen zu melden.
  5. Befolgen Sie die Standards wie ASME VVUQ, um den Prozess zu strukturieren und die Genauigkeit zu kommunizieren.

Selbst ein grundlegendes VVUQ-Programm wie MMS-Tests, Netzkonvergenz und eine UQ-Methode können das Vertrauen in die Simulationsergebnisse und das frühzeitige Abfangen von Fehlern dramatisch erhöhen.

Verwandte Anleitungen

Für verwandte Themen in wissenschaftlichen Simulations-Workflows auf Matforge:

Referenzen und Weiterlesen