Явные и неявные методы

редактировать

Явные и неявные методы - это подходы, используемые в численном анализе для получения численных приближений к решения зависящих от времени обыкновенных и дифференциальных уравнений в частных производных, как требуется в компьютерном моделировании физических процессов. Явные методы вычисляют состояние системы в более позднее время по состоянию системы в текущий момент времени, в то время как неявные методы находят решение, решая уравнение, включающее как текущее состояние системы, так и более позднее. Математически, если Y (t) {\ displaystyle Y (t)}Y (t) - текущее состояние системы, а Y (t + Δ t) {\ displaystyle Y (t + \ Delta t) }Y (t + \ Delta t) - это состояние в более позднее время (Δ t {\ displaystyle \ Delta t}\ Delta t - небольшой временной шаг), тогда для явного метода

Y (t + Δ t) = F (Y (t)) {\ displaystyle Y (t + \ Delta t) = F (Y (t)) \,}Y (t + \ Delta t) = F (Y (t)) \,

, а для неявного метода решается уравнение

G (Y (T), Y (T + Δ T)) знак равно 0 (1) {\ Displaystyle G {\ Big (} Y (t), Y (t + \ Delta t) {\ Big)} = 0 \ qquad (1) \,}{\ displaystyle G {\ Big (} Y ( t), Y (t + \ Delta t) {\ Big)} = 0 \ qquad (1) \,}

, чтобы найти Y (t + Δ t). {\ displaystyle Y (t + \ Delta t).}Y (t + \ Delta t).

Неявные методы требуют дополнительных вычислений (решения приведенного выше уравнения), и их может быть намного сложнее реализовать. Неявные методы используются, потому что многие проблемы, возникающие на практике, являются жесткими, для которых использование явного метода требует непрактично малых временных шагов Δ t {\ displaystyle \ Delta t}\ Delta t чтобы погрешность результата оставалась ограниченной (см. числовая устойчивость ). Для таких задач для достижения заданной точности требуется гораздо меньше вычислительного времени для использования неявного метода с большими временными шагами, даже с учетом того, что необходимо решать уравнение вида (1) на каждом временном шаге. Тем не менее, следует ли использовать явный или неявный метод, зависит от решаемой проблемы.

Поскольку неявный метод не может быть реализован для каждого типа дифференциального оператора, иногда рекомендуется использовать так называемый метод разделения оператора, что означает, что дифференциальный оператор переписывается как сумма двух дополнительных операторы

Y (t + Δ t) знак равно F (Y (t + Δ t)) + G (Y (t)), {\ displaystyle Y (t + \ Delta t) = F (Y (t + \ Delta t))) + G (Y (t)), \,}{\ Displaystyle Y (t + \ Delta t) = F (Y (t + \ Delta t)) + G (Y (t)), \,}

, при этом один рассматривается явно, а другой неявно. Для обычных приложений неявный член выбирается линейным, а явный член может быть нелинейным. Эта комбинация первого метода называется неявно-явным методом (сокращенно IMEX,).

Иллюстрация с использованием прямого и обратного методов Эйлера

Рассмотрим обыкновенное дифференциальное уравнение

dydt = - y 2, t ∈ [0, a] (2) {\ displaystyle {\ frac {dy} {dt}} = - y ^ {2}, \ t \ in [0, a] \ quad \ quad (2)}{\ frac {dy} {dt}} = - y ^ {2}, \ t \ in [0, a] \ quad \ quad (2)

с начальным условием y (0) = 1. {\ displaystyle y (0) = 1.}y (0) = 1. Рассмотрим сетку tk = akn {\ displaystyle t_ {k} = a {\ frac {k} {n}}}t_ {k} = a {\ frac {k} {n}} для 0 ≤ k ≤ n, то есть шаг по времени равен Δ t = a / n, {\ displaystyle \ Delta t = a / n,}\ Delta t = a / n, и обозначает yk = y (tk) {\ displaystyle y_ {k} = y (t_ {k})}y_ {k} = y (t_ {k}) для каждого k {\ displaystyle k}k . дискретизируйте это уравнение, используя простейшие явные и неявные методы, которыми являются прямой метод Эйлера и обратный метод Эйлера (см. числовые обыкновенные дифференциальные уравнения ), и сравнить полученные схемы.

Прямой метод Эйлера
Результат применения различных методов интегрирования к оде y ′ = - y 2, t ∈ [0, 5], y 0 = 1 {\ displaystyle y '= - y ^ { 2}, \; t \ in [0,5], \; y_ {0} = 1}{\displaystyle y'=-y^{2},\;t\in [0,5],\;y_{0}=1}с Δ t = 5/10 {\ displaystyle \ Delta t = 5/10}{\ displaystyle \ Delta t = 5/10} .

Прямой метод Эйлера

(dydt) k ≈ yk + 1 - yk Δ t = - yk 2 {\ displaystyle \ left ({\ frac {dy} {dt}} \ right) _ { k} \ приблизительно {\ frac {y_ {k + 1} -y_ {k}} {\ Delta t}} = - y_ {k} ^ {2}}{\ displaystyle \ left ({\ frac {dy} {dt}} \ right) _ {k} \ приблизительно {\ гидроразрыва {y_ {k + 1} -y_ {k}} {\ Delta t}} = - y_ {k} ^ {2}}

дает

yk + 1 = yk - Δ tyk 2 (3) {\ displaystyle y_ {k + 1} = y_ {k} - \ Delta ty_ {k} ^ {2} \ quad \ quad \ quad (3) \,}y _ {{k + 1}} = y_ {k} - \ Delta ty_ {k} ^ { 2} \ quad \ quad \ quad (3) \,

для каждого k = 0, 1,…, n. {\ displaystyle k = 0,1, \ dots, n.}к = 0,1, \ точки, п. Это явная формула для yk + 1 {\ displaystyle y_ {k + 1}}y _ {{k + 1}} .

Обратный метод Эйлера

С помощью обратного метода Эйлера

yk + 1 - yk Δ t = - yk + 1 2 {\ displaystyle {\ frac {y_ {k + 1} -y_ {k}} {\ Delta t} } = - y_ {k + 1} ^ {2}}{\ frac {y _ {{k + 1}} - y_ {k}} {\ Delta t}} = - y _ {{ k + 1}} ^ {2}

находят неявное уравнение

yk + 1 + Δ tyk + 1 2 = yk {\ displaystyle y_ {k + 1} + \ Delta ty_ { k + 1} ^ {2} = y_ {k}}y _ {{k + 1 }} + \ Delta ty _ {{k + 1}} ^ {2} = y_ {k}

для yk + 1 {\ displaystyle y_ {k + 1}}y _ {{k + 1}} (сравните это с формулой (3), где yk + 1 {\ displaystyle y_ {k + 1}}y _ {{k + 1}} было дано явно, а не как неизвестное в уравнении).

Это квадратное уравнение , имеющее один отрицательный и один положительный корень . Положительный корень выбирается, потому что в исходном уравнении начальное условие положительное, а затем y {\ displaystyle y}y на следующем временном шаге задается как

yk + 1 = - 1 + 1 + 4 Δ тык 2 Δ т. (4) {\ displaystyle y_ {k + 1} = {\ frac {-1 + {\ sqrt {1 + 4 \ Delta ty_ {k}}}} {2 \ Delta t}}. \ Quad \ quad (4)}y _ {{k + 1}} = {\ frac {-1 + {\ sqrt {1+ 4 \ Delta ty_ {k}}}} {2 \ Delta t}}. \ Quad \ quad (4)

В подавляющем большинстве случаев уравнение, которое необходимо решить при использовании неявной схемы, намного сложнее, чем квадратное уравнение, и аналитического решения не существует. Затем для нахождения численного решения используются алгоритмы поиска корней, такие как метод Ньютона.

Метод Кранка-Николсона

С помощью метода Кранка-Николсона

yk + 1 - yk Δ t = - 1 2 yk + 1 2 - 1 2 yk 2 {\ displaystyle {\ frac {y_ { k + 1} -y_ {k}} {\ Delta t}} = - {\ frac {1} {2}} y_ {k + 1} ^ {2} - {\ frac {1} {2}} y_ {k} ^ {2}}{\ displaystyle {\ frac {y_ {k + 1} -y_ {k}} {\ Delta t}} = - {\ frac {1} {2}} y_ {k + 1} ^ {2} - {\ frac {1} { 2}} y_ {k} ^ {2}}

можно найти неявное уравнение

yk + 1 + 1 2 Δ tyk + 1 2 = yk - 1 2 Δ tyk 2 {\ displaystyle y_ {k + 1} + {\ frac {1} {2}} \ Delta ty_ {k + 1} ^ {2} = y_ {k} - {\ frac {1} {2}} \ Delta ty_ {k} ^ {2}}{\ displaystyle y_ {k + 1} + {\ frac {1} {2}} \ Delta ty_ {k + 1} ^ { 2} = y_ {k} - {\ frac {1} {2}} \ Delta ty_ {k} ^ {2}}

для yk + 1 {\ displaystyle y_ {k + 1}}y _ {{k + 1}} (сравните это с формулой (3), где yk + 1 {\ displaystyle y_ {k + 1}}y _ {{k + 1}} был задан явно, а не как неизвестное в уравнении). Это можно решить численно с помощью алгоритмов поиска корня, таких как метод Ньютона, чтобы получить yk + 1 {\ displaystyle y_ {k + 1}}y _ {{k + 1}} .

Crank Николсона можно рассматривать как форму более общих IMEX (неявных-явных) схем.

Прямой-обратный метод Эйлера
Результат применения обоих методов, прямого Эйлера, а также прямого-обратного Эйлера метод a = 5 {\ displaystyle a = 5}a = 5 и n = 30 {\ displaystyle n = 30}n = 30 .

Чтобы применить IMEX-схему, рассмотрите немного другой дифференциальное уравнение:

dydt = y - y 2, t ∈ [0, a] (5) {\ displaystyle {\ frac {dy} {dt}} = yy ^ {2}, \ t \ in [0, a] \ quad \ quad (5)}{\ displaystyle {\ frac {dy} {dt}} = yy ^ {2}, \ t \ in [0, a] \ quad \ quad (5)}

Отсюда следует, что

(dydt) k ≈ yk + 1 - yk 2, t ∈ [0, a] {\ displaystyle \ left ({\ frac {dy} {dt}} \ right) _ {k} \ приблизительно y_ {k + 1} -y_ {k} ^ {2}, \ t \ in [0, a]}{\ displaystyle \ left ({\ frac {dy} {dt}} \ right) _ {k} \ приблизительно y_ {k + 1} -y_ {k} ^ {2}, \ t \ in [0, a]}

и, следовательно,

yk + 1 знак равно yk (1 - yk Δ t) 1 - Δ t (6) {\ displaystyle y_ {k + 1} = {\ frac {y_ {k} (1-y_ {k} \ Delta t)} {1- \ Дельта t}} \ quad \ quad (6)}{\ displaystyle y_ {k + 1} = {\ frac{y_ {k} (1-y_ {k} \ Delta t)} {1- \ Delta t}} \ quad \ quad (6)}

для каждого k = 0, 1,…, n. {\ displaystyle k = 0,1, \ dots, n.}к = 0,1, \ точки, п.

См. также
Источники
Последняя правка сделана 2021-05-19 09:58:01
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте