Пример поиска начального приближения

На этой странице мы делаем include примера, который находится в корне пакета в каталоге "examples/".

Literate.jl включает текст этих примеров и в md файл.

Пример №1

Первый и последний пример, показывающий как использовать функцию.

Работа алгоритма при разных параметрах $\varepsilon$ и доли заполнения кадра (доли точек, которые прошел переходный слой) будет рассмотрена более подробно в секции численных экспериментов.

using NonLinearReactionAdvectionDiffusionWithFrontData
using Dierckx
using LinearAlgebra;
using Plots; gr();
nothing #hide

Входные параметры определим полностью, чтобы Вам было проще их быстро изменить, и быстро посмотреть на результат.

u_l(t) = -8;
u_r(t) =  4;
qf(x) = 4*sin(3 * π * x);       # Коэффициент линейного усиления,
ε = 0.03;                       # Малый параметр при старшей производной
a, b = 0, 1;                    # Область по X
t₀, T = 0, 0.42;                # Область по T
N, M = 200, 300;                # Кол-во разбиений по X, T
h = (b-a)/N;                    # шаг по X
τ = (T-t₀)/M;                   # шаг по T
Xₙ = [a  + n*h for n in 0:N];   # Сетка по Х
Tₘ = [t₀ + m*τ for m in 0:M];   # Сетка по Т
qₙ =     qf.(Xₙ);               # Сеточные значения коэффициента лин. усиления
ulₘ=    u_l.(Tₘ);               # Сеточные значения левого  ГУ
urₘ=    u_r.(Tₘ);               # Сеточные значения правого ГУ
u₀ = u_init.(Xₙ, ε=ε, x_tp = 0.1);               # Начальные условия
u, XX, TP = solve(u₀, Xₙ, N, Tₘ, M, ε, ulₘ, urₘ, qₙ);
ϕl, ϕr, ϕ, f1_data, f2_data = generate_obs_data(u, Xₙ, N, Tₘ, M, qₙ, ulₘ, urₘ);
nothing # hide

q_guess = initial_guess(f1_data, Xₙ, N, Tₘ, M, ulₘ, urₘ, 0.005);

!!! note
  Работает, только с постоянными ГУ!

Визуализация

Набросаем эскиз решения прямой задачи

psol = plot(title="Эскиз решения");
plot!(Xₙ, u[:, 1], label="u(x, 0)");
plot!(Xₙ, u[:, div(end,2)], label="u(x, T/2)");
plot!(Xₙ, u[:, end], label="u(x, T)");
psol

Найденное начальное приближение.

Начальное приближение не может быть определено в точках сетки $X_N$, которые не пересек переходный слой, поэтому там, начальное приближение продолжено константой.

plot(Xₙ, qₙ, label="Истинное")
plot!(Xₙ, q_guess, label="Начальное приближение")

This page was generated using Literate.jl.