2010-07-13 24 views
14

Recuerdo haber resuelto muchos problemas de integración indefinida. Existen ciertos métodos estándar para resolverlos, pero, no obstante, existen problemas que requieren una combinación de enfoques para llegar a una solución. Pero, ¿cómo podemos lograr la solución programáticamente?Cómo calcular la integral indefinida mediante programación

Por ejemplo, mire la aplicación integradora en línea de Mathematica. Entonces, ¿cómo nos acercamos a escribir un programa así que acepta una función como argumento y devuelve la integral indefinida de la función?

wolfram mathematica online integrator

PS. Se puede suponer que la función de entrada es continua (es decir, no es, por ejemplo, sin (x)/x).

+6

Buena suerte ...... – Mau

+0

Pregunta interesante. Esto es algo que siempre me he preguntado a mí mismo. La diferenciación parece ser más fácil ya que puedes aplicar las reglas recursivamente. Las integrales definidas también se pueden aproximar bastante bien. Esperando ver enfoques para esto. – IVlad

+2

Usted sabe que la mayoría de las funciones ("no triviales"), compuestas por varios productos y composiciones de funciones elementales, tienen antiderivadas * que no se pueden expresar utilizando solo funciones elementales *. Por lo tanto, el problema es "insoluble" en general. –

Respuesta

17

Tiene Risch's algorithm que es sutilmente indecidible (ya que debe decidir si dos expresiones son iguales, similar al omnipresente problema de detención), y realmente largo de implementar.

Si te gustan las cosas complicadas, resolver una ecuación diferencial ordinaria en realidad no es más difícil (y calcular una integral indefinida equivale a resolver y '= f (x)). Existe una teoría diferencial de Galois que imita la teoría de Galois para ecuaciones polinomiales (pero con grupos de Lie de simetrías de soluciones en lugar de grupos finitos de permutaciones de raíces). El algoritmo de Risch se basa en eso.

+2

Este es un comentario muy interesante sobre la teoría diferencial de Galois. Comienzo a entender la parte del algoritmo de Risch que generalmente se pasa por alto. –

1

Estos expert systems suelen tener una gran colección de técnicas y simplemente intentan una detrás de otra.

No estoy seguro acerca de WolframMath, pero en Maple hay un comando que permite mostrar todos los pasos intermedios. Si lo haces, obtendrás como salida todas las técnicas probadas.

Editar:

La transformación de la entrada no debería ser la parte más difícil - que necesita para escribir un parser y una lexer, que transforma la entrada de texto en una representación interna.

0

Buena suerte. Mathematica es una pieza de software muy compleja, y la manipulación simbólica es lo que hace mejor. Si usted está interesado en el tema echar un vistazo a estos libros:

http://www.amazon.com/Computer-Algebra-Symbolic-Computation-Elementary/dp/1568811586/ref=sr_1_3?ie=UTF8&s=books&qid=1279039619&sr=8-3-spell

También, ir a la fuente, no estaría mal tampoco. Estos libros realidad explica el funcionamiento interno de Mathematica

http://www.amazon.com/Mathematica-Book-Fourth-Stephen-Wolfram/dp/0521643147/ref=sr_1_7?ie=UTF8&s=books&qid=1279039687&sr=1-7

3

Mantiene un conjunto de formas básicas que conoce las integrales de (polinomios, funciones trigonométricas elementales, etc.) y las usa en la forma de la entrada. Esto es factible si no necesita mucha generalidad: es muy fácil escribir un programa que integre polinomios, por ejemplo.

Si quieres hacerlo en el caso más general posible, tendrás que hacer gran parte del trabajo que hacen los sistemas de álgebra computacional. Es un trabajo de toda la vida para algunas personas, p. Si mira Risch's "algorithm" publicado en otras respuestas, o symbolic integration, puede ver que hay libros enteros de varios volúmenes ("Manuel Bronstein, Integración simbólica Volumen I: Springer") que se han escrito sobre el tema, y ​​muy pocos los sistemas de álgebra informática existentes lo implementan con la máxima generalidad.

Si realmente desea codificarlo usted mismo, puede consultar el código fuente de Sage o los diversos proyectos enumerados entre its components. Por supuesto, es más fácil usar uno de estos programas o, si está escribiendo algo más grande, use uno de estos como bibliotecas.

Cuestiones relacionadas