Por Daniel Duque
Muy a menudo, se parte de las EDPs, conocidas, por ejempo:
∂u∂t+c∂u∂x=0
Estas se discretizan: sustituyendo las derivadas por diferencias.
Sin embargo, este es un proceso de ida y vuelta, porque las EDPs se deducen a nivel discreto.
Se suponen cambios de un campo u sólo en la dirección x
El cambio en la cantidad total AΔxui será:
ddt(AΔxui)=Φi−1/2+Φi+1/2
Los flujos por las caras vienen dados por:
Φi−1/2=Acui−1/2
Φi+1/2=−Acui+1/2
ddt(AΔxui)=Acui−1/2−Acui+1/2
Un problema obvio es que no conocemos el campo en los puntos intermedios.
Así que podemos suponer una interpolación lineal:
ui−1/2≈ui−1+ui2
ui+1/2≈ui+ui+12
De este modo,
ddt(AΔxui)=Acui−1−ui+12
duidt=−cui+1−ui−12Δx
La parte derecha se puede identificar como la derivada espacial (centrada):
∂u∂t+c∂u∂x=0
Para nosotros, es más útil la expresión discreta:
duidt=−cui+1−ui−12Δx
De hecho, habría que discretizar la derivada temporal también. Lo más sencillo es el método de Euler:
duidt≈un+1i−uniΔt
Donde el tiempo es t=nΔt.
Interpretando que la parte derecha de la ecuación se refiere al paso actual:
un+1i−uniΔt=−cuni+1−uni−12Δx
Se llega a:
un+1i=uni−cΔt2Δx(uni+1−uni−1)
Atención a la combinación cΔtΔx: es el número de Courant.
Sin embargo, es más estable si la parte derecha se considera que se refiere a valores del siguiente tiempo (¡desconocidos!). Se llega a
un+1i=uni−cΔt2Δx(un+1i+1−un+1i−1)
La interpolación lineal resulta ser bastante mala para estos problemas. Es mucho mejor un esquema "upwind":
ui−1/2≈ui−1
ui+1/2≈ui