Дуже швидка відповідь ...
Експоненція гамільтонової матриці є симплектичною, властивістю, яку ви, мабуть, хочете зберегти, інакше ви просто використовуєте метод неструктурування. Дійсно, переваги у швидкості у використанні структурованого методу немає, просто збереження структури.
Можливий спосіб вирішити вашу проблему полягає в наступному. Спочатку знайдіть симплектичну матрицю такою, що - гамільтонів і блокує верхню трикутну, а має власне значення у лівій півплощині. Ви отримуєте цю матрицю, наприклад, взявши , де розв'язує рівняння Ріккаті, пов'язане з , або (більш стійке, оскільки воно є ортогональним) шляхом упорядкування розкладу Шура з і застосовуючи трик Лауб (тобто, замінюючи унітарний фактор Шура з[ Я 0 Х Я ]ХНН[ U 11 U 12 U 21 U 22 ][ U 11 - U 12 U 12 U 11 ]H^=M−1HM=[A^0−G^−A^T]A^[IX0I]XHH[U11U21U12U22][U11U12−U12U11] ). Можливо, у вас виникнуть проблеми, якщо Гамільтоніан має власні значення на уявній осі, але це довга історія, і зараз я вважаю, що це не трапиться у вашій проблемі.
Коли у вас є , у вас є , і ви можете обчислити
де розв'язує певне рівняння Ляпунова, я вважаю, щось на зразок (знаки можуть бути неправильними; накладати та розгорніть блоки, щоб отримати правильне рівняння. Знайдіть "метод Шура-Парлетта" для посилання на ця хитрість).Mexp(H)=Mexp(H^)M−1
exp(H^)=[exp(A^)0Xexp(−A^T)],
XA^X+XA^T=−exp(A^)G^−G^exp(−A^T)
exp(H^)H^=H^exp(H^)
Тоді ці три фактори є точно симплектичними. Просто використовуйте їх окремо: не обчислюйте товар, інакше ви втратите цю властивість чисельно.