ФУНКЦИИ VBA EXCEL ДЛЯ ЧИСЛЕННОГО РЕШЕНИЯ ЗАДАЧИ КОШИ СИСТЕМЫ ОДУ 1-ГО ПОРЯДКА

Научная статья
DOI:
https://doi.org/10.23670/IRJ.2021.108.6.004
Выпуск: № 6 (108), 2021
Опубликована:
2021/06/17
PDF

ФУНКЦИИ VBA EXCEL ДЛЯ ЧИСЛЕННОГО РЕШЕНИЯ ЗАДАЧИ КОШИ СИСТЕМЫ ОДУ 1-ГО ПОРЯДКА

Научная статья

Сдвижков О.А.*

Российский государственный университет туризма и сервиса, Пушкино МО, Россия

* Корреспондирующий автор (oasdv[at]yandex.ru)

Аннотация

Приведены программные коды пользовательских функций VBA Excel, реализующих численные методы решения задачи Коши для системы обыкновенных дифференциальных уравнений 1-го порядка методами Эйлера и Рунге-Кутта четвертого порядка точности. Параметрами функций являются начальное и конечное значения независимой переменной, массив начальных значений зависимых переменных и число шагов, в программных кодах применяются динамические массивы. Пользовательские функции можно применять к задаче Коши и одного дифференциальных уравнений 1-го порядка. Все пользовательские функции имеют описания, поясняющие их назначения. Применение пользовательских функций показано на конкретных примерах численного решения задачи Коши системы дифференциальных уравнений 1-го порядка и отдельных дифференциальных уравнений 1-го порядка.

Ключевые слова: система дифференциальных уравнений, задача Коши, численные методы, код, диалоговое окно.

EXCEL VBA FUNCTIONS FOR NUMERICAL SOLUTION OF A CAUCHY PROBLEM OF THE FIRST-ORDER ODE SYSTEM

Research article

Sdvizhkov O.A.*

Russian State University of Tourism and Service, Pushkino, Moscow Oblast, Russia

* Corresponding author (oasdv[at]yandex.ru)

Abstract

The current study presents program codes of custom VBA Excel functions that implement numerical methods for solving the Cauchy problem for a system of 1st order ordinary differential equations using the Euler and Runge-Kutta 4th order methods. The parameters of the functions are the initial and final values of the independent variable, an array of initial values of the dependent variables, and the number of steps. Program codes use dynamic arrays. Custom functions can be applied to the Cauchy problem and one of the 1st order differential equations.  All of the custom functions have descriptions that explain their purpose. The article demonstrates the use of custom functions using specific examples of numerical solutions to the Cauchy problem of 1st order differential equations system and individual 1st-order differential equations.

Keywords: system of differential equations, Cauchy problem, numerical methods, code, dialog box.

Введение

Системы обыкновенных дифференциальных уравнений 1-го порядка имеют большое прикладное значение [9]. Однако численные методы решения задачи Коши системы обыкновенных дифференциальных уравнений 1-го порядка отличаются большой трудоемкостью [1], [2], [6]. Поэтому задача информатизации этих методов, доступной самому широкому кругу пользователей ПК, каким является круг пользователей Microsoft Office, несомненно, является актуальной.

Цель данного исследования – разработка на языке программирования VBA Excel [3], [4], [7] программных кодов пользовательских функций [10], которыми численно решается задача Коши системы обыкновенных дифференциальных уравнений 1-го порядка методами Эйлера и Рунге-Кутта.

Программный код функции VBA Excel для решения методом Рунге-Кутта системы двух дифференциальных уравнений приведен в [5]. Пользовательские функции VBA Excel для численного решения задачи Коши обыкновенного дифференциального уравнения 1-го порядка приведены в [9]. 

  1. Пользовательская функция ЭЙЛЕР

В методе Эйлера численного решения задачи Коши системы дифференциальных уравнений

14-07-2021 11-35-26    (1.1)

14-07-2021 11-35-35     (1.2)

на отрезке [x0, x0 + n·h] применяется формула:

14-07-2021 11-35-51     (1.3)

j = 1, 2, …, m; i= 1, 2, …, n.

Правые части системы (1.1) в VBA Excel можно задать пользовательской функцией СИСТЕМ, листинг которой имеет вид:

Function СИСТЕМ (Массив As Variant)

'массив состоит из значений:i – номера уравнения,х,y1,y2,..., yn

Select Case Массив(1)

Case 1

СИСТЕМ = f1(Массив(2), Массив(3), …, Массив(m))

Case 2

СИСТЕМ = f2(Массив(2), Массив(3), …, Массив(m))

…………………

Case m

СИСТЕМ = fn(Массив(2), Массив(3), …, Массив(m))

End Select

End Function

Пусть система (1.1) задана пользовательской функцией СИСТЕМ. Тогда пользовательская функция ЭЙЛЕР, код VBA Excel которой приведен в листинге 1, выполняет вычисления по формуле (1.3).

Листинг 1. Код функции ЭЙЛЕР и ее описания

Function ЭЙЛЕР(Нач_x0, Конеч_x, Нач_y0(), Шагов) As Variant

Dim n As Integer, m As Integer, x(), y(), z(), c()

n = Шагов:m = UBound(Нач_y0)

ReDim z(1 To m, 0 To n):ReDim x(0 To n)

ReDim y(1 To m + 2):ReDim c(1 To m)

x(0) = Нач_x0:h = (Конеч_x - x(0)) / n

For i = 1 To m

z(i, 0) = Нач_y0(i)

Next

For j = 1 To n

 For i = 1 To m

y(1) = i: y(2) = x(0) + h * (j - 1)

 For r = 3 To m + 2

y(r) = z(r - 2, j - 1)

 Next

 Массив = y

z(i, j) = z(i, j - 1) + h * СИСТЕМ(Массив)

 Next

Next

For i = 1 To m

c(i) = z(i, n)

Next

ЭЙЛЕР = c

End Function

Sub InstallFunc2()

Application.MacroOptions Macro:="ЭЙЛЕР", Description:= _

"Возвращает значения yi, полученные методом Эйлера"

End Sub

В листинг 1 входят массивы:

z(1 To m, 0 To n)– двумерный массив значений функций у1, у2, …, ym в точках x0, x0+h, …, x0+n·h;

x(0 To n) – массив значений x0, x0+h, …, x0+n·h;

y(1 To m + 2) – массив значений (i, x, y1, y2, … ym), где i – номер уравнения системы;

c(1 To m) – массив итоговых значений массива z.

Пример 1.1. Найти приближенные значения решения системы

14-07-2021 11-38-05 с начальными условиями 14-07-2021 11-47-08. Вычислить значения решения при х=0,1; 0,2; 0,3; 0,4.
  1. В стандартный модуль вводится листинг функции СИСТЕМ:

Function СИСТЕМ(Массив As Variant)

Select Case Массив (1)

Case 1

СИСТЕМ = Массив (4)

Case 2

СИСТЕМ = Массив (3)

End Select

End Function

  1. В диапазон А1:А5 вводятся значения, принимаемые переменной х: 0; 0,1; 0,2; 0,3; 0,4.
  2. В диапазон В1:С1 вводятся начальные значения, принимаемые у1 и у2: 0 и 1.
  3. Выделяется диапазон В2:С2, вызывается функция ЭЙЛЕР и вводятся данные:

14-07-2021 11-48-41

Рис. 1.1 – Применение функции ЭЙЛЕР в примере 1.1

 
  1. Команда Ctrl+Shift +Enter возвращает в диапазоне В2:С2 результаты.
  2. Копирование данных диапазона В2:С2 в диапазон В3:С5 завершает решение задачи (рис. 1.2).

14-07-2021 11-48-57

Рис. 1.2 – Вид решения примера 1.1 функцией ЭЙЛЕР

  Пример 1.2. Найти приближенные значения решения системы 14-07-2021 11-49-12

с начальными условиями 14-07-2021 11-49-26. Вычислить значения решения при х=0,1; 0,2; 0,3; 0,4; 0,5.

  1. В стандартный модуль вводится листинг функции СИСТЕМ:

Function СИСТЕМ(Массив As Variant)

Select Case Массив(1)

Case 1

СИСТЕМ = Массив(4) + Массив(5)

Case 2

СИСТЕМ = Массив(3) + Массив(5)

Case 3

СИСТЕМ = Массив(3) + Массив(4)

End Select

End Function

  1. В диапазон А1:А6 вводятся значения, принимаемые х: 0; 0,1; 0,2; 0,3; 0,4; 0,5.
  2. В диапазон В1:D1 вводятся начальные значения, принимаемые у1, у2, у3: 1, 2, 3.
  3. Выделяется диапазон В2:D2, вызывается функция ЭЙЛЕР и вводятся данные:

14-07-2021 11-53-42

Рис. 1.3 – Применение функции ЭЙЛЕР в примере 1.2

 
  1. Команда Ctrl+Shift +Enter возвращает в диапазоне В2:D2 результаты.
  2. Копирование данных диапазона В2:D2 в диапазон В3:D6 завершает решение задачи (рис. 1.4).

14-07-2021 11-53-55

Рис. 1.4 – Вид решения примера 1.2 функцией ЭЙЛЕР

 

Функция Эйлер применима и к задаче Коши обыкновенного дифференциального уравнения 1-го порядка.

Пример 1.3. Найти приближенные значения решения задачи Коши

14-07-2021 11-57-50    (1.4)

на отрезке [0, 1], разбивая отрезок на 10 равных частей.

В этом случае код функции СИСТЕМ имеет вид:

Function СИСТЕМ(Массив As Variant)

СИСТЕМ = Массив(2) + Массив(3)

End Function

Применение функции ЭЙЛЕР приводит к результатам, показанным на рисунке 1.3.

14-07-2021 11-55-07

Рис. 1.5 – Вид решения примера 1.3 функцией ЭЙЛЕР

 
  1. Пользовательская функция РУНГЕ

В методе Рунге-Кутта четвертого порядка точности, которым численно решается задача Коши (1.1, 1.2):

14-07-2021 11-57-58   (2.1) где 14-07-2021 12-01-50    (2.2) Пусть система (1.1) задана пользовательской функцией СИСТЕМ. Тогда пользовательская функция РУНГЕ, программный код VBA Excel которой приведен в листинге 2, выполняет вычисления по формулам (2.1), (2.2). Листинг 2. Код функции РУНГЕ и ее описания Function РУНГЕ(Нач_x, Конеч_x, Нач_y() As Variant, Шагов) _ As Variant Dim n As Integer, m As Integer, h As Single, x(), y(), z(), c() n = Шагов:m = UBound(Нач_y) ReDim z(1 To m, 0 To n):ReDim x(0 To n) ReDim y(1 To m + 2):ReDim c(1 To m) Dim K(1 To 4) As Double x(0) = Нач_x:h = (Конеч_x - x(0)) / n For i = 1 To m z(i, 0) = Нач_y(i) Next For i = 1 To n For j = 1 To m y(1) = j: y(2) = x(0) + h * (i - 1) For r = 3 To m + 2 y(r) = z(r - 2, i - 1) Next Массив = y:K(1) = h * СИСТЕМ(Массив) y(1) = j: y(2) = x(0) + h * (i - 1) + h / 2 For r = 3 To m + 2 y(r) = z(r - 2, i - 1) + K(1) / 2 Next Массив = y K(2) = h * СИСТЕМ(Массив) y(1) = j: y(2) = x(0) + h * (i - 1) + h / 2 For r = 3 To m + 2 y(r) = z(r - 2, i - 1) + K(2) / 2 Next Массив = y K(3) = h * СИСТЕМ(Массив):y(1) = j: y(2) = x(0) + h * i For r = 3 To m + 2 y(r) = z(r - 2, i - 1) + K(3) Next Массив = y K(4) = h * СИСТЕМ(Массив) z(j, i) = z(j, i - 1) + (K(1) + 2 * K(2) + 2 * K(3) + K(4)) / 6 Next Next For i = 1 To m c(i) = z(i, n) Next РУНГЕ = c End Function Sub InstallFunc3() Application.MacroOptions Macro:="РУНГЕ", Description:= _ "Возвращает значения yi, полученные методом Рунге-Кутта" End Sub В листинге 2 массивы аналогичные массивам листинга 1, только: K(1 To 4) – массив значений, вычисляемых по формулам (2.2). Решение примера 1.1 с помощью функции РУНГЕ показано на рисунке 2.1.

14-07-2021 12-07-33

Рис. 2.1 – Вид решения примера 1.1 функцией РУНГЕ

Решение примера 1.2 с помощью функции РУНГЕ показано на рисунке 2.2.

14-07-2021 12-07-45

Рис. 2.2 – Вид решения примера 1.2 функцией РУНГЕ

  Решение примера 1.3 с помощью функции РУНГЕ показано на рисунке 2.3.

14-07-2021 12-07-58

Рис. 2.3 – Вид решения примера 1.3 функцией РУНГЕ

  Пример 2.1. Построить с помощью функции РУНГЕ графики численности популяций, описываемых системой Вольтерра – Лотка 14-07-2021 12-14-42 при начальных условиях x1(0)=3, x2(0)=1; параметр t принимает значения от 0 до 3.

Расчетная таблица строится по аналогии с таблицей примера 1.1, значения независимой переменной в диапазоне А1:А31, в ячейку В2 вводится формула =РУНГЕ(0;A2;{3;1};A2/0,01). По таблице строятся графики численности популяций (рис. 2.4).

14-07-2021 12-12-02

Рис. 2.4 – Графики численности популяций

Заключение
  1. Программные коды пользовательских функций VBA Excel, реализующих численные методы решения задачи Коши для системы обыкновенных дифференциальных уравнений 1-го порядка методами Эйлера и Рунге-Кутта четвертого порядка, публикуются впервые.
  2. Как показывают примеры, применение рассматриваемых функций не вызывает трудностей, избавляет от больших объемов рутинных вычислений, позволяет получать результаты по такому сложному разделу, как численные методы решения систем дифференциальных уравнений, на современном (цифровом) уровне.
  3. Рассматриваемые пользовательские функции будут полезны как в научных исследования, связанных с системами обыкновенных дифференциальных уравнений 1-го порядка, так и в учебном процессе.
Конфликт интересов Не указан. Conflict of Interest None declared.

Список литературы / References

  1. Бахвалов Н.С. Численные методы. / Н. С. Бахвалов – М: Наука, 1975. – 632 с.
  2. Березин И.С. Методы вычислений, т. II. / И. С. Березин, Н. П. Жидков – М.: ГИФМЛ, 1959. – 620 с.
  3. Гарнаев А.Ю. MS Excel 2002: разработка приложений. / А. Ю. Гарнаев – СПб.: БХВ-Петербург, 2003. – 768 с.
  4. Кузьменко В.Г. VBA 2003. / В. Г. Кузьменко – М: ООО «Бином-Пресс», 2004, 432 с.
  5. Ларсен Р.У. Инженерные расчеты в Excel: Пер. с англ. / Р. У. Ларсен – М.: Издательский дом «Вильямс», 2002. – 544 с.
  6. Самарский А.А. Задачи и упражнения по численным методам: Учебное пособие. / А. А. Самарский, П. Н. Вабищевич, Е. А. Самарская – М.: Эдиториал УРСС, 2000. – 208 с.
  7. Сдвижков О.А. Excel – VBA. Словарь-справочник пользователя / О. А. Сдвижков. – М.: Эксмо, 2008. – 224 с.
  8. Сдвижков О.А. Пользовательские функции VBA Excel для численного решения задачи Коши ОДУ 1-го порядка / Сдвижков О.А. // Международный научно-исследовательский журнал, № 4 (106), 2021, Часть 1, стр. 35 – 40.
  9. Эрроусмит Д. Обыкновенные дифференциальные уравнения. Качественная теория с приложениями: Пер. с англ. / Д. Эрроусмит, К. Плейс. – М.: Мир, 1986. – 243 с.
  10. Сдвижков О.А. DEcode (пользовательские функции) [Электронный ресурс]. – URL: https://oas.ucoz.com/load/odu_polzovatelskie_funkcii/1-1-0-35 (дата обращения: 20.01.2021)

Список литературы на английском языке / References in English

  1. Bakhvalov N. S. Chislennye metody [Numerical Methods] / N. S. Bakhvalov-M: Nauka, 1975 – 632 p. [in Russian]
  2. Berezin I. S. Metody vychislenijj, t. II. [Methods of Calculations, vol. 2] / I. S. Berezin, N. P. Zhidkov-M.: GIFML, 1959 – 620 p. [in Russian]
  3. Garnaev A. Yu. MS Excel 2002: razrabotka prilozhenijj [MS Excel 2002: Application Development] / A. Yu. Garnaev - St. Petersburg: BKhV-Petersburg, 2003 – 768 p. [in Russian]
  4. Kuzmenko V. G. VBA 2003 / V. G. Kuzmenko-M: "Binom-Press" LLC, 2004, 432 p. [in Russian]
  5. Larsen R. U. Inzhenernye raschety v Excel: Per. s angl. [Engineering Calculations in Excel: Translation from English] / R. U. Larsen-M.: Publishing house "Vilyams", 2002 – 544 p. [in Russian]
  6. Samarsky A. A. Zadachi i uprazhnenija po chislennym metodam: Uchebnoe posobie [Problems and Exercises in Numerical Methods: A Textbook] / A. Samara, P. N. Vabishchevich, E. A. Samarskaya -M.: Ehditorial URSS, 2000 – 208 p. [in Russian]
  7. Sdvizhkov O. A. Excel – VBA. Slovar'-spravochnik pol'zovatelja [Excel – VBA. Dictionary-User reference] / O. A. Sdvizhkov. - M.: Eksmo, 2008 – 224 p. [in Russian]
  8. Sdvizhkov O. A. Pol'zovatel'skie funkcii VBA Excel dlja chislennogo reshenija zadachi Koshi ODU 1-go porjadka [Custom Excel VBA Functions For Numerical Solution of a First-Order Cauchy Ode] / O. A. Sdvizhkov // Mezhdunarodnyjj nauchno-issledovatel'skijj zhurnal [International Research Journal], No. 4 (106), 2021, Part 1, pp. 35-40 [in Russian]
  9. Arrowsmith D. Obyknovennye differencial'nye uravnenija. Kachestvennaja teorija s prilozhenijami [Ordinary Differential Equations: A Qualitative Approach with Applications]: Translation from English / D. Arrowsmith, C. M. Place. - Moscow: Mir, 1986 – 243 p. [in Russian]
  10. Sdvizhkov O. A. DEcode (pol'zovatel'skie funkcii) [DEcode (custom functions)] [Electronic resource]. – URL: https://oas.ucoz.com/load/odu_polzovatelskie_funkcii/1-1-0-35 (accessed: 20.01.2021) [in Russian]