Está en la página 1de 2

AMPLIACIÓN DE MATEMÁTICAS PRÁCTICA 2

Choques para la ecuación de Burgers

El objetivo de esta práctica es el de implementar un programa que utilice el método de las carac-
terı́sticas junto con las condiciones de Rankine-Hugoniot que permita calcular soluciones de la ecuación
de Burgers, ut +u ux = 0, para los casos en que se puedan producir ondas de choque, al menos para condi-
ciones iniciales “simétricas” como las que impondremos. La parte más delicada del programa consistirá
en detectar cuando se ha producido el choque. En tal caso, para mover el choque, habrá que utilizar la
velocidad de propagación que nos proporcionan las condiciones de Rankine-Hugoniot.
Se van a considerar tres condiciones iniciales: las dadas por las funciones f1 y f2 de la práctica
anterior y una tercera condición inicial dada por una función salto que produce una onda de choque, esta
función vendrá dada por (
1 x<0
f3 (x) =
0 x>0
A continuación se esboza el esqueleto del programa que debéis implementar.

function choques(t)
%========================================================================%
% Programa choques(t)
%
% Este programa resuelve el problema de valores iniciales
%
% u_t + uu_x = 0, (Ecuacion de Burgers)
% u(x,0) = f(x),
%
% mediante el metodo de las caracteristicas modificado para capturar
% choques cuando estos se forman.
%
% Hay 3 elecciones de condiciones iniciales:
% - Elecciones 1 y 2 desarrollan un choque.
% - Eleccion 3 es una funcion salto que produce un choque.
%
% t = [t1,...,tn] instantes de tiempo para los que se visualizan
% las soluciones (en el intervalo [-1,6]).
%
% Ejemplo: choques([1 2 4 6])
%========================================================================%

disp(’ ’)
disp(’Introducir:’)
disp(’1 para perfil decreciente 1’)
disp(’2 para perfil decreciente 2’)
disp(’3 para perfil salto’)
m = input(’Introduzca la eleccion de su dato inicial: 1,2 o 3 ’)

x = -1:.05:6;

if m == 3
y = (x < 0);
else
y = data(m,x);
L=2; % Para las dos funciones que se dan aqui L=2.
end

if m == 3 % En el caso de un salto.
s = ...;
...
else
s = ...; % velocidad del choque.
...
% Aqui hay que distinguir si se ha producido el choque o no.
if ... % Si no hay choque: caracteristicas.
...
else % En el caso de producirse el choque este se halla en x=...
...
end
end

% Representacion grafica de las soluciones.


plot(x,y,’*’) % Dato inicial.
...
set(gca,’XLim’,[-1 6])

Como ya indicamos al principio, la parte más delicada en la implementación de este programa consiste
en detectar para qué puntos se ha producido ya el choque y qué puntos aún forman parte de una solución
C 1 . Los primeros deberán moverse todos a una misma velocidad, dada por la condición de Rankine-
Hugoniot. Esta velocidad dependerá de las alturas que alcancen los dos extremos del segmento vertical
de solución en cada instante. Gracias a la simetrı́a de las condiciones iniciales que se os propone que
impongáis, esta velocidad permanece constante para cada caso y es sencilla de calcular. Por otro lado, los
puntos que aún no forman parte del choque deberán moverse según el método de las caracterı́sticas, que
para el caso de la ecuación de Burgers nos da una velocidad de propagación a lo largo de la caracterı́stica
que parte de (x0 , 0) de f (x0 ) (la “altura” de la solución).
Para detectar si un determinado punto en la gráfica de la solución debe formar parte del choque se
sugiere calcular la posición que ocuparı́a según el método de las caracterı́sticas y comparar con la posición
que ocupa el punto que en t = 0 estaba en L/2 y que debe moverse siempre (en los ejemplos dados y
debido a la simetrı́a) a la velocidad del choque.

También podría gustarte