Постановка задачи
Если не всем, то многим, кто обучался на направлениях из УГС 01/02/03, доводилось в курсах дисциплин “высшая математика” или “дифференциальные уравнения” видеть обыкновенное дифференциальное уравнение первого порядка вида
которое, в силу подбора специальных учебных материалов, решалось аналитически. В последствии студенты, в некоторых случаях, сталкиваются со случаем, когда аналитического решения в элементарных функциях нет. Более того: в некоторых случаях для решения такого уравнения приходится прибегать к численным методам, самыми известными из которых, по мнению автора данной статьи, являются следующие методы:
Метод Эйлера;
Метод Рунге—Кутты;
Метод степенных рядов;
Метод аппроксимирующих многочленов;
Метод Галёркина;
В рамках данной статьи рассматривается то, откуда берутся первые два метода из списка выше. Если читатели проявят интерес, то о других методах будут сделаны статьи. Можно сказать, что первые два метода берутся из третьего метода, что описывается ниже.
Ряды Тейлора и остатки
Хитрые трюки
Если рассмотреть задачу
то можно заметить, что искомую функцию можно искать в виде ряда Тейлора
где, как это является очевидным,
При этом для практических расчётов можно обойтись первыми несколькими членами ряда, если учесть, что на некоторых промежутках можно брать столько членов ряда, чтобы остаток этого члена был меньше определённого заранее заданного неотрицательного значения, из чего следует и метод Эйлера, когда берётся числовой промежуток, на котором ищутся значения функции с использованием формулы
и метод Рунге-Кутты, при котором из соответствующего ряда Тейлора берутся только первые несколько членов этого ряда с последующей заменой производных делёнными разностями и достаточно хитрой перестановкой слагаемых и строятся давно прописанные в разных книгах/руководствах/методичках формулы(к примеру, четвёртого порядка):
От приближённого-приближённого к приближённому
Немного философии
В методе Рунге—Кутты, как ранее была указано, используются не точные значения производных, а приближённые(получаемые путём применения делённых разностей). Таким образом погрешность, накладываемая тем, что берётся лишь некоторая часть от ряда Тейлора, совмещается с тем, что берутся приближённые значения производных.
Производные
Из уравнения
становится очевидно, что
а тогда ещё и выходит так:
Таким образом, можно искать приближённое решение через приближение
Если разбить исходный отрезок, на котором ищется решение на равные отрезки(каждый из которых равен ), то выходит такая формула:
где это приближённое значение искомой функции в точке с номером
а
значения первой, второй и третьей производной искомой функции в точке
где
Код программы с реализацией
Ниже представлен код с реализацией описанного метода:
from matplotlib import pyplot as plt import math y_true = lambda x: 2* math.exp(math.sin(x)) f = lambda x,y: math.cos(x)*y f_x = lambda x,y: -math.sin(x)*y f_y = lambda x,y: math.cos(x) f_xx = lambda x,y: -f(x,y) f_yy = lambda x,y:0 f_xy = f_yx = lambda x,y:-math.sin(x) x0 = -1 x1 = 10 y0 = y_true(x0) x=[x0] y = [y0] n = 100 dx = (x1-x0)/(n-1.0) while len(x) < n: y_i, x_i = y[-1], x[-1] S = f_xx(x_i,y_i)+f_xy(x_i,y_i)*f(x_i,y_i)+f_yx(x_i,y_i)*f(x_i,y_i) + f_yy(x_i,y_i)*(f(x_i,y_i))**2 + f_x(x_i,y_i)*f_y(x_i,y_i)+(f_y(x_i,y_i))**2 * f(x_i,y_i) S = S*dx/6 + (f_x(x_i,y_i)+f_y(x_i,y_i)*f(x_i,y_i))/2 S = S*dx + f(x_i,y_i) S = S*dx + y_i x.append(x_i+dx) y.append(S) plt.plot(x,[y_true(xi) for xi in x], color="blue") plt.plot(x,y,color="red",linestyle="dashed") plt.show()
А какие могут быть проблемы?
Проблемы с данным методом могут быть на том основании, что ряд Тейлора в общем случае не сходится поточечно к функции. Такие примеры существуют( к примеру, пример Коши, о котором рассказывают в курсе матанализа на профильных направлениях ВУЗов). Таким образом встаёт вопрос: а как быть? Автор данной статьи предлагает сделать иной шаг(если таковой вообще возможен): брать не ряд Тейлора, где идёт разложение в степенной ряд с коэффициентами, состоящими из дроби, где в знаменателе факториал, а в числителе значение производной соответствующего порядка в определённой точке, а в ряд с многочленами Чебышева, раскладывая функцию по многочленам Чебышева.
Одно интересное применение метода Рунге—Кутты
Если рассмотреть задачу
то можно заметить, что решение данного ОДУ даёт такую функцию, что
а тогда выходит, что применение метода Рунге—Кутты находит своё место в численном интегрировании.
Заключение и дальнейшие планы
Как уже удалось понять, уважаемый читатель данной статьи, целью данной статьи был разбор основания метода Рунге—Кутты. Данный метод позволяет решать приближённо отдельные задачи.
В дальнейшем мной планируется применение данного метода к “задаче n тел”.
Автор данной статьи выражает надежду, что данная статья будет полезна(хотя бы студентам/обучающимся первых-вторых курсов разных университетов/институтов/академий).
