Czy istnieje zestaw open source dla solverów ODE dla C korzystających z rodzimego typu kompleksu C99?


12

Używam GSL jako podstawy wielu moich symulacji, ale jest to trochę przesada dla moich celów i określa swój własny złożony typ ze względów starszych. Czy zamiast kodu mojego własnego solvera ODE Runge-Kutta, który prawdopodobnie nie byłby bardzo wydajny, czy istnieją jakieś solwery ODE typu open source, które używają natywnego typu kompleksu C99?


Nie wiem, gdzie chcesz go używać, ale ogólnie RK jest dość trudny do wdrożenia w nieefektywny sposób ... Czy wykonałeś jakieś testy porównawcze, które wykazały, że masz ten problem?
Mbq

2
Żaden. Nie napisałem własnego, ponieważ nie chcę wymyślać koła na nowo. Jeśli będę musiał, zrobię to, ale znalezienie czasu na coś, co nie jest zepsute, nie jest teraz dla mnie kartą. Jeśli pojawi się odpowiedź, tego właśnie szukam, nie będę w stanie jej użyć, jeśli przez kilka miesięcy. Ponadto RK nie zawsze jest tym, czego potrzebuję, tylko tym, dla czego znam algorytm.
qubyte

Nawiasem mówiąc, przez większość czasu wykonuję symulacje małych układów kwantowych. Ale nie wyłącznie.
qubyte

Odradzałbym samodzielne wdrażanie RK o zmiennej wielkości (z wyjątkiem celów edukacyjnych). W znalezieniu optymalnego rozmiaru kroku zaangażowanych jest wiele heurystyk.
Jitse Niesen

Jak powiedziałem, każde szybkie napisanie byłoby złe lub wolne. Czy szczególnie trudno jest wdrożyć RK ze złożonymi wejściami / wyjściami? Wiem, że możesz po prostu podzielić go na dwie prawdziwe części, ale to trochę denerwujące!
qubyte

Odpowiedzi:


10

Możesz uznać to za „ przesadę ”, ale pakiet integracji czasowej PETSc może być używany z kompleksem C99 (konfiguracja --with-scalar-type=complex). Obsługiwane metody obejmują

Te implementacje są najbardziej odpowiednie dla problemów wysokowymiarowych, takich jak częściowo dyskretne równania różniczkowe cząstkowe (metoda linii).


Jest trochę duży, ale nie wiedziałem o tym, więc +1. Idealnie, cokolwiek użyję, nie będzie większe niż GSL. Rzucę okiem na instrukcję i zobaczę, co myślę.
qubyte

Żeby było jasne, łączysz się z tymi bibliotekami podczas kompilacji. Czy to prawda?
qubyte

Nic nie jest powiązane w czasie kompilacji. Zawsze. Łączenie odbywa się po kompilacji (nawet jeśli kompilator wywołuje linker). Możesz dynamicznie ładować bibliotekę, ale będziesz potrzebować nagłówków, aby skompilować kod, aby wywołać bibliotekę. Jeśli to nie odpowiada na twoje pytanie, wyjaśnij, co chcesz zrobić.
Jed Brown,

Oczywiście masz rację. Głupi błąd, ale wiedziałeś, co mam na myśli. Moje pytanie byłoby lepiej sformułowane jako „Czy mam link do tych bibliotek?” w przeciwieństwie do kompilacji bitów, których potrzebuję w tym samym czasie, co mój własny kod, jak ma to miejsce w przypadku Boost. Wiem, że wywoływanie funkcji z biblioteki będzie wymagało nagłówków, robię to już od jakiegoś czasu.
qubyte

Tak, kompilujesz PETSc niezależnie od aplikacji. To nie jest tylko nagłówek jak Boost.
Jed Brown,

1

Inną opcją, którą masz, chyba że system jest dość skomplikowany, jest po prostu konwersja złożonej notacji na problem z dwiema niewiadomymi, które reprezentują rzeczywistą i wymyśloną część. Następnie możesz użyć standardowego solwera ODE o wartości rzeczywistej.


Właśnie tego staram się unikać. W rzeczywistości integratory GSL są prawdziwe tylko wtedy, gdy pamięć służy, więc to właśnie robię w tej chwili.
qubyte
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.