¿Existe un conjunto de código abierto de solucionadores de ODE para C que utilizan el tipo complejo nativo C99?

12

He estado usando GSL como base de muchas de mis simulaciones, pero es un poco exagerado para mis propósitos y define su propio tipo complejo por razones heredadas. En lugar de codificar mi propio solucionador ODE Runge-Kutta, que probablemente no sería muy eficiente, ¿hay algún solucionador ODE de código abierto que use el tipo complejo nativo C99?

qubyte
fuente
No sé dónde quiere usarlo, pero en general RK es bastante difícil de implementar de manera no eficiente ... ¿Ha realizado alguna referencia que demuestre que tiene este problema?
mbq
2
Ninguna. No he escrito el mío porque no quiero reinventar la rueda. Si tengo que hacerlo, lo haré, pero encontrar tiempo para gastar en algo que no está roto no está en las cartas para mí en este momento. Si aparece una respuesta que es lo que estoy buscando, no podré usarlo durante unos meses. Además, RK no siempre es lo que necesito, solo para lo que sé el algoritmo.
qubyte
Por cierto, estoy haciendo simulaciones de pequeños sistemas cuánticos la mayor parte del tiempo. Aunque no exclusivamente.
qubyte
Yo recomendaría no implementar RK de tamaño de paso variable usted mismo (excepto con fines educativos). Hay muchas heurísticas involucradas en encontrar el tamaño de paso óptimo.
Jitse Niesen
Como dije, cualquiera que escriba rápidamente sería incorrecto o lento. ¿Es particularmente difícil implementar RK con entradas / salidas complejas? Sé que puedes dividirlo en dos partes reales, ¡pero esto es un poco molesto!
qubyte

Respuestas:

10

Puede considerarlo "excesivo", pero el paquete de integración de tiempo de PETSc se puede usar con el complejo C99 (configurar --with-scalar-type=complex). Los métodos admitidos incluyen

Estas implementaciones son más apropiadas para problemas de alta dimensión como ecuaciones diferenciales parciales semi-discretizadas (método de líneas).

Jed Brown
fuente
Es un poco grande, pero no lo sabía, así que +1. Idealmente, lo que use no será mayor que GSL. Echaré un vistazo al manual y veré lo que pienso.
qubyte
Para ser claros, se vincula con estas bibliotecas en tiempo de compilación. ¿Está bien?
qubyte
Nada está vinculado en tiempo de compilación. Nunca. La vinculación se realiza después de la compilación (incluso si el compilador invoca el vinculador). Puede cargar dinámicamente la biblioteca, pero necesitará los encabezados para compilar su código para llamar a la biblioteca. Si eso no responde a su pregunta, explique lo que quiere hacer.
Jed Brown
Tienes razón, por supuesto. Error tonto, pero sabías a lo que me refería. Mi pregunta se habría expresado mejor como "¿Enlace a estas bibliotecas?" en lugar de compilar los bits que necesito al mismo tiempo que mi propio código, como es el caso de Boost. Soy consciente de que llamar a funciones desde una biblioteca requerirá encabezados, lo he estado haciendo durante algún tiempo.
qubyte
Sí, compila PETSc independientemente de su aplicación. No es solo encabezado como Boost.
Jed Brown
1

Otra opción que tiene, a menos que el sistema sea bastante complicado, es simplemente convertir de una notación compleja a un problema con dos incógnitas que representan la parte real e imaginaria. A continuación, puede usar un solucionador de ODE estándar de valor real.

Wolfgang Bangerth
fuente
Esto es exactamente lo que estoy tratando de evitar. De hecho, los integradores GSL son reales solo si la memoria sirve, así que esto es lo que estoy haciendo en este momento.
qubyte