2012-07-04 30 views
10

Potrzebuję przeprowadzić integrację analityczną w C++. Na przykład powinienem zintegrować wyrażenia takie jak to: exp[I(x-y)], I jest liczbą urojoną.obliczenia symboliczne w C++

Jak mogę to zrobić w C++?

Próbowałem GiNaC, ale może po prostu zintegrować wielomiany. Próbowałem także SymbolicC++. Może on integrować funkcje takie jak sine, cosine lub exp(x) i ln(x), ale nie jest bardzo wydajny. Na przykład nie może zintegrować x*ln(x), które można łatwo uzyskać za pomocą Mathematica lub przez integrację za pomocą części.

Czy są jakieś inne narzędzia lub biblioteki, które są w stanie wykonać obliczenia symboliczne, takie jak integracja analityczna w C++?

+0

Czy już próbowałeś [Maxima] (http://maxima.sourceforge.net/)? – jxh

+0

używa opcji Matlab an? Matematyczny symboliczny zestaw narzędzi Matlaba powinien być w stanie robić te rzeczy. Korzystając z silnika C Matlab, możesz wywołać go z kodu C++? – Philipp

+0

Nie mam licencji Matlaba, więc nie mogę jej używać. Czy Maxima używa składni C++? Wolę niektóre biblioteki w C++. gdybym chciał używać innych programów, takich jak maxima lub Matlab, użyłbym zamiast tego Mathematica. faktycznie napisałem mój program w Mathica. Jest to prosty program do wyrównywania równań Integro-defferential, ale problemem jest to, że Mathematica nie jest wydajna pod względem czasu wymaganego do obliczeń. Więc postanowiłem napisać mój program w języku C++. – MOON

Odpowiedz

4

Jeśli potrzebujesz integracji symbolicznej, prawdopodobnie nie uzyskasz niczego szybciej niż uruchomienie jej w matematyce lub maksimach - są już napisane w (coś w stylu) w C++. Więc jeśli twoje równania nie mają bardzo konkretnych formuł, które możesz wykorzystać w sposób, w jaki Mathematica lub Maxima nie mogą wtedy być może masz pecha - a przynajmniej nie dostaniesz tego rodzaju niestandardowej manipulacji z gotowa biblioteka.

Może być uzasadnione pisanie własnego kodu, aby uzyskać zwiększenie prędkości, jeśli potrzebne są rozwiązania numeryczne. (Wiem, że zrobiłem dla generowania rozwiązań numerycznych dla PDE).

+0

Mój kod napisany w Mathematica jest pod tym linkiem: http://www.mediafire.com/?cw9s3ne7jz8fq7s Ten kod dotyczy rekurencji relacja. Daję mu termin 0 i uzyskuje pierwszy termin, potem używa pierwszego terminu, aby otrzymać drugi i tak dalej. Przez pierwsze 4 semestry nie zajmuje to zbyt wiele czasu, ale w przypadku dalszych warunków zajmuje dużo czasu i nie uzyskałem takich wyższych terminów. ten kod ma rozwiązać równanie różniczkowe integro, więc potrzebuję dużo terminów do uzyskania. Przynajmniej sądzę, że 50 warunków jest konieczne. – MOON

+0

W związku z tym, że zajmuje dużo czasu w Mathematica, postanowiłem napisać to C++ – MOON

+0

Czy możesz dodać zdjęcie równania, nie mogę otworzyć notatnika matematycznego (obecnie nie mam dostępnej dla mnie matematyki ...) –

1

pozostałych bibliotek C++ Jestem świadomy tego zrobić obliczeń symbolicznych są

Jeśli się nie mylę, SymEngine nie ma jeszcze wspierać integrację; jednak Piranha ma. The documentation dla Piranha jest w tej chwili nieco ograniczona i jest w fazie rozwoju, ale możesz zobaczyć funkcję integracji here. Zauważ, że drugi link wykorzystuje składnię dla opakowania Python Piranha. Jednak Piranha "jest biblioteką algebry komputerowej do symbolicznej manipulacji rzadkimi wielowymiarowymi wielomiamami i innymi blisko spokrewnionymi obiektami symbolicznymi (takimi jak seria Poissona)", więc nie sądzę, że może ona zintegrować poszczególne funkcje, w które możesz być zainteresowany . Chociaż nie jest to C++, może być również zainteresowany SymPy dla Pythona, który może wykonać niektóre z bardziej skomplikowanych integracji symbolicznych, które mogą Cię zainteresować. Dokumentacja integracji SymPy to here.

Powiązane problemy