Алгоритмы символьного интегрирования в системе MathPartner
- Авторы: Корабельников В.А.1
-
Учреждения:
- ФГБОУ ВО «Тамбовский государственный университет им. Г.Р. Державина»
- Выпуск: Том 24, № 125 (2019)
- Страницы: 75-89
- Раздел: Статьи
- URL: https://ogarev-online.ru/2686-9667/article/view/297303
- DOI: https://doi.org/10.20310/1810-0198-2019-24-125-75-89
- ID: 297303
Цитировать
Полный текст
Аннотация
Полный текст
Введение Алгоритм вычисления производной для произвольной композиции элементарных функций хорошо известен, а соответствующие программы давно вошли во все библио- теки, которые поддерживают символьные вычисления. Для обратной операции, опе- рации вычисления первообразной функции по ее производной, ситуация значитель- но более сложная. В отличие от дифференцирования, в интегрировании есть толь- ко одно общее правило R (f + g) = R f + R g . Но и оно применимо далеко не всегда (см. [1, с. 218]). Алгоритм интегрирования дробно-рациональных функций был известен еще во вре- мена И. Ньютона, Г.В. Лейбница и Д. Бернулли. Так как интеграл от дробно-рациональ- ной функции всегда существует, то этот алгоритм позволяет проинтегрировать любую дробно-рациональную функцию. Главный недостаток этого алгоритма это необходи- мость разложения знаменателя подынтегральной функции на линейные множители. В случае, если знаменатель подынтегрального выражения не раскладывается на линей- ные множители над кольцом Q; то потребуется добавлять к этому кольцу элементы из R или C: В 19 веке Ш.Эрмит улучшил этот алгоритм (см. [2]). Систематическое изучение случаев, когда интеграл может быть выражен в конеч- ном виде, началось в начале 19 века. В 1820 году П.-С.Лаплас заметил, что интеграл функции не содержит радикалов, кроме тех, что находятся в подынтегральном выраже- нии. Около десятилетия спустя Ж.Лиувилль сформулировал и доказал более строгую и более точную теорему, которая означает, что если интеграл элементарной функции является элементарным, то он может быть выражен с использованием только функций, которые появляются в подынтегральном выражении, и линейной комбинацией логариф- мов таких функций. Эта теорема теперь известна как теорема Лиувилля, или принцип Лиувилля. В 1969 году Р.Риш [3] использовал теорему Лиувилля чтобы описать алгоритм, который находит элементарное выражение для интеграла от элементарной функции, если оно существует. Если же не удалось вычислить первообразную, то это должно означать, что первообразная не является композицией элементарных функций (см. [4]). Стоит отметить, что алгоритм Риша позволяет производить интегрирование лишь чи- сто трансцендентных функций. Для алгебраических функций Р.Риш доказал существо- вание алгоритма, но алгоритм им не был получен (см. [5]). АЛГОРИТМЫ СИМВОЛЬНОГО ИНТЕГРИРОВАНИЯ В СИСТЕМЕ MATHPARTNER 77 В 1971 году Дж. Мозесом на основе алгоритма Риша была написана программа под названием SIN, которая интегрировала чисто трансцендентные функции. В 1981 г. Дж. Дэвенпорт, также основываясь на алгоитме Риша, разработал алгоритм интегри- рования чисто алгебраических функций. Для интегрирования произвольных элемен- тарных функций программы Мозеса и Дэвенпорта были непригодны (см. [5]). Алгоритм Дэвенпорта обладал большой вычислительной сложностью. Б. Трагер в 1984 г. внјс серьјзные улучшения в алгоритм Дэвенпорта. Обновлјнный алгоритм был реализован в системах компьютерной алгебры Axiom и Maple (см. [5]). М. Бронштейн в 1990 г, обобщил алгоритм Трагера на произвольные элементарные функции. В 1998 г. М. Бронштейн написал монографию [2] по символьному интегрированию, в которой достаточно популярно изложил лучшие достижения в этой области, начиная с теоремы Лиувилля и заканчивая собственными результатами. Полная программная реализация алгоритма Риша-Трагера-Бронштейна на данное время не завершена (см. [5]). Целью данной работы является описание алгоритмов символьного интегрирования, которые сегодня применяются в системе компьютерной алгебры MathPartner [6]. Это еще один шаг на пути к созданию доказательного алгоритма вычисления первообразной без эвристик. Под ѕдоказательнымї понимается такой алгоритм, который либо вычис- ляет интеграл как композицию элементарных функций, либо сообщает, что подынте- гральное выражение не интегрируемо в элементарных функциях. Данная работа описы- вает текущее состояние создаваемой библиотеки процедур символьного интегрирования на пути решения это сложной фундаментальной задачи. 1. Основные понятия Сначала введем определения, необходимые для описания алгоритма Риша. Будем придерживаться терминологии, принятой в [7, с. 213-229]. О п р е д е л е н и е 1.1. Поле K называется дифференциальным полем, если на нем определен оператор дифференцирования d; удовлетворяющий двум условиям: d(ab) = d(a)b + ad(b); d(a + b) = d(a) + d(b): Элемент d(a) называется производной элемента a 2 K; производную также обозначают a0: О п р е д е л е н и е 1.2. Пусть K дифференциальное поле. Тогда множество C = fa 2 K : d(a) = 0g является подполем K: Элементы этого подполя называют константами. О п р е д е л е н и е 1.3. Пусть K дифференциальное поле с оператором диффе- ренцирования d: Расширение E поля K называется дифференциальным расширени- ем K; если на E определен оператор дифференцирования d1; такой, что d1(a) = d(a); 8a 2 K: Оператор d1 называется продолжением оператора d и часто обозначается тем же символом d: Отметим, что если E алгебраическое расширение поля K; то дифференцирование поля K однозначно продолжается до дифференцирования поля E (см. [7, с. 217]). 78 В. А. Корабельников О п р е д е л е н и е 1.4. Пусть E дифференциальное расширение дифференци- ального поля K: Если 2 E удовлетворяет соотношению f0 = f0 для некоторого ненулевого элемента f 2 K; то называют логарифмом элемента f над K , и обозна- чают = log(f): О п р е д е л е н и е 1.5. Пусть E дифференциальное расширение дифференци- ального поля K: Если 2 E удовлетворяет соотношению 0 = f0 для некоторого ненулевого элемента f 2 K; то называют экспонентой элемента f над K , и обозна- чают = exp(f): О п р е д е л е н и е 1.6. Пусть K(x) дифференциальное поле. Будем обозначать K(x; ) дифференциальное расширение поля K(x); которое получается добавлением в поле K(x) элемента : О п р е д е л е н и е 1.7. Элемент является регулярным мономом над дифферен- циальным полем K; если трансцендентен над K; и является либо логарифмом, либо экспонентой. Набор 1; 2; : : : ; n называется набором регулярных мономов, если каж- дый ее элемент i является регулярным мономом над K(x; 1; 2; : : : ; i 1); i = 1; : : : ; n: О п р е д е л е н и е 1.8. (см. [1, с. 225]) Пусть K функциональное поле. Расши- рение K(1; 2; : : : ; n) поля K называется полем элементарных функций над K; если каждая функция i либо является регулярным мономом над K; либо алгебраична над K: Функция называется элементарной над K; если она принадлежит некоторому полю элементарных функций над K . Сформулируем принцип Лиувилля (см. [1, с. 226]). Теорема 1.1. Пусть K дифференциальное поле, f(x) 2 K; g(x) элементарная над K функция, такая, что g0(x) = f(x): Тогда g(x) можно представить в виде g(x) = v0(x) + X i ci log(vi(x)); где v0(x) 2 K; vi(x) принадлежат расширению K0 поля K; получающемуся присо- единением к K конечного числа констант, алгебраических над K; ci константы из поля K0 . Нам требуется конструировать наименьшее дифференциальное поле, содержащее подынтегральную функцию. Для решения этой задачи используется следующее утвер- ждение, приведенное в [7, с. 225]. Теорема 1.2. Пусть K поле констант, 1; : : : ; k 1 ( k 0 ) набор регулярных мономов, E множество таких индексов 1 i k 1; что i является экспонен- той i = exp(fi); а L множество таких индексов 1 i k 1; что i является логарифмом i = log(fi): АЛГОРИТМЫ СИМВОЛЬНОГО ИНТЕГРИРОВАНИЯ В СИСТЕМЕ MATHPARTNER 79 1. Пусть k = exp(fk) экспонента над дифференциальным полем Fk 1 = K(x; 1; : : : ; k 1); fk 2 Fk 1: Если элемент k алгебраичен над Fk 1; то fk представляется в виде линейной комбинации с рациональными коэффициентами fk = c + X i2E nifi + X j2L mjj ; ni;mj 2 Q; где c некоторая константа. 2. Пусть k = log(fk) логарифм над дифференциальным полем Fk 1 = K(x; 1; : : : ; k 1); fk 2 Fk 1: Если элемент k алгебраичен над Fk 1; то fk представляется в виде произведения рациональных степеней fk = c Y i2E ni i Y j2L fmj j ; ni;mj 2 Q; где c некоторая константа. 2. Алгоритм Риша Пусть x независимая переменная над полем констант K; 1; 2; : : : ; n набор ре- гулярных мономов, K(x; 1; 2; : : : ; n) дифференциальное поле и f2K(x; 1; 2; : : : ; n): Ниже описывается алгоритм, позволяющий вычислить неопределенный интеграл от f тогда и только тогда, когда этот интеграл есть элементарная функция. Таким об- разом, алгоритм еще и позволяет определить ситуацию, когда интеграл не выражается через элементарные функции. Пусть f подынтегральная функция. Представим эту функцию в виде суммы f = p + q=r; где p; q; r имеют следующий вид 1. Если f 2 K(x); то p; q; r 2 K[x]; deg(r) > deg(q): 2. Если f 2K(x; 1; 2; : : : ; n); n=log(u) и u2K(x; 1; : : : ; n 1); то p; q; r полино- мы от переменной n с коэффициентами из поля K(x; 1; 2; : : : ; n 1); deg(r) > deg(q): 3. Если f 2 K(x; 1; 2; : : : ; n); n = exp(u) и u 2 K(x; 1; : : : ; n 1); то p = Pl i= k piin ; а q и r полиномы от переменной n с коэффициентами из поля K(x; 1; 2; : : : ; n 1); deg(r) > deg(q): 2.1. Интегрирование полиномиальной части Алгоритм интегрирования полиномиальной части сводит вычисление интеграла в поле K(x; 1; 2; : : : ; n) к вычислению одного или более интегралов в поле K(x; 1; 2; : : : ; n 1): Каждый полученный интеграл рекурсивно вычисляется при по- мощи алгоритма Риша (подробнее см. [7, с. 229-236], [8]). Рассмотрим интегрирование полинома p: По теореме Лиувилля p = v0 0 + Xd i=1 ci v0i vi : 80 В. А. Корабельников Возможны следующие два случая. 1. Пусть n = log(u); u 2 K(x; 1; : : : ; n 1): Для p = mP i=0 piin ; v0 = mP+1 j=0 tjjn ; где pi 2 K(x; 1; : : : ; n 1); i = 0; 1; : : : ; m; tj 2 K(x; 1; : : : ; n 1); j = 0; 1; : : : ;m + 1; полу- чаем (см. [8]) следующее выражение Xm i=0 piin = mX+1 i=0 t0 iin + Xm i=0 (i + 1)ti+1in 0 n + Xd i=1 ci v0i vi : Здесь старший коэффициент tm+1 является константой, обозначим ее am+1: Для на- хождения остальных коэффициентов ti; i = m;m 1; : : : ; 0 приравниваем коэффици- енты при одинаковых степенях n . Получаем систему дифференциальных уравнений pi = t0 i + (i + 1)ti+10 n: (2.1) Для того чтобы определить константу ai+1 и коэффициент ti (с точностью до ад- дитивной константы), перепишем уравнение 2.1 в виде ti = Z (pi (i + 1)(ti+1 + ai+1)0 n) = (i + 1)ai+1n + Z (pi (i + 1)ti+10 n): Элемент pi (i + 1)ti+10n принадлежит полю K(x; 1; : : : ; n 1): Воспользуемся ре- курсией и вычислим этот интеграл при помощи алгоритма Риша. Необходимым услови- Rем интегрируемости f в классе элементарных функций является выполнение равенства (pi (i+1)ti+10n ) = n +; где константа, а 2 K(x; 1; : : : ; n 1): При его вы- полнении получаем ai+1 = =(i+1) и находим значение коэффициента ti: Вычисляя t0; нужно отказаться от условия 2 K(x; 1; : : : ; n 1): Достаточно, чтобы существо- вал элементарный интеграл R (p0 t10n ) (этот интеграл определяется с точностью до аддитивной константы). 2. Пусть n = exp(u); u 2 K(x; 1; : : : ; n 1): Для p = Pl i= k piin ; v0 = Pl j= k tjjn ; где pi 2 K(x; 1; : : : ; n 1); i = k; : : : ; l; tj 2 K(x; 1; : : : ; n 1); j = k; : : : ; l; получаем следующее выражение Xl i= k piin = Xl i= k t0 ii + Xl i= k itiiu0 + Xd i=1 ci v0i vi : Приравнивая коэффициенты при одинаковых степенях n получаем следующую систему уравнений 8< : pi = t0 i + itiu0; i 6= 0 p0 = t0 0 + Pd j=1 cj v0j vj : (2.2) Зафиксируем i 6= 0 и рассмотрим уравнение pi = t0 i + itiu0 относительно ti: Пусть pi полином. Тогда ti тоже полином. Если u0 полином, то оставляем уравнение АЛГОРИТМЫ СИМВОЛЬНОГО ИНТЕГРИРОВАНИЯ В СИСТЕМЕ MATHPARTNER 81 без изменений, а если u0 = v=w; то чтобы ѕизбавиться от знаменателейї, домножаем уравнение на w: Пусть pi = r=g: Тогда ti будет иметь вид ti = a=b: Если u0 полином, то получаем уравнение r g = a0b ab0 b2 + iu0a b : Следовательно, b = p g; r = a0b ab0 + iu0ab = ba0 + ( b0 + iu0b)a . Если u0 = v=w; то из соотношения r g = a0b ab0 b2 + iva bw получаем: b = pg w; r = a0bw ab0w + ivab = bwa0 + (ivb b0w)a . Во всех рассмотренных выше случаях было получено уравнение вида P = c1a0 + c2a; (2.3) где P; c1; c2; a полиномы от переменной n 1 с коэффициентами из K(x; 1; : : : ; n 2): Для определения полинома a из уравнения 2.3 возникает три ситуации. 1. P; c1; c2; a 2 K[x]: Пусть a = Ph i=0 aixi: deg(P) = maxfdeg(c1)+h 1; deg(c2)+hg = h + maxfdeg(c1) 1; deg(c2)g: Из последнего равенства находим h : h = deg(P) maxfdeg(c1) 1; deg(c2)g: Если h < 0; то интеграл от функции f не является эле- ментарной функцией. Если h = 0; то a = P=c2: Если h > 0; то получаем формулу: P = c1 a0 + Xh i=1 iaixi 1 ! + c2 Xh i=0 aixi: Приравнивая коэффициенты при одинаковых степенях x; получаем систему линей- ных уравнений относительно неизвестных ai . 2. n 1 = log(u): Пусть a = Ph i=0 aii n 1: Тогда deg(P) = h + maxfdeg(c1); deg(c2)g: Следовательно, h = deg(P) maxfdeg(c1); deg(c2)g: Если h < 0; то интеграл от функ- ции f не является элементарной функцией. Если h 0; то получаем формулу P = c1 Xh i=0 a0 ii n 1 + Xh i=1 iai0 n 1i 1 n 1 ! + c2 Xh i=0 aii n 1: Приравнивая коэффициенты при одинаковых степенях n 1; получаем систему диф- ференциальных уравнений относительно неизвестных ai . Все выражения, входящие в эту систему, принадлежат K(x; 1; : : : ; n 2): Таким образом, мы свели решение диффе- ренциального уравнения в K(x; 1; : : : ; n 1) к решению системы дифференциальных уравнений в K(x; 1; : : : ; n 2): 3. n 1 = exp(u): В этом случае в полиномах P; c1; c2; a содержатся отрицательные степени n 1: Пусть a = Ph2 i= h1 aii n 1: Обозначим через k1 старшую степень полинома 82 В. А. Корабельников c1; а через k2 обозначим младшую степень полинома c1; через g1 и g2 старшую и младшую степени полинома c2 соответственно, через m1 и m2 старшую и младшую степени полинома P: Тогда h1 = m1 maxfk1; g1g и h2 = m2 maxfk2; g2g: Получаем формулу P = c1 Xh1 i=h2 (a0 i + iaiu0)in 1 + c2 Xh1 i=h2 aii n 1: Приравнивая коэффициенты при одинаковых степенях n 1; получаем систему диф- ференциальных уравнений относительно неизвестных ai . Все выражения, входящие в эту систему, принадлежат K(x; 1; : : : ; n 2): Таким образом, мы свели решение диффе- ренциального уравнения в K(x; 1; : : : ; n 1) к решению системы дифференциальных уравнений в K(x; 1; : : : ; n 2): 2.2. Интегрирование дробной части Рассмотрим интегрирование q=r; deg(q) < deg(r): Разложим r на свободные от квадратов множители и представим q=r в виде суммы простых дробей q=r = P i qi=ri i ; где ri множитель r; свободный от квадратов. В случае, если n = exp(); то перед разложением r на свободные от квадратов множители нужно в полиноме r вынести в качестве отдельного множителя перемен- ную n в максимальной степени. Пусть r = tn rt; где rt не делится на n: Полином rt раскладываем на свободные от квадратов множители (см. [4]). Другими словами, представляем полином r в виде r = tn Q i ri i ; где ri множитель r; свободный от квадратов; ri не делится на n: Раскладываем дробную функцию q=r в сумму про- стых дробей q=r = a=tn + P i qi=ri i ; где ri множитель r; свободный от квадратов. Интеграл от функции a=tn вычисляется при помощи алгоритмов интегрирования по- линомиальной части. Нам нужно проинтегрировать каждую полученную дробь. Используем следующее утверждение из [4]. Теорема 2.1. Пусть h свободный от квадратов полином от переменной n с ко- эффициентами из K(x; 1; 2; : : : ; n 1); со старшим коэффициентом, равным единице. Тогда, если h не делится на n в случае, когда n экспонента, то НОД(h; h0) = 1: Из этой теоремы, а также из того факта, что K(x; 1; 2; : : : ; n) является Евклидо- вым кольцом, следует, что существуют такие a; b 2 K(x; 1; : : : ; n); что ria + r0i b = 1: Воспользуемся алгоритмом Эрмита: Z qk rk k = qkb (k 1)rk 1 k + Z (k 1)qka + (qkb)0 (k 1)rk 1 k ; где a; b 2 K(x; 1; : : : ; n); ria+r0i b = 1 ; и k > 1: В результате применения этой формулы степень знаменателя уменьшилась, таким образом мы должны повторно применять эту формулу, пока k 6= 1 (подробнее см. [4]). АЛГОРИТМЫ СИМВОЛЬНОГО ИНТЕГРИРОВАНИЯ В СИСТЕМЕ MATHPARTNER 83 Остается проинтегрировать выражение u=v; где v свободный от квадратов поли- ном. Рассмотрим три случая (подробнее см. [1, с. 222-236]): 1. u=v 2 K(x): Определим R(y) = resultantx(u yv0; v): Корни полинома R(y) обозначим a1; a2; : : : ; as: Справедлива формула Z u v = Xs i=1 ai ln(НОД(u aiv0; v)): 2. u=v 2 K(x; 1; 2; : : : ; n); где n логарифм. Пусть R(y) = resultantn(u yv0; v): Если хотя-бы один корень a1; a2; : : : ; as полинома R(y) не является константой, то функция f не имеет элементарного интеграла. Если его корни a1; a2; : : : ; as констан- ты, то Z u v = Xs i=1 ai ln(НОД(u aiv0; v)): 3. u=v 2 K(x; 1; 2; : : : ; n); где n экспонента. В этом случае положим R(y) = resultantn(u y(v0 N0v); v); где N степень полинома v; аргумент функции n: Если хотя бы один корень a1; a2; : : : ; as полинома R(y) не является константой, то функция f не имеет элементарного интеграла. Если его корни a1; a2; : : : ; as констан- ты, то Z u v = Xs i=1 ai(ln(НОД(u ai(v0 N0v); v)) ni); где ni степень полинома НОД(u ai(v0 N0v); v) . 3. Библиотека процедур для символьного интегрирования в системе MathPartner Все процедуры библиотеки расположены в четырјх пакетах: Integrate содержит алгоритмы построения набора регулярных мономов. StrucTheorem содержит алгоритмы для проверки трансцендентности функций. IntPolynom содержит алгоритмы интегрирования полиномиальной части инте- грала. IntegrateFractions содержит алгоритмы интегрирования дробной части интегра- ла. 3.1. Пакет процедур Integrate Содержит 11 процедур, основными являются процедуры: integrate: Заменяет в подынтегральном выражении f тригонометрические, обратные тригонометрические, гиперболические, обратные гиперболические и показа- тельные выражения комбинацией логарифмов и экспонент. Вызывает процедуру mainProcOfInteg, которая возвращает первообразную функции f . Затем при помощи 84 В. А. Корабельников процедур из пакета обработки функций MathPartner, полученная функция упрощает- ся. Комбинации логарифмов и экспонент заменяются на тригонометрические, обратные тригонометрические гиперболические, обратные гиперболические функции. mainProcOfInteg: Основная процедура интегрирования функции. Возвращает пер- вообразную от входного выражения. Выделяет в подынтегральном выражении список логарифмов и экспонент f0; : : : ; fn: Этот список отсортирован следующим образом. Чем глубже в аргументах находятся логарифм или экспонента, тем ближе они нахо- дятся к началу списка. С помощью процедуры makeRegularMonomialsSequence (пакет процедур StrucTheorem) составляет из списка f0; : : : ; fn набор регулярных мономов. Отделяет полиномиальную и дробную части интеграла. Интегрирует отдельно поли- номиальную часть (пакет процедур IntPolynom) и отдельно дробную часть интеграла (пакет процедур IntegrateFraction). 3.2. Пакет процедур StructTheorem Содержит 18 процедур, процедура makeRegularMonomialsSequence является основ- ной. Она составляет набор регулярных мономов на основе списка всех логарифмов и экспонент, содержащихся в подынтегральном выражении. В процедуре makeRegularMonomialsSequence выполняются следующие действия. Мы проходим последовательно все элементы списка логарифмов и экспонент, начиная со второго элемента. Берем очередной элемент списка логарифмов и экспонент. Если он оказывается трансцендентным, то рассматриваем следующий элемент. В противном случае выражаем его через предыдущие элементы списка, и в каждом следующем эле- менте списка меняем текущий элемент его выражением через предыдущие элементы, и удаляем текущий элемент из списка. В итоге получаем набор регулярных мономов. Выражаем логарифмы и экспоненты, содержащиеся в подынтегральной функции, через элементы набора регулярных мономов. 3.3. Пакет процедур IntPolynom Содержит 20 процедур, основными являются: integPol: Интегрирование полинома от переменной x: integPolLn: Интегрирование полинома от переменной ln(u): integPolExp: Интегрирование полинома от переменной exp(u): 3.4. Пакет процедур IntegrateFractions Содержит 17 процедур, основными являются: Hermite: Интегрирование дробной функции по методу Эрмита. LogarithmicPart: Вычисление интеграла от дробной функции со свободным от квад- ратов знаменателем. partialFraction: Разложение дробной функции в сумму простейших дробей. АЛГОРИТМЫ СИМВОЛЬНОГО ИНТЕГРИРОВАНИЯ В СИСТЕМЕ MATHPARTNER 85 3.5. Общая схема алгоритма. Входные данные: f подынтегральная функция, x переменная интегрирования. Заменяем в подынтегральной функции f тригонометрические, обратные тригономет- рические, гиперболические, обратные гиперболические и показательные выражения комбинацией логарифмов и экспонент. Составляем список логарифмов и экспонент, со- держащихся в функции f: При помощи процедуры makeRegularMonomialsSequence составляем набор регуляр- ных мономов. Выражаем функцию f через найденные регулярные мономы. Расклады- ваем функцию f в виде суммы полинома и правильной дроби f = p + q=r: Если q=r не равно нулю, то используя процедуру FactorPol_SquareFree из паке- та полиномиальных вычислений MathPartner раскладываем r на произведение сво- бодных от квадратов множителей r = P i ri i : Затем вызываем процедуры из пакета integrateFractiions. Процедура partialFraction выражает q=r в виде суммы про- стейших дробей q=r = P i qi=ri i : К каждой дроби из полученной суммы применяем алго- ритм Эрмита (процедура Hermite), и затем производим вычисление интеграла от дроб- ной функции со свободным от квадратов знаменателем (процедура LogarithmicPart). Если интеграл от очередной дроби не выражается через элементарные функции, то интеграл от функции f так же не выражается через элементарные функции. Если p не равно нулю, то вызываем процедуры из пакета intPolynom. Возможны три случая: Если p полином переменной x; то процедура integPol вычисляет интеграл от p: Если p полином от переменной exp(); то процедура integPolExp составляет си- стему дифференциальных уравнений, описанных в разделе 2.2. Решение этой системы уравнений выражается через интегралы, не содержащие последний регулярный моном. Каждый такой интеграл рекурсивно вычисляем алгоритмом Риша. Если система урав- нений не имеет решений, то интеграл от функции f не выражается через элементарные функции. Если p полином переменной ln(); то процедура integPolLn составляет и ре- шает систему дифференциальных уравнений, описанных в разделе 2.1. Решение этой системы уравнений выражается через интегралы, не содержащие последний регуляр- ный моном. Каждый такой интеграл рекурсивно вычисляем алгоритмом Риша. Если система уравнений не имеет решений, то интеграл от функции f не выражается через элементарные функции. Полученный ответ упрощается. Комбинации логарифмов и экспонент заменяются на тригонометрические, обратные тригонометрические, гиперболические, обратные ги- перболические функции. 86 В. А. Корабельников Общая схема алгоритма изображена на рис. 1. Рис. 1. Общая схема алгоритма АЛГОРИТМЫ СИМВОЛЬНОГО ИНТЕГРИРОВАНИЯ В СИСТЕМЕ MATHPARTNER 87 4. Примеры вычисления первообразных В следующих трех таблицах показаны результаты интегрирования функций разных видов, полученных с помощью созданной в MathPartner библиотеки процедур символь- ного интегрирования. Таблица 1 Дробно-рациональные функции функция результат 3=(x + 2) 3 ln(abs(x + 2)) 3x=(x + 2) (3x 6 ln(abs(x + 2))) (3x + 4)=(x + 2) (3x 2 ln(abs(x + 2))) 1=(x2 + x + 1) 2=3 3(1=2) arctg(2=3x 3(1=2) + 1=3 3(1=2)) (4x + 5)=(x2 + 2x + 3) (2 ln(abs(1=2x2 + x + 3=2)) + 1=2 2(1=2) arctg(1=2x 2(1=2) + 1=2 2(1=2))) (4x2 + 5x + 6)=(x2 + 2x + 3) (4x ((( 3=2) 2(1=2) ( 1) arctg(1=2x 2(1=2) + 1=2 2(1=2))) + 3=2 ln(abs(9=2x2 + 9x + 27=2)))) 1=(x3 + x) ln(abs(x)) 1=2 ln(abs(x2 + 1)) 1=(x2 + 1) arctg(x) Таблица 2 Тригонометрические функции функция результат sin(2x + 3) ( 1=2) cos(2x + 3) cos(2x + 3) 1=2 sin(2x + 3) sin(x)2 cos(x)2 1=8x 1=32 sin(4x) tg(2x + 3) ( 1=2) ln(abs(cos(2x + 3))) ctg(2x + 3) 1=2 ln(abs(sin(2x + 3))) 1= cos(x)2 tg(x) 1= sin(x)2 ctg(x) 1=(1 cos(x)) ctg(x=2) tg(x)2 (sin(x) x cos(x) i cos(x))= cos(x) sin(x) tg(cos(x)) ln(abs(cos(cos(x)))) 88 В. А. Корабельников Таблица 3 Другие типы функций функция результат sin(x) exp(cos(x)) 1 exp(cos(x)) exp(x) sin(x) 1=2 exp(x) sin(x) 1=2 exp(x) cos(x) (y2 + 1) exp(y) ((y2 exp(y) + 3 exp(y)) 2y exp(y)) (y2 + 1) ln(y) 1=3y ln(y3) + 1=3y3 ln(y) + ( 1=9)y3 + ( y) 1=x ln(x) ln(x)2=2 (x + 1=x) ln(x) (1=2 (ln(x))2 + 1=2x2 ln(x)) 1=4x2 (x + exp(x))2 ((1=2 exp(2x) + 2x exp(x) + 1=3x3) 2 exp(x)) 2 exp(x)=(exp(4x) 1) 1 (arctg(exp(x)) 1=2 ln(abs(sh(1=2x))) + 1=2 ln(abs(ch(1=2x)))) (ln(x) + 1) xx xx log(; x) (x ln(x) x)= ln() x (x)= ln() 5. Заключение Задача вычисления первообразной для композиции элементарных функций, когда результат может быть записан через элементарные функции и алгебраические и транс- цендентные постоянные, привлекает внимание математиков с давних времен. И несмот- ря на то, что общие подходы достаточно понятны, эта задача в виде библиотеки про- грамм все еще ждет своего решения. Мы надеемся, что настоящее описание текущего состояния библиотеки программ в системе MathPartner будет полезным и позволит при- близить полное решение этой классической математической задачи.Об авторах
Вячеслав Алексеевич Корабельников
ФГБОУ ВО «Тамбовский государственный университет им. Г.Р. Державина»
Email: korabelnikov.va@gmail.com
аспирант, кафедра функционального анализа 392000, Российская Федерация, г. Тамбов, ул. Интернациональная, 33
Список литературы
- Дж. Дэвенпорт, И. Сирэ, Э. Турнье, Компьютерная алгебра. Системы и алгоритмы алгебраических вычислений, Мир, М., 1991.
- M. Bronstein, Symbolic Integration Tutorial, ISSAC‘98 and Differential Algebra Workshop (Rostock, August 1998; Rutgers, November 2000).
- R. Risch, “The problem of integration in finite terms”, Trans. Amer. Math. Soc., 1969, 167-189.
- B. Terelius, Symbolic Integration, Master of science thesis, Stockholm, 2009.
- Д. А. Павлов, “Символьное интегрирование”, Компьютерные инструменты в образовании, 2010, №2, 38-43.
- Г. И. Малашонок, Руководство по языку "Mathpar", Издательство Тамбовского университета, Тамбов, 2013.
- Е. В. Панкратьев, Элементы компьютерной алгебры, МГУ, М., 2007.
- С. М. Тарарова, “К проблеме построения алгоритма символьного интегрирования”, Вестник Тамбовского университета. Серия: естественные и технические науки, 17:2 (2012), 607-617.
Дополнительные файлы
