2012-07-04 44 views
10

Necesito hacer integración analítica en C++. Por ejemplo, debería integrar expresiones como esta: exp[I(x-y)], I es un número imaginario.cálculo simbólico en C++

¿Cómo puedo hacer esto en C++?

Intenté GiNaC pero puede integrar polinomios. También probé SymbolicC++. Puede integrar funciones como sine, cosine o exp(x) y ln(x), pero no es muy potente. Por ejemplo, no puede integrar x*ln(x) que se puede obtener fácilmente mediante el uso de Mathematica o mediante la integración por partes.

¿Existen otras herramientas o bibliotecas que puedan realizar cálculos simbólicos como la integración analítica en C++?

+0

¿Lo intentó con [Maxima] (http://maxima.sourceforge.net/)? – jxh

+0

está utilizando Matlab una opción? La caja de herramientas simbólica de Matlab debería ser capaz de hacer estas cosas. ¿Usando el motor C Matlab puedes llamarlo desde tu código C++? – Philipp

+0

No tengo la licencia de Matlab, así que no puedo usarla. ¿Utiliza Maxima sintaxis C++? Prefiero alguna biblioteca en C++. si quisiera usar otros programas como maxima o Matlab, usaría Mathematica en su lugar. realmente he escrito mi programa en mathematica. Es un programa simple para silvear ecuaciones de Integro-defferential pero el problema es que Mathematica no es eficiente en términos de tiempo requerido para el cálculo. Entonces decidí escribir mi programa en C++. – MOON

Respuesta

4

Si necesita hacer una integración simbólica, entonces probablemente no obtendrá nada más rápido que ejecutarlo en matemática o en máximos; ya están escritos en (algo así como) C++. Entonces, a menos que tus ecuaciones tengan fórmulas muy específicas que puedas explotar de una manera que Mathematica o Maxima no puedan, entonces probablemente no tengas suerte, y al menos no obtendrás ese tipo de manipulación personalizada de un biblioteca disponible en el mercado.

Es posible que tenga que escribir su propio código para obtener un aumento de velocidad si necesita soluciones numéricas. (Sé que lo hice por generar soluciones numéricas para PDE).

+0

Mi código escrito en Mathematica está en este enlace: http://www.mediafire.com/?cw9s3ne7jz8fq7s Este código es sobre una recuperación relación. Le doy el término 0 y obtiene el primer término, luego usa el primer término para obtener el segundo y así sucesivamente. Durante los primeros 4 términos no lleva tanto tiempo, pero para otros términos lleva mucho tiempo y, de hecho, nunca he obtenido esos términos más altos. Se supone que este código resuelve una ecuación integro-diferencial, por lo que necesito una gran cantidad de términos para obtener. Al menos creo que 50 términos son necesarios. – MOON

+0

Así que porque toma mucho tiempo en Mathematica, decidí escribirlo por C++ – MOON

+0

¿Puedes agregar una imagen de la ecuación? No puedo abrir la libreta de matematica (no tengo matematica disponible en estos dias ...) –

1

Las otras bibliotecas de C++ soy consciente de que hacer cálculo simbólico son

Si no me equivoco, SymEngine todavía no lo hace integración de soporte; sin embargo, Piranha sí. El documentation para Piranha está algo limitado en este momento y está en desarrollo, pero puede ver la función de integración here. Tenga en cuenta que el segundo enlace usa la sintaxis para Pyranha, el envoltorio de Python. Sin embargo, Piranha "es una biblioteca de álgebra computacional para la manipulación simbólica de polinomios multivariados dispersos y otros objetos simbólicos estrechamente relacionados (como la serie de Poisson)", por lo que no creo que pueda integrar las funciones particulares en las que pueda estar interesado .

Aunque no es C++, puede que también le interese SymPy para Python, que puede realizar algunas de las integraciones simbólicas más complicadas que puedan interesarle. La documentación para la integración de SymPy es here.