Métodos Numéricos Avanzados. 2023-2024
\[ \newcommand{\diff}{\,\mathrm{d}} \DeclareMathOperator{\diver}{div} \newcommand{\flux}{{F}} \]
Trabajamos en dimensión \(d = 1\) y estudiamos leyes de conservación de la forma \[\begin{equation} \tag{C} \label{eq:conservacion} \frac{\partial}{\partial t} \rho = - \diver \flux \end{equation}\]
integrando en \([x_{i-\frac 1 2}, x_{i+\frac 1 2}]\) tomamos la semi-discretización espacial \[\begin{equation} \frac{\diff}{\diff t} \rho_i (t) = - \frac{ \flux_{i+\frac 1 2} (t) - \flux_{i-\frac 1 2} (t) }{x_{i+\frac 1 2} - x_{i-\frac 1 2}}, \qquad i = 1, \cdots, N. \end{equation}\]
En nuestro tipo de leyes de conservación, será frecuente que estudiemos EDPs cuyas soluciones exactas sean positivas: \(\rho \ge 0\).
Muchos de los razonamientos se pueden generalizar al caso de cambio de signo.
Estos métodos son naturales para leyes de conservación porque \[\begin{align*} \frac{\diff}{\diff t} \sum_{i=1}^N \Big(x_{i+\frac 1 2} - x_{i-\frac 1 2}\Big)\rho_i (t) &= - \left( \flux_{\frac 3 2} (t) - \flux_{\frac 1 2} (t) \right) - \left( \flux_{\frac 5 2} (t) - \flux_{\frac 3 2} (t) \right) - \cdots - \left( \flux_{N-\frac 1 2} (t) - \flux_{N + \frac 1 2} (t) \right) \\ &= - F_{N+\frac 1 2} (t) + F_{\frac 1 2} (t) \end{align*}\]
Conservación de masa es equivalente a que \[ F_{N+\frac 1 2} (t) = F_{\frac 1 2} (t) \]
En algunas ocasiones se toman ambos flujos igual a 0 para que el problema esté bien determinado.
En otras ocasiones tomaremos condiciones periódicas en \(\rho\), es decir \[ \rho_0 = \rho_N, \qquad \rho_1 = \rho_{N+1}. \]
El caso más sencillo es \(\flux(t,x) = a \rho (t,x) \ge 0\) con \(a\) constante
\[\frac{\partial \rho}{\partial t} + a\frac{\partial \rho}{\partial x} = 0\]
Suelen llamarse características a curvas \((t,X(t))\) tales que la EDP se puede resolver aisladamente a lo largo de curva.
En este caso, buscamos curvas \(X(t)\) tales que \(\rho(t, X(t)) = \rho_0 (y)\), donde \(a(0) = 1\). \[ \partial_t \rho + \frac{\partial \rho}{\partial x} \frac{\diff X}{\diff t} = 0. \]
Luego \(\frac{\diff X}{\diff t}(t) = a\). Y \(X(t,y) = y + at\).
Finalmente resolviendo \(x = y + at\) tenemos \[ \rho(t,x) = \rho_0 (x - a t). \] Es decir, solución en el punto \((t,x)\) depende sólo del valor inicial en \((0,x - at)\).
Si queremos trabajar un intervalo acotado, digamos \((0,1)\), no puede admitir condiciones de flujo nulo.
Puede, sin embargo, admitir condiciones de periódicas. Por ejemplo, para \(t \in (0,1)\) y \(a > 0\) \[ \rho(t,0) = \rho(t,1) = \rho_0(1 - at). \]
Imponer condiciones de flujo periódico consiste en decir \[ a \rho(t,1) = F(t,1) = F(t,0) = a \rho(t,0). \]
Desde el punto de vista exacto, es de nuevo imponer condiciones de periódicas en \(\rho\).
Hemos de elegir un método de discretizar \(\frac{\diff \rho_i}{\diff t}\).
Probaremos el método de Euler \[ \frac{\rho_i^{n+1} - \rho_i^n}{\Delta t} = - \frac{ F_{i+\frac 1 2}^{n+1} - F_{i - \frac 1 2}^{n+1} }{\Delta x} \]
Para que sea explícito \(F_{i+\frac 1 2}^{n+1} = G_{i+\frac 1 2} ( \rho_i^n, \rho_{i+1}^n )\).
Es decir \(F_{i+\frac 1 2}^{n+1} = a\rho_i^n , a\rho_{i+1}^n\) u otro valor.
Hagamos unos experimentos para ver qué elección de \(\rho_i\) funciona mejor.
Tenemos el método \[ \rho^{n+1}_i = \rho^n_i - a\frac{\Delta t}{\Delta x} ( \rho_{i}^n - \rho_{i-1}^n ) \]
\[\rho^{n+1}_i = \rho^n_i - a\frac{\Delta t}{\Delta x} ( \rho_{i+1}^n - \rho_{i}^n )\]
Tomamos el método \[ \rho^{n+1}_i = \rho^n_i - a\frac{\Delta t}{\Delta x} ( \rho_{i}^n - \rho_{i-1}^n ) %= (1- a\frac{\Delta t}{\Delta x}) \rho_i^n + a\frac{\Delta t}{\Delta x} \rho_{i-1}^n. \]
Tomemos \(\rho^0 = (0,1,0,0,\cdots)\). Entonces \(\rho^1 = ( 0,1- a\frac{\Delta t}{\Delta x} , a\frac{\Delta t}{\Delta x} , 0, \cdots )\).
Así \(\rho^1 \ge 0\) si y sólo si \[ 0 \le a\frac{\Delta t}{\Delta x} \le 1. \]
La primera desigualdad dice que este método sólo funciona si \(a \ge 0\). Esto se llama up-winding
La segunda desigualdad dice que \(\Delta t\) debe ser “pequeño” \[ \Delta t \le \frac 1 a \Delta x. \]
Ejercicio. Comprobar que esta condición es suficiente para si \(\rho_i^0 \ge 0\) para todo \(i\), entonces \(\rho_i^1 \ge 0\) para todo \(i\).
Ejercicio. Comprobar que para \(\rho^{n+1}_i = \rho^n_i - a\frac{\Delta t}{\Delta x} ( \rho_{i}^n - \rho_{i-1}^n )\)
la condición es \(0 \le -a\frac{\Delta t}{\Delta x} \le 1\).
Tomemos \(a > 0\). Observamos que \[ \begin{aligned} \frac{d \rho_i}{dt} (t) &= \frac{a}{\Delta x} \rho_{i} (t) \,\, \underbrace{- \frac{a}{\Delta x} \rho_{i+1}(t) }_{negativo} \end{aligned} \]
La solución es \[ \rho_i(t) = e^{\frac{a}{\Delta x}t} \rho_i(0) - \frac{a}{\Delta x} \int_0^t e^{\frac{a}{\Delta x}(t-s)} \rho_{i+1} (s) d s\]
Podría cambiar de signo.
Sin embargo \[\begin{aligned} \frac{d \rho_i}{dt} (t) = - \frac{a}{\Delta x} \rho_{i} (t) \,\, \underbrace{+ \frac{a}{\Delta x} \rho_{i-1}(t) }_{positivo} \end{aligned} \]
La solución es \[ \rho_i(t) = e^{-\frac{a}{\Delta x}t} \rho_i(0) + \frac{a}{\Delta x} \int_0^t e^{-\frac{a}{\Delta x}(t-s)} \rho_{i-1} (s) d s \]
Si \(\rho_i (0) \ge 0\) para todo \(i\). Entonces \(\rho_i \ge 0\).
Esta elección de flujo se conoce como up-winding.
Tomamos \(a>0\) y el método con up-winding. Se cumple el siguiente mantra:
Un método numérico sólo puede ser convergente si el dominio de dependencia numérico contiene al dominio de dependencia la EDP, al menos cuando \(\Delta t\) y \(\Delta x\) tienden a \(0\).
using Plots, Kronecker, LaTeXStrings
a = 0.9; T = 1;
@gif for log2Δt=-3:1:0 , log2Δx=-3:1:1
Δt=2.0^log2Δt; Δx=2.0^log2Δx
if Δt <= Δx/a
inequality = "\\leq"
color = :green
else
inequality = ">"
color = :red
end
plot(ylim=(-.1,1.1), xlim=(-2.0,2.0),
aspect_ratio=:equal,
xlabel=L"x", ylabel=L"t", legend=:outerbottom,
title=latexstring("\\Delta t=$Δt " * inequality * " \\Delta x / a, \\Delta x = $(Δx), a = $a"),
titlefontcolor=color)
plot!([0.0,-a],[1.0,0.0],label="Característica",color=:blue,
linewidth=3.0)
for i in -(2/Δx):(2/Δx), j in 0:(T/Δt)
scatter!([i*Δx], [j*Δt], color=:white , label="")
end
for i in 0:(T/Δt), j in 0:(T/Δt-i)
scatter!([-j*Δx], [i*Δt], color=:red , label="")
end
scatter!([0], [1.0], color=:red , label="Dependencia del método numérico")
end fps=0.5Queremos que \(0 \le a \frac{\Delta t}{\Delta x} \le 1\) para que todo funcione bien.