ISSN 1810-0198. Вестник Тамбовского университета. Серия: естественные и технические науки
Том 24, № 126 2019
© Корабельников В.А., 2019
DOI 10.20310/1810-0198-2019-24-126-166-178
УДК 517.312, 004.421.6
Процедурная интерпретация алгоритмов символьного интегрирования в системе MathPartner
Вячеслав Алексеевич КОРАБЕЛЬНИКОВ
ФГБОУ ВО «Тамбовский государственный университет им. Г.Р. Державина» 392000, Российская Федерация, г. Тамбов, ул. Интернациональная, 33 ORCID: https://orcid.org/0000-0002-3920-8373, e-mail: korabelnikov.va@gmail.com
Procedural interpretation of symbolic integration algorithms
in MathPartner system
Vyacheslav A. KORABELNIKOV
Derzhavin Tambov State University 33 Internatsionalnaya St., Tambov 392000, Russian Federation ORCID: https://orcid.org/0000-0002-3920-8373, e-mail: korabelnikov.va@gmail.com
Аннотация. Работа посвящена разработке библиотеки процедур для системы компьютерной алгебры MathPartner. Разрабатывается программная реализация алгоритмов символьного интегрирования. Решение задачи символьного интегрирования разбивается на три этапа. На первом этапе подынтегральное выражение приводится к виду, необходимому для применения алгоритма Риша. Приведено описание соответствующих процедур, которые сводят подынтегральную функцию к выражению, содержащему конечный набор арифметических операций и композиций логарифмических функций и экспонент, а также формируют набор регулярных мономов. На втором этапе осуществляется интегрирование дробной части подынтегрального выражения. Дано описание процедур, позволяющих привести дробную часть к виду, необходимому для применения алгоритма интегрирования. На третьем этапе проводится интегрирование полиномиальной части подынтегрального выражения. Получены процедуры, позволяющие в зависимости от вида подынтегрального выражения применить соответствующие алгоритмы интегрирования. В приложении приводится описание команд языка пользователя системы MathPartner, которые предназначены для вычисления интегралов в символьном виде.
Ключевые слова: система компьютерной алгебры; система MathPartner; символьное интегрирование
Благодарности: Работа выполнена при поддержке РФФИ (проект № 16-07-00420). Автор благодарит профессора Г. И. Малашонка за постановку задачи и многочисленные обсуждения, а также выражает признательность участникам семинара по компьютерной алгебре ТГУ за критику.
Для цитирования: Корабельников В.А. Процедурная интерпретация алгоритмов символьного интегрирования в системе MathPartner // Вестник Тамбовского университета. Серия: естественные и технические науки. Тамбов, 2019. Т. 24. № 126. С. 166-178. DOI 10.20310/1810-0198-2019-24-126-166-178.
Abstract. The work is devoted to the development of a procedure library for the computer algebra system MathPartner. A software implementation of symbolic integration algorithms is being developed. The solution of the problem of symbolic integration is divided into three stages. At the first stage, the integrand is reduced to the form necessary for applying the Rish algorithm. A description is given of the corresponding procedures that reduce the integrand to an expression containing a finite set of arithmetic operations and compositions of logarithmic functions and exponentials, and also make a set of regular monomials. At the second stage, the integration of the fractional part of the integrand is performed. A description is given of the procedures that reduce the fractional part to the form required for the application of the integration algorithm. At the third stage, the polynomial part of the integrand is integrated. Procedures are obtained that allow, depending on the type of the integrand, to apply the appropriate integration algorithms. The appendix contains a description of the user's language commands of the MathPartner system, which are designed to calculate integrals in symbolic form.
Keywords: computer algebra system; MathPartner computer algebra system; symbolic integration
Acknowledgements: The work is partially supported by the Russian Foundation for Basic Research (project no. 16-07-00420).
The author thanks Professor G.I. Malashonok for posing the problem and numerous discussions, and also expresses gratitude to the participants of the TSU Computer Algebra Workshop for criticism.
For citation: Korabelnikov V.A. Protsedurnaya interpretatsiya algoritmov simvol'nogo integrirovaniya v sisteme MathPartner [Procedural interpretation of symbolic integration algorithms in MathPartner system]. Vestnik Tambovskogo universiteta. Seriya: estestvennye i tekhnicheskie nauki - Tambov University Reports. Series: Natural and Technical Sciences, 2019, vol. 24, no. 126, pp. 166-178. DOI 10.20310/1810-0198-2019-24-126-166-178. (In Russian, Abstr. in Engl.)
Введение
Система компьютерной алгебры — это программный комплекс, предназначенный для выполнения символьных и численных вычислений. Одной из современных систем компьютерной алгебры является MathPartner. В отличие от большинства известных систем, MathPartner представляет из себя web-сервис, который свободно доступен в Интернете. Язык этой системы, называемый Mathpar, является по сути некоторым диалектом языка LaTeX. MathPartner позволяет сохранять и текст задания, и промежуточные вычисления, и результат вычислений. Пользователь имеет возможность сохранять исходный текст, текст в формате LaTeX и в виде изображения (pdf, jpg) [1].
Система MathPartner содержит большую библиотеку процедур для символьно-численных вычислений. Одним из пакетов этой библиотеки является пакет процедур для символьного интегрирования. Алгоритмы, лежащие в основе этой библиотеки процедур,
описаны в [2]. В этой статье приведены теоретические основы алгоритмов символьного интегрирования, реализованные в системе MathPartner. В рамках этих алгоритмов строится набор регулярных мономов и подынтегральное выражение представляется в виде суммы правильной дроби и полинома. Показан на алгоритмическом уровне процесс интегрирования полинома и правильной дроби. Рассматривается структура пакета процедур для символьного интегрирования и даются характеристики основным процедурам. Приводится общая блок-схема всего алгоритма символьного интегрирования.
1. Формирование набора регулярных мономов
В данной статье используются обозначения, принятые в [3, с. 213-229].
Процедура integrate. В системе MathPartner для интегрирования функций разработана процедура integrate. На входе процедура получает подынтегральную функцию. Процедура integrate вызывает процедуру toComplex, которая подготавливает подынтегральное выражение к процессу интегрирования. Полученное выражение передается процедуре mainProcOfInteg, которая вычисляет первообразную функции, выраженную в виде комбинации логарифмов и экспонент. После получения первообразной процедура integrate производит ее упрощение. Комбинации логарифмов и экспонент заменяются на тригонометрические, обратные тригонометрические, гиперболические, обратные гиперболические функции. Логарифмы от произведений заменяются на соответствующие суммы логарифмов. Появившиеся числовые слагаемые удаляются из первообразной. Полученная функция выдается пользователю в качестве ответа.
Для применения алгоритма Риша подынтегральная функция должна быть выражена через комбинацию натуральных логарифмов и экспонент [4, с. 225]. Для преобразования подынтегральной функции процедура integrate вызывает процедуру toComplex.
Процедура toComplex. Реализованная в пакете обработки функций системы MathPartner, процедура toComplex предназначена для проведения замены тригонометрических, обратных тригонометрических, гиперболических, обратных гиперболических функций на соответствующие комбинации логарифмов и экспонент, и использует следующие известные формулы:
sin(x) = (exp(ix) — exp(-ix))/2i, cos(x) = (exp(ix) + exp(-ix))/2,
arctg(x) = i/2(ln(1 — ix) — ln(1 + ix)), arcctg(x) = i/2(ln((x — i)/x) — ln((x + i)/x)), sh(x) = (exp(x) — exp(—x))/2, ch(x) = (exp(x) + exp(—x))/2, arctgh(x) = 1/2ln((1 + x)/(1 — x)), arcctgh(x) = 1/2ln((x + 1)/(x — 1)).
Процедура mainProcOfInteg. На входе получает функцию, преобразованную процедурой toComplex. Возвращает первообразную от входного выражения.
Процедура mainProcOfInteg вызывает процедуру convertLOGandPOWtoLNandEXP, которая предназначена для замены показательных функций на соответствующие комбинации логарифмов и экспонент: f (x)g(x) = exp(g(x)ln(f (x))). Эта процедура также
приводит логарифмы и показательные функции к основанию e: ах = exp(a ln(x)) ,
log«(x) = ln(x)/ ln(a).
Процедура mainProcOfInteg вызывает процедуру makeListOfLNandEXP, которая составляет список логарифмов и экспонент, содержащихся в подынтегральном выражении. Список составляется таким образом, что чем глубже вложены в аргументах логарифм или экспонента, тем ближе к началу списка они находятся. Например, для подынтегрального выражения exp(x2 ln(x3 + xln(x) + exp(x2))) список будет иметь вид:
[ln(x), exp(x2), ln(x3 + x ln(x) + exp(x2)), exp(x2 ln(x3 + x ln(x) + exp(x2)))].
Процедура mainProcOfInteg вызывает процедуру makeRegularMonomialsSequence,
которая преобразует список логарифмов и экспонент в набор регулярных мономов. Происходит построение наименьшего поля, которому принадлежит подынтегральное выражение. Исходным является поле C (x) рациональных функций над полем комплексных чисел (см. [4, с. 2254]). Это поле последовательно расширяется добавлением в него логарифмов и экспонент из списка.
Подынтегральная функция представляется в виде рациональной функции от последнего регулярного монома из набора. Если выражение представляет собой неправильную дробь, то выделяется целая часть, и дробь приводится в правильный вид. Процедура mainProcOfInteg вызывает процедуру polPartInteg для интегрирования полиномиальной части подынтегрального выражения и процедуру fracPartInteg для интегрирования дробной части подынтегрального выражения. Собирает полученные результаты и возвращает в процедуру integrate.
Процедура makeRegularMonomialsSequence. Действия процедуры makeRegularMonomialsSequence основаны на следующем алгоритме. Просматриваются все логарифмы в списке. Если аргумент логарифма представляет собой дробь £ = p/q, то в подынтегральном выражении ln(£) заменяется на ln(p) — ln(q) . ln(£) меняется в списке на ln(p). ln(q) вставляется в список после ln(p).
Просматриваются последовательно все элементы списка логарифмов и экспонент начиная с первого элемента. Начальный элемент списка является регулярным мономом, т. е. расширяет поле C(x). Этот элемент остается в списке. Далее для определения регулярных мономов используется следующий алгоритм.
1. Пусть рассматриваемым элементом списка является логарифм. Тогда происходит проверка, выражается ли рассматриваемый элемент списка через предыдущие. Пусть #1, #2,... , — уже добавленные в C(x) регулярные мономы, ln(fk) — рассматриваемый элемент списка, E — множество индексов i, 0 < i < k — 1, таких что # — экспонента, L — множество индексов j , 0 < j < k — 1, таких что — логарифм. Согласно структурной теореме [3, с. 225], если рассматриваемый логарифм принадлежит уже сформированному полю, то его аргумент должен выражаться в виде произведения
л = сП«п*П j
ieE jeb
где щ, тз € Q , ¡3 — аргумент 63 , с € С. Поэтому производится поочередное деление аргумента рассматриваемого логарифма на предыдущие элементы списка. Если элементом списка является экспонента, то производится деление на саму экспоненту. Если элементом списка является логарифм, то производится деление на аргумент этого логарифма. Если деление проходит без остатка, то рассматриваемый элемент списка удаляется. Если деление происходит с остатком, то как в подынтегральном выражении, так и в последующих элементах списка производится замена рассматриваемого логарифма на сумму логарифма от остатка и элемента деления. Производится замена рассматриваемого элемента списка на логарифм, аргументом которого является остаток от деления.
2. Пусть рассматриваемым элементом списка является экспонента. Тогда происходит проверка, выражается ли рассматриваемый элемент списка через предыдущие. Пусть 61,62,... , вк-1 — уже добавленные в С (ж) регулярные мономы, ехр(Д) — рассматриваемый элемент списка, Е — множество индексов г, 0 < г < к — 1, таких что 6г — экспонента, Ь — множество индексов ] , 0 < ] < к — 1 , таких что 63 — логарифм. Согласно структурной теореме [3, с. 225], если рассматриваемая экспонента принадлежит уже сформированному полю, то ее аргумент должен выражаться в виде линейной комбинации
где щ, тз € Q , ¡г — аргумент 6г, с € С. Составляется система линейных уравнений. Если она имеет решение, то рассматриваемый элемент удаляется из списка. Это решение позволяет выразить рассматриваемый элемент списка через предыдущие. В подынтегральном выражении и в последующих элементах списка меняется рассматриваемый элемент на его выражение через предыдущие элементы списка. Если система не имеет решения, то рассматриваемый элемент оставляется в списке без изменений.
Таким образом, список логарифмов и экспонент преобразуется в набор регулярных мономов. Процедура makeRegularMonomialsSequence передает полученный набор регулярных мономов в процедуру mainProcOfInteg.
Процедура fracPartInteg. Для подготовки дроби к интегрированию процедура fracPartInteg производит вызов процедур FactorPol_SquareFree и partialFraction.
Процедура FactorPol_SquareFree, реализованная в пакете полиномиальных вычислений системы Ма^РаЛпег, производит разложение знаменателя на свободные от квадратов множители.
Процедура partialFraction производит разложение дроби на сумму простейших дробей с помощью метода неопределенных коэффициентов.
Процедура fracPartInteg производит интегрирование отдельно каждого слагаемого из суммы. Согласно принципу Лиувилля (см. [4, с. 226]) и леммам о разложении (см. [4, с. 227,232]), интеграл от каждого слагаемого выражается в виде суммы
2. Интегрирование дробной части
дробной функции и логарифмов с постоянными коэффициентами.
Если показатель степени, в которую возведен знаменатель рассматриваемого слагаемого, больше единицы, то процедура fracPartInteg вызывает процедуры Hermite и LogarithmicPart. Процедура Hermite разделяет интеграл на сумму рациональной и логарифмической части и вычисляет рациональную часть интеграла. Процедура LogarithmicPart вычисляет логарифмическую часть интеграла.
Если показатель степени, в которую возведен знаменатель рассматриваемого слагаемого, равен единице, то полином, стоящий в знаменателе, свободен от квадратов, и рациональная часть интеграла равна нулю. Процедура LogarithmicPart вычисляет логарифмическую часть интеграла.
Процедура partialFraction. Действия процедуры partialFraction основываются на следующих рассуждениях (см. [5, с. 38]). Пусть p/q — полученная дробная часть, q = qi , где q» - свободный от квадратов полином. Тогда
p/q = Pi,i/qi + P2,i/q2 + P2,2/q2 +... + Pk,i/qk + ^/q^ +... + Pk,k/q^ ,
где pi,j = Aij при qi = x - a, p»,j = Aij x + Biyj при q» = x2 + ax + b, где Ai,j ,B»,j — числа, полученные с помощью метода неопределенных коэффициентов.
Процедура Hermite. Действия процедуры Hermite основаны на алгоритме Эрми-та (подробнее см. [4, с. 220, 230, 235]).
f Pj = _ Pi,jb + Г (j - l)Pi,ja + (Pi,jb)/
J qj (j - i)qj-1 J (j - i)qj-1 ,
где q»a + q»b =1 и j > 1. В результате применения этой формулы степень j , в которую возведен знаменатель, уменьшилась. Таким образом, эта формула повторно применяется пока j = 1.
Процедура LogarithmicPart. Действия процедуры LogarithmicPart основаны на следующем алгоритме (см. [4, с. 222]):
1. Интегрируемая дробь обозначается u/v .
2. Если числитель и производная знаменателя являются числами, то формируется ответ: uln(v) . Ответ передается в процедуру fracPartInteg.
3. Если u/v — дробь, числитель и знаменатель которой являются полиномами от x , то вычисляется результант Res = resu/ianix(u — yv/, v) — полином новой переменной y.
Если u/v — дробь, числитель и знаменатель которой являются полиномами от ln(£) , то вычисляется результант Res = resu/taniin(g)(u — yv/,v) — полином новой переменной y .
Если u/v — дробь, числитель и знаменатель которой являются полиномами от exp(£), то вычисляется результант Res = resu/ianiexp(£)(u — y(v/ — deg(v)v^), v) — полином новой переменной y .
4. Процедура solvePolynomEq, реализованная в пакете полиномиальных вычислений системы MathPartner, используется для нахождения всех корней результанта Res в поле комплексных чисел. Просматриваются все найденные корни. Упрощается очередной
корень. Если корень содержит переменную интегрирования, то интеграл от исходной функции не выражается в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде.
5. Определяется V(у) = НОД(и—yv',v) , если u/v —дробь, числитель и знаменатель которой являются полиномами от x или от ln(£); V(у) = НОД(и — y(v' — deg(v)v£'), v) , если u/v — дробь, числитель и знаменатель которой являются полиномами от exp(£). Корень результанта подставляется в V(у). Полученное выражение упрощается. Первообразная от дроби p/q выражается в виде формулы: c ln(V(c)) , где c — рассматриваемый корень результанта. Полученный логарифм прибавляется к общему ответу.
3. Интегрирование полиномиальной части
Процедура polPartInteg. Интегрирование полиномиальной части выполняет процедура polPartInteg. Возможны три случая:
1. Если полиномиальная часть — полином от ж , то вызывается процедура integPol. Ее действия основаны на формуле / ^ = ^ агжг+1/(г + 1).
2. Если полиномиальная часть — полином от 1п(£) , то вызывается процедура integPolLn.
3. Если полиномиальная часть — полином от ехр(£) , то вызывается процедура integPolExp.
Процедура integPolLn. Действия процедуры integPolLn основываются на следующих рассуждениях. Пусть Р — полиномиальная часть подынтегрального выражения. Согласно принципу Лиувилля (см. [4, с. 226]) и лемме о разложении (см. [4, с. 227]), / Р = г0^=0 сг ^(гг) , где сг € С , г0, ,... ,г^ — функции составленные из логарифмов и экспонент, содержащихся в выражении Р, и функция г0 является полиномом от 1п(£). Обозначим го = ^ 1п(С)г, Р = Рг 1п(£)г, где ¿¿,Рг,£ — функции,
составленные из логарифмов и экспонент, содержащихся в выражении Р . Подставляя в это уравнение выражение для Р и г0 , получим выражение
m+1
i=0
i=0
i=0
in(^)i = £ ti in(e)i + + i)ti+i in(e )i | + £
Ci —
i=1
Для нахождения неизвестных , г = т +1,..., 0 приравниваем коэффициенты при одинаковых степенях 1п(£) и получаем систему дифференциальных уравнений
0
pm
Pm-1
Pl Po
lm+1
tm + (m + 1)tm+1 f
t + mt
1 i Ii и-m с
t1 + 2t2 f
t0 +11 j + ^ ciV .
i=1
v
v
В процедуре integPolLn выполняются следующие действия. Создается список В длиной т + 2 , в который записываются решения уравнений системы (1). Решением первого уравнения является константа, которую невозможно определить рассматривая только первое уравнение. Эта константа определяется при решении второго уравнения. Поэтому изначально в элемент списка В [т + 2] записывается значение 0 . Дальнейшие действия повторяются для каждого уравнения системы (1). При помощи процедуры mainProcOfInteg вычисляются А1 = /рт , А2 = /((т + 2)В[т + 2]//п(£)'). Если процедура mainProcOfInteg не вернула значение А1 или А2 , то и интеграл от подынтегральной функции не выражается в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. Если процедура mainProcOfInteg вернула значения А1 и А2 , то в элемент списка В [т + 1] записывается значение разности А1 — А2 . Если в выражении элемента списка В[т + 1] есть функция /п(£) , то выделяется выражение к, на которое умножен ). Если к содержит переменную интегрирования, то интеграл от подынтегральной функции не выражается в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. Если к не содержит переменную интегрирования, происходит сложение — к/(т + 2) и выражения элемента списка В[т + 2] . Результат записывается в В [т + 2] вместо старого значения. Происходит вычитание к • 1п(£) из выражения элемента списка В[т +1], и результат записывается в элемент списка В[т + 1] вместо старого значения. Таким образом, найдено решение очередного уравнения.
Собирается ответ: ^ ™о2 В И • 1п(£ )г.
Процедура integPolExp. Действия процедуры integPolExp основываются на следующих рассуждениях. Пусть Р — полиномиальная часть подынтегрального выражения. Согласно принципу Лиувилля (см. [4, с. 226]) и лемме о разложении (см. [4, с. 227]), / Р = ^о + ^=1 сз ) , где с3- € С , г>0, VI,... , ^ — функции, составленные из логарифмов и экспонент, содержащихся в выражении Р, и функция v0 является полиномом от ехр(£) . Обозначим Vо = Е!=-к ¿г ехр(£)г, Р = Е™-кРг ехр(£)г, где ¿г,Рг,£ — функции, составленные из логарифмов и экспонент, содержащихся в выражении Р . Подставляя в это уравнение выражение для Р и v0 , получим выражение
^ Рг ехр(£)г = ^ ¿г ехр(£)г + ^ Иг ехр(£)У + ^ с^ .
а ,
г=-к г=-к г=-к з=1
V
3
Приравниваем коэффициенты при одинаковых степенях ехр(£) и получаем систему дифференциальных уравнений
Рг = ¿г + ¿¿г£',г = 0
Ро = ¿0 + Е сз^^ . (2)
3=1 '
В процедуре integPolExp выполняются следующие действия. Создается список В длиной т + к + 1 , в который будут записываться решения системы дифференциальных
уравнений (2). В В [г], г = 0, записываются значения . Рассматривается уравнение рг = ¿г+г-£'•¿г, г = 0 . Вызывается процедура notDenom, которая преобразует полученное уравнение к полиномиальному виду. Вызывается процедура solveRischDiffEq, которая решает дифференциальное уравнение и записывает решение в В [г].
Для г = 0 вычисляется /р0 при помощи процедуры mainProcOfInteg, и результат записывается в В[0] .
Собирается ответ: ^к В [г] ехр(£)г.
Процедура notDenom. Действия процедуры notDenom основываются на следующих рассуждениях (см. [6]). Рассматривается дифференциальное уравнение рг = ¿г + г • • ¿г.
Пусть рг — полином. Тогда — тоже полином. Если — полином, то уравнение остается без изменений, а если £' = г/ад, то чтобы «избавиться от знаменателей», уравнение домножается на ад.
Пусть рг = г/д. Тогда имеет вид = а/Ь. Если — полином, то получается уравнение
г а'Ь — аЬ' г£ 'а
- =--+ .
д Ь2 Ь
Следовательно, Ь = /д, г = а'Ь — аЬ' + ги'аЬ = Ьа' + (—Ь' + ги'Ь)а.
Если = г/ад, то из соотношения
г а'Ь — аЬ' + гга д Ь2 Ьад
получается: Ь = \/д/ад, г = а'Ьад — аЬ'ад + ггаЬ = Ьада' + (ггЬ — Ь'ад)а.
Получено уравнение вида:
Р = с1а' + с2а ,
где Р, с1, с2, а — полиномы.
Процедура solveRischDiffEq. Действия процедуры solveRischDiffEq основаны на следующем алгоритме (см. [6]). Рассматривается дифференциальное уравнение относительно а: Р = с1а' + с2а , где Р, с1, с2 — полиномы либо от ж , либо от 1п(-0) , либо от ехр(^) . Возможны следующие три случая:
1. Если Р, с1, с2 — полиномы от ж, то неизвестная а — полином от ж. Степень полинома а обозначается через п . Вычисляется п = &д(Р) — таж{^ед(с1 — 1, ^ед(с2)} . Если п < 0 , то исходное подынтегральное выражение не интегрируется в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. Если п = 0 , то а = Р/с2 . Если п > 0 , то приравниваются коэффициенты при одинаковых степенях ж , составляется и решается система линейных уравнений. Решения уравнений являются коэффициентами неизвестного полинома. Если система линейных уравнений не имеет решения, то исходное подынтегральное выражение не интегрируется в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде.
2. Если Р, С1,С2 — полиномы от 1п(ф) , то неизвестная а — полином от 1п(ф) . Степень полинома а обозначается через п . Вычисляется п = &д(Р)—таж(^ед(с1}, ^ед(с2}} Если п < 0 , то исходное подынтегральное выражение не интегрируется в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. Если п > 0 , то уравнение принимает вид:
Р = С1 ( Й а 1п(ф)г + ^ гагФ 1п(ф)г—1 | + ъУ ] аг 1п(ф)г.
,г=0
г=1
Ф
К
г=0
Приравниваются коэффициенты при одинаковых степенях 1п(ф) , и получается система дифференциальных уравнений. Пусть а = ЕГ=0 аг 1п(ф)г, с1 = Ет=0 в» 1п(ф)г, с2 = Е¿=0 7» 1п(ф)г, Р = Е*=0 Р» 1п(ф)г. Возможны следующие случаи:
2.1. Степени полиномов с1 и с2 равны. Получается система дифференциальных уравнений вида:
Р* = вт«П + 7т«п
р*—1 втап—1 + вт—1ап + пвтага^ + 7тага—1 + 7т— 1ап
Для решения каждого уравнения вызывается процедура solveRischDiffEq. Если очередное уравнение не имеет решения, то исходное подынтегральное выражение не интегрируется в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде.
2.2. Степень полинома с1 больше степени полинома с2 . Получается система дифференциальных уравнений вида:
Р* = вт«П Р* — 1 1 + в т— 1
р*—г втап—г + ... + вт—г + пвтага—г+1 ^ + ... +
Для решения каждого уравнения вызывается процедура mainProcOfInteg. Если решение очередного уравнения не выражается в элементарном виде, то исходное подынтегральное выражение не интегрируется в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде.
2.3. Степень полинома с1 меньше степени полинома с2 . Получается система уравнений вида:
Р*
ТА
Р*—1 = 1 + 7«—1 «п
Р*—г
га—г + ... + 7«—г а
Для решения каждого уравнения выражается а» .
3. Если Р, С1,С2 — полиномы от ехр(ф) , то неизвестная а — полином от ехр(ф). Наибольшая степень полинома а обозначается через п2 . Наименьшая отрицательная степень полинома а обозначается через п1. Пусть степени Р меняются от —¿1 до ¿2 , степени с1 меняются от —т1 до т2 , степени с2 меняются от — 51 до з2 . Тогда п2 = ¿2 — тах{т2, з2} , п1 = ¿1 — шах{ш1, 51} . Уравнение принимает вид:
«2 «2 Р = С1 £ (а» + ¿а»«') ехр(ф)г + С2 £ а» ехр(ф)».
г=—«1 »=—«4
Приравниваются коэффициенты при одинаковых степенях ехр(ф), и получается система дифференциальных уравнений. Пусть а = а» ехр(ф)», с1 = ^т=—тхв» ехр(ф)», с2 = ^*= —7» ехр(ф)», Р = ^*= —4 р ехр(ф)». Возможны следующие случаи:
3.1. Наибольшая степень полинома с1 больше либо равна наибольшей степени полинома с2 . Получается система дифференциальных уравнений вида:
= вт2 (а«2 + П2а«ф0 р42—г — вт2—г (а«2 + П2а«2 Ф') + ... + вт2 (а«2-г + (п — г) а« — Г ф ) + Т«2 а«2
Для решения каждого уравнения вызывается процедура solveRischDiffEq. Если очередное уравнение не имеет решения, то исходное подынтегральное выражение не интегрируется в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде.
3.2. Наибольшая степень полинома с1 меньше наибольшей степени полинома с2 Получается система уравнений вида:
Т«2 а«2
вт2 (а«2 + П2а«2 Ф ) + Т«2—г агав + ... + Т«2 а«2 —г
Для решения каждого уравнения выражается а».
4. Заключение
Приведенная реализация алгоритмов символьного интегрирования не является полной. Необходимо провести в дальнейшем доработку некоторых процедур. В процедуре makeRegularMonomialsSequence требуется реализовать поддержку дробных степеней при определении трансцендентности логарифма (см. [3, с. 225]). В текущей версии алгоритма допускаются только целые степени.
Для устранения случаев, когда рассматриваемый элемент из списка регулярных мономов неоднозначно выражается через предыдущие, необходимо список перестроить.
Для этого надо разработать алгоритм такого перестроения списка логарифмов и экспонент (см. [3, с. 235]). Для каждого нового варианта списка надо организовать повторный запуск процедуры makeRegularMonomialsSequence. В текущей версии алгоритма такие случаи считаются неинтегрируемыми.
В процедуре solveRischDiffEq надо усовершенствовать алгоритм оценки степени полинома (см. [3, с. 240]).
В процедурах partialFraction и notDenom реализованы неполные и упрощенные алгоритмы, поэтому необходимо произвести в процедуре partialFraction замену алгоритма разбиения правильной дроби в сумму простых дробей алгоритмом для общего случая (см. [4, с. 273]), а в процедуре notDenom произвести замену алгоритма избавления от знаменателей алгоритмом для общего случая (см. [3, с. 237]).
Приложение. Как вычислять интегралы с помощью web-сервиса
Ма^Ра^пег
Чтобы найти первообразную, нужно выполнить следующие шаги:
1. Зайти на web-сайт Ма^РаЛпег http://mathpar.cloud.unihub.ru/
2. Нажать на кнопку «Тетрадь».
3. В появившемся поле ввода текста выбрать числовое поле и название переменной с помощью оператора: SPACE=Q[x].
4. После задания кольца нужно ввести оператор интегрирования \intC), в аргументе которого указать интегрируемую функцию. Затем нужно указать переменную интегрирования. Например, \intC \sinCx) ) ёх.
5. Нажать кнопку «выполнить».
Например, чтобы найти первообразную от функции б1п(х) , нужно ввести следующий текст:
SPACE=Q[x]; \intC \sinCx) ) ёх;
При нажатии на кнопку «выполнить» получим следующий ответ: (-1) \cosCx).
В случае, если первообразная от функции не выражается в элементарном виде, то программа выдает первоначально заданный текст команды интегрирования. Например:
SPACE=Q[x];
\expCx~2) ) dx;
При нажатии на кнопку «выполнить» получим следующий ответ: \int(\exp(x~2) )dx.
Список литературы
[1] Г. И. Малашонок, Руководство по языку "Mathpar", Издательство Тамбовского университета, Тамбов, 2013.
[2] В. А. Корабельников, "Алгоритмы символьного интегрирования в системе МаШРаЛпег", Вестник Тамбовского университета. Серия: естественные и технические науки, 24:125 (2019), 75-89 Б01: 10.20310/1810-0198-2019-24-125-75-89.
[3] Е. В. Панкратьев, Элементы компьютерной алгебры, МГУ, М., 2007.
[4] Дж. Дэвенпорт, И. Сирэ, Э. Турнье, Компьютерная алгебра. Системы и алгоритмы алгебраических вычислений, МГУ, М., 1991.
[5] Г. М. Фихтенгольц, Курс дифференциального и интегрального исчисления. Т. 2, ФИЗМАТ-ЛИТ, М., 2001.
[6] С. М. Тарарова, "К проблеме построения алгоритма символьного интегрирования", Вестник Тамбовского университета. Серия: естественные и технические науки, 17:2 (2012), 607-617.
References
[1] G.I. Malaschonok, Language guide "Mathpar", Publishing House of Tambov University, Tambov, 2013 (In Russian).
[2] V. A. Korabelnikov, "Symbolic integration algorithms in CAS MathPartner", Tambov University Reports. Series: Natural and Technical Sciences, 24:125 (2019), 75-89 DOI: 10.20310/1810-0198-2019-24-125-75-89 (In Russian).
[3] E. V. Pankrat'yev, Elements of computer algebra, MSU, Moscow, 2007 (In Russian).
[4] J. Davenport, Y. Siret, E. Tournier, Computer algebra. Systems and algorithms of algebraic computation, Mir, Moscow, 1991 (In Russian).
[5] G.M. Fichtenholz, Differential and Integral Calculus. V.2, PHYSMATLIT, Moscow, 2001 (In Russian).
[6] S. M. Tararova, "To the problem of constructing an algorithm for symbolic integration", Tambov University Reports. Series: Natural and Technical Sciences, 17:2 (2012), 607-617 (In Russian).
Информация об авторе
Корабельников Вячеслав Алексеевич,
аспирант, кафедра функционального анализа. Тамбовский государственный университет им. Г.Р. Державина, г. Тамбов, Российская Федерация. E-mail: korabelnikov.va@gmail.com ORCID: https://orcid.org/0000-0002-3920-8373
Поступила в редакцию 20.02.2019 г. Поступила после рецензирования 19.04.2019 г. Принята к публикации 20.05.2019 г.
Information about the author
Vyacheslav A. Korabelnikov, PostGraduate Student, Functional Analysis Department. Derzhavin Tambov State University, Tambov, the Russian Federation. E-mail: korabelnikov.va@gmail.com ORCID: https://orcid.org/0000-0002-3920-8373
Received 20 February 2019 Reviewed 19 April 2019 Accepted for press 20 May 2019