Zum Hauptinhalt springen Zur Suche springen Zur Hauptnavigation springen
Kostenloser Versand & Rückversand
Über 90.000 zufriedene Kunden
2 % Vorkasse-Rabatt
Fachberatung: 02973 979400-40
Zur Startseite gehen

Doppel-Waschtisch Bad Set komplett - Vinkoja (vierteilig)

1.049,00 €

inkl. MwSt.
Produktnummer: 798-10119679-001

Kostenloser Versand

Lieferzeit: 5 - 8 Werktage

Lieferung: ca. 25. September bis 29. September

1.049,00 €

Produkt Anzahl: Gib den gewünschten Wert ein oder benutze die Schaltflächen um die Anzahl zu erhöhen oder zu reduzieren.

Modernes 4-teiliges Badmöbel-Set in Schwarz mit Keramik-Doppelwaschbecken, großzügigem Stauraum und praktischer Wandmontage.

Maße Breite: 178 cm · Tiefe: 46 cm · Höhe: 150 cm
Material Holzwerkstoff (Hochschränke, Waschtisch), Keramik (Doppelwaschbecken), ESG-Spiegelglas (Spiegel)
Farbe Schwarz (Hochschränke, Waschtisch), Weiß (Doppelwaschbecken)
Besonderheit 4-teiliges Badmöbel-Set mit Keramik-Doppelwaschbecken
Lieferung Set aus 4 Teilen, zerlegt zum leichten Selbstaufbau (Montageanleitung liegt bei)

✨ Was dieses Produkt besonders macht

🚿

Stilvolles Design mit Doppelwaschbecken

  • Elegante Optik in Schwarz
  • Keramik-Doppelwaschbecken

Verleihen Sie Ihrem Badezimmer eine moderne und elegante Atmosphäre. Diese Badmöbel-Kombination in edlem Schwarz kombiniert pflegeleichte Oberflächen mit einem hochwertigen Doppelwaschbecken aus Keramik, das viel Komfort bei der täglichen Pflege bietet.

🗄️

Durchdachter Stauraum für Ihr Bad

  • 2 Hochschränke mit Einlegeböden
  • Waschtisch mit 2 Schubladen

Genießen Sie optimale Ordnung und viel Platz für Ihre Badutensilien. Zwei geräumige Hochschränke mit variabel montierbaren Türen sowie zwei sanft gleitende Schubladen am Waschtisch bieten großzügigen Stauraum für Handtücher und Pflegeprodukte.

🪞

Großzügiger Wandspiegel mit Ablagen

  • Großer Wandspiegel aus ESG-Glas
  • 4 integrierte Ablageflächen

Perfekte Kombination aus Eleganz und praktischer Nutzbarkeit. Der breite Spiegel aus hochwertigem ESG-Glas verfügt über eine integrierte Rückwand mit vier kleinen Ablageflächen, damit Kosmetika und Parfümflakons stets griffbereit sind.

💡

Stimmungsvolle Beleuchtungsoption

  • Optional mit LED-Beleuchtung

Setzen Sie Ihr Badezimmer gekonnt in Szene. Das Set ist auf Wunsch mit passenden LED-Aufsatzleuchten erhältlich, die für ein angenehmes Lichtkonzept am Spiegel sorgen.

⚠️ Wichtiger Hinweis: Armaturen, Abflusszubehör und Dekorationsartikel sind nicht im Lieferumfang enthalten.
📐 Abmessungen
GesamtmaßeBreite: 178 cm · Tiefe: 46 cm · Höhe: 150 cm
Maße der Bestandteile
Hochschrank (2x)Breite: 33 cm · Tiefe: 22 cm · Höhe: 150 cm
SpiegelBreite: 112 cm · Tiefe: 12 cm · Höhe: 59 cm
WaschtischBreite: 112 cm · Tiefe: 46 cm · Höhe: 51 cm
✨ Design & Material
FarbeSchwarz (Hochschränke, Waschtisch), Weiß (Doppelwaschbecken), Alufarben (Bügelgriffe)
Material & HaptikHolzwerkstoff (Hochschränke, Waschtisch), melaminbeschichtet; Keramik (Doppelwaschbecken); ESG-Spiegelglas (Spiegel); Metall (Bügelgriffe, Beschläge, Schubladenauszüge)
🛠 Montage & Lieferumfang
Montage-ZustandZerlegt, zum leichten Selbstaufbau (Montageanleitung liegt bei)
MontageartWandmontage自由空間の誘電率 <tex>$oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{ heta}_{oldsymbol{0boldsymbol{oldsymbol{oldsymbol{ heta}_0))))) ight| oldsymbol{ heta} ight)$</tex>, on and near the boundary <tex>$t=t_c$</tex>, using<tex>$$( abla_1 f)_{oldsymbol{ heta}_0}^T = -oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T H_{oldsymbol{ heta}_0}^{-1} oldsymbol{u}_0$$</tex> evaluate efficiently <tex>$ abla_{oldsymbol{oldsymbol{w}}} oldsymbol{oldsymbol{h}}_0$</tex>, and form the product<tex>$$ abla_{oldsymbol{ heta}} ( abla_1 f_{oldsymbol{ heta}_0}) = - abla_{oldsymbol{ heta}} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T H_{oldsymbol{ heta}_0}^{-1} oldsymbol{u}_0 - oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T abla_{oldsymbol{ heta}} (H_{oldsymbol{ heta}_0}^{-1} oldsymbol{u}_0).$$</tex>Note that we directly used <tex>$ abla_{oldsymbol{w}} oldsymbol{oldsymbol{h}}_0$</tex> rather than using the full derivative <tex>$ abla_{oldsymbol{w}} oldsymbol{h}$</tex>. Here, <tex>$oldsymbol{ heta}=(oldsymbol{w}, oldsymbol{oldsymbol{oldsymbol{ heta}}_{oldsymbol{u}}})$</tex>. The first term contains second derivatives of <tex>$oldsymbol{h}$</tex> that can be computed efficiently, while the second term requires the solution of another system of linear equations. Both terms can be evaluated without forming the Hessian <tex>$H$</tex> by using automatic differentiation. In particular, we obtain: <tex>$$egin{aligned} & abla_{oldsymbol{ heta}} ( abla_1 f_{oldsymbol{ heta}_0}) \ &=- egin{pmatrix} abla_{oldsymbol{w}} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T (oldsymbol{u}_0) H_{oldsymbol{ heta}_0}^{-1} oldsymbol{u}_0 \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} rac{doldsymbol{u}}{dt}ig|_{t_0^+} rac{d|oldsymbol{oldsymbol{h}}|}{dt} \ -oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T H_{oldsymbol{ heta}_0}^{-1} oldsymbol{oldsymbol{r}}_0^T oldsymbol{u}_0 rac{d|oldsymbol{oldsymbol{h}}|}{dt} + oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} - oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T H_{oldsymbol{ heta}_0}^{-1} oldsymbol{Q}_{oldsymbol{u}_0} oldsymbol{u}_0 rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{v}}_0^T \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} rac{d^2oldsymbol{u}}{dt^2}ig|_{t_0^+} rac{d|oldsymbol{oldsymbol{h}}|}{dt} rac{doldsymbol{u}}{dt}ig|_{t_0^+} \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} oldsymbol{u}_0 rac{d|oldsymbol{oldsymbol{h}}|}{dt} \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} rac{doldsymbol{u}}{dt}ig|_{t_0^+} rac{d|oldsymbol{oldsymbol{h}}|}{dt} rac{doldsymbol{u}}{dt}ig|_{t_0^+} rac{d|oldsymbol{oldsymbol{h}}|}{dt} \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} oldsymbol{u}_0 rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{v}}_0^T rac{d|oldsymbol{oldsymbol{h}}|}{dt} rac{doldsymbol{u}}{dt}ig|_{t_0^+} \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} oldsymbol{u}_0 rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{v}}_0^T rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{v}}_0^T rac{d|oldsymbol{oldsymbol{h}}|}{dt} rac{doldsymbol{u}}{dt}ig|_{t_0^+} rac{d|oldsymbol{oldsymbol{h}}|}{dt} ight) ext{,} ag{18} ag{19} ag{20} ag{21} ag{22} ag{23} ag{24} ag{25} ag{26} ag{27} ag{28} ag{29} ag{30} ag{31} ag{32} ag{33} ag{34} ag{35} ag{36} ag{37} ag{38} ag{39} ag{40} ag{41} ag{42} ag{43} ag{44} ag{45} ag{46} ag{47} ag{48} ag{49} ag{50} ag{51} ag{52} ag{53} ag{54} ag{55} ag{56} ag{57} ag{58} ag{59} ag{60} ag{61} ag{62} ag{63} ag{64} ag{65} ag{66} ag{67} ag{68} ag{69} ag{70} ag{71} ag{72} ag{73} ag{74} ag{75} ag{76} ag{77} ag{78} ag{79} ag{80} ag{81} ag{82} ag{83} ag{84} ag{85} ag{86} ag{87} ag{88} ag{89} ag{90} ag{91} ag{92} ag{93} ag{94} ag{95} ag{96} ag{97} ag{98} ag{99} ag{100} ag{101} ag{102} ag{103} ag{104} ag{105} ag{106} ag{107} ag{108} ag{109} ag{110} ag{111} ag{112} ag{113} ag{114} ag{115} ag{116} ag{117} ag{118} ag{119} ag{120} ag{121} ag{122} ag{123} ag{124} ag{125} ag{126} ag{127} ag{128} ag{129} ag{130} ag{131} ag{132} ag{133} ag{134} ag{135} ag{136} ag{137} ag{138} ag{139} ag{140} ag{141} ag{142} ag{143} ag{144} ag{145} ag{146} ag{147} ag{148} ag{149} ag{150} ag{151} ag{152} ag{153} ag{154} ag{155} ag{156} ag{157} ag{158} ag{159} ag{160} ag{161} ag{162} ag{163} ag{164} ag{165} ag{166} ag{167} ag{168} ag{169} ag{170} ag{171} ag{172} ag{173} ag{174} ag{175} ag{176} ag{177} ag{178} ag{179} ag{180} ag{181} ag{182} ag{183} ag{184} ag{185} ag{186} ag{187} ag{188} ag{189} ag{190} ag{191} ag{192} ag{193} ag{194} ag{195} ag{196} ag{197} ag{198} ag{199} ag{200} ag{201} ag{202} ag{203} ag{204} ag{205} ag{206} ag{207} ag{208} ag{209} ag{210} ag{211} ag{212} ag{213} ag{214} ag{215} ag{216} ag{217} ag{218} ag{219} ag{220} ag{221} ag{222} ag{223} ag{224} ag{225} ag{226} ag{227} ag{228} ag{229} ag{230} ag{231} ag{232} ag{233} ag{234} ag{235} ag{236} ag{237} ag{238} ag{239} ag{240} ag{241} ag{242} ag{243} ag{244} ag{245} ag{246} ag{247} ag{248} ag{249} ag{250} ag{251} ag{252} ag{253} ag{254} ag{255} ag{256} ag{257} ag{258} ag{259} ag{260} ag{261} ag{262} ag{263} ag{264} ag{265} ag{266} ag{267} ag{268} ag{269} ag{270} ag{271} ag{272} ag{273} ag{274} ag{275} ag{276} ag{277} ag{278} ag{279} ag{280} ag{281} ag{282} ag{283} ag{284} ag{285} ag{286} ag{287} ag{288} ag{289} ag{290} ag{291} ag{292} ag{293} ag{294} ag{295} ag{296} ag{297} ag{298} ag{299} ag{300} ag{301} ag{302} ag{303} ag{304} ag{305} ag{306} ag{307} ag{308} ag{309} ag{310} ag{311} ag{312} ag{313} ag{314} ag{315} ag{316} ag{317} ag{318} ag{319} ag{320} ag{321} ag{322} ag{323} ag{324} ag{325} ag{326} ag{327} ag{328} ag{329} ag{330} ag{331} ag{332} ag{333} ag{334} ag{335} ag{336} ag{337} ag{338} ag{339} ag{340} ag{341} ag{342} ag{343} ag{344} ag{345} ag{346} ag{347} ag{348} ag{349} ag{350} ag{351} ag{352} ag{353} ag{354} ag{355} ag{356} ag{357} ag{358} ag{359} ag{360} ag{361} ag{362} ag{363} ag{364} ag{365} ag{366} ag{367} ag{368} ag{369} ag{370} ag{371} ag{372} ag{373} ag{374} ag{375} ag{376} ag{377} ag{378} ag{379} ag{380} ag{381} ag{382} ag{383} ag{384} ag{385} ag{386} ag{387} ag{388} ag{389} ag{390} ag{391} ag{392} ag{393} ag{394} ag{395} ag{396} ag{397} ag{398} ag{399} ag{400} ag{401} ag{402} ag{403} ag{404} ag{405} ag{406} ag{407} ag{408} ag{409} ag{410} ag{411} ag{412} ag{413} ag{414} ag{415} ag{416} ag{417} ag{418} ag{419} ag{420} ag{421} ag{422} ag{423} ag{424} ag{425} ag{426} ag{427} ag{428} ag{429} ag{430} ag{431} ag{432} ag{433} ag{434} ag{435} ag{436} ag{437} ag{438} ag{439} ag{440} ag{441} ag{442} ag{443} ag{444} ag{445} ag{446} ag{447} ag{448} ag{449} ag{450} ag{451} ag{452} ag{453} ag{454} ag{455} ag{456} ag{457} ag{458} ag{459} ag{460} ag{461} ag{462} ag{463} ag{464} ext{ where } oldsymbol{y}_{0} = H_{oldsymbol{ heta}_0}^{-1} oldsymbol{u}_0. ag{465} ight.$$</tex> The Hessian matrix <tex>$H_{oldsymbol{ heta}_0}$</tex> is given by:<tex>$$H_{oldsymbol{ heta}_0} = oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0} + oldsymbol{oldsymbol{Q}}_{oldsymbol{oldsymbol{h}}_0}.$$</tex>Using these gradients, gradient-based optimization algorithms can be applied to train the Hybrid Neural ODEs efficiently. We present the algorithm for training Hybrid Neural ODEs using first-order event adjoint sensitivity analysis in Algorithm 1.Algorithm 1: First-Order Adjoint Sensitivity Analysis for Hybrid Neural ODEs Require: Loss function <tex>$L$</tex>, ODE dynamics <tex>$oldsymbol{f}$</tex>, jump function <tex>$oldsymbol{g}$</tex>, event function <tex>$oldsymbol{h}$</tex>, parameters <tex>$oldsymbol{ heta}$</tex>, initial state <tex>$oldsymbol{u}(t_0)$</tex>, observations <tex>$oldsymbol{y}_i$</tex> at times <tex>$t_i$</t_1 < _2 < ... < t_N$</t_1>1. Forward Pass: a. Integrate the hybrid system from <tex>$t_0$</t_0> to <tex>$t_N$</t_N> using an ODE solver. b. Detect event times <tex>$t_c$</t_c> using root-finding algorithms on <tex>$oldsymbol{h}(oldsymbol{u}(t), oldsymbol{w})=0$</t_c>. c. At each event time <tex{t_c}$</{t_c}>, apply state transition <tex>$oldsymbol{u}(t_c^+) = oldsymbol{g}(oldsymbol{u}(t_c^-), oldsymbol{w})$</t_c^+>. d. Compute loss <tex>$L(oldsymbol{u}(t_1), ..., oldsymbol{u}(t_N))$</L>.2. Backward Pass: a. Initialize adjoint state <tex>$oldsymbol{a}(t_N) = rac{ rac{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{ heta}} L(oldsymbol{u}(t_N))}}{oldsymbol{u}(t_N)}}{ ight)}^T}$ directly for $体 t = t_N$ at end of time. localized from solving backward adjoints. b. For $ strictly decrease $ standard adjoints $oldsymbol{p}, oldsymbol{q}, oldsymbol{r}$ backwards, as well as parameter gradients $oldsymbol{oldsymbol{ heta}}$ via equation (11), (12), (13), and update $a(t_c^-)$ continuously using (14)-(17).3. Return: total gradient $ rac{oldsymbol{oldsymbol{oldsymbol{ heta}} L}{oldsymbol{d oldsymbol{ heta}}}$.</div></code></blockquote></form></div> </span> <p>While the proposed adjoint-state-based optimization works efficiently for smooth ODE dynamics, many physical processes display discrete jumps in continuous state at known or state-dependent times, i.e., $u(t_c^+) = g(t_c^-, u(t_c^-), w)$. Incorporating jump dynamics into Neural ODEs allows modeling complex hybrid dynamical systems, known as Hybrid Neural ODEs (HNDEs) [9, 10, 11]. The primary challenge in training HNDEs lies in accurately computing the gradient of the loss function with respect to parameters, since standard automatic differentiation tools like reverse-mode AD struggle with the discontinuities introduced by events and state transitions. As shown in Figure 1, standard AD requires storing all intermediate states along the forward pass, which severely limits scalability for long trajectories or high-dimensional systems. In contrast, adjoint sensitivity methods process gradients backwards, requiring memory proportional only to the state dimension. In this paper, we extend the continuous adjoint sensitivity approach to Hybrid Neural ODEs and establish second-order adjoint sensitivity analysis to facilitate second-order optimization techniques. Our contributions can be summarized as follows:</p> <p>1) We formulate first-order and second-order adjoint sensitivity equations for Hybrid Neural ODEs with both state-dependent and time-dependent events. The proposed method handles jumps in states and parameters, providing exact derivatives without storing full trajectory histories.<br/> 2) We implement our proposed method into a user-friendly PyTorch library, torchhnde, allowing researchers to easily integrate HNDEs into deep learning workflows. The library automatically computes gradients and Hessians via adjoint sensitivity for custom ODE dynamics, jump functions, and event conditions.<br/> 3) We demonstrate the effectiveness and efficiency of our method through extensive numerical experiments. Our implementation outperforms standard automatic differentiation in memory usage and shows superior convergence rates compared to first-order optimization when using second-order methods.</p> <p>In the following sections, we review related work, present the theoretical framework for first- and second-order adjoint sensitivity analysis in HNDEs, describe the architecture of torchhnde, and evaluate the performance through various experiments.</p> </span> </div> <div id="sec-2" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">2 </span>Related Work</h2> <div id="sec-2.1" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">2.1 </span>Neural Ordinary Differential Equations and Adjoint Sensitivity Analysis</h3> <span class="ltx_p">Neural ODEs [6] parameterize the derivative of a continuous hidden state using neural networks, extending deep learning to continuous-time models. Efficient parameter training relies on the adjoint sensitivity method [7], which avoids storing intermediate states during forward propagation by solving a backward-in-time adjoint differential equation. This approach provides $O(1)$ memory complexity relative to the number of solver steps, enabling the training of deep models over long time horizons.</span> <span class="ltx_p">Subsequent research expanded Neural ODEs to incorporate stiff dynamics [15, 16], stochastic processes [17, 18, 19, 20], augmented state formulations [21], and controlled differential equations [22]. However, standard Neural ODEs assume that the hidden state evolves smoothly over time, making them unsuitable for physical systems with sudden state transitions, such as mechanical impacts or switching electronics.</span> </div> <div id="sec-2.2" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">2.2 </span>Hybrid Neural ODEs</h3> <span class="ltx_p">To address systems with state jumps, Hybrid Neural ODEs (HNDEs) were introduced [9]. HNDEs combine continuous-time ODE dynamics with discrete jump functions triggered by specific event conditions. Chen et al. [9] developed an adjoint sensitivity method that accounts for jump conditions, showing that gradients can still be computed in reverse time while correctly incorporating boundary corrections at event times. Further works extended hybrid models to event-driven architectures [10] and switching systems [23].</span> <span class="ltx_p">Despite these advances, existing open-source libraries for Neural ODEs—such as torchdiffeq [6] and DiffEqFlux.jl [24]—offer limited or complex support for event-driven systems with second-order sensitivity analysis. Torchdiffeq primarily supports continuous dynamics and basic event handling, but lacks full first- and second-order adjoint gradients for state-dependent jumps. DiffEqFlux.jl provides extensive Julia-based support, but lacks seamless integration with PyTorch-based deep learning workflows.</span> </div> <div id="sec-2.3" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">2.3 </span>Second-Order Adjoint Sensitivity Analysis</h3> <span class="ltx_p">Second-order optimization methods, such as Newton-type or Gauss-Newton algorithms, offer faster convergence and better conditioning than first-order methods [25, 26, 27]. Computing second-order derivatives (Hessians) via standard backpropagation through ODE solvers scales poorly due to quadratic memory and computational costs. Second-order adjoint sensitivity methods for smooth ODEs were developed to compute Hessian-vector products efficiently [8]. Extending second-order adjoint methods to hybrid systems involves additional complexity due to the boundary terms generated by jump functions and event conditions. In this work, we derive the second-order adjoint equations specifically tailored for Hybrid Neural ODEs and integrate them into our PyTorch-based package.</span> </div> </div> <div id="sec-3" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">3 </span>First-Order Adjoint Sensitivity Analysis for HNDEs</h2> <span class="ltx_p">We consider a hybrid dynamical system governed by a continuous Neural ODE between events, combined with discrete state jumps triggered by an event function. Let $oldsymbol{u}(t) \in \mathbb{R}^d$ denote the system state at time $t$, parameterized by a set of neural network weights and system parameters $oldsymbol{\boldsymbol{\boldsymbol{\theta}}}$. The continuous evolution of the state is governed by:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{d\boldsymbol{u}}{dt} = \boldsymbol{f}(t, \boldsymbol{u}(t), \boldsymbol{w}), \quad t \in [t_0, t_N] \end{equation}</span><script type="math/tex; mode=display">\frac{d\boldsymbol{u}}{dt} = \boldsymbol{f}(t, \boldsymbol{u}(t), \boldsymbol{w}), \quad t \in [t_0, t_N]</script></span> <span class="ltx_p">where $\boldsymbol{f}: \mathbb{R} \times \mathbb{R}^d \times \mathbb{R}^p \to \mathbb{R}^d$ represents the vector field parameterized by neural network weights $\boldsymbol{w}$.</span> <span class="ltx_p">At an event time $t_c$, determined by the root of an event function $\boldsymbol{h}(t, \boldsymbol{u}(t), \boldsymbol{\theta})=0$, the state undergoes a instantaneous jump according to a transition function $\boldsymbol{g}$:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \boldsymbol{u}(t_c^+) = \boldsymbol{g}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}), \end{equation}</span><script type="math/tex; mode=display">\boldsymbol{u}(t_c^+) = \boldsymbol{g}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}),</script></span> <span class="ltx_p">where $t_c^-$ and $t_c^+$ denote the states immediately before and after the event, respectively. The goal is to compute the gradient of a scalar loss function $L(oldsymbol{u}(t_1), \dots, \boldsymbol{u}(t_N))$ with respect to $\boldsymbol{\theta}$.</span> <div id="sec-3.1" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">3.1 </span>Adjoint Equations between Events</h3> <span class="ltx_p">Between event times, the system evolves according to standard continuous ODE dynamics. The adjoint state $\boldsymbol{a}(t) = \frac{\partial L}{\partial \boldsymbol{u}(t)}$ satisfies the backward differential equation:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{d\boldsymbol{a}(t)}{dt} = -\boldsymbol{a}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}}(t, \boldsymbol{u}(t), \boldsymbol{w}). \end{equation}</span><script type="math/tex; mode=display">\frac{d\boldsymbol{a}(t)}{dt} = -\boldsymbol{a}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}}(t, \boldsymbol{u}(t), \boldsymbol{w}).</script></span> <span class="ltx_p">The parameter gradients are accumulated during backward integration:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{d\boldsymbol{a}_{\boldsymbol{w}}(t)}{dt} = -\boldsymbol{a}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{w}}(t, \boldsymbol{u}(t), \boldsymbol{w}). \end{equation}</span><script type="math/tex; mode=display">\frac{d\boldsymbol{a}_{\boldsymbol{w}}(t)}{dt} = -\boldsymbol{a}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{w}}(t, \boldsymbol{u}(t), \boldsymbol{w}).</script></span> </div> <div id="sec-3.2" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">3.2 </span>Event Boundary Conditions</h3> <span class="ltx_p">When an event occurs at time $t_c$, the continuity of the adjoint state is broken. We must derive the boundary update for $\boldsymbol{a}(t_c^-)$ given $\boldsymbol{a}(t_c^+)$.</span> <span class="ltx_p">Let the event condition be defined as:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \boldsymbol{h}(t_c, \boldsymbol{u}(t_c^-), \boldsymbol{w}) = 0. \end{equation}</span><script type="math/tex; mode=display">\boldsymbol{h}(t_c, \boldsymbol{u}(t_c^-), \boldsymbol{w}) = 0.</script></span> <span class="ltx_p">By differentiating $\boldsymbol{h}(t_c, \boldsymbol{u}(t_c^-), \boldsymbol{w}) = 0$ with respect to parameters $\boldsymbol{\theta}$, we obtain the total derivative of the event time $t_c$:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{dt_c}{d\boldsymbol{\theta}} = - \left( \frac{\partial \boldsymbol{h}}{\partial t} + \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{u}} \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) \right)^{-1} \left( \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{u}} \frac{\partial \boldsymbol{u}(t_c^-)}{d\boldsymbol{\theta}} + \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{\theta}} \right). \end{equation}</span><script type="math/tex; mode=display">\frac{dt_c}{d\boldsymbol{\theta}} = - \left( \frac{\partial \boldsymbol{h}}{\partial t} + \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{u}} \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) \right)^{-1} \left( \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{u}} \frac{\partial \boldsymbol{u}(t_c^-)}{d\boldsymbol{\theta}} + \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{\theta}} \right).</script></span> <span class="ltx_p">Applying the chain rule across the jump function $\boldsymbol{g}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w})$ gives the jump condition for the adjoint state:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \boldsymbol{a}(t_c^-) = \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \right)^T \boldsymbol{a}(t_c^+) + \frac{d t_c}{d \boldsymbol{u}(t_c^-)} \left( \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) - \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) + \frac{\partial \boldsymbol{g}}{\partial t} \right) \right)^T \boldsymbol{a}(t_c^+). \end{equation}</span><script type="math/tex; mode=display">\boldsymbol{a}(t_c^-) = \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \right)^T \boldsymbol{a}(t_c^+) + \frac{d t_c}{d \boldsymbol{u}(t_c^-)} \left( \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) - \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) + \frac{\partial \boldsymbol{g}}{\partial t} \right) \right)^T \boldsymbol{a}(t_c^+).</script></span> <span class="ltx_p">The parameter gradients also receive a correction term at the event time:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \boldsymbol{a}_{\boldsymbol{\theta}}(t_c^-) = \boldsymbol{a}_{\boldsymbol{\theta}}(t_c^+) + \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{\theta}} \right)^T \boldsymbol{a}(t_c^+) + \frac{d t_c}{d \boldsymbol{\theta}} \left( \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) - \boldsymbol{f}(t_c^+, \boldsymbol{u}(t_c^+), \boldsymbol{w}) \right)^T \boldsymbol{a}(t_c^+). \end{equation}</span><script type="math/tex; mode=display">\boldsymbol{a}_{\boldsymbol{\theta}}(t_c^-) = \boldsymbol{a}_{\boldsymbol{\theta}}(t_c^+) + \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{\theta}} \right)^T \boldsymbol{a}(t_c^+) + \frac{d t_c}{d \boldsymbol{\theta}} \left( \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) - \boldsymbol{f}(t_c^+, \boldsymbol{u}(t_c^+), \boldsymbol{w}) \right)^T \boldsymbol{a}(t_c^+).</script></span> </div> </div> <div id="sec-4" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">4 </span>Second-Order Adjoint Sensitivity Analysis for HNDEs</h2> <span class="ltx_p">Second-order optimization requires computing the Hessian-vector product (HVP) or full Hessian matrix of the loss with respect to parameters $\boldsymbol{\boldsymbol{\theta}}$. We extend the second-order adjoint formulation [8] to hybrid systems.</span> <div id="sec-4.1" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">4.1 </span>Second-Order Adjoint Equations between Events</h3> <span class="ltx_p">Let $\boldsymbol{v}$ be a direction vector of the same dimension as $\boldsymbol{\boldsymbol{\theta}}$. The second-order adjoint state system consists of primary state $\boldsymbol{u}$, first-order adjoint $\boldsymbol{a}$, tangent state $\boldsymbol{v}_u$, and second-order adjoint $\boldsymbol{b}$.</span> <span class="ltx_p">The forward tangent equation governs how perturbations propagate:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{d\boldsymbol{v}_u}{dt} = \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}} \boldsymbol{v}_u + \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{w}} \boldsymbol{v}_w. \end{equation}</span><script type="math/tex; mode=display">\frac{d\boldsymbol{v}_u}{dt} = \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}} \boldsymbol{v}_u + \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{w}} \boldsymbol{v}_w.</script></span> <span class="ltx_p">The second-order adjoint $\boldsymbol{b}(t)$ satisfies:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{d\boldsymbol{b}(t)}{dt} = -\boldsymbol{b}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}} - \boldsymbol{a}(t)^T \left( \frac{\partial^2 \boldsymbol{f}}{\partial \boldsymbol{u}^2} \boldsymbol{v}_u + \frac{\partial^2 \boldsymbol{f}}{\partial \boldsymbol{u} \partial \boldsymbol{w}} \boldsymbol{v}_w \right). \end{equation}</span><script type="math/tex; mode=display">\frac{d\boldsymbol{b}(t)}{dt} = -\boldsymbol{b}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}} - \boldsymbol{a}(t)^T \left( \frac{\partial^2 \boldsymbol{f}}{\partial \boldsymbol{u}^2} \boldsymbol{v}_u + \frac{\partial^2 \boldsymbol{f}}{\partial \boldsymbol{u} \partial \boldsymbol{w}} \boldsymbol{v}_w \right).</script></span> </div> <div id="sec-4.2" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">4.2 </span>Second-Order Event Boundary Corrections</h3> <span class="ltx_p">At an event time $t_c$, second-order corrections must account for the sensitivity of the event time itself as well as the curvature of the jump function $\boldsymbol{g}$. The second-order jump update for $\boldsymbol{b}(t_c^-)$ is given by:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \boldsymbol{b}(t_c^-) = \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \right)^T \boldsymbol{b}(t_c^+) + \boldsymbol{K}_{event}, \end{equation}</span><script type="math/tex; mode=display">\boldsymbol{b}(t_c^-) = \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \right)^T \boldsymbol{b}(t_c^+) + \boldsymbol{K}_{event},</script></span> <span class="ltx_p">where $\boldsymbol{K}_{event}$ collects second-order partial derivatives of $\boldsymbol{f}$, $\boldsymbol{g}$, and $\boldsymbol{h}$ evaluated at $t_c$, including cross-terms involving $\frac{d^2 t_c}{d\boldsymbol{\theta}^2}$.</span> <span class="ltx_p">By evaluating these second-order adjoint equations alongside the first-order system, we obtain exact Hessian-vector products $H \boldsymbol{v}$ in a single backward pass without forming the full Hessian matrix explicitely.</span> </div> </div> <div id="sec-5" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">5 </span>The <span class="ltx_font_monospace">torchhnde</span> Library</h2> <div class="ltx_figure_panel ltx_align_center"> <img src="/assets/images/research_notes/torchhnde_code.png" alt="Code example" style="max-width:100%; height:auto;" /> <div class="ltx_caption ltx_wrap"> <span class="ltx_tag ltx_tag_figure">Figure 2: </span>Code snippet demonstrating the core interface of <span class="ltx_font_monospace">torchhnde</span>.</div> </div> <span class="ltx_p"><span class="ltx_font_monospace">torchhnde</span> is implemented as a PyTorch package designed for seamless integration with autograd workflows. The library provides high-level APIs for defining continuous dynamics, jump conditions, and event functions, supporting both first-order and second-order adjoint sensitivity calculations.</span> <div id="sec-5.1" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">5.1 </span>Key Features and Architecture</h3> <span class="ltx_p">- <span class="ltx_text ltx_font_bold">Event Detection:</span> Uses adaptive step-size ODE integrators combined with root-finding algorithms (e.g., Brent’s method) to locate event times $t_c$ accurately.<br/> - <span class="ltx_text ltx_font_bold">Adjoint Engine:</span> Implements customized PyTorch <span class="ltx_font_monospace">torch.autograd.Function</span> classes that override the backward pass to solve adjoint systems efficiently.<br/> - <span class="ltx_text ltx_font_bold">Second-Order Support:</span> Supports Hessian-vector products and full Hessian computation via <span class="ltx_font_monospace">torch.autograd.functional.hvp</span> or custom second-order adjoint functions.<br/> - <span class="ltx_text ltx_font_bold">GPU Acceleration:</span> Fully vectorized implementation supporting CUDA for fast parallel evaluation over large batches.</span> </div> <div id="sec-5.2" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">5.2 </span>Usage Example</h3> <span class="ltx_p">Figure 2 illustrates a minimal example using <span class="ltx_font_monospace">torchhnde</span>. Users define the continuous dynamics <span class="ltx_font_monospace">f</span>, jump function <span class="ltx_font_monospace">g</span>, and event function <span class="ltx_font_monospace">h</span> as standard PyTorch <span class="ltx_font_monospace">nn.Module</span> objects. The solver handles event detection, integration, and backward sensitivity automatically.</span> </div> </div> <div id="sec-6" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">6 </span>Experiments</h2> <span class="ltx_p">We evaluate the proposed <span class="ltx_font_monospace">torchhnde</span> library across three experimental settings: gradient accuracy verification, memory efficiency comparison, and second-order optimization convergence.</span> <div id="sec-6.1" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">6.1 </span>Gradient Accuracy Verification</h3> <span class="ltx_p">We verify the accuracy of the gradients computed via first-order and second-order adjoint sensitivity against finite difference approximations on a bouncing ball benchmark and a spiking neural network model. As shown in Table 1, the relative error between adjoint gradients and finite differences is on the order of $10^{-6}$, confirming the correctness of our event-correction formulas.</span> <div class="ltx_table_wrapper"> <table class="ltx_tabular ltx_align_center"> <thead> <tr class="ltx_thead"> <th class="ltx_th ltx_th_left">System</th> <th class="ltx_th ltx_th_center">First-Order Relative Error</th> <th class="ltx_th ltx_th_center">Second-Order (HVP) Relative Error</th> </tr> </thead> <tbody class="ltx_tbody"> <tr class="ltx_tr"> <td class="ltx_td ltx_align_left">Bouncing Ball</td> <td class="ltx_td ltx_align_center">$1.2 \times 10^{-6}$</td> <td class="ltx_td ltx_align_center">$3.4 \times 10^{-5}$</td> </tr> <tr class="ltx_tr"> <td class="ltx_td ltx_align_left">Spiking Neuron</td> <td class="ltx_td ltx_align_center">$8.7 \times 10^{-7}$</td> <td class="ltx_td ltx_align_center">$2.1 \times 10^{-5}$</td> </tr> <tr class="ltx_tr"> <td class="ltx_td ltx_align_left">Thermostat Control</td> <td class="ltx_td ltx_align_center">$4.5 \times 10^{-6}$</td> <td class="ltx_td ltx_align_center">$8.9 \times 10^{-5}$</td> </tr> </tbody> </table> <div class="ltx_caption ltx_wrap"> <span class="ltx_tag ltx_tag_table">Table 1: </span>Gradient and Hessian-vector product relative error compared with finite differences.</div> </div> </div> <div id="sec-6.2" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">6.2 </span>Memory Efficiency</h3> <span class="ltx_p">We compare the peak GPU memory consumption of <span class="ltx_font_monospace">torchhnde</span> against standard backpropagation through unrolled solver steps (direct AD). Figure 3 illustrates the memory usage as a function of the integration time horizon $T$. While direct AD memory grows linearly with $T$, <span class="ltx_font_monospace">torchhnde</span> maintains constant $O(1)$ memory, enabling optimization over long time horizons that would otherwise cause out-of-memory errors.</span> <div class="ltx_figure_panel ltx_align_center"> <img src="/assets/images/research_notes/torchhnde_memory.png" alt="Memory Comparison" style="max-width:100%; height:auto;" /> <div class="ltx_caption ltx_wrap"> <span class="ltx_tag ltx_tag_figure">Figure 3: </span>Peak GPU memory consumption vs. integration time horizon $T$ for direct AD and <span class="ltx_font_monospace">torchhnde</span>.</div> </div> </div> <div id="sec-6.3" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">6.3 </span>Second-Order Optimization Convergence</h3> <span class="ltx_p">Finally, we evaluate the convergence speed when optimizing HNDEs using first-order (Adam) versus second-order (L-BFGS using HVP from <span class="ltx_font_monospace">torchhnde</span>) optimizers on a system identification task for a bouncing ball with unknown restitution coefficient and gravity. As shown in Figure 4, L-BFGS leveraging exact second-order adjoint gradients converges significantly faster in fewer iterations compared to Adam.</span> <div class="ltx_figure_panel ltx_align_center"> <img src="/assets/images/research_notes/torchhnde_loss.png" alt="Convergence Comparison" style="max-width:100%; height:auto;" /> <div class="ltx_caption ltx_wrap"> <span class="ltx_tag ltx_tag_figure">Figure 4: </span>Loss convergence over iterations for Adam (first-order) vs. L-BFGS (second-order via <span class="ltx_font_monospace">torchhnde</span>).</div> </div> </div> </div> <div id="sec-7" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">7 </span>Conclusion</h2> <span class="ltx_p">In this paper, we presented a comprehensive framework for first-order and second-order adjoint sensitivity analysis in Hybrid Neural ODEs with state-dependent event transitions. We derived the exact boundary corrections required for reverse-time integration across jump points. To make these methods broadly accessible, we introduced <span class="ltx_font_monospace">torchhnde</span>, a PyTorch library that automates both first- and second-order sensitivity analysis for hybrid systems. Empirical evaluations demonstrated the mathematical correctness, $O(1)$ memory footprint, and accelerated convergence when using second-order optimization methods. Future work includes extending the library to stiff hybrid systems and integrating uncertainty quantification techniques.</span> </div> <div id="sec-8" class="ltx_section"> <h2 class="ltx_title ltx_title_section">References</h2> <span class="ltx_p"> [1] E. Hairer, S. P. Nørsett, and G. Wanner. *Solving Ordinary Differential Equations I: Nonstiff Problems*. Springer, 1993.<br/> [2] E. Hairer and G. Wanner. *Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems*. Springer, 1996.<br/> [3] W. H. Enright. *Improving the efficiency of matrix-free implicit methods for stiff ODEs*. ACM TOMS, 2000.<br/> [4] L. Petzold. *Automatic selection of methods for solving stiff and nonstiff systems of ordinary differential equations*. SIAM J. Sci. Stat. Comput., 1983.<br/> [5] C. W. Gear. *Numerical Initial Value Problems in Ordinary Differential Equations*. Prentice-Hall, 1971.<br/> [6] R. T. Q. Chen, Y. Rubanova, J. Bettencourt, and D. K. Duvenaud. *Neural ordinary differential equations*. NeurIPS, 2018.<br/> [7] L. S. Pontryagin. *The mathematical theory of optimal processes*. CRC Press, 1962.<br/> [8] J. Zhuang et al. *Adaptive checkpoint adjoint state method for training Neural ODEs*. ICML, 2020.<br/> [9] R. T. Q. Chen et al. *Event-based Neural ODEs*. arXiv preprint, 2020.<br/> [10] M. Jia and A. R. L. *Neural Hybrid Automata*. ACC, 2021.<br/> [11] N. B. Erichson et al. *L-ODE: Linearized Neural Ordinary Differential Equations*. ICLR, 2021.<br/> [12] A. Paszke et al. *PyTorch: An imperative style, high-performance deep learning library*. NeurIPS, 2019.<br/> [13] C. Rackauckas and Q. Nie. *DifferentialEquations.jl–a performant and feature-rich ecosystem for solving differential equations in Julia*. Journal of Open Research Software, 2017.<br/> [14] M. Innes et al. *A differentiable programming system to bridge machine learning and scientific computing*. arXiv preprint, 2019.<br/> [15] S. Kim et al. *Stiff Neural Ordinary Differential Equations*. AISTATS, 2021.<br/> [16] P. Kidger et al. *Neural Controlled Differential Equations for Irregular Time Series*. NeurIPS, 2020.<br/> [17] X. Li et al. *Scalable Gradients for Stochastic Differential Equations*. AISTATS, 2020.<br/> [18] B. Tzen and M. Raginsky. *Neural Stochastic Differential Equations*. arXiv preprint, 2019.<br/> [19] D. Kidger. *On Neural Differential Equations*. PhD thesis, University of Oxford, 2021.<br/> [20] H. Gopal et al. *Stochastic Hybrid Neural ODEs*. ICML, 2022.<br/> [21] E. Dupont et al. *Augmented Neural ODEs*. NeurIPS, 2019.<br/> [22] P. Kidger et al. *Efficient and Accurate Gradients for Neural ODEs*. ICML, 2021.<br/> [23] Y. Wang et al. *Modeling Switched Dynamical Systems via Hybrid Neural ODEs*. IEEE TAC, 2022.<br/> [24] C. Rackauckas et al. *Universal Differential Equations for Scientific Machine Learning*. arXiv preprint, 2020.<br/> [25] J. Nocedal and S. J. Wright. *Numerical Optimization*. Springer, 2006.<br/> [26] D. C. Liu and J. Nocedal. *On the limited memory BFGS method for large scale optimization*. Mathematical Programming, 1989.<br/> [27] J. Martens. *Deep learning via Hessian-free optimization*. ICML, 2010. </span> </div>
Lieferumfang2x Hochschrank, 1x Waschtisch mit Keramik-Doppelwaschbecken, 1x Spiegel; optional mit LED-Aufsatzleuchten (je nach gewählter Variante). Armaturen und Abflusszubehör sind nicht im Lieferumfang enthalten.
Dieses Set enthält:Hochschrank (2x)·Spiegel·Waschtisch
🧩 Bestandteile dieses Sets

Hochschrank (2x)

Breite: 33 cm · Tiefe: 22 cm · Höhe: 150 cm

  • Hinter jeder Tür befindet sich ein Einlegeboden
  • Türanschlag beidseits montierbar
  • Wertige Metallbeschläge

Spiegel

Breite: 112 cm · Tiefe: 12 cm · Höhe: 59 cm

  • Mittlere Rückwand mit 4 kleinen Ablagen (je ca. 20x10 cm)
  • Spiegelglas (ESG)
  • Höhe ändert sich bei Montage inklusive Leuchten

Waschtisch

Breite: 112 cm · Tiefe: 46 cm · Höhe: 51 cm

  • Zwei geräumige Schubladen mit Metallauszug
  • Inklusive Keramik-Doppelwaschbecken (Maße: BxHxT 110x17x46 cm, Innenmaße je ca. 43x28,4 cm)
📏 Weitere technische Details
Hochschrank (2x)
TüranschlagBeidseits montierbar
Einlegeböden1 Einlegeboden hinter jeder Tür
BeschlägeWertige Metallbeschläge
Spiegel
Ablagen4 kleine Ablagen auf der mittleren Rückwand (je ca. 20x10 cm)
Waschtisch
Schubladen2 geräumige Schubladen mit Metallauszug
Waschbecken-MaßeBreite: 110 cm · Tiefe: 46 cm · Höhe: 17 cm (Innenmaße je ca. 43x28,4 cm)
Allgemein
OberflächenbehandlungMelaminbeschichtet
GriffeBügelgriffe aus Metall in Alufarben
Produktdetails

Modernes 4-teiliges Badmöbel-Set in Schwarz mit Keramik-Doppelwaschbecken, großzügigem Stauraum und praktischer Wandmontage.

Maße Breite: 178 cm · Tiefe: 46 cm · Höhe: 150 cm
Material Holzwerkstoff (Hochschränke, Waschtisch), Keramik (Doppelwaschbecken), ESG-Spiegelglas (Spiegel)
Farbe Schwarz (Hochschränke, Waschtisch), Weiß (Doppelwaschbecken)
Besonderheit 4-teiliges Badmöbel-Set mit Keramik-Doppelwaschbecken
Lieferung Set aus 4 Teilen, zerlegt zum leichten Selbstaufbau (Montageanleitung liegt bei)

✨ Was dieses Produkt besonders macht

🚿

Stilvolles Design mit Doppelwaschbecken

  • Elegante Optik in Schwarz
  • Keramik-Doppelwaschbecken

Verleihen Sie Ihrem Badezimmer eine moderne und elegante Atmosphäre. Diese Badmöbel-Kombination in edlem Schwarz kombiniert pflegeleichte Oberflächen mit einem hochwertigen Doppelwaschbecken aus Keramik, das viel Komfort bei der täglichen Pflege bietet.

🗄️

Durchdachter Stauraum für Ihr Bad

  • 2 Hochschränke mit Einlegeböden
  • Waschtisch mit 2 Schubladen

Genießen Sie optimale Ordnung und viel Platz für Ihre Badutensilien. Zwei geräumige Hochschränke mit variabel montierbaren Türen sowie zwei sanft gleitende Schubladen am Waschtisch bieten großzügigen Stauraum für Handtücher und Pflegeprodukte.

🪞

Großzügiger Wandspiegel mit Ablagen

  • Großer Wandspiegel aus ESG-Glas
  • 4 integrierte Ablageflächen

Perfekte Kombination aus Eleganz und praktischer Nutzbarkeit. Der breite Spiegel aus hochwertigem ESG-Glas verfügt über eine integrierte Rückwand mit vier kleinen Ablageflächen, damit Kosmetika und Parfümflakons stets griffbereit sind.

💡

Stimmungsvolle Beleuchtungsoption

  • Optional mit LED-Beleuchtung

Setzen Sie Ihr Badezimmer gekonnt in Szene. Das Set ist auf Wunsch mit passenden LED-Aufsatzleuchten erhältlich, die für ein angenehmes Lichtkonzept am Spiegel sorgen.

⚠️ Wichtiger Hinweis: Armaturen, Abflusszubehör und Dekorationsartikel sind nicht im Lieferumfang enthalten.
📐 Abmessungen
GesamtmaßeBreite: 178 cm · Tiefe: 46 cm · Höhe: 150 cm
Maße der Bestandteile
Hochschrank (2x)Breite: 33 cm · Tiefe: 22 cm · Höhe: 150 cm
SpiegelBreite: 112 cm · Tiefe: 12 cm · Höhe: 59 cm
WaschtischBreite: 112 cm · Tiefe: 46 cm · Höhe: 51 cm
✨ Design & Material
FarbeSchwarz (Hochschränke, Waschtisch), Weiß (Doppelwaschbecken), Alufarben (Bügelgriffe)
Material & HaptikHolzwerkstoff (Hochschränke, Waschtisch), melaminbeschichtet; Keramik (Doppelwaschbecken); ESG-Spiegelglas (Spiegel); Metall (Bügelgriffe, Beschläge, Schubladenauszüge)
🛠 Montage & Lieferumfang
Montage-ZustandZerlegt, zum leichten Selbstaufbau (Montageanleitung liegt bei)
MontageartWandmontage自由空間の誘電率 <tex>$oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{ heta}_{oldsymbol{0boldsymbol{oldsymbol{oldsymbol{ heta}_0))))) ight| oldsymbol{ heta} ight)$</tex>, on and near the boundary <tex>$t=t_c$</tex>, using<tex>$$( abla_1 f)_{oldsymbol{ heta}_0}^T = -oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T H_{oldsymbol{ heta}_0}^{-1} oldsymbol{u}_0$$</tex> evaluate efficiently <tex>$ abla_{oldsymbol{oldsymbol{w}}} oldsymbol{oldsymbol{h}}_0$</tex>, and form the product<tex>$$ abla_{oldsymbol{ heta}} ( abla_1 f_{oldsymbol{ heta}_0}) = - abla_{oldsymbol{ heta}} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T H_{oldsymbol{ heta}_0}^{-1} oldsymbol{u}_0 - oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T abla_{oldsymbol{ heta}} (H_{oldsymbol{ heta}_0}^{-1} oldsymbol{u}_0).$$</tex>Note that we directly used <tex>$ abla_{oldsymbol{w}} oldsymbol{oldsymbol{h}}_0$</tex> rather than using the full derivative <tex>$ abla_{oldsymbol{w}} oldsymbol{h}$</tex>. Here, <tex>$oldsymbol{ heta}=(oldsymbol{w}, oldsymbol{oldsymbol{oldsymbol{ heta}}_{oldsymbol{u}}})$</tex>. The first term contains second derivatives of <tex>$oldsymbol{h}$</tex> that can be computed efficiently, while the second term requires the solution of another system of linear equations. Both terms can be evaluated without forming the Hessian <tex>$H$</tex> by using automatic differentiation. In particular, we obtain: <tex>$$egin{aligned} & abla_{oldsymbol{ heta}} ( abla_1 f_{oldsymbol{ heta}_0}) \ &=- egin{pmatrix} abla_{oldsymbol{w}} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T (oldsymbol{u}_0) H_{oldsymbol{ heta}_0}^{-1} oldsymbol{u}_0 \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} rac{doldsymbol{u}}{dt}ig|_{t_0^+} rac{d|oldsymbol{oldsymbol{h}}|}{dt} \ -oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T H_{oldsymbol{ heta}_0}^{-1} oldsymbol{oldsymbol{r}}_0^T oldsymbol{u}_0 rac{d|oldsymbol{oldsymbol{h}}|}{dt} + oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} - oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T H_{oldsymbol{ heta}_0}^{-1} oldsymbol{Q}_{oldsymbol{u}_0} oldsymbol{u}_0 rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{v}}_0^T \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} rac{d^2oldsymbol{u}}{dt^2}ig|_{t_0^+} rac{d|oldsymbol{oldsymbol{h}}|}{dt} rac{doldsymbol{u}}{dt}ig|_{t_0^+} \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} oldsymbol{u}_0 rac{d|oldsymbol{oldsymbol{h}}|}{dt} \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} rac{doldsymbol{u}}{dt}ig|_{t_0^+} rac{d|oldsymbol{oldsymbol{h}}|}{dt} rac{doldsymbol{u}}{dt}ig|_{t_0^+} rac{d|oldsymbol{oldsymbol{h}}|}{dt} \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} oldsymbol{u}_0 rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{v}}_0^T rac{d|oldsymbol{oldsymbol{h}}|}{dt} rac{doldsymbol{u}}{dt}ig|_{t_0^+} \ oldsymbol{0} rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{y}_{0} oldsymbol{u}_0 rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{v}}_0^T rac{d|oldsymbol{oldsymbol{h}}|}{dt} oldsymbol{oldsymbol{v}}_0^T rac{d|oldsymbol{oldsymbol{h}}|}{dt} rac{doldsymbol{u}}{dt}ig|_{t_0^+} rac{d|oldsymbol{oldsymbol{h}}|}{dt} ight) ext{,} ag{18} ag{19} ag{20} ag{21} ag{22} ag{23} ag{24} ag{25} ag{26} ag{27} ag{28} ag{29} ag{30} ag{31} ag{32} ag{33} ag{34} ag{35} ag{36} ag{37} ag{38} ag{39} ag{40} ag{41} ag{42} ag{43} ag{44} ag{45} ag{46} ag{47} ag{48} ag{49} ag{50} ag{51} ag{52} ag{53} ag{54} ag{55} ag{56} ag{57} ag{58} ag{59} ag{60} ag{61} ag{62} ag{63} ag{64} ag{65} ag{66} ag{67} ag{68} ag{69} ag{70} ag{71} ag{72} ag{73} ag{74} ag{75} ag{76} ag{77} ag{78} ag{79} ag{80} ag{81} ag{82} ag{83} ag{84} ag{85} ag{86} ag{87} ag{88} ag{89} ag{90} ag{91} ag{92} ag{93} ag{94} ag{95} ag{96} ag{97} ag{98} ag{99} ag{100} ag{101} ag{102} ag{103} ag{104} ag{105} ag{106} ag{107} ag{108} ag{109} ag{110} ag{111} ag{112} ag{113} ag{114} ag{115} ag{116} ag{117} ag{118} ag{119} ag{120} ag{121} ag{122} ag{123} ag{124} ag{125} ag{126} ag{127} ag{128} ag{129} ag{130} ag{131} ag{132} ag{133} ag{134} ag{135} ag{136} ag{137} ag{138} ag{139} ag{140} ag{141} ag{142} ag{143} ag{144} ag{145} ag{146} ag{147} ag{148} ag{149} ag{150} ag{151} ag{152} ag{153} ag{154} ag{155} ag{156} ag{157} ag{158} ag{159} ag{160} ag{161} ag{162} ag{163} ag{164} ag{165} ag{166} ag{167} ag{168} ag{169} ag{170} ag{171} ag{172} ag{173} ag{174} ag{175} ag{176} ag{177} ag{178} ag{179} ag{180} ag{181} ag{182} ag{183} ag{184} ag{185} ag{186} ag{187} ag{188} ag{189} ag{190} ag{191} ag{192} ag{193} ag{194} ag{195} ag{196} ag{197} ag{198} ag{199} ag{200} ag{201} ag{202} ag{203} ag{204} ag{205} ag{206} ag{207} ag{208} ag{209} ag{210} ag{211} ag{212} ag{213} ag{214} ag{215} ag{216} ag{217} ag{218} ag{219} ag{220} ag{221} ag{222} ag{223} ag{224} ag{225} ag{226} ag{227} ag{228} ag{229} ag{230} ag{231} ag{232} ag{233} ag{234} ag{235} ag{236} ag{237} ag{238} ag{239} ag{240} ag{241} ag{242} ag{243} ag{244} ag{245} ag{246} ag{247} ag{248} ag{249} ag{250} ag{251} ag{252} ag{253} ag{254} ag{255} ag{256} ag{257} ag{258} ag{259} ag{260} ag{261} ag{262} ag{263} ag{264} ag{265} ag{266} ag{267} ag{268} ag{269} ag{270} ag{271} ag{272} ag{273} ag{274} ag{275} ag{276} ag{277} ag{278} ag{279} ag{280} ag{281} ag{282} ag{283} ag{284} ag{285} ag{286} ag{287} ag{288} ag{289} ag{290} ag{291} ag{292} ag{293} ag{294} ag{295} ag{296} ag{297} ag{298} ag{299} ag{300} ag{301} ag{302} ag{303} ag{304} ag{305} ag{306} ag{307} ag{308} ag{309} ag{310} ag{311} ag{312} ag{313} ag{314} ag{315} ag{316} ag{317} ag{318} ag{319} ag{320} ag{321} ag{322} ag{323} ag{324} ag{325} ag{326} ag{327} ag{328} ag{329} ag{330} ag{331} ag{332} ag{333} ag{334} ag{335} ag{336} ag{337} ag{338} ag{339} ag{340} ag{341} ag{342} ag{343} ag{344} ag{345} ag{346} ag{347} ag{348} ag{349} ag{350} ag{351} ag{352} ag{353} ag{354} ag{355} ag{356} ag{357} ag{358} ag{359} ag{360} ag{361} ag{362} ag{363} ag{364} ag{365} ag{366} ag{367} ag{368} ag{369} ag{370} ag{371} ag{372} ag{373} ag{374} ag{375} ag{376} ag{377} ag{378} ag{379} ag{380} ag{381} ag{382} ag{383} ag{384} ag{385} ag{386} ag{387} ag{388} ag{389} ag{390} ag{391} ag{392} ag{393} ag{394} ag{395} ag{396} ag{397} ag{398} ag{399} ag{400} ag{401} ag{402} ag{403} ag{404} ag{405} ag{406} ag{407} ag{408} ag{409} ag{410} ag{411} ag{412} ag{413} ag{414} ag{415} ag{416} ag{417} ag{418} ag{419} ag{420} ag{421} ag{422} ag{423} ag{424} ag{425} ag{426} ag{427} ag{428} ag{429} ag{430} ag{431} ag{432} ag{433} ag{434} ag{435} ag{436} ag{437} ag{438} ag{439} ag{440} ag{441} ag{442} ag{443} ag{444} ag{445} ag{446} ag{447} ag{448} ag{449} ag{450} ag{451} ag{452} ag{453} ag{454} ag{455} ag{456} ag{457} ag{458} ag{459} ag{460} ag{461} ag{462} ag{463} ag{464} ext{ where } oldsymbol{y}_{0} = H_{oldsymbol{ heta}_0}^{-1} oldsymbol{u}_0. ag{465} ight.$$</tex> The Hessian matrix <tex>$H_{oldsymbol{ heta}_0}$</tex> is given by:<tex>$$H_{oldsymbol{ heta}_0} = oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0}^T oldsymbol{oldsymbol{J}}_{oldsymbol{h}_0} + oldsymbol{oldsymbol{Q}}_{oldsymbol{oldsymbol{h}}_0}.$$</tex>Using these gradients, gradient-based optimization algorithms can be applied to train the Hybrid Neural ODEs efficiently. We present the algorithm for training Hybrid Neural ODEs using first-order event adjoint sensitivity analysis in Algorithm 1.Algorithm 1: First-Order Adjoint Sensitivity Analysis for Hybrid Neural ODEs Require: Loss function <tex>$L$</tex>, ODE dynamics <tex>$oldsymbol{f}$</tex>, jump function <tex>$oldsymbol{g}$</tex>, event function <tex>$oldsymbol{h}$</tex>, parameters <tex>$oldsymbol{ heta}$</tex>, initial state <tex>$oldsymbol{u}(t_0)$</tex>, observations <tex>$oldsymbol{y}_i$</tex> at times <tex>$t_i$</t_1 < _2 < ... < t_N$</t_1>1. Forward Pass: a. Integrate the hybrid system from <tex>$t_0$</t_0> to <tex>$t_N$</t_N> using an ODE solver. b. Detect event times <tex>$t_c$</t_c> using root-finding algorithms on <tex>$oldsymbol{h}(oldsymbol{u}(t), oldsymbol{w})=0$</t_c>. c. At each event time <tex{t_c}$</{t_c}>, apply state transition <tex>$oldsymbol{u}(t_c^+) = oldsymbol{g}(oldsymbol{u}(t_c^-), oldsymbol{w})$</t_c^+>. d. Compute loss <tex>$L(oldsymbol{u}(t_1), ..., oldsymbol{u}(t_N))$</L>.2. Backward Pass: a. Initialize adjoint state <tex>$oldsymbol{a}(t_N) = rac{ rac{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{oldsymbol{ heta}} L(oldsymbol{u}(t_N))}}{oldsymbol{u}(t_N)}}{ ight)}^T}$ directly for $体 t = t_N$ at end of time. localized from solving backward adjoints. b. For $ strictly decrease $ standard adjoints $oldsymbol{p}, oldsymbol{q}, oldsymbol{r}$ backwards, as well as parameter gradients $oldsymbol{oldsymbol{ heta}}$ via equation (11), (12), (13), and update $a(t_c^-)$ continuously using (14)-(17).3. Return: total gradient $ rac{oldsymbol{oldsymbol{oldsymbol{ heta}} L}{oldsymbol{d oldsymbol{ heta}}}$.</div></code></blockquote></form></div> </span> <p>While the proposed adjoint-state-based optimization works efficiently for smooth ODE dynamics, many physical processes display discrete jumps in continuous state at known or state-dependent times, i.e., $u(t_c^+) = g(t_c^-, u(t_c^-), w)$. Incorporating jump dynamics into Neural ODEs allows modeling complex hybrid dynamical systems, known as Hybrid Neural ODEs (HNDEs) [9, 10, 11]. The primary challenge in training HNDEs lies in accurately computing the gradient of the loss function with respect to parameters, since standard automatic differentiation tools like reverse-mode AD struggle with the discontinuities introduced by events and state transitions. As shown in Figure 1, standard AD requires storing all intermediate states along the forward pass, which severely limits scalability for long trajectories or high-dimensional systems. In contrast, adjoint sensitivity methods process gradients backwards, requiring memory proportional only to the state dimension. In this paper, we extend the continuous adjoint sensitivity approach to Hybrid Neural ODEs and establish second-order adjoint sensitivity analysis to facilitate second-order optimization techniques. Our contributions can be summarized as follows:</p> <p>1) We formulate first-order and second-order adjoint sensitivity equations for Hybrid Neural ODEs with both state-dependent and time-dependent events. The proposed method handles jumps in states and parameters, providing exact derivatives without storing full trajectory histories.<br/> 2) We implement our proposed method into a user-friendly PyTorch library, torchhnde, allowing researchers to easily integrate HNDEs into deep learning workflows. The library automatically computes gradients and Hessians via adjoint sensitivity for custom ODE dynamics, jump functions, and event conditions.<br/> 3) We demonstrate the effectiveness and efficiency of our method through extensive numerical experiments. Our implementation outperforms standard automatic differentiation in memory usage and shows superior convergence rates compared to first-order optimization when using second-order methods.</p> <p>In the following sections, we review related work, present the theoretical framework for first- and second-order adjoint sensitivity analysis in HNDEs, describe the architecture of torchhnde, and evaluate the performance through various experiments.</p> </span> </div> <div id="sec-2" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">2 </span>Related Work</h2> <div id="sec-2.1" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">2.1 </span>Neural Ordinary Differential Equations and Adjoint Sensitivity Analysis</h3> <span class="ltx_p">Neural ODEs [6] parameterize the derivative of a continuous hidden state using neural networks, extending deep learning to continuous-time models. Efficient parameter training relies on the adjoint sensitivity method [7], which avoids storing intermediate states during forward propagation by solving a backward-in-time adjoint differential equation. This approach provides $O(1)$ memory complexity relative to the number of solver steps, enabling the training of deep models over long time horizons.</span> <span class="ltx_p">Subsequent research expanded Neural ODEs to incorporate stiff dynamics [15, 16], stochastic processes [17, 18, 19, 20], augmented state formulations [21], and controlled differential equations [22]. However, standard Neural ODEs assume that the hidden state evolves smoothly over time, making them unsuitable for physical systems with sudden state transitions, such as mechanical impacts or switching electronics.</span> </div> <div id="sec-2.2" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">2.2 </span>Hybrid Neural ODEs</h3> <span class="ltx_p">To address systems with state jumps, Hybrid Neural ODEs (HNDEs) were introduced [9]. HNDEs combine continuous-time ODE dynamics with discrete jump functions triggered by specific event conditions. Chen et al. [9] developed an adjoint sensitivity method that accounts for jump conditions, showing that gradients can still be computed in reverse time while correctly incorporating boundary corrections at event times. Further works extended hybrid models to event-driven architectures [10] and switching systems [23].</span> <span class="ltx_p">Despite these advances, existing open-source libraries for Neural ODEs—such as torchdiffeq [6] and DiffEqFlux.jl [24]—offer limited or complex support for event-driven systems with second-order sensitivity analysis. Torchdiffeq primarily supports continuous dynamics and basic event handling, but lacks full first- and second-order adjoint gradients for state-dependent jumps. DiffEqFlux.jl provides extensive Julia-based support, but lacks seamless integration with PyTorch-based deep learning workflows.</span> </div> <div id="sec-2.3" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">2.3 </span>Second-Order Adjoint Sensitivity Analysis</h3> <span class="ltx_p">Second-order optimization methods, such as Newton-type or Gauss-Newton algorithms, offer faster convergence and better conditioning than first-order methods [25, 26, 27]. Computing second-order derivatives (Hessians) via standard backpropagation through ODE solvers scales poorly due to quadratic memory and computational costs. Second-order adjoint sensitivity methods for smooth ODEs were developed to compute Hessian-vector products efficiently [8]. Extending second-order adjoint methods to hybrid systems involves additional complexity due to the boundary terms generated by jump functions and event conditions. In this work, we derive the second-order adjoint equations specifically tailored for Hybrid Neural ODEs and integrate them into our PyTorch-based package.</span> </div> </div> <div id="sec-3" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">3 </span>First-Order Adjoint Sensitivity Analysis for HNDEs</h2> <span class="ltx_p">We consider a hybrid dynamical system governed by a continuous Neural ODE between events, combined with discrete state jumps triggered by an event function. Let $oldsymbol{u}(t) \in \mathbb{R}^d$ denote the system state at time $t$, parameterized by a set of neural network weights and system parameters $oldsymbol{\boldsymbol{\boldsymbol{\theta}}}$. The continuous evolution of the state is governed by:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{d\boldsymbol{u}}{dt} = \boldsymbol{f}(t, \boldsymbol{u}(t), \boldsymbol{w}), \quad t \in [t_0, t_N] \end{equation}</span><script type="math/tex; mode=display">\frac{d\boldsymbol{u}}{dt} = \boldsymbol{f}(t, \boldsymbol{u}(t), \boldsymbol{w}), \quad t \in [t_0, t_N]</script></span> <span class="ltx_p">where $\boldsymbol{f}: \mathbb{R} \times \mathbb{R}^d \times \mathbb{R}^p \to \mathbb{R}^d$ represents the vector field parameterized by neural network weights $\boldsymbol{w}$.</span> <span class="ltx_p">At an event time $t_c$, determined by the root of an event function $\boldsymbol{h}(t, \boldsymbol{u}(t), \boldsymbol{\theta})=0$, the state undergoes a instantaneous jump according to a transition function $\boldsymbol{g}$:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \boldsymbol{u}(t_c^+) = \boldsymbol{g}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}), \end{equation}</span><script type="math/tex; mode=display">\boldsymbol{u}(t_c^+) = \boldsymbol{g}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}),</script></span> <span class="ltx_p">where $t_c^-$ and $t_c^+$ denote the states immediately before and after the event, respectively. The goal is to compute the gradient of a scalar loss function $L(oldsymbol{u}(t_1), \dots, \boldsymbol{u}(t_N))$ with respect to $\boldsymbol{\theta}$.</span> <div id="sec-3.1" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">3.1 </span>Adjoint Equations between Events</h3> <span class="ltx_p">Between event times, the system evolves according to standard continuous ODE dynamics. The adjoint state $\boldsymbol{a}(t) = \frac{\partial L}{\partial \boldsymbol{u}(t)}$ satisfies the backward differential equation:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{d\boldsymbol{a}(t)}{dt} = -\boldsymbol{a}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}}(t, \boldsymbol{u}(t), \boldsymbol{w}). \end{equation}</span><script type="math/tex; mode=display">\frac{d\boldsymbol{a}(t)}{dt} = -\boldsymbol{a}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}}(t, \boldsymbol{u}(t), \boldsymbol{w}).</script></span> <span class="ltx_p">The parameter gradients are accumulated during backward integration:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{d\boldsymbol{a}_{\boldsymbol{w}}(t)}{dt} = -\boldsymbol{a}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{w}}(t, \boldsymbol{u}(t), \boldsymbol{w}). \end{equation}</span><script type="math/tex; mode=display">\frac{d\boldsymbol{a}_{\boldsymbol{w}}(t)}{dt} = -\boldsymbol{a}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{w}}(t, \boldsymbol{u}(t), \boldsymbol{w}).</script></span> </div> <div id="sec-3.2" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">3.2 </span>Event Boundary Conditions</h3> <span class="ltx_p">When an event occurs at time $t_c$, the continuity of the adjoint state is broken. We must derive the boundary update for $\boldsymbol{a}(t_c^-)$ given $\boldsymbol{a}(t_c^+)$.</span> <span class="ltx_p">Let the event condition be defined as:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \boldsymbol{h}(t_c, \boldsymbol{u}(t_c^-), \boldsymbol{w}) = 0. \end{equation}</span><script type="math/tex; mode=display">\boldsymbol{h}(t_c, \boldsymbol{u}(t_c^-), \boldsymbol{w}) = 0.</script></span> <span class="ltx_p">By differentiating $\boldsymbol{h}(t_c, \boldsymbol{u}(t_c^-), \boldsymbol{w}) = 0$ with respect to parameters $\boldsymbol{\theta}$, we obtain the total derivative of the event time $t_c$:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{dt_c}{d\boldsymbol{\theta}} = - \left( \frac{\partial \boldsymbol{h}}{\partial t} + \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{u}} \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) \right)^{-1} \left( \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{u}} \frac{\partial \boldsymbol{u}(t_c^-)}{d\boldsymbol{\theta}} + \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{\theta}} \right). \end{equation}</span><script type="math/tex; mode=display">\frac{dt_c}{d\boldsymbol{\theta}} = - \left( \frac{\partial \boldsymbol{h}}{\partial t} + \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{u}} \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) \right)^{-1} \left( \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{u}} \frac{\partial \boldsymbol{u}(t_c^-)}{d\boldsymbol{\theta}} + \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{\theta}} \right).</script></span> <span class="ltx_p">Applying the chain rule across the jump function $\boldsymbol{g}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w})$ gives the jump condition for the adjoint state:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \boldsymbol{a}(t_c^-) = \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \right)^T \boldsymbol{a}(t_c^+) + \frac{d t_c}{d \boldsymbol{u}(t_c^-)} \left( \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) - \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) + \frac{\partial \boldsymbol{g}}{\partial t} \right) \right)^T \boldsymbol{a}(t_c^+). \end{equation}</span><script type="math/tex; mode=display">\boldsymbol{a}(t_c^-) = \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \right)^T \boldsymbol{a}(t_c^+) + \frac{d t_c}{d \boldsymbol{u}(t_c^-)} \left( \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) - \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) + \frac{\partial \boldsymbol{g}}{\partial t} \right) \right)^T \boldsymbol{a}(t_c^+).</script></span> <span class="ltx_p">The parameter gradients also receive a correction term at the event time:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \boldsymbol{a}_{\boldsymbol{\theta}}(t_c^-) = \boldsymbol{a}_{\boldsymbol{\theta}}(t_c^+) + \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{\theta}} \right)^T \boldsymbol{a}(t_c^+) + \frac{d t_c}{d \boldsymbol{\theta}} \left( \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) - \boldsymbol{f}(t_c^+, \boldsymbol{u}(t_c^+), \boldsymbol{w}) \right)^T \boldsymbol{a}(t_c^+). \end{equation}</span><script type="math/tex; mode=display">\boldsymbol{a}_{\boldsymbol{\theta}}(t_c^-) = \boldsymbol{a}_{\boldsymbol{\theta}}(t_c^+) + \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{\theta}} \right)^T \boldsymbol{a}(t_c^+) + \frac{d t_c}{d \boldsymbol{\theta}} \left( \boldsymbol{f}(t_c^-, \boldsymbol{u}(t_c^-), \boldsymbol{w}) - \boldsymbol{f}(t_c^+, \boldsymbol{u}(t_c^+), \boldsymbol{w}) \right)^T \boldsymbol{a}(t_c^+).</script></span> </div> </div> <div id="sec-4" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">4 </span>Second-Order Adjoint Sensitivity Analysis for HNDEs</h2> <span class="ltx_p">Second-order optimization requires computing the Hessian-vector product (HVP) or full Hessian matrix of the loss with respect to parameters $\boldsymbol{\boldsymbol{\theta}}$. We extend the second-order adjoint formulation [8] to hybrid systems.</span> <div id="sec-4.1" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">4.1 </span>Second-Order Adjoint Equations between Events</h3> <span class="ltx_p">Let $\boldsymbol{v}$ be a direction vector of the same dimension as $\boldsymbol{\boldsymbol{\theta}}$. The second-order adjoint state system consists of primary state $\boldsymbol{u}$, first-order adjoint $\boldsymbol{a}$, tangent state $\boldsymbol{v}_u$, and second-order adjoint $\boldsymbol{b}$.</span> <span class="ltx_p">The forward tangent equation governs how perturbations propagate:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{d\boldsymbol{v}_u}{dt} = \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}} \boldsymbol{v}_u + \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{w}} \boldsymbol{v}_w. \end{equation}</span><script type="math/tex; mode=display">\frac{d\boldsymbol{v}_u}{dt} = \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}} \boldsymbol{v}_u + \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{w}} \boldsymbol{v}_w.</script></span> <span class="ltx_p">The second-order adjoint $\boldsymbol{b}(t)$ satisfies:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \frac{d\boldsymbol{b}(t)}{dt} = -\boldsymbol{b}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}} - \boldsymbol{a}(t)^T \left( \frac{\partial^2 \boldsymbol{f}}{\partial \boldsymbol{u}^2} \boldsymbol{v}_u + \frac{\partial^2 \boldsymbol{f}}{\partial \boldsymbol{u} \partial \boldsymbol{w}} \boldsymbol{v}_w \right). \end{equation}</span><script type="math/tex; mode=display">\frac{d\boldsymbol{b}(t)}{dt} = -\boldsymbol{b}(t)^T \frac{\partial \boldsymbol{f}}{\partial \boldsymbol{u}} - \boldsymbol{a}(t)^T \left( \frac{\partial^2 \boldsymbol{f}}{\partial \boldsymbol{u}^2} \boldsymbol{v}_u + \frac{\partial^2 \boldsymbol{f}}{\partial \boldsymbol{u} \partial \boldsymbol{w}} \boldsymbol{v}_w \right).</script></span> </div> <div id="sec-4.2" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">4.2 </span>Second-Order Event Boundary Corrections</h3> <span class="ltx_p">At an event time $t_c$, second-order corrections must account for the sensitivity of the event time itself as well as the curvature of the jump function $\boldsymbol{g}$. The second-order jump update for $\boldsymbol{b}(t_c^-)$ is given by:</span> <span class="ltx_p"><span class="MathJax_Preview">\begin{equation} \boldsymbol{b}(t_c^-) = \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \right)^T \boldsymbol{b}(t_c^+) + \boldsymbol{K}_{event}, \end{equation}</span><script type="math/tex; mode=display">\boldsymbol{b}(t_c^-) = \left( \frac{\partial \boldsymbol{g}}{\partial \boldsymbol{u}} \right)^T \boldsymbol{b}(t_c^+) + \boldsymbol{K}_{event},</script></span> <span class="ltx_p">where $\boldsymbol{K}_{event}$ collects second-order partial derivatives of $\boldsymbol{f}$, $\boldsymbol{g}$, and $\boldsymbol{h}$ evaluated at $t_c$, including cross-terms involving $\frac{d^2 t_c}{d\boldsymbol{\theta}^2}$.</span> <span class="ltx_p">By evaluating these second-order adjoint equations alongside the first-order system, we obtain exact Hessian-vector products $H \boldsymbol{v}$ in a single backward pass without forming the full Hessian matrix explicitely.</span> </div> </div> <div id="sec-5" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">5 </span>The <span class="ltx_font_monospace">torchhnde</span> Library</h2> <div class="ltx_figure_panel ltx_align_center"> <img src="/assets/images/research_notes/torchhnde_code.png" alt="Code example" style="max-width:100%; height:auto;" /> <div class="ltx_caption ltx_wrap"> <span class="ltx_tag ltx_tag_figure">Figure 2: </span>Code snippet demonstrating the core interface of <span class="ltx_font_monospace">torchhnde</span>.</div> </div> <span class="ltx_p"><span class="ltx_font_monospace">torchhnde</span> is implemented as a PyTorch package designed for seamless integration with autograd workflows. The library provides high-level APIs for defining continuous dynamics, jump conditions, and event functions, supporting both first-order and second-order adjoint sensitivity calculations.</span> <div id="sec-5.1" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">5.1 </span>Key Features and Architecture</h3> <span class="ltx_p">- <span class="ltx_text ltx_font_bold">Event Detection:</span> Uses adaptive step-size ODE integrators combined with root-finding algorithms (e.g., Brent’s method) to locate event times $t_c$ accurately.<br/> - <span class="ltx_text ltx_font_bold">Adjoint Engine:</span> Implements customized PyTorch <span class="ltx_font_monospace">torch.autograd.Function</span> classes that override the backward pass to solve adjoint systems efficiently.<br/> - <span class="ltx_text ltx_font_bold">Second-Order Support:</span> Supports Hessian-vector products and full Hessian computation via <span class="ltx_font_monospace">torch.autograd.functional.hvp</span> or custom second-order adjoint functions.<br/> - <span class="ltx_text ltx_font_bold">GPU Acceleration:</span> Fully vectorized implementation supporting CUDA for fast parallel evaluation over large batches.</span> </div> <div id="sec-5.2" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">5.2 </span>Usage Example</h3> <span class="ltx_p">Figure 2 illustrates a minimal example using <span class="ltx_font_monospace">torchhnde</span>. Users define the continuous dynamics <span class="ltx_font_monospace">f</span>, jump function <span class="ltx_font_monospace">g</span>, and event function <span class="ltx_font_monospace">h</span> as standard PyTorch <span class="ltx_font_monospace">nn.Module</span> objects. The solver handles event detection, integration, and backward sensitivity automatically.</span> </div> </div> <div id="sec-6" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">6 </span>Experiments</h2> <span class="ltx_p">We evaluate the proposed <span class="ltx_font_monospace">torchhnde</span> library across three experimental settings: gradient accuracy verification, memory efficiency comparison, and second-order optimization convergence.</span> <div id="sec-6.1" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">6.1 </span>Gradient Accuracy Verification</h3> <span class="ltx_p">We verify the accuracy of the gradients computed via first-order and second-order adjoint sensitivity against finite difference approximations on a bouncing ball benchmark and a spiking neural network model. As shown in Table 1, the relative error between adjoint gradients and finite differences is on the order of $10^{-6}$, confirming the correctness of our event-correction formulas.</span> <div class="ltx_table_wrapper"> <table class="ltx_tabular ltx_align_center"> <thead> <tr class="ltx_thead"> <th class="ltx_th ltx_th_left">System</th> <th class="ltx_th ltx_th_center">First-Order Relative Error</th> <th class="ltx_th ltx_th_center">Second-Order (HVP) Relative Error</th> </tr> </thead> <tbody class="ltx_tbody"> <tr class="ltx_tr"> <td class="ltx_td ltx_align_left">Bouncing Ball</td> <td class="ltx_td ltx_align_center">$1.2 \times 10^{-6}$</td> <td class="ltx_td ltx_align_center">$3.4 \times 10^{-5}$</td> </tr> <tr class="ltx_tr"> <td class="ltx_td ltx_align_left">Spiking Neuron</td> <td class="ltx_td ltx_align_center">$8.7 \times 10^{-7}$</td> <td class="ltx_td ltx_align_center">$2.1 \times 10^{-5}$</td> </tr> <tr class="ltx_tr"> <td class="ltx_td ltx_align_left">Thermostat Control</td> <td class="ltx_td ltx_align_center">$4.5 \times 10^{-6}$</td> <td class="ltx_td ltx_align_center">$8.9 \times 10^{-5}$</td> </tr> </tbody> </table> <div class="ltx_caption ltx_wrap"> <span class="ltx_tag ltx_tag_table">Table 1: </span>Gradient and Hessian-vector product relative error compared with finite differences.</div> </div> </div> <div id="sec-6.2" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">6.2 </span>Memory Efficiency</h3> <span class="ltx_p">We compare the peak GPU memory consumption of <span class="ltx_font_monospace">torchhnde</span> against standard backpropagation through unrolled solver steps (direct AD). Figure 3 illustrates the memory usage as a function of the integration time horizon $T$. While direct AD memory grows linearly with $T$, <span class="ltx_font_monospace">torchhnde</span> maintains constant $O(1)$ memory, enabling optimization over long time horizons that would otherwise cause out-of-memory errors.</span> <div class="ltx_figure_panel ltx_align_center"> <img src="/assets/images/research_notes/torchhnde_memory.png" alt="Memory Comparison" style="max-width:100%; height:auto;" /> <div class="ltx_caption ltx_wrap"> <span class="ltx_tag ltx_tag_figure">Figure 3: </span>Peak GPU memory consumption vs. integration time horizon $T$ for direct AD and <span class="ltx_font_monospace">torchhnde</span>.</div> </div> </div> <div id="sec-6.3" class="ltx_subsection"> <h3 class="ltx_title ltx_title_subsection"> <span class="ltx_tag ltx_tag_subsection">6.3 </span>Second-Order Optimization Convergence</h3> <span class="ltx_p">Finally, we evaluate the convergence speed when optimizing HNDEs using first-order (Adam) versus second-order (L-BFGS using HVP from <span class="ltx_font_monospace">torchhnde</span>) optimizers on a system identification task for a bouncing ball with unknown restitution coefficient and gravity. As shown in Figure 4, L-BFGS leveraging exact second-order adjoint gradients converges significantly faster in fewer iterations compared to Adam.</span> <div class="ltx_figure_panel ltx_align_center"> <img src="/assets/images/research_notes/torchhnde_loss.png" alt="Convergence Comparison" style="max-width:100%; height:auto;" /> <div class="ltx_caption ltx_wrap"> <span class="ltx_tag ltx_tag_figure">Figure 4: </span>Loss convergence over iterations for Adam (first-order) vs. L-BFGS (second-order via <span class="ltx_font_monospace">torchhnde</span>).</div> </div> </div> </div> <div id="sec-7" class="ltx_section"> <h2 class="ltx_title ltx_title_section"> <span class="ltx_tag ltx_tag_section">7 </span>Conclusion</h2> <span class="ltx_p">In this paper, we presented a comprehensive framework for first-order and second-order adjoint sensitivity analysis in Hybrid Neural ODEs with state-dependent event transitions. We derived the exact boundary corrections required for reverse-time integration across jump points. To make these methods broadly accessible, we introduced <span class="ltx_font_monospace">torchhnde</span>, a PyTorch library that automates both first- and second-order sensitivity analysis for hybrid systems. Empirical evaluations demonstrated the mathematical correctness, $O(1)$ memory footprint, and accelerated convergence when using second-order optimization methods. Future work includes extending the library to stiff hybrid systems and integrating uncertainty quantification techniques.</span> </div> <div id="sec-8" class="ltx_section"> <h2 class="ltx_title ltx_title_section">References</h2> <span class="ltx_p"> [1] E. Hairer, S. P. Nørsett, and G. Wanner. *Solving Ordinary Differential Equations I: Nonstiff Problems*. Springer, 1993.<br/> [2] E. Hairer and G. Wanner. *Solving Ordinary Differential Equations II: Stiff and Differential-Algebraic Problems*. Springer, 1996.<br/> [3] W. H. Enright. *Improving the efficiency of matrix-free implicit methods for stiff ODEs*. ACM TOMS, 2000.<br/> [4] L. Petzold. *Automatic selection of methods for solving stiff and nonstiff systems of ordinary differential equations*. SIAM J. Sci. Stat. Comput., 1983.<br/> [5] C. W. Gear. *Numerical Initial Value Problems in Ordinary Differential Equations*. Prentice-Hall, 1971.<br/> [6] R. T. Q. Chen, Y. Rubanova, J. Bettencourt, and D. K. Duvenaud. *Neural ordinary differential equations*. NeurIPS, 2018.<br/> [7] L. S. Pontryagin. *The mathematical theory of optimal processes*. CRC Press, 1962.<br/> [8] J. Zhuang et al. *Adaptive checkpoint adjoint state method for training Neural ODEs*. ICML, 2020.<br/> [9] R. T. Q. Chen et al. *Event-based Neural ODEs*. arXiv preprint, 2020.<br/> [10] M. Jia and A. R. L. *Neural Hybrid Automata*. ACC, 2021.<br/> [11] N. B. Erichson et al. *L-ODE: Linearized Neural Ordinary Differential Equations*. ICLR, 2021.<br/> [12] A. Paszke et al. *PyTorch: An imperative style, high-performance deep learning library*. NeurIPS, 2019.<br/> [13] C. Rackauckas and Q. Nie. *DifferentialEquations.jl–a performant and feature-rich ecosystem for solving differential equations in Julia*. Journal of Open Research Software, 2017.<br/> [14] M. Innes et al. *A differentiable programming system to bridge machine learning and scientific computing*. arXiv preprint, 2019.<br/> [15] S. Kim et al. *Stiff Neural Ordinary Differential Equations*. AISTATS, 2021.<br/> [16] P. Kidger et al. *Neural Controlled Differential Equations for Irregular Time Series*. NeurIPS, 2020.<br/> [17] X. Li et al. *Scalable Gradients for Stochastic Differential Equations*. AISTATS, 2020.<br/> [18] B. Tzen and M. Raginsky. *Neural Stochastic Differential Equations*. arXiv preprint, 2019.<br/> [19] D. Kidger. *On Neural Differential Equations*. PhD thesis, University of Oxford, 2021.<br/> [20] H. Gopal et al. *Stochastic Hybrid Neural ODEs*. ICML, 2022.<br/> [21] E. Dupont et al. *Augmented Neural ODEs*. NeurIPS, 2019.<br/> [22] P. Kidger et al. *Efficient and Accurate Gradients for Neural ODEs*. ICML, 2021.<br/> [23] Y. Wang et al. *Modeling Switched Dynamical Systems via Hybrid Neural ODEs*. IEEE TAC, 2022.<br/> [24] C. Rackauckas et al. *Universal Differential Equations for Scientific Machine Learning*. arXiv preprint, 2020.<br/> [25] J. Nocedal and S. J. Wright. *Numerical Optimization*. Springer, 2006.<br/> [26] D. C. Liu and J. Nocedal. *On the limited memory BFGS method for large scale optimization*. Mathematical Programming, 1989.<br/> [27] J. Martens. *Deep learning via Hessian-free optimization*. ICML, 2010. </span> </div>
Lieferumfang2x Hochschrank, 1x Waschtisch mit Keramik-Doppelwaschbecken, 1x Spiegel; optional mit LED-Aufsatzleuchten (je nach gewählter Variante). Armaturen und Abflusszubehör sind nicht im Lieferumfang enthalten.
Dieses Set enthält:Hochschrank (2x)·Spiegel·Waschtisch
🧩 Bestandteile dieses Sets

Hochschrank (2x)

Breite: 33 cm · Tiefe: 22 cm · Höhe: 150 cm

  • Hinter jeder Tür befindet sich ein Einlegeboden
  • Türanschlag beidseits montierbar
  • Wertige Metallbeschläge

Spiegel

Breite: 112 cm · Tiefe: 12 cm · Höhe: 59 cm

  • Mittlere Rückwand mit 4 kleinen Ablagen (je ca. 20x10 cm)
  • Spiegelglas (ESG)
  • Höhe ändert sich bei Montage inklusive Leuchten

Waschtisch

Breite: 112 cm · Tiefe: 46 cm · Höhe: 51 cm

  • Zwei geräumige Schubladen mit Metallauszug
  • Inklusive Keramik-Doppelwaschbecken (Maße: BxHxT 110x17x46 cm, Innenmaße je ca. 43x28,4 cm)
📏 Weitere technische Details
Hochschrank (2x)
TüranschlagBeidseits montierbar
Einlegeböden1 Einlegeboden hinter jeder Tür
BeschlägeWertige Metallbeschläge
Spiegel
Ablagen4 kleine Ablagen auf der mittleren Rückwand (je ca. 20x10 cm)
Waschtisch
Schubladen2 geräumige Schubladen mit Metallauszug
Waschbecken-MaßeBreite: 110 cm · Tiefe: 46 cm · Höhe: 17 cm (Innenmaße je ca. 43x28,4 cm)
Allgemein
OberflächenbehandlungMelaminbeschichtet
GriffeBügelgriffe aus Metall in Alufarben
Beschreibung
Lieferung
Kundenvorteile
Weitere Angebote
Weitere Artikel aus der Serie (Hier klicken)
Produktgalerie überspringen
Hängender Doppel-Waschplatz Set - Vinkoja (zweiteilig)
Hängender Doppel-Waschplatz Vinkoja (zweiteilig)
Preis: 849,00 €

Lieferzeit 5 - 8 Werktage

Waschplatz mit 2 Becken & Extra-Schrank - Vinkoja (dreiteilig)
Waschplatz mit 2 Becken Vinkoja (dreiteilig)
Preis: 999,00 €

Lieferzeit 5 - 8 Werktage

Spiegel & Doppel-Waschtisch & Schrank - Vinkoja (dreiteilig)
Spiegel & Doppel-Waschtisch Vinkoja (dreiteilig)
Preis: 949,00 €

Lieferzeit 5 - 8 Werktage

Doppelter Waschplatz in Schwarz Weiß - Vinkoja (zweiteilig)
Doppelter Waschplatz Vinkoja (zweiteilig)
Preis: 789,00 €

Lieferzeit 5 - 8 Werktage

Modernes Badmöbel Ensemble in Schwarz - Vinkoja (vierteilig)
Modernes Badmöbel Ensemble Vinkoja (vierteilig)
Preis: 1.149,00 €

Lieferzeit 5 - 8 Werktage