QUICK-PDE: Eine Qiskit Function von ColibriTD
Siehe die API-Referenz
Qiskit Functions sind eine experimentelle Funktion, die Benutzern des IBM Quantum® Premium Plans, Flex Plans und On-Prem (über IBM Quantum Platform API) Plans zur Verfügung steht. Sie befinden sich im Preview-Release-Status und können sich ändern.
Überblick
Der hier vorgestellte Solver für partielle Differentialgleichungen (PDE) ist Teil unserer Quantum Innovative Computing Kit (QUICK)-Plattform (QUICK-PDE) und wird als Qiskit Function bereitgestellt. Mit der QUICK-PDE-Funktion kannst du domänenspezifische partielle Differentialgleichungen auf IBM Quantum QPUs lösen. Diese Funktion basiert auf dem in ColibriTDs H-DES-Beschreibungspapier beschriebenen Algorithmus. Dieser Algorithmus kann komplexe Multiphysik-Probleme lösen, beginnend mit Computational Fluid Dynamics (CFD) und Materials Deformation (MD), wobei weitere Anwendungsfälle in Kürze folgen.
Um die Differentialgleichungen anzugehen, werden die Testlösungen als Linearkombinationen orthogonaler Funktionen (typischerweise Chebyshev-Polynome, und genauer davon, wobei die Anzahl der Qubits ist, die deine Funktion kodieren) kodiert, parametrisiert durch die Winkel einer Variable Quantum Circuit (VQC). Der Ansatz erzeugt einen Zustand, der die Funktion kodiert, die durch Observablen ausgewertet wird, deren Kombinationen die Auswertung der Funktion an allen Punkten ermöglichen. Du kannst dann die Verlustfunktion auswerten, in der die Differentialgleichungen kodiert sind, und die Winkel in einer hybriden Schleife feinabstimmen, wie im Folgenden gezeigt. Die Testlösungen kommen den tatsächlichen Lösungen schrittweise näher, bis du ein zufriedenstellendes Ergebnis erreichst.
Zusätzlich zu dieser hybriden Schleife kannst du auch verschiedene Optimierer verketten. Dies ist nützlich, wenn du einen globalen Optimierer verwenden möchtest, um einen guten Satz von Winkeln zu finden, und dann einen feineren Optimierer, um einem Gradienten zum besten Satz benachbarter Winkel zu folgen. Im Fall der Computational Fluid Dynamics (CFD) liefert die Standard-Optimierungssequenz die besten Ergebnisse - aber im Fall der Material Deformation (MD) kannst du, während der Standard gute Ergebnisse liefert, ihn für problemspezifische Vorteile weiter konfigurieren.
Beachte, dass wir für jede Variable der Funktion die Anzahl der Qubits angeben (mit der du experimentieren kannst). Durch das Stapeln von 10 identischen Schaltungen und die Auswertung der 10 identischen Observablen auf verschiedenen Qubits durch eine große Schaltung kannst du innerhalb des CMA-Optimierungsprozesses Rauschminderung durchführen, wobei du auf die Noise-Learner-Methode vertraust und die Anzahl der benötigten Shots erheblich reduzierst.
Computational fluid dynamics
Die inviszide Burgers-Gleichung modelliert strömende nicht-viskose Flüssigkeiten wie folgt:
stellt das Fluidgeschwindigkeitsfeld dar. Dieser Anwendungsfall hat eine zeitliche Randbedingung: Du kannst die Anfangsbedingung auswählen und dann das System relaxieren lassen. Derzeit sind die einzigen akzeptierten Anfangsbedingungen lineare Funktionen: .
Die Argumente für CFDs Differentialgleichungen befinden sich auf einem festen Gitter wie folgt:
- liegt zwischen 0 und 0,95 mit 30 Abtastpunkten. liegt zwischen 0 und 0,95 mit einer Schrittweite von 0,2375.
Material deformation
Dieser Anwendungsfall konzentriert sich auf hypoelastische Verformung mit dem eindimensionalen Zugversuch, bei dem ein im Raum fixierter Stab an seinem anderen Ende gezogen wird. Wir beschreiben das Problem wie folgt:
stellt den Kompressionsmodul des gedehnten Materials dar, den Exponenten eines Potenzgesetzes, die Kraft pro Masseneinheit, die Proportionalitätsspannungsgrenze, die Proportionalitätsdehnungsgrenze, die Spannungsfunktion und die Dehnungsfunktion.
Der betrachtete Stab hat eine Einheitslänge. Dieser Anwendungsfall hat eine Randbedingung für Oberflächenspannung , oder die Menge an Arbeit, die benötigt wird, um den Stab zu dehnen.
Die Argumente für MDs Differentialgleichungen befinden sich auf einem festen Gitter wie folgt:
- liegt zwischen 0 und 1 mit einer Schrittweite von 0,04.
Benchmarks
Die folgende Tabelle zeigt Statistiken zu verschiedenen Ausführungen unserer Funktion.
| Beispiel | Anzahl der Qubits | Initialisierung | Fehler | Gesamtzeit (min) | Runtime-Nutzung (min) |
|---|---|---|---|---|---|
| Inviszide Burgers-Gleichung | 50 | PHYSICALLY_INFORMED | 66 | 25 | |
| Hypoelastischer 1D-Zugversuch | 18 | RANDOM | 123 | 100 |
Erste Schritte
Fülle das Formular aus, um Zugang zur QUICK-PDE-Funktion anzufordern. Anschließend, vorausgesetzt du hast bereits dein Konto gespeichert in deiner lokalen Umgebung, wähle die Funktion wie folgt aus:
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit-ibm-catalog
from qiskit_ibm_catalog import QiskitFunctionsCatalog
catalog = QiskitFunctionsCatalog(channel="ibm_quantum_platform")
quick = catalog.load("colibritd/quick-pde")
Beispiele
Um loszulegen, probiere eines der folgenden Beispiele:
Computational Fluid Dynamics (CFD)
Wenn Anfangsbedingungen auf gesetzt sind, sind die Ergebnisse wie folgt:
# launch the simulation with initial conditions u(0,x) = a*x + b
job = quick.run(use_case="cfd", physical_parameters={"a": 1.0, "b": 0.0})
Überprüfe den Status deiner Qiskit Function-Workload oder gib Ergebnisse wie folgt zurück:
print(job.status())
solution = job.result()
'QUEUED'
import numpy as np
import matplotlib.pyplot as plt
_ = plt.figure()
ax = plt.axes(projection="3d")
# plot the solution using the 3d plotting capabilities of pyplot
t, x = np.meshgrid(solution["samples"]["t"], solution["samples"]["x"])
ax.plot_surface(
t,
x,
solution["functions"]["u"],
edgecolor="royalblue",
lw=0.25,
rstride=26,
cstride=26,
alpha=0.3,
)
ax.scatter(t, x, solution["functions"]["u"], marker=".")
ax.set(xlabel="t", ylabel="x", zlabel="u(t,x)")
plt.show()

Material deformation
Der Material Deformation-Anwendungsfall erfordert die physikalischen Parameter deines Materials und die angewandte Kraft wie folgt:
import matplotlib.pyplot as plt
# select the properties of your material
job = quick.run(
use_case="md",
physical_parameters={
"t": 12.0,
"K": 100.0,
"n": 4.0,
"b": 10.0,
"epsilon_0": 0.1,
"sigma_0": 5.0,
},
)
# plot the result
solution = job.result()
_ = plt.figure()
stress_plot = plt.subplot(211)
plt.plot(solution["samples"]["x"], solution["functions"]["u"])
strain_plot = plt.subplot(212)
plt.plot(solution["samples"]["x"], solution["functions"]["sigma"])
plt.show()
Das Folgende ist ein Beispiel dafür, wie du den Wert der Funktion für einen bestimmten Satz von Koordinaten erhältst:
# u(t=0.2, x=0.7) == 2
assert solution["samples"]["t"][1] == 0.2
assert solution["samples"]["x"][2] == 0.7
assert solution["functions"]["u"][1, 2] == 2
Fehlermeldungen abrufen
Wenn der Status deiner Workload ERROR ist, verwende job.error_message(), um die Fehlermeldung zum Debuggen abzurufen, wie folgt:
job = quick.run(use_case="mdf", physical_params={})
print(job.error_message())
# or write a wrapper around it for a more human readable version
def pprint_error(job):
print("".join(eval(job.error_message())["error"]))
print("___")
pprint_error(job)
{"error": ["qiskit.exceptions.QiskitError: 'Unknown argument \"physical_params\", did you make a typo? -- https://docs.quantum.ibm.com/errors#1804'\n"]}
___
qiskit.exceptions.QiskitError: 'Unknown argument "physical_params", did you make a typo? -- https://docs.quantum.ibm.com/errors#1804'
Support erhalten
Für Support kontaktiere qiskit-function-support@colibritd.com.
Nächste Schritte
- Fülle das Formular aus, um Zugang zur QUICK-PDE-Funktion anzufordern.
- Besuche die API-Referenz für diese Qiskit Function.
- Versuche, eine strömende nicht-viskose Flüssigkeit mit QUICK-PDE im Tutorial zu modellieren.
- Lies Jaffali, H., et al. (2025). H-DES: a Quantum-Classical Hybrid Differential Equation Solver. arXiv preprint arXiv:2410.01130.