Генерация экспериментальной информации
Вырожденные решения
Положив малый параметр $\varepsilon = 0$ равным нулю, на каждом временном шаге определим задачи Коши для левого вырожденного решения $\varphi_l(x)$ и правого $\varphi_r(x)$ следующим образом
Эти обыкновенные дифференциальные уравнения решим интегрированием:
Где $\varphi_b$ – это соответствующее граничное условие, а $x_n$ узлы сетки по пространству, поданной в соответствующем направлении.
Записать формулы интегрирования ОДУ нормально.
Решением семейства этих задач Коши будут $(\varphi_l)_n^m, (\varphi_r)_n^m$. Определим полуразность вырожденных решений $\varPhi_n^m = |(\varphi_r)_n^m - (\varphi_l)_n^m|/2 + (\varphi_l)_n^m$
Положение переходного слоя $f_1(t)$ определяется как аргумент $x_{tp}$ при котором функция $u(x,t)$ пересекается с полуразностью вырожденных решений $\varPhi$. Имея сеточные значения $u_n^m, \varPhi_k^m$, где функции определены на разных сетках, сначала нужно привести их к значениям на одной сетке. После чего, построить сеточную функцию $v_k = u_k^m - \varPhi_k^m$, после чего найти ноль функции $v_k$. Ноль функции находится с помощью интерполяции обратной функции $v_k^{-1}(0)$.
Или в другой постановке:
Зная положение переходного слоя, интерполяцией найдём значение искомой функции на переходном слое $f_2(t) = u(x_{tp}(t), t)$.
Программная реализация
Задачи коши решаются
phidetermination. Для правого вырожденного решения необходимо подать ключевое словоreverseX = true, чтобы сигнализировать о обратном направлении интегрирования по $x$. Решение находится интегрированием по квадратурным формулам парабол.Полуразность находится тривиальной функцией
Φ.Положение переходного слоя определяется функцией
f1, которая в каждый момент времени вызывает функциюNonLinearReactionAdvectionDiffusionWithFrontData.find_f_zeros, которая реализует вышеописанный алгоритм поиска нуля функции.Значения функции на переходном слое определяется
f2, которая так же вызываетNonLinearReactionAdvectionDiffusionWithFrontData.find_f_zerosв каждый момент времени, только с другими аргументами.
Математически формализоваться эту задачу через поиск нуля "новой" функции.
- Всё это вместе, одной строчкой, делается с помощью
generate_obs_data.