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

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

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

wolfram mathematica online integrator

PS. Функция ввода, как может предполагаться, непрерывна (т.е. не, например, sin (x)/x).

16
задан Community 8 February 2017 в 14:28
поделиться

5 ответов

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

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

19
ответ дан 30 November 2019 в 21:02
поделиться

Алгоритм, который вы ищете, - это алгоритм Риша:

http://en.wikipedia.org/wiki/Risch_algorithm

Я считаю, что это немного сложно использовать. Эта книга:

http://www.amazon.com/Algorithms-Computer-Algebra-Keith-Geddes/dp/0792392590

имеет его описание. Описание на 100 страницах.

6
ответ дан 30 November 2019 в 21:02
поделиться

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

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

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

3
ответ дан 30 November 2019 в 21:02
поделиться

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

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

Редактировать:

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

1
ответ дан 30 November 2019 в 21:02
поделиться

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

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

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

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

0
ответ дан 30 November 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: