Сопряженная задача
Постановка сопряженной задачи
Сопряженная задача формулируется следующим образом:
Причем, важной особенностью численной реализации решения сопряженной задачи, является динамическая, неравномерная по $x$ сетка, уникальная для каждого шага по времени. Эту сетку возвращается нам функция solve решения прямой задачи.
Сопряженная задача является ретроспективной. Она должна использоваться переданную ей сетку $X_N^M$ в обратном по времени направлении. Найдя решение на следующем временном слое $\psi^{m-1}$ мы должны аппроксимировать его на соответствующую новому временному слою сетку $X_N^{m-1}$.
Введем следующие обозначения
| Описание | Обозначение |
|---|---|
| вектор столбец искомой функции размерностью $N-1$: | $\mathbf{y} = (\psi_1, \psi_2, \dots, \psi_{N-1})^T$. |
| вектор столбец начальных значений размерностью $N-1$: | $\mathbf{y_0} = (0, 0, \dots, 0)^T$. |
| вектор столбец правой части размерность $N-1$: | $\mathbf{f}(\mathbf{y}, t)$ |
Приведём только формулы для неравномерной сетки.
Сопряженная задача легко приводится к виду
Хоть граничные условия у нас и нулевые $\psi_r(t) = \psi_l(t) = 0$, в формулах выпишем их явно. Причем $f^m$ вычисляется с использованием $X_N^m$.
Ненулевые элементы Якобиана $\mathbf{F}_{\mathbf{y}}$
Правая часть в уравнении для $\mathbf{w}$ в явном виде не зависит от $t$, а все сеточные функции u, f_1, f_2 берутся в момент времени $t_m$, вместо $\frac{ t_{m+1} + t_m}{2}$.
Найдем решение сопряженной задачи следующим образом:
Программная реализация
Функция неоднородности
NonLinearReactionAdvectionDiffusionWithFrontData.heterogeneity.Конечно-разностная аппроксимация дельта функции
NonLinearReactionAdvectionDiffusionWithFrontData.deltaw.Функция правой части
NonLinearReactionAdvectionDiffusionWithFrontData.adjointRP.Функция якобиана
NonLinearReactionAdvectionDiffusionWithFrontData.∂ARP_∂y, возвращает матрицу типаTridiagonal(см. официальную документацию)Функция якобиана, вычисляемого автоматическим дифференцированием
NonLinearReactionAdvectionDiffusionWithFrontData.∂adjointRP_∂yForwardDiff.jlФункция поиска решение по схеме CROS1
solve_adjoint.