Existe um conjunto de código aberto de solucionadores de ODE para C que usa o tipo complexo C99 nativo?

12

Eu tenho usado o GSL como base de muitas de minhas simulações, mas é um pouco exagerado para meus propósitos e define seu próprio tipo complexo por motivos legados. Em vez de codificar meu próprio solucionador Runge-Kutta ODE, o que provavelmente não seria muito eficiente, há algum solucionador ODE de código aberto que use o tipo complexo C99 nativo?

qubyte
fonte
Não sei onde você deseja usá-lo, mas, em geral, o RK é bastante difícil de ser implementado de maneira não eficiente ... Você fez algum benchmark que demonstrasse que tem esse problema?
MBq
2
Nenhum. Não escrevi o meu próprio porque não quero reinventar a roda. Se for preciso, sim, mas encontrar tempo para gastar em algo que não está quebrado não está disponível para mim agora. Se surgir uma resposta, é o que estou procurando, não poderei usá-lo por alguns meses. Além disso, RK nem sempre é o que eu preciso, apenas o que eu sei o algoritmo.
qubyte
Aliás, estou fazendo simulações de pequenos sistemas quânticos na maioria das vezes. Não exclusivamente embora.
qubyte
Eu recomendaria não implementar a RK de tamanho de etapa variável (exceto para fins educacionais). Existem muitas heurísticas envolvidas na busca do tamanho ideal da etapa.
Jitse Niesen 07/12/11
Como eu disse, qualquer um que eu escrevesse rapidamente seria errado ou lento. É particularmente difícil implementar o RK com entrada / saída complexa? Eu sei que você pode dividi-lo em duas partes reais, mas isso é meio chato!
qubyte

Respostas:

10

Você pode considerá-lo um "exagero", mas o pacote de integração de tempo do PETSc pode ser usado com o complexo C99 (configure --with-scalar-type=complex). Os métodos suportados incluem

Essas implementações são mais apropriadas para problemas de alta dimensão, como equações diferenciais parciais semi-discretizadas (método de linhas).

Jed Brown
fonte
É um pouco grande, mas eu não sabia disso com +1. Idealmente, o que quer que eu use não será maior que o GSL. Vou dar uma olhada no manual e ver o que penso.
qubyte
Só para esclarecer, você vincula essas bibliotecas em tempo de compilação. Isso está certo?
precisa saber é o seguinte
Nada está vinculado no momento da compilação. Sempre. A vinculação é feita após a compilação (mesmo que o compilador chame o vinculador). Você pode carregar dinamicamente a biblioteca, mas precisará dos cabeçalhos para compilar seu código para chamar a biblioteca. Se isso não responder à sua pergunta, explique o que você deseja fazer.
Jed Brown
Você está certo, é claro. Erro bobo, mas você sabia o que eu quis dizer. Minha pergunta teria sido melhor declarada como "Eu vinculo a essas bibliotecas?" em vez de compilar os bits necessários ao mesmo tempo que meu próprio código, como é o caso do Boost. Estou ciente de que chamar funções de uma biblioteca exigirá cabeçalhos, venho fazendo isso há algum tempo.
qubyte
Sim, você compila o PETSc independentemente do seu aplicativo. Não é apenas para cabeçalho, como o Boost.
Jed Brown
1

Outra opção que você tem, a menos que o sistema seja bastante complicado, é apenas converter de notação complexa em um problema com duas incógnitas que representam a parte real e imaginária. Em seguida, você pode usar um solucionador de ODE com valor real padrão.

Wolfgang Bangerth
fonte
É exatamente isso que estou tentando evitar. De fato, os integradores GSL são reais apenas se a memória servir, por isso é o que estou fazendo no momento.
qubyte