ISSN 1810-0198. Вестник Тамбовского университета. Серия Естественные и технические науки
Том 23, № 122
2018
DOI: 10.20310/1810-0198-2018-23-122-250-260 УДК 517.925
АЛГОРИТМЫ РЕШЕНИЯ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ
В MATH PARTNER
«с С. А. Глазков
ФГБОУ ВО «Тамбовский государственный университет им. Г.Р. Державина» 392000, Российская Федерация, г. Тамбов, ул. Интернациональная, 33 Ei-mail: [email protected]
Аннотация. Обсуждаются алгоритмы нахождения символьно-численного решения линейных неоднородных обыкновенных дифференциальных уравнений, уравнений Бернулли. Описываются алгоритмы нахождения решения через определитель Лагутинского. Приводится описание языка пользователя Mat hp от в той части, которая позволяет использовать сервис для решения дифференциальных уравнений.
Ключевые слова: линейные неоднородные дифференциальные уравнения; уравнения Бернулли; система компьютерной алгебры; система Math Partner; определитель Лагутинского
Введение
Системы символьных вычислений с каждым годом находят все больше приложений в науке, технике и образовании. Другое название для этих систем — системы компьютерной алгебры (СКА).
Одной из таких систем является Web-ссрвис Math Partner |1|. Этот сервис предназначен для проведения символьных вычислений в инженерных расчетах, научных исследованиях и образовании. Он позволяет оперировать с функциями и функциональными матрицами, получать как точные численно-аналитические решения, так и решения, в которых числовые коэффициенты вычисляются с требуемой степенью точности. Сервис написан на языке программирования Java [2]. Одним из развивающихся здесь направлений является нахождение символьно-численных решений обыкновенных дифференциальных уравнений (ОДУ).
В работах [3, 4] были представлены описания классов решения уравнений следующих видов: ОДУ с разделяющимися переменными, однородных ОДУ первого порядка, уравнений в полных дифференциалах.
В данной статье рассматриваются алгоритмы решения линейных неоднородных уравнений первого порядка и уравнений Бернулли и их реализация в СКА Math Partner,
а также реализация алгоритма нахождения решений дифференциальных уравнений методом М.Н. Лагутинского.
В основе языка Mathpar [5, 6] системы Math Partner лежит широко используемый математиками и физиками язык ТеХ, который обычно используют для набора математических текстов.
В пункте 1 дается описание общего алгоритма решения обыкновенных дифференциальных уравнений, рассматривается структура класса, который реализует этот алгоритм.
В пункте 2 предлагается алгоритм нахождения решений линейных неоднородных дифференциальных уравнений и приводится описание реализующего его метода solve.
В пункте 3 приводится способ нахождения решений уравнений Бернулли.
В пункте 4 рассматривается применение метода Лагутинского для решений дифференциальных уравнений первого порядка, приводится пример.
В пункте 5 приводятся примеры решений дифференциальных уравнений в Web-сервисе Math Partner.
1. Общий алгоритм решения ОДУ
Рассмотрим ОДУ первого порядка, записанное в виде f1y' + g1 = f2y' + g2 или f1d(y) + gid(x) = f2d(y) + g2d(x). Все функции в общем случае могут быть функциями двух переменных fi = fi(x,y), gi = gi(x,y). Решение ищем в кольце Q[x,y] многочленов двух переменных с рациональными коэффициентами.
Программы для решения ОДУ в системе Math Partner содержатся в пакете DiffEq. Основной класс пакета DiffEq называется SolveDE. Кроме него в пакете находятся классы решения уравнений следующих типов:
- уравнений с разделяющимися переменными (SolveDESV);
- однородных дифференциальных уравнений (SolveHDE);
- уравнений в полных дифференциалах (SolveETD);
- линейных неоднородных уравнений и уравнений Бернулли (SolveLDE).
В классе SolveDE реализованы методы подготовки уравнения к решению и вызов непосредственно самих функций решения. Заданное уравнение преобразуется в выражение Pdx + Qdy = 0, после чего последовательно вызываются методы решения каждого типа уравнений. Для этого в рассматриваемый класс был добавлен метод toDifferencial. При необходимости производится обратное преобразование записи.
Кроме метода solve класс содержит в себе еще 7 методов: containsDifferential, toDifferencial, split, isETD, isHDE, HDE_replace, toNormalForm.
На рис. 1 показан алгоритм определения типа дифференциального уравнения и применения соответствующего решающего алгоритма.
Рис. 1. Общий алгоритм решения ОДУ
Входные данные для основного метода solve — символьная запись дифференциального уравнения. Сначала методом containsDifferential проверяется представление уравнения, то есть определяется, задано ли уравнение через функцию y' или дифференциалы dx, dy. Этот метод ищет дифференциалы во входном выражении и возвращает true при их наличии. Если выражения dx, dy не были найдены в уравнении, то методом toDifferencial уравнение приводится к виду Pdx + Qdy = 0. Затем с помощью метода split определяются выражения P и Q.
Теперь нужно определить тип уравнения для выбора метода его решения. Сначала проверяется, является ли уравнение уравнением в полных дифференциалах. Для этого вызывается метод isETD с параметрами P и Q. В нем выполняется сравнение выражений Py и Q'x. Если выражения равны, метод возвращает true , иначе— false. Если получили true, значит, уравнение является уравнением в полных дифференциалах. Его решаем в классе SolveETD.
Если уравнение не является уравнением в полных дифференциалах, проверяется, является ли оно однородным в методе isHDE. В выражениях P и Q проводится замена переменных x и у на zx и zy соответственно. Новые выражения обозначим Pz и Qz. Тогда, если Pz/P = Qz/Q = z, то уравнение является однородным. Решаем его в классе SolveHDE.
Если уравнение не является ни уравнением в полных дифференциалах, ни однородным уравнением, оно решается как уравнение с разделяющимися переменными в классе SolveDESV. Для этого уравнение преобразуется к виду Qy' + P = 0 [2, 3].
Если разделить переменные не удалось, то уравнение решается как линейное неоднородное дифференциальное уравнение или уравнение Бернулли. Решение таких ОДУ производится методом Бернулли подстановкой y = uv .
В результате выполнения программы в случае успешного решения уравнения получится функция; если уравнение задано с ошибкой или возможностей системы недоста-
точно для его решения, то получится строковая ошибка «ERROR : incorrect equation».
Решение в общем случае получается в виде неявно заданной функции д(х1у) = h(x, у). Затем решение приводится к явному виду у = f(x) с помощью метода toNormalForm. Это итерационный метод, который вызывается до тех пор, пока левая часть не станет равной г/, либо в левой части окажется неупрощаемое выражение.
Пример работы toNormalForm:
вход: ln(abs(y + 1)) = (1/2)ж2 + С; выход: у = e(V2)*4c j
2. Решение линейных неоднородных ДУ первого порядка
Линейные неоднородные дифференциальные уравнения имеют вид у'-\-а(х)у = Ъ{х).
Алгоритмы решения были реализованы в классе SolveLDE,
Глобальные переменные класса: ах, v, и.
ах — функция а(х), v, и — функции такие, что у = uv.
Методы класса: solve, findAx, getAx.
Метод solve.
Входными данными метода являются два выражения, которые стоят в левой F1 и правой F2 частях уравнения.
Алгоритм решения является классическим [7] и состоит из 5 шагов.
1. Приведение уравнения к виду î/ + а{х)у = Ь(х).
/ Выполним перенос правой части в левую, для чего вычтем F2 из F1. Создадим временные переменные leftPart и rightPart с нулевыми значениями.
/ В цикле пройдем по всем слагаемым левой части. Каждое из них проверим на наличие производной у' методом factor_d из класса solveDESV, Из factor_d возвращается множитель при производной во входном выражении. Если получим ненулевой множитель, выполним сложение слагаемого с leftPart, Если производная в слагаемом не найдена, проверим его на наличие у методом findAx. В нем производится деление входного выражения на у. Если в частном переменная у отсутствует, возвращается true, иначе — false. Если получили true, слагаемое представлено в виде /(х)г/, его тоже перенесем в левую часть путем сложения с leftPart,
/ После завершения цикла все, что не попало в левую часть, будет являться правой частью rightPart,
/ Если в уравнении /(ж)?/ + д{х)у = h{x) функция f(x) = 1, то выполним деление обеих частей на f(x).
Теперь уравнение представлено в виде у' + а(х)у = Ь(х).
2. Поиск коэффициента а(х). С помощью метода getAx получаем выражение а(х). Метод принимает на входе левую часть приведенного к нормальному виду уравнения, выполняет поиск коэффициента и запись его значения в переменную ах.
3. Решение уравнения v' + a(x)v = 0. Это дифференциальное уравнение с разделяющимися переменными. Для его решения вызываем метод solve класса SolveDESV, Решение без числовой константы, приведенное к явному виду, запишем в переменную v.
4. Решение уравнения u'v = b(x). Это также уравнение с разделяющимися переменными. Результат решения записываем с переменную и.
5. Получение решения заданного уравнения: у = uv.
3. Решение уравнений Бернулли
Уравнения Бсрпулли имеют вид у' + а(х)у = Ъ{х)уп\ где п = 0; 1. Если п = 0. то получим неоднородное, а при п = 1 — однородное линейное уравнение.
Для решения уравнений Бернулли используется немного измененный класс SolveLDE, описанный в пункте 2. Так как алгоритм решения уравнений Бернулли аналогичен алгоритму решения линейных неоднородных уравнений первого порядка, то для решения уравнений этих видов используется один класс.
В классе были инициализированы новые глобальные переменные п — показатель степени при у в правой части, Ьх — функция Ь(х), написан метод getBx и внесены изменения в метод solve.
Метод solve.
В процессе решения уравнения Бернулли используется другая формула составления уравнения для нахождения функции и: ^ = ¿(х)«™-1. Тем не менее, если подставить в это уравнение п = 0 , получим и' = b(x)v~1, отсюда u'v = Ь(х). Получили уравнение, используемое для нахождения и при решении неоднородного линейного уравнения. Таким образом, для решения ОДУ этих двух видов можно использовать одну общую функцию ^ = b(x)vn~1.
Общее решение уравнения Бернулли также вычисляется по формуле у = uv.
Метод getBx,
Метод выполняет поиск в правой части уравнения функции Ь(х) и показателя степени п с записью их значений в переменные Ьх и п соответственно.
Если в правой части не нашлось выражение у", производится выход из метода, при этом переменной Ьх присваивается значение правой части, а переменная п по умолчанию остается равной нулю.
4. Применение метода М.Н. Лагутинского к решению дифференциальных уравнений первого порядка
Метод М.Н. Лагутинского для решения дифференциальных уравнений первого порядка описывается в статье [8]. Данным методом можно решать уравнения первого порядка Pdx + Qdy = 0, в которых выражения Р и Q являются многочленами.
Пусть mj, га2, ... —базис, образованный мономами в градуированном лексикографическом упорядочении 1, г/, х, у2, ух, х2, ... .
Пусть матрица М порядка п получена следующим образом. Первая ее строка образована элементами mj, m2, ... m„, вторая строка является производной первой строки Dmi,Dm2.... Dmn, третья — второй производной первой строки D2mi,D2m2^ ... D2mn, и так далее. Здесь D — оператор дифференцирования D = Рщ Определи-
тель такой матрицы тг-ого порядка будем обозначать А„ и называть определителем Лагутинского п-го порядка.
Дифференцирование элементов матрицы M выполняется так:
Mi+i j = p M1 Q M1,
i+1,j dy ^ ax '
где Mi,j — элемент i -той строки j -того столбца матрицы M.
Определение 1. Общим или рациональным интегралом f дифференцирования D называют элемент поля частных исходного кольца R, производная которого Df равна нулю.
Теорема 1. (М.Н. Лагутинский, 1911). Рациональный интеграл, порядок которого не превосходит N, существует тогда и только тогда, когда an = 0, где
(N + 1)(N+2)
п = — 2— ' при этом интеграл можно вычислить как отношение миноров этого определителя.
Поскольку первые три элемента первой строки матрицы M являются мономами первого порядка (1 , y, x), то очевидно, что при A3 = 0 числитель и знаменатель вычисленного интеграла будут зависеть от x и y линейно. Аналогично, дифференциальное уравнение будет иметь интеграл второго порядка в том и только том случае, если A6 = 0.
Для реализации метода М.Н. Лагутинского в пакете DiffEq был написан класс Lagutinsky, содержащий в себе метод solve. В классе MatrixD были написаны методы lagutinsky_matrix, lagutinsky_det_random, lagutinsky_integral.
Метод solve.
Метод решения дифференциального уравнения с использованием определителя Лагутинского на входе принимает выражения P и Q . Перед составлением матрицы проверяем, что P и Q — многочлены.
Так как оценка сверху для порядка интеграла заданного дифференциального уравнения до сих пор не найдена, выполняем построение матриц и вычисление определителей Лагутинского A3 , A6 , A1o,... .
Вычисление определителя полиномиальной матрицы является трудоемкой задачей. Поэтому выбираем произвольную точку, находим значение матрицы в этой точке и вычисляем определитель получившейся числовой матрицы. Это выполняется в методе lagutinsky_det_random. Если этот определитель не равен 0, то увеличиваем порядок. Если определитель числовой матрицы равен 0, то вычисляем определитель соответствующей полиномиальной матрицы. Если он также равен 0, то рациональный интеграл существует. Иначе увеличиваем порядок определителя Лагутинского.
Когда нашли An = 0 , вызываем метод lagutinsky_integral, которому в качестве аргумента передаем матрицу п -ого порядка. В результате вычисляется искомый интеграл, который будет являться решением заданного дифференциального уравнения.
Метод lagutinsky_matrix.
Генерируем матрицу M, принимая на входе заданный порядок п и дифференцирование D. В первую строку записываем массив базисов m1, m2, ... mn, во вторую — производную первой строки и так далее.
Метод lagutinsky_det_random.
Вычисляем определитель Лагутинского в одной случайной точке. Выполняем подстановку координат случайной точки в элементы матрицы, в результате чего получаем целочисленную матрицу и вычисляем ее определитель.
Метод lagutinsky_integral.
Принимаем на входе матрицу дифференцирования порядка n. Пусть Bj — дополнительный минор этой матрицы.
Инициализируем переменные a = 0, pi = Bn-1a, p2 = Bn-1n-1.
Затем выполняем цикл: пока p1/p2 — число, выполняем a = a + 1, pi = Bn-i Когда условие цикла не будет выполнено, отношение pi/p2 даст искомый интеграл.
Пример 1. Рассмотрим уравнение y' + 3y/x = 2/x2. Здесь P = 3yx 2,Q = x2.
Матрица третьего порядка будет иметь следующий вид
i y x
0 3yx + 2 x2 I 0 6yx2 6x 2x3 J
Определитель A3 представленной матрицы равен 12yx4 + 10x3, что отлично от нуля. Следовательно, рациональный интеграл первого порядка для заданного уравнения не существует.
Попробуем найти интеграл второго порядка, для этого найдем A6 = 11612160y4x19 47001600y3x18 + 70917120y2x17 47278080yx16 + 11750400x15, следовательно, функция решения этого уравнения имеет более высокий порядок.
Повышая порядок дальше, увидим, что A15 = 0, поэтому рациональный интеграл
32
четвертого порядка существует и равен yx x2.
Получим решение уравнения yx3 x2 = C, или в явном виде y = (x2 + C)/x3.
5. Решение уравнений в системе Math Partner
Чтобы решить ОДУ в Web-сервисе Math Partner, необходимо:
- перейти по адресу http://mathpar.cloud.unihub.ru;
- открыть электронную тетрадь по ссылке «Тетрадь»;
- задать окружение для рациональных чисел и двух переменных командой SPACE = Q[x,y];
- ввести оператор для решения уравнения solveDE с записанным в нем уравнением;
- получить решение, нажав на кнопку в виде треугольника над рабочей областью (или c помощью комбинации клавиш Ctrl+Enter).
Пример 2.
Решим уравнение (1 + x)y' y 1 = 0. Для этого в рабочей тетради введем следующий текст
SPACE = Q[x,y];
\solveDE((1+x)\d(y,x) - y - 1 = 0);
Нажав на кнопку выполнения, увидим под рабочей областью ответ: y = eC (ж+1) 1. На рис. 2 представлена страница Web-сервиса Math Partner с примерами решений уравнений Бернулли и линейных неоднородных дифференциальных уравнений первого порядка.
Рис. 2. Примеры СПИСОК ЛИТЕРАТУРЫ
1. Math Partner. URL: http://mathpar.cloud.unihub.ru (дата обращения: 22.02.2018).
2. Ноутон П., Шилдт Г. Java 2. СПб.: БХВ-Петербург, 2008. 1072 с.
3. Глазков С.А. Символьные алгоритмы решения некоторых типов обыкновенных дифференциальных уравнений // Державинский форум. Тамбов, 2017. № 2. С. 131-140.
4. Глазков С.А., Рыбаков М.А. Алгоритмы решения простых типов обыкновенных дифференциальных уравнений в Math Partner // Вестник Тамбовского университета. Серия Естественные и технические науки. Тамбов, 2017. Т. 22. Вып. 6-1. С. 1268-1276. DOI: 10.20310/18100198-2017-22-6-1268-1276.
Б. Малашонок Г.И. Руководство по языку «MATHPAR». Тамбов: Издательский дом ТГУ им. Г.Р. Державина, 2013.
6. Malaschonok G.I. MathPartner Computer Algebra // Programming and Computer Software. 2017. Vol. 43. № 2. P. 112118.
7. Виленкин Н.Я., Доброхотова М.А., Сафонов А.Н. Дифференциальные уравнения. М.: Просвещение, 1984.
8. Малых М.Д. О применении метода М. Н. Лагутинского к интегрированию дифференциальных уравнений 1-го порядка. Часть 1. Отыскание алгебраических интегралов // Вестник Российского университета дружбы народов. Серия: Математика, информатика, физика. 2017. Т. 25. № 2. С. 103-112.
Поступила в редакцию 23 марта 2018 г. Прошла рецензирование 26 апреля 2018 г. Принята в печать 5 июня 2018 г.
Глазков Сергей Александрович, Тамбовский государственный университет им. Г.Р. Державина, г. Тамбов, Российская Федерация, магистрант, кафедра функционального анализа, e-mail: [email protected].
Для цитирования: Глазков С.А. Алгоритмы решения дифференциальных уравнений в Math ник Тамбовского университета. Серия Естественные и технические науки. Тамбов, 2018. Т. 23. № DOI: 10.20310/1810-0198-2018-23-122-250-260
Partner // Вест-122. С. 250-260.
DOI: 10.20310/1810-0198-2018-23-122-250-260
ALGORITHMS FOR SOLVING DIFFERENTIAL EQUATIONS
IN MATH PARTNER
S. A. Glazkov
Tambov State University named after G.R. Derzhavin 33 Internatsionalnaya St., Tambov 392000, Russian Federation E-mail: [email protected]
Abstract. Algorithms for finding the symbolic-numerical solution of linear inhomogeneous ordinary differential equations, Bernoulli equations are discussed. Algorithms for finding a solution through the Lagutinsky determinant are described. The description of Mathpar user language is given in the part that allows to use the service for solving differential equations.
Keywords: linear inhomogeneous differential equations; the Bernoulli equation; computer algebra system; Math Partner system; the determinant of Lagutinsky
REFERENCES
1. Math Partner. Available at: http://mathpar.cloud.unihub.ru (accessed 22.02.2018).
2. Nouton P., Shildt G. Java 2. St. Petersburg, BKHV-Peterburg Publ., 2008, 1072 p. (In Russian).
3. Glazkov S.A. Simvol'nye algoritmy resheniya nekotorykh tipov obyknovennykh differentsial'-nykh uravneniy [Symbolic algorithms of some types of differential equations' solution]. Derzhavinskiy forum - Derzhavin Forum, 2017, no. 2, pp. 131-140. (In Russian).
4. Glazkov S.A., Rybakov M.A. Algoritmy resheniya prostykh tipov obyknovennykh differen-tsial'nykh uravneniy v Math Partner [The symbolic solution of ordinary differential equations in the computer algebra system Math Partner]. Vestnik Tambovskogo universiteta. Seriya Estestvennye i tekhnicheskie nauki - Tambov University Reports. Series: Natural and Technical Sciences, 2017, vol. 22, no. 6-1, pp. 1268-1276. (In Russian). DOI: 10.20310/1810-0198-2017-22-6-1268-1276.
5. Malashonok G.I. Rukovodstvo po yazyku «MATHPAR» [Mathpar Language Guide]. Tambov, Publishing House of Tambov State University named after G.R. Derzhavin, 2013. (In Russian).
6. Malaschonok G.I. MathPartner Computer Algebra. Programming and Computer Software, 2017, vol. 43, no. 2, p. 112118.
7. Vilenkin N.Y., Dobrokhotova M.A., Safonov A.N. Differentsial'nye uravneniya [Differential Equations]. Moscow, Prosveshchenie Publ., 1984. (In Russian).
8. Malykh M.D. O primenenii metoda M. N. Lagutinskogo k integrirovaniyu differentsial'nykh uravneniy 1-go poryadka. Chast' 1. Otyskanie algebraicheskikh integralov [On Application of M.N. Lagutinski Method to Integration of Differential Equations in Symbolic Form. Part 1]. Vestnik Rossiyskogo universiteta druzhby narodov. Seriya: Matematika, informatika, fizika - RUDN Journal of Mathematics, Information Sciences and Physics, 2017, vol. 25, no. 2, pp. 103-112. (In Russian).
260
С. А. Rna3KOB
Received 23 March 2018 Reviewed 26 April 2018 Accepted for press 5 June 2018
Glazkov Sergey Aleksandrovich, Tambov State University named after G.R. Derzhavin, Tambov, the Russian Federation, Graduate Student of the Functional Analysis Department, e-mail: [email protected].
For citation: Glazkov S.A. Algoritmy resheniya differentsial'nyh uravneniy v Math Partner [Algorithms for solving differential equations in Math Partner]. Vestnik Tambovskogo universiteta. Seriya Estestvennye i tekhnicheskie nauki - Tambov University Reports. Series: Natural and Technical Sciences, 2018, vol. 23, no. 122, pp. 250-260. DOI: 10.20310/1810-0198-201823-122-250-260 (In Russian, Abstr. in Engl.).