Как вычислить неопределенный интегральный программный

Я помню, как решал множество неопределенных проблем интеграции. Существуют определенные стандартные методы их решения, но, тем не менее, существуют проблемы, которые сочетают подходы к решению. Но как мы можем достичь решения программно.

Например, посмотрите приложение онлайн-интегратора Mathematica. Итак, как мы подходим к написанию такой программы, которая принимает функцию как аргумент и возвращает неопределенный интеграл функции.

wolfram mathematica online integrator

PS. Входную функцию можно считать непрерывной (т.е. Не является, например, sin (x)/x).

Ответы

Ответ 1

У вас есть алгоритм Risch, который является тонко неразрешимым (так как вы должны решить, равны ли два выражения, похожие на вездесущую проблему остановки) и действительно долгое выполнение.

Если вы занимаетесь сложными вещами, решение обыкновенного дифференциального уравнения на самом деле не сложнее (и вычисление неопределенного интеграла эквивалентно решению y '= f (x)). Существует дифференциальная теория Галуа, которая имитирует теорию Галуа для полиномиальных уравнений (но с группами Ли симметрий решений вместо конечных групп перестановок корней). На этом основан алгоритм Risch.

Ответ 3

Вы сохраняете набор базовых форм, которым известны интегралы (полиномы, элементарные тригонометрические функции и т.д.), и вы используете их в форме ввода. Это выполнимо, если вам не нужна большая общность: очень легко написать программу, которая, например, объединяет многочлены.

Если вы хотите сделать это в наиболее общем случае, вам нужно будет выполнить большую часть работы, выполняемой системами компьютерной алгебры. Это пожизненная работа для некоторых людей, например. если вы посмотрите на алгоритм Risch, добавленный в другие ответы, или символической интеграции, вы можете видеть, что есть целые многотомные книги ( "Manuel Bronstein, Symbolic Integration Volume I: Springer" ), которые были написаны на эту тему, и очень немногие существующие системы компьютерной алгебры реализуют ее максимально общность.

Если вы действительно хотите его самостоятельно закодировать, вы можете посмотреть исходный код Sage или несколько проектов, перечисленных в списке его компоненты. Конечно, проще использовать одну из этих программ, или, если вы пишете нечто большее, используйте одну из них в качестве библиотек.

Ответ 4

Эти экспертные системы обычно имеют огромную совокупность методов и просто пытаются один за другим.

Я не уверен в WolframMath, но в Maple есть команда, которая позволяет отображать все промежуточные шаги. Если вы это сделаете, вы получите в качестве вывода все проверенные методы.

Edit:

Преобразование ввода не должно быть действительно сложной частью - вам нужно написать парсер и lexer, который преобразует текстовый ввод во внутреннее представление.

Ответ 5

Удачи. Mathematica - очень сложная часть программного обеспечения, а символическая манипуляция - это то, что она делает все возможное. Если вы заинтересованы в этой теме, взгляните на эти книги:

http://www.amazon.com/Computer-Algebra-Symbolic-Comput-Elementary/dp/1568811586/ref=sr_1_3?ie=UTF8& s = книги & QID = 1279039619 & ср = 8-3-заклинание

Кроме того, переезд в источник тоже не повредит. Эта книга фактически объясняет внутреннюю работу математики

http://www.amazon.com/Mathematica-Book-Fourth-Stephen-Wolfram/dp/0521643147/ref=sr_1_7?ie=UTF8& s = книги & QID = 1279039687 & ср = 1-7