Чи існує набір відкритих вихідних джерел ODE для C, які використовують вбудований комплексний тип C99?


12

Я використовую GSL в якості основи багатьох моїх моделювань, але це трохи надмірно для моїх цілей, і він визначає власний складний тип із застарілих причин. Замість того, щоб кодувати мій власний ODE-розв'язувач Runge-Kutta, який, мабуть, не буде дуже ефективним, чи існують якісь відкриті вихідні джерела ODE, які використовують рідний комплексний тип C99?


Я не знаю, де ви хочете його використовувати, але загалом RK досить важко реалізувати неефективним способом ... Ви зробили якісь орієнтири, які б показали, що у вас є ця проблема?
mbq

2
Жоден. Я не написав свого, тому що не хочу винаходити колесо. Якщо мені доведеться, я зроблю, але знайти час, щоб витратити на щось, що не порушено, зараз немає для мене картки. Якщо з’явиться відповідь, це те, що я шукаю, я не зможу реально користуватися протягом декількох місяців. Крім того, РК - це не завжди те, що мені потрібно, а лише те, для чого я знаю алгоритм.
квіте

Між іншим, я займаюся симуляцією малих квантових систем більшу частину часу. Не виключно, хоча.
квіте

Я радив би самостійно не застосовувати РК із змінним кроком (крім освітніх цілей). Для пошуку оптимального розміру кроку є багато евристики.
Jitse Niesen

Як я вже говорив, все, що я швидко напишу, було б або неправильним, або повільним. Чи особливо важко реалізувати RK зі складним входом / виходом? Я знаю, що ви можете просто розділити його на дві реальні частини, але це щось дратує!
квіте

Відповіді:


10

Ви можете вважати це "надмірним", але пакет часу інтеграції PETSc можна використовувати з комплексом C99 (налаштування --with-scalar-type=complex). Підтримувані методи включають

Ці реалізації найбільш підходять для задач з великими розмірами, таких як напівдискретні часткові диференціальні рівняння (метод ліній).


Вона трохи велика, але я про це не знав, тому +1. В ідеалі все, що я використовую, буде не більше GSL. Я перегляну посібник і побачу, що я думаю.
квіте

Щоб зрозуміти, ви з'єднуєтесь із цими бібліотеками під час компіляції. Це так?
квіте

Нічого не пов’язано під час компіляції. Колись. Зв'язування здійснюється після компіляції (навіть якщо компілятор викликає посилання). Ви можете динамічно завантажувати бібліотеку, але вам знадобляться заголовки для складання вашого коду для виклику в бібліотеку. Якщо це не відповідає на ваше запитання, поясніть, що ви хочете зробити.
Джед Браун

Ти прав, звичайно. Дурна помилка, але ти знав, що я маю на увазі. Моє запитання було б краще сказати як "Чи я посилаюся на ці бібліотеки?" на відміну від компіляції бітів, які мені потрібні одночасно з власним кодом, як у випадку з Boost. Я знаю, що для виклику функцій з бібліотеки потрібні заголовки, я цим займаюся вже деякий час.
квіте

Так, ви збираєте PETSc незалежно від вашої заявки. Це не лише заголовки, як Boost.
Джед Браун

1

Ще один варіант, якщо система не є досить складною, - це просто перетворити зі складної нотації в проблему з двома невідомими, які представляють реальну та уявну частину. Потім ви можете використовувати стандартний вирішувач ODE.


Саме цього я намагаюся уникати. Насправді інтегратори GSL справжні лише в тому випадку, якщо служить пам'ять, тому я зараз роблю це.
квіте
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.