Código en Matlab para La Ecuación de Onda

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 9

UNIVERSIDAD DE GUADALAJARA

CENTRO UNIVERSITARIO DE LOS VALLES

Programa de la Ecuación de Onda

MARCOS FLORES HERNÁNDEZ

NOVIEMBRE 2017
Código en matlab para la ecuación de Onda
clear all;
clc;

%esta parte del codigo sirve para pedir los valores dados por el problema
%desde consola. Si se desea este mismo se puede activar
syms x
% f1 = input('Inserte la condición inicial u(0,t) = f(x): ','s');
% f = inline(f1);
% g1 = input('Inserte la condición inicial du(0,t)/dt = g(x):
','s');
% g = inline(g1);
% L = input('Inserte la longitud de la cuerda): ');
% tmax = input('Inserte un tiempo máximo: ');
% h = input('Inserte el tamaño de paso en el eje x: ');
% k = input('Inserte el tamaño de paso en el eje t: ');
% c = input('Inserte la constante c: ');

%primer problema de comprobación

%en este aportado podemos introducir los tatos para un problema de la


%ecuación de onda en especifico. O si se desea se puede comentar esta
parte
%y activar el apartado anterior para introducir los datos desde consola
% f1=sin(x);
% f=inline(f1);
% g1=0*x;
% g=inline(g1);
% L=1;
% tmax=0.5;
% h=pi/10; %tamaño de paso en x
% k=0.05; %tamaño de paso en t
% c=1;
% lamb=((c^2)*(k^2))/(h^2);
% x=0:h:pi; %punto en x
% tiempo=0:k:tmax; %puntos en t
% N=round(L/h) %número de particiones en x
% M=round(tmax/k) %número de particiones en t

%segundo problema de comprobación


f1=sin(pi*x);
f=inline(f1);
g1=0*x;
g=inline(g1);
L=1;
tmax=1;
h=0.1; %tamaño de paso en x
k=0.05; %tamaño de paso en t
c=2;
lamb=((c^2)*(k^2))/(h^2);
x=0:h:1; %punto en x
tiempo=0:k:tmax; %puntos en t
N=round(L/h) %número de particiones en x
M=round(tmax/k) %número de particiones en t
%Posición inicial de la cuerda/alambre, dado por la condición inicial.
for i = 2:N
u(i,1) = f(x(i));
u(i,2) = (1 - lamb) * f(x(i)) + (lamb / 2) *( f(x(i+1)) + f(x(i-
1))) + k * g(x(i));
end

%Temperatura en la frontera: Constantes.


for j = 1:M+1
u(1,j) = 0;
u(N+1,j) = 0;
end

%Puntos iniciales dados en la malla


u(1,1) = f(0);
u(N+1,1) = f(L);

%Método iterativo para calcular la solución


for j = 2:M %Iteración temporal
for i = 2:N %iteración espacial
u(i,j+1) = 2*(1 - lamb) * u(i,j) + lamb*(u(i+1,j) + u(i-1,j))
- u(i,j-1);
end
end

figure(1)
mesh(x,tiempo,u')
colorbar
grid on
title('Solución a la ecuación de onda usando diferencias finitas')
xlabel('t')
ylabel('x')
zlabel('u(x,t)')

%Gráfica de la solución real de la ecuación de calor


figure(2)
[X,T]= meshgrid(x,tiempo);

%si se trabaja con el primer problema se debe activar esta parte y


%comentar la segunda solución
%sum = cos(T).*sin(X);
%segunda solución de comprobación
sum = cos(2*pi.*T).*sin(pi.*X);

surf(X,T,sum)
colorbar
grid on
title('Solución exacta a la ecuación de onda')
xlabel('t')
ylabel('x')
zlabel('u(x,t)')
figure(3)
mesh(x,tiempo,u')
colorbar
grid on
hold on
[X,T]= meshgrid(x,tiempo);

%si se trabaja con el primer problema se debe activar esta parte y


%comentar la segunda solución
%sum = cos(T).*sin(X);
%segunda solución de comprobación se pued
sum = cos(2*pi.*T).*sin(pi.*X);

surf(X,T,sum)
colorbar
grid on
hold on
title('Comparación de soluciones')
xlabel('t')
ylabel('x')
zlabel('u(x,t)')

  El código muestra las siguientes graficas de la solución exacta, la aproximada y una comparación 
de ambas para el caso del primer problema de comprobación  

 
si 
comparamos esta dos últimas graficas sobreponiendo una en la otra obtenemos la siguiente 
gráfica  
 
Aquí podemos observar que tenemos una buena aproximación pues las dos gráficas se acoplan de 
una buena manera sin partes irregulares de una sobresaliendo de la otra. 
Para el segundo problema obtenemos  

 
En esta grafica podemos ver la gráfica de la solución numérica obtenida por el código, a 
continuación se muestra la gráfica de la solución exacta  
 
Y por último podemos ver la comparación de las dos soluciónes  
En esta gráfica podemos observar que las dos solución son muy similares pero no del todo pues 
tenemos unas pequeñas superficies irregulares las cuales sobresalen una de la otra gráfica y esto 
se debe al error que siempre está contenido en las aproximaciones. 

También podría gustarte