2018-05-30
Таблица алгоритмов численных решений некоторых дифференциальных уравнений
Для улучшения визуального представления алгоритмов введём некоторые упрощения.
Например, \(\dot Y = \frac{dY(x)}{dx}\), а значения функций в точке \(x_i\) будут записываться так:
\[Y(x_i) = Y_i \quad f(x_i) = f_i \quad g(x_i) = g_i \quad h(x_i) = h_i\]
Расстояние между точками стандартное и неизменное на всём интервале: \(\Delta x = x_i - x_{i-1}\).
Оно выбирается в зависимости от требований решаемой задачи и вычислительных возможностей процессора.
От него также зависит и общее число итераций: \(i \in 1, 2, 3, ..., N\).
Само значение координаты находится просто: \(x_i = i\,\Delta x\).
Символами \(a, b, \omega, \alpha\) обозначаются константы, а символом \(\mathbf{i}\) — мнимая единица.
Название | Уравнение | Численное решение |
Линейное уравнение Бернулли | \[g(x)\,\dot Y = f(x)\,Y + h(x)\] | \[Y_i = {g_i\,Y_{i-1} + h_i\,\Delta x \over g_i - f_i\,\Delta x}, \quad Y_0 = Y(0)\] |
Искомая функция находится в показателе экспоненты | \[\dot Y = f(x) \exp(a\,Y) + h(x)\] | \[Y_i = Y_{i-1} + {f_i \exp(a\,Y_{i-1}) + h_i \over 1 + a\,f_i \exp(a\,Y_{i-1}) \Delta x } \Delta x, \quad Y_0 = Y(0)\] |
Искомая функция находится под логарифмом | \[\dot Y = f(x) \ln(1+a\,Y) + h(x) \\ a\,Y \ge 0 \] | \[Y_i = Y_{i-1} + \left[ f_i \ln(1+a\,Y_{i-1}) - {a\,f_i\,Y_{i-1} \over 1+a\,Y_{i-1}} + h_i \right] \Delta x \\ a\,Y_i \ge 0, \quad Y_0 = Y(0)\] |
Искомая функция находится под синусом | \[\dot Y = f(x) \sin(\omega\,Y + \alpha) + h(x)\] | \[Y_i = Y_{i-1} + {f_i \sin(A) + h_i \over 1 - f_i\,\omega\cos(A) } \Delta x \\ A = \omega\,Y_{i-1} + \alpha, \quad Y_0 = Y(0)\] |
Уравнение с квадратом производной | \[(\dot Y)^2 = f(x)\,Y + h(x)\] | \[Y_i = \begin{cases} Y_{i-1} \pm \Delta x \sqrt{A}, & A \ge 0 \\ Y_{i-1} \pm \mathbf{i} \Delta x \sqrt{|A|}, & A \lt 0 \end{cases} \\ A = f_i\,Y_{i-1} + h_i \\ Y_0 = Y(0)\] |
Уравнение с квадратным корнем из искомой функции | \[\dot Y = f(x) \sqrt{Y} + h(x)\] | \[Y_i = \begin{cases} A + \Delta x\,f_i \sqrt{Y_{i-1}}, & Y_{i-1} \ge 0 \\ A + \mathbf{i}\Delta x\,f_i \sqrt{|Y_{i-1}|}, & Y_{i-1} \lt 0 \end{cases} \\ A = Y_{i-1} + h_i\,\Delta x \\ Y_0 = Y(0)\] |
Уравнение Абеля второго рода | \[\dot Y\,(Y + a) = f(x)\,Y + g(x) \] | \[ Y_i = \begin{cases} A + \sqrt{B}, & A \ge 0, B \ge 0 \\ A + \mathbf{i}\sqrt{|B|}, & A \ge 0, B \lt 0 \\ A - \sqrt{B}, & A \lt 0, B \ge 0 \\ A - \mathbf{i}\sqrt{|B|}, & A \lt 0, B \lt 0 \end{cases} \\ A = {Y_{i-1} + f_i\,\Delta x - a \over 2} \\ B = A^2 + a\,Y_{i-1} + g_i\,\Delta x \\ Y_0 = Y(0) \] |
Обыкновенное дифф. уравнение второго порядка | \[\ddot Y = f(x)\,Y + a\] | \[Y_i = {2Y_{i-1} - Y_{i-2} + a\,\Delta x^2 \over 1 - f_i\,\Delta x^2} \\ Y_0 = Y(0), \quad Y_{-1} = Y(0) - \dot Y(0)\,\Delta x\] |
Уравнение синус-Гордона. Искомая функция находится под синусом | \[\ddot Y = f(x)\,\sin(\omega\,Y + \alpha)\] | \[Y_i = Y_{i-1} + {Y_{i-1} - Y_{i-2} + \Delta x^2 f_i \sin(A) \over 1 - \Delta x^2 f_i\,\omega\cos(A) } \\ A = \omega\,Y_{i-1} + \alpha \\ Y_0 = Y(0), \quad Y_{-1} = Y(0) - \dot Y(0)\,\Delta x\] |
Если в процессе расчёта возникает мнимая составляющая, то её нужно будет сохранять в отдельной переменной.
Лучше всего в задачах, где такая составляющая может появляться, сразу разделить возможную действительную и мнимую части в отдельные переменные.