네이티브 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.