Procedural interpretation of symbolic integration algorithms in MathPartner system
- Authors: Korabelnikov V.A.1
-
Affiliations:
- Derzhavin Tambov State University
- Issue: Vol 24, No 126 (2019)
- Pages: 166-178
- Section: Articles
- URL: https://bakhtiniada.ru/2686-9667/article/view/297310
- DOI: https://doi.org/10.20310/1810-0198-2019-24-126-166-178
- ID: 297310
Cite item
Full Text
Abstract
Full Text
Введение Система компьютерной алгебры это программный комплекс, предназначенный для выполнения символьных и численных вычислений. Одной из современных систем компьютерной алгебры является MathPartner. В отличие от большинства известных систем, MathPartner представляет из себя web-сервис, который свободно доступен в Интернете. Язык этой системы, называемый Mathpar, является по сути некоторым диалектом языка LaTeX. MathPartner позволяет сохранять и текст задания, и про- межуточные вычисления, и результат вычислений. Пользователь имеет возможность сохранять исходный текст, текст в формате LaTeX и в виде изображения (pdf, jpg) [1]. Система MathPartner содержит большую библиотеку процедур для символьно-чис- ленных вычислений. Одним из пакетов этой библиотеки является пакет процедур для символьного интегрирования. Алгоритмы, лежащие в основе этой библиотеки процедур, 168 В. А. Корабельников описаны в [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))) . Эта процедура также ПРОЦЕДУРНАЯ ИНТЕРПРЕТАЦИЯ АЛГОРИТМОВ В СИСТЕМЕ MATHPARTNER 169 приводит логарифмы и показательные функции к основанию e : ax = exp(a ln(x)) , loga(x) = ln(x)= ln(a): Процедура mainProcOfInteg вызывает процедуру makeListOfLNandEXP, которая со- ставляет список логарифмов и экспонент, содержащихся в подынтегральном выраже- нии. Список составляется таким образом, что чем глубже вложены в аргументах ло- гарифм или экспонента, тем ближе к началу списка они находятся. Например, для подынтегрального выражения exp(x2 ln(x3+x ln(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. Действия процедуры makeRegular- MonomialsSequence основаны на следующем алгоритме. Просматриваются все лога- рифмы в списке. Если аргумент логарифма представляет собой дробь = p=q , то в подынтегральном выражении ln() заменяется на ln(p) ln(q) . ln() меняется в списке на ln(p) . ln(q) вставляется в список после ln(p) . Просматриваются последовательно все элементы списка логарифмов и экспонент начиная с первого элемента. Начальный элемент списка является регулярным мономом, т. е. расширяет поле C(x) . Этот элемент остается в списке. Далее для определения регулярных мономов используется следующий алгоритм. 1. Пусть рассматриваемым элементом списка является логарифм. Тогда происходит проверка, выражается ли рассматриваемый элемент списка через предыдущие. Пусть 1; 2; : : : ; k 1 уже добавленные в C(x) регулярные мономы, ln(fk) рассматри- ваемый элемент списка, E множество индексов i , 0 i k 1 , таких что i экспонента, L множество индексов j , 0 j k 1 , таких что j логарифм. Со- гласно структурной теореме [3, с. 225], если рассматриваемый логарифм принадлежит уже сформированному полю, то его аргумент должен выражаться в виде произведения fk = c Y i2E ni i Y j2L fmj j ; 170 В. А. Корабельников где ni;mj 2 Q, fj аргумент j , c 2 C . Поэтому производится поочередное де- ление аргумента рассматриваемого логарифма на предыдущие элементы списка. Если элементом списка является экспонента, то производится деление на саму экспоненту. Если элементом списка является логарифм, то производится деление на аргумент это- го логарифма. Если деление проходит без остатка, то рассматриваемый элемент списка удаляется. Если деление происходит с остатком, то как в подынтегральном выраже- нии, так и в последующих элементах списка производится замена рассматриваемого логарифма на сумму логарифма от остатка и элемента деления. Производится замена рассматриваемого элемента списка на логарифм, аргументом которого является оста- ток от деления. 2. Пусть рассматриваемым элементом списка является экспонента. Тогда происходит проверка, выражается ли рассматриваемый элемент списка через предыдущие. Пусть 1; 2; : : : ; k 1 уже добавленные в C(x) регулярные мономы, exp(fk) рассматри- ваемый элемент списка, E множество индексов i , 0 i k 1 , таких что i экспонента, L множество индексов j , 0 j k 1 , таких что j логарифм. Согласно структурной теореме [3, с. 225], если рассматриваемая экспонента принадле- жит уже сформированному полю, то ее аргумент должен выражаться в виде линейной комбинации fk = c + X i2E nifi + X j2L mjj ; где ni;mj 2 Q, fi аргумент i , c 2 C . Составляется система линейных уравне- ний. Если она имеет решение, то рассматриваемый элемент удаляется из списка. Это решение позволяет выразить рассматриваемый элемент списка через предыдущие. В подынтегральном выражении и в последующих элементах списка меняется рассматри- ваемый элемент на его выражение через предыдущие элементы списка. Если система не имеет решения, то рассматриваемый элемент оставляется в списке без изменений. Таким образом, список логарифмов и экспонент преобразуется в набор регулярных мономов. Процедура makeRegularMonomialsSequence передает полученный набор регу- лярных мономов в процедуру mainProcOfInteg. 2. Интегрирование дробной части Процедура fracPartInteg. Для подготовки дроби к интегрированию процедура fracPartInteg производит вызов процедур FactorPol_SquareFree и partialFraction. Процедура FactorPol_SquareFree, реализованная в пакете полиномиальных вычис- лений системы MathPartner, производит разложение знаменателя на свободные от квад- ратов множители. Процедура partialFraction производит разложение дроби на сумму простейших дробей с помощью метода неопределенных коэффициентов. Процедура fracPartInteg производит интегрирование отдельно каждого слагае- мого из суммы. Согласно принципу Лиувилля (см. [4, с. 226]) и леммам о разложе- нии (см. [4, с. 227,232]), интеграл от каждого слагаемого выражается в виде суммы ПРОЦЕДУРНАЯ ИНТЕРПРЕТАЦИЯ АЛГОРИТМОВ В СИСТЕМЕ MATHPARTNER 171 дробной функции и логарифмов с постоянными коэффициентами. Если показатель степени, в которую возведен знаменатель рассматриваемого слага- емого, больше единицы, то процедура fracPartInteg вызывает процедуры Hermite и LogarithmicPart. Процедура Hermite разделяет интеграл на сумму рациональной и логарифмической части и вычисляет рациональную часть интеграла. Процедура LogarithmicPart вычисляет логарифмическую часть интеграла. Если показатель степени, в которую возведен знаменатель рассматриваемого сла- гаемого, равен единице, то полином, стоящий в знаменателе, свободен от квадратов, и рациональная часть интеграла равна нулю. Процедура LogarithmicPart вычисляет логарифмическую часть интеграла. Процедура partialFraction. Действия процедуры partialFraction основывают- ся на следующих рассуждениях (см. [5, с. 38]). Пусть p=q полученная дробная часть, q = Q qi i , где qi - свободный от квадратов полином. Тогда p=q = p1;1=q1 + p2;1=q2 + p2;2=q2 2 + : : : + pk;1=qk + pk;2=q2 k + : : : + pk;k=qk k ; где pi;j = Ai;j при qi = x a , pi;j = Ai;jx + Bi;j при qi = x2 + ax + b , где Ai;j ;Bi;j числа, полученные с помощью метода неопределенных коэффициентов. Процедура Hermite. Действия процедуры Hermite основаны на алгоритме Эрми- та (подробнее см. [4, с. 220, 230, 235]). Z pi;j qj i = pi;jb (j 1)qj 1 i + Z (j 1)pi;ja + (pi;jb)0 (j 1)qj 1 i ; где qia+q0i b = 1 и j > 1 . В результате применения этой формулы степень j , в которую возведен знаменатель, уменьшилась. Таким образом, эта формула повторно применя- ется пока j 6= 1 . Процедура LogarithmicPart. Действия процедуры LogarithmicPart основаны на следующем алгоритме (см. [4, с. 222]): 1. Интегрируемая дробь обозначается u=v . 2. Если числитель и производная знаменателя являются числами, то формируется ответ: u ln(v) . Ответ передается в процедуру fracPartInteg. 3. Если u=v дробь, числитель и знаменатель которой являются полиномами от x , то вычисляется результант Res = resultantx(u yv0; v) полином новой перемен- ной y . Если u=v дробь, числитель и знаменатель которой являются полиномами от ln() , то вычисляется результант Res = resultantln()(u yv0; v) полином новой пе- ременной y . Если u=v дробь, числитель и знаменатель которой являются полиномами от exp() , то вычисляется результант Res = resultantexp()(u y(v0 deg(v)v0); v) по- лином новой переменной y . 4. Процедура solvePolynomEq, реализованная в пакете полиномиальных вычислений системы MathPartner, используется для нахождения всех корней результанта Res в по- ле комплексных чисел. Просматриваются все найденные корни. Упрощается очередной 172 В. А. Корабельников корень. Если корень содержит переменную интегрирования, то интеграл от исходной функции не выражается в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. 5. Определяется V (y) = НОД(u yv0; v) , если u=v дробь, числитель и знаменатель которой являются полиномами от x или от ln() ; V (y) = НОД(u y(v0 deg(v)v0); v) , если u=v дробь, числитель и знаменатель которой являются полиномами от exp() . Корень результанта подставляется в V (y) . Полученное выражение упрощается. Пер- вообразная от дроби p=q выражается в виде формулы: c ln(V (c)) , где c рассматри- ваемый корень результанта. Полученный логарифм прибавляется к общему ответу. 3. Интегрирование полиномиальной части Процедура polPartInteg. Интегрирование полиномиальной части выполняет про- цедура polPartInteg. Возможны три случая: 1. Если полиномиальная часть полином от x , то вызывается процедура integPol. Ее действия основаны на формуле R P aixidx = P aixi+1=(i + 1) . 2. Если полиномиальная часть полином от ln() , то вызывается процедура integPolLn. 3. Если полиномиальная часть полином от exp() , то вызывается процедура integPolExp. Процедура integPolLn. Действия процедуры integPolLn основываются на следу- ющих рассуждениях. Пусть P полиномиальная часть подынтегрального выражения. Согласно принципу R Лиувилля (см. [4, с. 226]) и лемме о разложении (см. [4, с. 227]), P = v0+ Pd i=0 ci log(vi) , где ci 2 C , v0; v1; : : : ; vd функции составленные из логариф- мов и экспонент, содержащихся в выражении P , и функция v0 является полиномом от ln() . Обозначим v0 = Pm+1 j=0 ti ln()i , P = Pm i=0 pi ln()i , где ti; pi; функции, составленные из логарифмов и экспонент, содержащихся в выражении P . Подставляя в это уравнение выражение для P и v0 , получим выражение Xm i=0 pi ln()i = mX+1 i=0 t0 i ln()i + Xm i=0 (i + 1)ti+1 ln()i 0 + Xd i=1 ci v0i vi : Для нахождения неизвестных ti; i = m+ 1; : : : ; 0 приравниваем коэффициенты при одинаковых степенях ln() и получаем систему дифференциальных уравнений 8>>>>>>>>>< >>>>>>>>>: 0 = t0 m+1 pm = t0 m + (m + 1)tm+1 0 pm 1 = t0 m 1 + mtm 0 : : : p1 = t0 1 + 2t2 0 p0 = t0 0 + t1 0 + Pd i=1 ci v0i vi : (1) ПРОЦЕДУРНАЯ ИНТЕРПРЕТАЦИЯ АЛГОРИТМОВ В СИСТЕМЕ MATHPARTNER 173 В процедуре integPolLn выполняются следующие действия. Создается список B длиной m + 2 , в который записываются решения уравнений системы (1). Решением первого уравнения является константа, которую невозможно определить рассматривая только первое уравнение. Эта константа определяется при решении второго уравнения. Поэтому изначально в элемент списка B[m+2] записывается значение 0 . Дальнейшие действия повторяются для каждого уравнения системы (1). При помощи процедуры mainProcOfInteg вычисляются A1 = R pm , A2 = R ((m + 2)B[m + 2]=ln()0) . Если про- цедура mainProcOfInteg не вернула значение A1 или A2 , то и интеграл от подынте- гральной функции не выражается в элементарном виде. Вычисление интеграла оста- навливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. Если процедура mainProcOfInteg вернула значения A1 и A2 , то в элемент списка B[m + 1] записывается значение разности A1 A2 . Если в выраже- нии элемента списка B[m + 1] есть функция ln() , то выделяется выражение h , на которое умножен ln() . Если h содержит переменную интегрирования, то интеграл от подынтегральной функции не выражается в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. Если h не содержит переменную интегрирования, происходит сложение h=(m+2) и выражения элемента списка B[m+2] . Результат записывается в B[m + 2] вместо старого значения. Происходит вычитание h ln() из выражения элемента списка B[m+1]; и результат записывается в элемент списка B[m+1] вместо старого значения. Таким образом, найдено решение очередного уравнения. Собирается ответ: Pm+2 i=0 B[i] ln()i . Процедура integPolExp. Действия процедуры integPolExp основываются на сле- дующих рассуждениях. Пусть P полиномиальная часть подынтегрального выраже- ния. Согласно принципу Лиувилля (см. R [4, с. 226]) и лемме о разложении (см. [4, с. 227]), P = v0 + Pd j=1 cj log(vj) , где cj 2 C , v0; v1; : : : ; vd функции, составленные из ло- гарифмов и экспонент, содержащихся в выражении P , и функция v0 является поли- номом от exp() . Обозначим v0 = Pm i= k ti exp()i , P = Pm i= k pi exp()i , где ti; pi; функции, составленные из логарифмов и экспонент, содержащихся в выражении P . Подставляя в это уравнение выражение для P и v0 , получим выражение Xl i= k pi exp()i = Xl i= k t0 i exp()i + Xl i= k iti exp()iu0 + Xd j=1 cj v0j vj : Приравниваем коэффициенты при одинаковых степенях exp() и получаем систему дифференциальных уравнений 8< : pi = t0 i + iti0; i 6= 0 p0 = t0 0 + Pd j=1 cj v0j vj : (2) В процедуре integPolExp выполняются следующие действия. Создается список B длиной m+k+1 , в который будут записываться решения системы дифференциальных 174 В. А. Корабельников уравнений (2). В B[i]; i 6= 0 , записываются значения ti . Рассматривается уравнение pi = t0 i+i0ti , i 6= 0 . Вызывается процедура notDenom, которая преобразует полученное уравнение к полиномиальному виду. Вызывается процедура solveRischDiffEq, которая решает дифференциальное уравнение и записывает решение в B[i] . Для i = 0 вычисляется R p0 при помощи процедуры mainProcOfInteg, и результат записывается в B[0] . Собирается ответ: Pm i= k B[i] exp()i . Процедура notDenom. Действия процедуры notDenom основываются на следующих рассуждениях (см. [6]). Рассматривается дифференциальное уравнение pi = t0 i+i 0 ti . Пусть pi полином. Тогда ti тоже полином. Если 0 полином, то уравнение остается без изменений, а если 0 = v=w; то чтобы ѕизбавиться от знаменателейї, уравнение домножается на w: Пусть pi = r=g: Тогда ti имеет вид ti = a=b: Если 0 полином, то получается уравнение r g = a0b ab0 b2 + i0a b : Следовательно, b = p g; r = a0b ab0 + iu0ab = ba0 + ( b0 + iu0b)a . Если 0 = v=w; то из соотношения r g = a0b ab0 b2 + iva bw получается: b = p g=w; r = a0bw ab0w + ivab = bwa0 + (ivb b0w)a . Получено уравнение вида: P = c1a0 + c2a ; где P; c1; c2; a полиномы. Процедура solveRischDiffEq. Действия процедуры solveRischDiffEq основаны на следующем алгоритме (см. [6]). Рассматривается дифференциальное уравнение от- носительно a : P = c1a0 +c2a , где P; c1; c2 полиномы либо от x , либо от ln( ) , либо от exp( ) . Возможны следующие три случая: 1. Если P; c1; c2 полиномы от x , то неизвестная a полином от x . Степень полинома a обозначается через n . Вычисляется n = deg(P) maxfdeg(c1 1; deg(c2)g . Если n < 0 , то исходное подынтегральное выражение не интегрируется в элементар- ном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. Если n = 0 , то a = P=c2 . Ес- ли n > 0 , то приравниваются коэффициенты при одинаковых степенях x , составляется и решается система линейных уравнений. Решения уравнений являются коэффициен- тами неизвестного полинома. Если система линейных уравнений не имеет решения, то исходное подынтегральное выражение не интегрируется в элементарном виде. Вычис- ление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. ПРОЦЕДУРНАЯ ИНТЕРПРЕТАЦИЯ АЛГОРИТМОВ В СИСТЕМЕ MATHPARTNER 175 2. Если P; c1; c2 полиномы от ln( ) , то неизвестная a полином от ln( ) . Сте- пень полинома a обозначается через n . Вычисляется n = deg(P) maxfdeg(c1); deg(c2)g . Если n < 0 , то исходное подынтегральное выражение не интегрируется в элементар- ном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. Если n 0 , то уравнение принимает вид: P = c1 Xn i=0 a0 i ln( )i + Xn i=1 iai 0 ln( )i 1 ! + c2 Xh i=0 ai ln( )i: Приравниваются коэффициенты при одинаковых степенях ln( ) , и получается си- стема дифференциальных уравнений. Пусть a = Pn i=0 i ln( )i , c1 = Pm i=0 i ln( )i , c2 = Ps i=0 i ln( )i , P = Pt i=0 pi ln( )i . Возможны следующие случаи: 2.1. Степени полиномов c1 и c2 равны. Получается система дифференциальных уравнений вида: 8>< >: pt = m0n + mn pt 1 = m0n 1 + m 10n + nmn 0 + mn 1 + m 1n ::: Для решения каждого уравнения вызывается процедура solveRischDiffEq. Если очередное уравнение не имеет решения, то исходное подынтегральное выражение не интегрируется в элементарном виде. Вычисление интеграла останавливается, и пользо- ватель информируется о том, что функция не интегрируема в элементарном виде. 2.2. Степень полинома c1 больше степени полинома c2 . Получается система диф- ференциальных уравнений вида: 8>>>>>< >>>>>: pt = m0n pt 1 = m0n 1 + m 10n + nmn 0 ::: pt r = m0n r + ::: + m r0n + nmn r+1 0 + ::: + sn ::: Для решения каждого уравнения вызывается процедура mainProcOfInteg. Если ре- шение очередного уравнения не выражается в элементарном виде, то исходное подын- тегральное выражение не интегрируется в элементарном виде. Вычисление интеграла останавливается, и пользователь информируется о том, что функция не интегрируема в элементарном виде. 2.3. Степень полинома c1 меньше степени полинома c2 . Получается система урав- нений вида: 8>>>>>< >>>>>: pt = sn pt 1 = sn 1 + s 1n ::: pt r = m0n + sn r + ::: + s rn ::: 176 В. А. Корабельников Для решения каждого уравнения выражается i . 3. Если P; c1; c2 полиномы от exp( ) , то неизвестная a полином от exp( ) . Наибольшая степень полинома a обозначается через n2 . Наименьшая отрицательная степень полинома a обозначается через n1 . Пусть степени P меняются от t1 до t2 , степени c1 меняются от m1 до m2 , степени c2 меняются от s1 до s2 . Тогда n2 = t2 maxfm2; s2g , n1 = t1 maxfm1; s1g . Уравнение принимает вид: P = c1 Xn2 i= n1 (0 i + iiu0) exp( )i + c2 Xn2 i= n1 i exp( )i: Приравниваются коэффициенты при одинаковых степенях exp( ); и получается сис- тема дифференциальных уравнений. Пусть a= Pn2 i= n1 i exp( )i; c1= Pm2 i= m1 i exp( )i; c2 = Ps2 i= s1 i exp( )i , P = Pt2 i= t1 pi exp( )i . Возможны следующие случаи: 3.1. Наибольшая степень полинома c1 больше либо равна наибольшей степени по- линома c2 . Получается система дифференциальных уравнений вида: 8>>< >>: pt2 = m2(0n2 + n2n2 0) ::: pt2 r = m2 r(0n2 + n2n2 0) + ::: + m2(0n2 r + (n2 r)n2 r 0) + s2n2 ::: Для решения каждого уравнения вызывается процедура solveRischDiffEq. Если очередное уравнение не имеет решения, то исходное подынтегральное выражение не интегрируется в элементарном виде. Вычисление интеграла останавливается, и пользо- ватель информируется о том, что функция не интегрируема в элементарном виде. 3.2. Наибольшая степень полинома c1 меньше наибольшей степени полинома c2 Получается система уравнений вида: 8>>< >>: pt2 = s2n2 ::: pt2 r = m2(0n2 + n2n2 0) + s2 rns + ::: + s2n2 r ::: Для решения каждого уравнения выражается i . 4. Заключение Приведенная реализация алгоритмов символьного интегрирования не является пол- ной. Необходимо провести в дальнейшем доработку некоторых процедур. В процедуре makeRegularMonomialsSequence требуется реализовать поддержку дробных степеней при определении трансцендентности логарифма (см. [3, с. 225]). В текущей версии ал- горитма допускаются только целые степени. Для устранения случаев, когда рассматриваемый элемент из списка регулярных мо- номов неоднозначно выражается через предыдущие, необходимо список перестроить. ПРОЦЕДУРНАЯ ИНТЕРПРЕТАЦИЯ АЛГОРИТМОВ В СИСТЕМЕ MATHPARTNER 177 Для этого надо разработать алгоритм такого перестроения списка логарифмов и экспо- нент (см. [3, с. 235]). Для каждого нового варианта списка надо организовать повторный запуск процедуры makeRegularMonomialsSequence. В текущей версии алгоритма такие случаи считаются неинтегрируемыми. В процедуре solveRischDiffEq надо усовершенствовать алгоритм оценки степени полинома (см. [3, с. 240]). В процедурах partialFraction и notDenom реализованы неполные и упрощенные алгоритмы, поэтому необходимо произвести в процедуре partialFraction замену ал- горитма разбиения правильной дроби в сумму простых дробей алгоритмом для общего случая (см. [4, с. 273]), а в процедуре notDenom произвести замену алгоритма избавления от знаменателей алгоритмом для общего случая (см. [3, с. 237]). Приложение. Как вычислять интегралы с помощью web-сервиса MathPartner Чтобы найти первообразную, нужно выполнить следующие шаги: 1. Зайти на web-сайт MathPartner http://mathpar.cloud.unihub.ru/ 2. Нажать на кнопку ѕТетрадьї. 3. В появившемся поле ввода текста выбрать числовое поле и название переменной с помощью оператора: SPACE=Q[x]. 4. После задания кольца нужно ввести оператор интегрирования int(), в аргумен- те которого указать интегрируемую функцию. Затем нужно указать переменную интегрирования. Например, int( sin(x) ) dx. 5. Нажать кнопку ѕвыполнитьї. Например, чтобы найти первообразную от функции sin(x) , нужно ввести следующий текст: SPACE=Q[x]; int( sin(x) ) dx; При нажатии на кнопку ѕвыполнитьї получим следующий ответ: (-1) cos(x). В случае, если первообразная от функции не выражается в элементарном виде, то программа выдает первоначально заданный текст команды интегрирования. Например: SPACE=Q[x]; int( exp(x^2) ) dx; При нажатии на кнопку ѕвыполнитьї получим следующий ответ: int(exp(x^2) )dx.About the authors
Vyacheslav A. Korabelnikov
Derzhavin Tambov State University
Email: korabelnikov.va@gmail.com
Post-Graduate Student, Functional Analysis Department 33 Internatsionalnaya St., Tambov 392000, Russian Federation
References
- Г. И. Малашонок, Руководство по языку "Mathpar", Издательство Тамбовского университета, Тамбов, 2013.
- В. А. Корабельников, “Алгоритмы символьного интегрирования в системе MathPartner”, Вестник Тамбовского университета. Серия: естественные и технические науки, 24:125 (2019), 75-89 doi: 10.20310/1810-0198-2019-24-125-75-89.
- Е. В. Панкратьев, Элементы компьютерной алгебры, МГУ, М., 2007.
- Дж. Дэвенпорт, И. Сирэ, Э. Турнье, Компьютерная алгебра. Системы и алгоритмы алгебраических вычислений, МГУ, М., 1991.
- Г. М. Фихтенгольц, Курс дифференциального и интегрального исчисления. Т. 2, ФИЗМАТЛИТ, М., 2001.
- С. М. Тарарова, “К проблеме построения алгоритма символьного интегрирования”, Вестник Тамбовского университета. Серия: естественные и технические науки, 17:2 (2012), 607-617.
Supplementary files
