是否存在使用本机C99复杂类型的C的ODE求解器的开源集?


12

我一直在使用GSL作为许多模拟的基础,但出于我的目的,这有点过头了,并且出于遗留原因,它定义了自己的复杂类型。除了编写自己的Runge-Kutta ODE求解器(可能效率不高)外,还有没有使用本机C99复杂类型的开源ODE求解器?


我不知道您想在哪里使用它,但是总的来说,RK很难以非有效的方式实现...您是否制定了表明存在此问题的基准?
mbq 2011年

2
没有。我没有写我自己的书,因为我不想重新发明轮子。如果需要的话,我会的,但现在没有时间花在没有破裂的东西上。如果答案是我要找的,那么几个月后我将无法使用。另外,RK并不总是我所需要的,而是我所知道的算法所需要的。
qubyte

顺便说一句,我大部分时间都在模拟小型量子系统。虽然不是唯一。
qubyte

我建议不要自己实施可变步长的 RK(出于教育目的)。寻找最佳步长涉及很多启发式方法。
吉特·尼森

就像我说的,我要写的任何东西都是错误的或缓慢的。用复杂的输入/输出实现RK特别困难吗?我知道您可以将它分成两个真实的部分,但这有点烦人!
qubyte

Answers:


10

您可能会认为这是“过度杀伤力”,但是PETSc的时间积分包可以与C99 complex(configure --with-scalar-type=complex)一起使用。支持的方法包括

这些实现最适合于高维问题,例如半离散偏微分方程(线法)。


它有点大,但我不知道,所以+1。理想情况下,无论我使用什么,都不会比GSL大。我会看一下手册,看看我的想法。
qubyte

为了清楚起见,您在编译时链接了这些库。是对的吗?
qubyte 2011年

编译时没有任何链接。曾经 链接是在编译后完成的(即使编译器调用了链接器)。您可以动态加载库,但是需要头文件来编译代码以调用库。如果那不能回答您的问题,请解释您想做什么。
杰德·布朗

你当然是对的。愚蠢的错误,但您知道我的意思。我的问题最好说成“我是否链接到这些库?” 而不是像Boost那样在我自己的代码中同时编译我需要的位。我知道从库中调用函数将需要标头,我已经这样做了一段时间。
qubyte 2011年

是的,您可以独立于应用程序编译PETSc。它不像Boost那样仅是头文件。
杰德·布朗

1

除非系统非常复杂,否则您还有另一个选择,就是将复杂的符号转换为带有两个代表实部和虚部的未知数的问题。然后,您可以使用标准的实值ODE求解器。


这正是我要避免的事情。实际上,只有在有内存的情况下,GSL集成商才是真实的,所以这就是我目前正在做的事情。
qubyte
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.