Существует ли открытый набор решателей ODE для C, использующий собственный сложный тип C99?

12

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

qubyte
источник
Я не знаю, где вы хотите его использовать, но в целом RK довольно сложно реализовать неэффективным способом ... Вы сделали какие-либо тесты, которые показали, что у вас есть эта проблема?
МБк
2
Никто. Я не написал свой собственный, потому что я не хочу изобретать велосипед. Если мне придется, то я сделаю это, но найти время, чтобы потратить на то, что не сломано, сейчас не для меня. Если придет ответ, это то, что я ищу, я не смогу использовать его в течение нескольких месяцев. Кроме того, РК не всегда то, что мне нужно, просто то, для чего я знаю алгоритм.
Кбайт
Кстати, большую часть времени я занимаюсь моделированием малых квантовых систем. Не исключительно, хотя.
Кбайт
Я бы посоветовал не применять RK с переменным шагом самостоятельно (за исключением образовательных целей). Существует много эвристик, связанных с поиском оптимального размера шага.
Джитс Нисен
Как я уже сказал, все, что я напишу быстро, будет либо неправильным, либо медленным. Особенно сложно реализовать РК со сложным вводом / выводом? Я знаю, что вы можете просто разделить его на две части, но это немного раздражает!
Кбайт

Ответы:

10

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

Эти реализации являются наиболее подходящими для многомерных задач, таких как полудискретизированные уравнения в частных производных (метод прямых).

Джед браун
источник
Это немного большой, но я не знал об этом, поэтому +1. В идеале все, что я использую, будет не больше, чем GSL. Я посмотрю на руководство и посмотрю, что я думаю.
Квебайт
Просто чтобы прояснить, вы ссылаетесь на эти библиотеки во время компиляции. Это правильно?
кв. В
Ничто не связано во время компиляции. Когда-либо. Связывание выполняется после компиляции (даже если компилятор вызывает компоновщик). Вы можете динамически загружать библиотеку, но вам понадобятся заголовки для компиляции кода для вызова в библиотеку. Если это не отвечает на ваш вопрос, пожалуйста, объясните, что вы хотите сделать.
Джед Браун
Ты прав конечно. Глупая ошибка, но вы знали, что я имел в виду. Мой вопрос был бы лучше сформулирован как «Связываюсь ли я с этими библиотеками?» в отличие от компиляции битов, которые мне требуются одновременно с моим собственным кодом, как в случае с Boost. Я знаю, что для вызова функций из библиотеки потребуются заголовки, я делал это в течение некоторого времени.
кв. В
Да, вы компилируете PETSc независимо от вашего приложения. Это не только заголовок, как Boost.
Джед Браун
1

Другой вариант, если у вас нет достаточно сложной системы, - просто преобразовать сложную запись в задачу с двумя неизвестными, которые представляют действительную и мнимую части. Затем вы можете использовать стандартный вещественный решатель ODE.

Вольфганг Бангерт
источник
Это именно то, чего я пытаюсь избежать. На самом деле, интеграторы GSL реальны, только если память служит, поэтому я сейчас и делаю.
кв. В