네이티브 C99 복합 유형을 사용하는 C 용 오픈 소스 ODE 솔버 세트가 있습니까?


12

나는 많은 시뮬레이션의 기초로 GSL 을 사용 하고 있지만, 내 목적으로는 약간 과잉이며 레거시 이유로 인해 복잡한 유형을 정의합니다. 효율적이지 않을 수도있는 자체 Runge-Kutta ODE 솔버를 코딩하는 대신 네이티브 C99 복합 유형을 사용하는 오픈 소스 ODE 솔버가 있습니까?


어디에서 사용하고 싶은지 모르겠지만 일반적으로 RK는 비효율적 인 방식으로 구현하기가 매우 어렵습니다 ...이 문제가 있음을 나타내는 벤치 마크를 만들었습니까?
mbq

2
없음 나는 바퀴를 재발 명하고 싶지 않기 때문에 내 자신의 글을 쓰지 않았습니다. 내가해야한다면, 깨지지 않은 일에 소비 할 시간을 찾는 것이 지금 저의 카드에는 없습니다. 내가 찾고있는 답변이 나오면 몇 개월 동안 실제로 사용할 수 없습니다. 또한 RK는 항상 내가 필요한 것이 아니라 알고리즘을 알고있는 것입니다.
qubyte

덧붙여서, 나는 대부분 작은 양자 시스템의 시뮬레이션을하고 있습니다. 그러나 독점적으로는 아닙니다.
qubyte

가변 단계 크기 RK를 직접 구현하는 것에 대한 조언을 원합니다 (교육 목적 제외). 최적의 스텝 크기를 찾는 데에는 많은 휴리스틱이 있습니다.
Jitse Niesen

내가 말했듯이, 내가 빨리 쓰는 것은 잘못되었거나 느릴 것입니다. 복잡한 입력 / 출력으로 RK를 구현하기가 특히 어렵습니까? 나는 당신이 그것을 두 개의 실제 부분으로 나눌 수 있다는 것을 알고 있지만, 이것은 성가신 종류입니다!
qubyte

답변:


10

" 오버 킬 "이라고 생각할 수도 있지만 PETSc 의 시간 통합 패키지는 C99 complex (configure --with-scalar-type=complex) 와 함께 사용할 수 있습니다 . 지원되는 방법은 다음과 같습니다.

이러한 구현은 반-분산 된 부분 미분 방정식 (선의 방법)과 같은 고차원 문제에 가장 적합합니다.


조금 크지 만 +1에 대해서는 몰랐습니다. 이상적으로 내가 사용하는 것은 GSL보다 크지 않습니다. 나는 매뉴얼을보고 내가 생각하는 것을 볼 것이다.
qubyte

분명히하기 위해 컴파일 타임에 이러한 라이브러리에 연결합니다. 맞습니까?
qubyte

컴파일 타임에 연결된 것이 없습니다. 이제까지. 컴파일러가 링커를 호출하더라도 컴파일 후에 링크가 수행됩니다. 라이브러리를 동적으로로드 할 수 있지만 라이브러리를 호출하려면 코드를 컴파일하려면 헤더가 필요합니다. 그래도 질문에 대한 답변이 없으면 원하는 것을 설명하십시오.
Jed Brown

당신은 물론입니다. 바보 같은 오류지만 당신은 내가 무슨 뜻인지 알았습니다. 내 질문은 "이 라이브러리에 링크합니까?"로 더 잘 언급되었을 것입니다. Boost의 경우와 마찬가지로 내 코드와 동시에 필요한 비트를 컴파일하는 것과는 반대로. 라이브러리에서 함수를 호출하면 헤더가 필요하다는 것을 알고 있습니다.
qubyte December

예, 응용 프로그램과 독립적으로 PETSc를 컴파일합니다. Boost와 같은 헤더 전용이 아닙니다.
Jed Brown

1

시스템이 다소 복잡하지 않은 한 다른 옵션은 복잡한 표기법에서 실수 부분과 허수 부분을 나타내는 두 개의 미지수 문제로 변환하는 것입니다. 그런 다음 표준 실수 값 ODE 솔버를 사용할 수 있습니다.


이것은 내가 피하려고하는 것입니다. 실제로 GSL 통합자는 메모리가 제공되는 경우에만 실제이므로 이것이 현재 내가하고있는 일입니다.
qubyte
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.