3º metmatii - solución de la ecuación de ondas bidimensional mediante métodos numéricos

21
MÉTODOS NUMÉRICOS PARA LA ECUACIÓN DE ONDAS BIDIMENSIONAL Métodos Matemáticos II 3º Ingeniería Aeronáutica Curso 2007/2008 Alabort Martínez, Enrique Baselga Mateo, Ana García Sánchez, Clara Martínez Pardo, Carlos Mora Vargas, Eloy

Upload: eloy-mora-vargas

Post on 27-Jul-2015

1.870 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

MÉTODOS NUMÉRICOS PARA LA ECUACIÓN DE ONDAS BIDIMENSIONAL

Métodos Matemáticos II 3º Ingeniería Aeronáutica

Curso 2007/2008

Alabort Martínez, Enrique Baselga Mateo, Ana

García Sánchez, Clara Martínez Pardo, Carlos

Mora Vargas, Eloy

Page 2: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

1 Enunciado

La ecuación de ondas bidimensional es de la forma:

2 2

22 2

u uct x

⎛ ⎞∂ ∂ ∂= +⎜∂ ∂ ∂⎝ ⎠

2

2

uy ⎟ [1]

Vamos a considerar esta ecuación en el rectángulo [ ] [ ]0 5 0 5 0 5 0 5. , . . , .− × − , con una condición inicial dada por:

( ) ( )0 2 2u x, y, cos rπ= si 25.0≤r

( )0u x, y, = 0 si 25.0>r

siendo 22 yxr += . La otra condición inicial es:

( )0 0u x, y,t

∂=

Suponed condiciones nulas en la frontera.

Resolved el problema mediante un método explícito en el tiempo y el método de Crank-Nicolson.

Comparad la solución en . Para ello, haced una representación gráfica en todo el rectángulo y de la solución obtenida en la recta

100t =0 5 0 5y x, . x .= − ≤ ≤ .

Figura 1. Condiciones iniciales del problema.

2

Page 3: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

2 Método Explícito

En el método explícito se obtiene una solución que depende de las soluciones anteriores. La discretización temporal y espacial para este método en diferencias finitas tiene la siguiente forma:

1 12

2 2

2n n ni , j i , j i , ju u uu

t t

− +− +∂=

∂ Δ

21 1

2 2

2n n ni , j i , j i , ju u uu

x x− +− +∂

=∂ Δ

21 1

2 2

2n n ni , j i , j i , ju u uu

y y− +− +∂

=∂ Δ

Figura 2. Mallado espacial-temporal para el método explícito (celda computacional).

Si sustituimos la discretización en la ecuación [1] y reordenamos términos, obtenemos:

1 11 1 12

2 2

2 2 2n n n n n n n n ni , j i , j i , j i , j i , j i , j i , j i , j i , ju u u u u u u u u

ct x

− +− + − +⎛ ⎞− + − + − +

= +⎜ ⎟⎜ ⎟Δ Δ Δ⎝ ⎠

12y

( ) ( )2 2 2 2 2 2

1 2 11 1 1 12 2 2 22 1n n n n n n

i , j i , j i , j i , j i , j i , j i , jt t c t c tu u c u u u u ux y x y

+ −− + − +

⎛ ⎞⎛ ⎞ ⎛ ⎞ ⎛ ⎞Δ Δ Δ Δ= − + + + + + −⎜ ⎟⎜ ⎟ ⎜ ⎟ ⎜ ⎟Δ Δ Δ Δ⎝ ⎠ ⎝ ⎠ ⎝ ⎠⎝ ⎠

n

3

Page 4: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

Si definimos 2

22

tr cx

Δ=

Δ y

22

2

ts cyΔ

y tenemos en cuenta que nuestro mallado es

regular y uniforme ( x yΔ = Δ ), obtenemos que r s= , por lo que nuestra ecuación a resolver queda de la siguiente manera:

( ) ( )1 11 1 1 12 4n n n n n n n

i , j i , j i , j i , j i , j i , j i , ju u r u u u u r u+ −− + − += − + + + + − [2]

Para garantizar la estabilidad del esquema explícito es necesario que se cumpla la

condición de Courant: 2

220 tr c .

< = <Δ

0 5 . Por lo tanto, el paso espacial viene

determinado por el paso temporal que elijamos.

Los valores para 0n = se obtienen de la condición inicial, pero también son necesarios los valores para . Si usamos la condición de la velocidad: 1n =

( )1 0

1 00 0i , j i , ji , j i , j

u uu x, y, u ut t

−∂= → =

∂ Δ

Este sistema de ecuaciones se puede expresar en forma matricial:

1n nU KU U 1n+ −= − [3]

Donde , y son vectores columna de dimensión 1nU + nU nU 2 1xN × en los que se han colocado las filas de las matrices de manera ordenada:

111 11

11 1

12 1 2 1

12 2

1

111 11

11 1

1 11 1

1

y y

y y

x x

x x

x x

x y x y

n n, ,

n n,N ,N

n n, ,

n n,N ,N

n n

n nN , N ,

n nN ,Ny N ,Ny

n nN , N ,

n nN ,N N ,N

u u

u u

u u

u u

U U

u u

u u

u u

u u

+

+

+

+

+

+− −

+− −

+

+

⎛ ⎞ ⎛⎜ ⎟ ⎜⎜ ⎟ ⎜⎜ ⎟ ⎜⎜ ⎟ ⎜⎜ ⎟ ⎜⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟= =⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎝ ⎠ ⎝

111

11

12 1

12

1

111

11

11

1

y

y

x

x

x

x y

n,

n,N

n,

n,N

n

nN ,

nN ,Ny

nN ,

nN ,N

u

u

u

u

; U

u

u

u

u

−−

−−

⎞ ⎛ ⎞⎟ ⎜⎟ ⎜⎟ ⎜⎟ ⎜⎟ ⎜

⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟=⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟

⎟⎟⎟⎟⎟

⎠ ⎝ ⎠

Para el primer paso temporal, tal y como hemos obtenido anteriormente, . 1 0U U=

4

Page 5: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

2 4 0 0 0 02 4 0 0 0 0

0 2 4 0 0 00 0 2 4 0 0 0 0

0 0 0 2 4 0 00 0 0 2 4 0

0 0 2 4 0 00 0 2 4 0 0 00 0 0 0 2 4 0 00 0 0 0 2 40 0 0 00 0

r r rr r r r

r r rr r

r r rr r r

Kr r r

r r rr r

r r rr r

r

−−

−−

−−

=−

−−

−−

0 0 2 4r r

⎛ ⎞⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟

−⎝ ⎠

0

0

0

02 4r r

2

La matriz K es de dimensión 2x yN N× . El número de ceros entre y r en la primera

columna y en la primera fila viene determinado por r

2xN − . En las diagonales -1 y 1 cada xN valores hay un 0.

A continuación, hemos desarrollado analíticamente los términos de la ecuación [3] para un mallado de 4 y con la ayuda del programa Mathematica®: 4× 1n =

Como se puede observar, se cumple la ecuación [2], por lo que las matrices son correctas. 5

Page 6: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

Método Crank-Nicolson (CNS)

El método de Crank Nicolson utiliza también un esquema en diferencias finitas. Al contrario que el esquema explícito, éste no tiene problemas de estabilidad. La discretización temporal y espacial es la siguiente:

1 12

2 2

2n n ni , j i , j i , ju u uu

t t

− +− +∂=

∂ Δ

1 121 1 1

2 2 2

2 2n n n n n ni , j i , j i , j i , j i , j i , ju u u u u uu

x x x

11

+ + +− + −− + − +∂

= +∂ Δ Δ

+

1 121 1 1

2 2 2

2 2n n n n n ni , j i , j i , j i , j i , j i , ju u u u u uu

y y y

11

+ + +− + −− + − +∂

= +∂ Δ Δ

+

Figura 3. Mallado espacial-temporal para el método de CNS (celda computacional).

Si sustituimos la discretización en la ecuación [1] y reordenamos términos, obtenemos:

1 1 1 1 121 1 1 1

2 2 2

2 2 22

n n n n n n n n ni , j i , j i , j i , j i , j i , j i , j i , j i , ju u u u u u u u uc ...

t x x

− + + + +− + − +

⎛⎛ ⎞− + − + − += +⎜⎜ ⎟⎜ ⎟⎜Δ Δ Δ⎝ ⎠⎝

+

1 1 11 1 1 1

2 2

1 1

2

2 22 n n n n n ni , j i , j i , j i ,

n n ni , j i , j i , j j i , j i , ju u u u u u

.u u u

.. .. ;yt y

+ + +− + +

−−

+− ⎞⎛ ⎞− + − ++ + ⎟⎜ ⎟⎜ ⎟

+

Δ⎝ ⎠Δ ⎟Δ

6

Page 7: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

( ) ( )2 2 2 2

1 1 1 1 11 1 1 12 22 2 2

2 2n n n n n n n n ni , j i , j i , j i , j i , j i , j i , j i , j i , j

c t c tu u u u u u u u u ...x x

− + + + +− + − +

Δ Δ− + = − + + − + +

Δ Δ

( ) ( )2 2 2 2

1 1 11 1 1 12 2

1 22

2 22

n n n n n ni , j i , j i , j

n ni , j i , j i , j i , j i , j

c t c t... u u u u u u. ;y

.y

u u− + + +− + − +

Δ Δ+− − + + − +

Δ Δ

( ) ( )2 2 2 2 2 2

1 2 1 1 1 11 1 1 12 2 2 21

2 2n n n n ni , j i , j i , j i , j i , j

t t c t c tu c u u u ux y x

...y

+ + + + +− + − +

⎛ ⎞⎛ ⎞ ⎛ ⎞ ⎛Δ Δ Δ Δ+ + − + − + =⎜ ⎟⎜ ⎟ ⎜ ⎟ ⎜Δ Δ Δ Δ⎝ ⎠ ⎝ ⎠ ⎝⎝ ⎠

...⎞⎟⎠

( ) ( )2 2 2 2 2 2

2 11 1 1 12 2 2 22 1

2 2n n n n ni , j i , j i , j i , j i , j i

t t c t c t... u c u u u u ux y x

.y

. n ;−− + − +

⎛ ⎞⎛ ⎞ ⎛ ⎞ ⎛ ⎞Δ Δ Δ Δ= − + + + + + −⎜ ⎟⎜ ⎟ ⎜ ⎟ ⎜ ⎟Δ Δ Δ Δ⎝ ⎠ ⎝ ⎠ ⎝ ⎠⎝ ⎠

Si procedemos tal y como hemos hecho para el método explícito:

2 22 2

2 2

t tr c ; s c ; x y r sx y

Δ Δ= = Δ = Δ →

Δ Δ=

( ) ( )

( ) ( )

1 1 1 1 11 1 1 1

11 1 1 1

1 22

2 22

n n n n ni , j i , j i , j i , j i , j

n n n n ni , j i , j i , j i , j i , j i , j

ru r u u u u ...

r... u r u u u u u

+ + + + +− + − +

−− + − +

+ − + + + =

= − + + + + − n

0

[4]

Los valores para n = se obtienen de la condición inicial, pero también son necesarios los valores para . Si usamos la condición de la velocidad: 1n =

( )1 0

1 00 0i , j i , ji , j i , j

u uu x, y, u ut t

−∂= → =

∂ Δ

Este sistema de ecuaciones se puede expresar en forma matricial:

1n nAU KU U 1n+ −= − [5]

( )1 1n nU A KU U+ − −= − 1n

Donde , y son vectores columna de dimensión 1nU + nU nU 2 1xN × en los que se han colocado las filas de las matrices de manera ordenada:

7

Page 8: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

111 11

11 1

12 1 2 1

12 2

1

111 11

11 1

1 11 1

1

y y

y y

x x

x x

x x

x y x y

n n, ,

n n,N ,N

n n, ,

n n,N ,N

n n

n nN , N ,

n nN ,Ny N ,Ny

n nN , N ,

n nN ,N N ,N

u u

u u

u u

u u

U U

u u

u u

u u

u u

+

+

+

+

+

+− −

+− −

+

+

⎛ ⎞ ⎛⎜ ⎟ ⎜⎜ ⎟ ⎜⎜ ⎟ ⎜⎜ ⎟ ⎜⎜ ⎟ ⎜⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟= =⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎝ ⎠ ⎝

111

11

12 1

12

1

111

11

11

1

y

y

x

x

x

x y

n,

n,N

n,

n,N

n

nN ,

nN ,Ny

nN ,

nN ,N

u

u

u

u

; U

u

u

u

u

−−

−−

⎞ ⎛ ⎞⎟ ⎜⎟ ⎜⎟ ⎜⎟ ⎜⎟ ⎜

⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟=⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟

⎟⎟⎟⎟⎟

⎠ ⎝ ⎠

1 2 2 0 0 2 0 02 1 2 2 0 0 2 0 0

0 2 1 2 2 0 0 0 00 0 2 1 2 0 0 0 0

2 0 0 0 1 2 2 0 00 2 0 0 2 1 2 0 0

0 0 1 2 2 0 0 20 0 2 1 2 0 0 00 0 0 0 1 2 20 0

r r rr r r r

r r rr r

r r rr r r

Ar r r

r r rr r

+ − −− + − −

− + −− +

− + −− − +

=+ − −− + −

+ −

02

0 00 0 2 1 2 2 0

0 0 2 0 00 0 2 0

r r rr r r

r r

⎛ ⎞⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟− + −⎜ ⎟⎜ ⎟− − +⎜ ⎟

− −⎝ ⎠

2 1 2 20 1 2

rr

−+

2

La matriz A es de dimensión 2x yN N× . El número de ceros entre 2r− y 2r− en la

primera columna y en la primera fila viene determinado por 2xN − . En las diagonales -1 y 1 cada xN valores hay un 0.

8

Page 9: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

2 4 2 0 0 2 0 02 2 4 2 0 0 2 0 0

0 2 2 4 2 0 0 0 00 0 2 2 4 0 0 0 02 0 0 0 2 4 2 0 0

0 2 0 0 2 2 4 0 0

0 0 2 4 2 0 0 00 0 2 2 4 0 0 00 0 0 0 2 4 20 0 0 0 2 2 40 0

r r rr r r r

r r rr r

r r rr r r

Kr r r

r r rr r

r r rr

−−

−−

−−

=−

−−

−0 02 0

2 0 0 2 2 4 20 0 2 0

r r rr r

⎛ ⎞⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟⎜ ⎟−⎜ ⎟

−⎝ ⎠0 2 2 4r

2

La matriz K es de dimensión 2x yN N× . El número de ceros entre 2r y 2r en la

primera columna y en la primera fila viene determinado por 2xN − . En las diagonales -1 y 1 cada xN valores hay un 0.

A continuación, hemos desarrollado analíticamente los términos de la ecuación [5] para un mallado de 4 y con la ayuda del programa Mathematica®: 4× 1n =

9

Page 10: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

Como se puede observar, se cumple la ecuación [4], por lo que las matrices son correctas.

10

Page 11: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

3 Programación en MATLAB®

A continuación, explicaremos los pasos que se han seguido para implementar los métodos explícito y Crank-Nicolson en el programa MATLAB®. Para el método explícito se ha optado por programarlo de dos formas distintas: iterativa y matricial. El método de Crank-Nicolson sólo se ha implementado matricialmente.

En primer lugar, introducimos las condiciones de nuestro problema:

%% Introducción de las condiciones del problema clear all clc path(path,cd); dx=1/3; dy=dx; dt=0.02; L=0.5; x=[-L:dx:L]; y=[-L:dy:L]; c=1; T=150; tf=100; r=(c*dt/dx)^2; mx=min(x); Mx=max(x); my=min(y); My=max(y); Nx=length(x); Ny=length(y); Nt=round(T/dt); %Condiciones Iniciales for i=1:Nx for j=1:Ny rr(i,j)=sqrt(x(i)^2+y(j)^2); if rr(i,j)>0.2 5 U0(i,j)=0; else U0(i,j)=2*cos(2*pi*rr(i,j)); end end end %Dibuja condiciones iniciales surf(x,y,U0); title({['Método ... :: Distribución de U para t=0 segundos'];['\Deltat=',num2str(dt),' :: \Deltax=\Deltay=',num2str(dx)]}); xlabel(['X (\Deltax=',num2str(dx),')']); ylabel(['Y (\Deltay=',num2str(dy),') 'U'); ']); zlabel(axis([mx Mx my My -2 2]); print('-dpng','-r100','imagen_0'); %Condición de la velocidad Up0=0*U0; % Cálculo del primer paso temporal U1=U0+dt*Up0;

11

Page 12: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

A continuación, presentamos el algoritmo que se ha usado para resolver el problema con el método explícito de forma iterativa:

%% Método explícito iterativo metodo='explícito (iterativo)'; U0expl=U0; U1expl=U1; tic % Iteracion para el resto de pasos temporales for n=1:Nt for i=1:Nx for j=1:Ny if i==1 if j==1 U{n}(i,j)=2*(1-2*r)*U1expl(i,j)+r*(U1expl(i+1,j)+U1expl(i,j+1))-U0expl(i,j); elseif j==Nx U{n}(i,j)=2*(1-2*r)*U1expl(i,j)+r*(U1expl(i+1,j)+U1expl(i,j-1))-U0expl(i,j); else U{n}(i,j)=2*(1-2*r)*U1expl(i,j)+r*(U1expl(i+1,j)+U1expl(i,j-1)+U1expl(i,j+1))-U0expl(i,j); end elseif j==1 if i==Nx U{n}(i,j)=2*(1-2*r)*U1expl(i,j)+r*(U1expl(i-1,j)+U1expl(i,j+1))-U0expl(i,j); else U{n}(i,j)=2*(1-2*r)*U1expl(i,j)+r*(U1expl(i-1,j)+U1expl(i+1,j)+U1expl(i,j+1))-U0expl(i,j); end elseif i==Nx if j==Ny U{n}(i,j)=2*(1-2*r)*U1expl(i,j)+r*(U1expl(i-1,j)+U1expl(i,j-1))-U0expl(i,j); else U{n}(i,j)=2*(1-2*r)*U1expl(i,j)+r*(U1expl(i-1,j)+U1expl(i,j-1)+U1expl(i,j+1))-U0expl(i,j); end elseif j==Ny U{n}(i,j)=2*(1-2*r)*U1expl(i,j)+r*(U1expl(i-1,j)+U1expl(i+1,j)+U1expl(i,j-1))-U0expl(i,j); else U{n}(i,j)=2*(1-2*r)*U1expl(i,j)+r*(U1expl(i-1,j)+U1expl(i+1,j)+U1expl(i,j-1)+U1expl(i,j+1))-U0expl(i,j);

12

Page 13: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

end end end U0expl = U1expl; U1expl = U{n}; end tcalc(1)=toc; size=whos('U'); size=size.bytes; size=size/(1024)^2; fprintf('El tiempo de cálculo ha sido %g segundos y el tamaño de U es %g MB\n\n',tcalc(1),size); Uexplit=U{tf/dt};

El motivo de por qué se han tenido que usar tantas sentencias de tipo if es porque hay que tener especial cuidado con los valores de la frontera. Cada solución en cada instante de tiempo es almacenada en un cell array.

Para el método explícito resuelto de forma matricial:

%% Método explícito Matricial metodo='explícito (matricial)'; tic E=ones(Nx^2,1); ceros=zeros(Nx^2,Nx-2); r1=r*E; r2=r1; r2(Nx:Nx:Nx^2,1)=0; r3=flipud(r2); diagsK=[r1 ceros r2 (2-4*r)*E r3 ceros r1]; K=spdiags(diagsK,-Nx:Nx,Nx^2,Ny^2); U0t=U0'; U1t=U1'; U0vect=U0t(:); U1vect=U1t(:); %Iteración para el resto de pasos temporales for n=1:Nt Uvect=K*U1vect-U0vect; U0vect = U1vect; U1vect = Uvect; for i=1:Nx U{n}(i,:)=Uvect((i-1)*Ny+1:i*Ny); % Convierte a Matriz end end tcalc(2)=toc; mb=whos('U'); mb=mb.bytes; mb=mb/(1024)^2; fprintf('El tiempo de cálculo ha sido %g segundos y el tamaño de U es %g MB\n\n',tcalc(2),mb); Uexplmat=U{tf/dt};

La matriz K se ha construido a partir de sus diagonales. Se ha optado por una matriz dispersa con el fin de ahorrar espacio en memoria. Cada solución en cada instante de tiempo es almacenada en un cell array.

13

Page 14: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

Por último, para el método de Crank-Nicolson:

%% Método Crank-Nicolson metodo='Crank-Nicolson'; tic E=ones(Nx^2,1); ceros=zeros(Nx^2,Nx-2); r1=r/2*E; r2=r1; r2(Nx:Nx:Nx^2,1)=0; r3=flipud(r2); diagsK=[r1 ceros r2 (2-2*r)*E r3 ceros r1]; K=spdiags(diagsK,-Nx:Nx,Nx^2,Ny^2); diagsA=[-r1 ceros -r2 (1+2*r)*E -r3 ceros -r1]; A=spdiags(diagsA,-Nx:Nx,Nx^2,Ny^2); U0t=U0'; U1t=U1'; U0vect=U0t(:); U1vect=U1t(:); %Iteración para el resto de pasos temporales for n=1:Nt Uvect=A\(K*U1vect-U0vect); U0vect = U1vect; U1vect = Uvect; for i=1:Nx U{n}(i,:)=Uvect((i-1)*Ny+1:i*Ny); % Convierte a Matriz end end tcalc(3)=toc; mb=whos('U'); mb=mb.bytes; mb=mb/(1024)^2; fprintf('El tiempo de cálculo ha sido %g segundos y el tamaño de U es %g MB\n\n',tcalc(3),mb); Ucrank=U{tf/dt};

Al igual que anteriormente, las matrices A y K se han construido a partir de sus diagonales. Se ha optado por matrices dispersas con el fin de ahorrar espacio en memoria. Cada solución en cada instante de tiempo es almacenada en un cell array.

Con el fin de poder dibujar la evolución del sistema se han elaborado vídeos. Estos videos se han montado fotograma a fotograma:

%% Obtener Fotogramas for i=1:60/dt surf(x,y,U{i}); title({['Método ',metodo,' :: Distribución de U para t=',num2str(i*dt),' segundos'];['\Deltat=',num2str(dt),' :: \Deltax=\Deltay=',num2str(dx)]}); xlabel(['X (\Deltax=',num2str(dx),')']); ylabel(['Y (\Deltay=',num2str(dy),')']); zlabel('U'); axis([mx Mx my My -2 2]); name=['imagen_',num2str(i)]; print('-dpng','-r100',name) end

14

Page 15: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

4 Resultados

Se ha elegido un paso temporal de 0.02 segundos y un paso temporal de 0.04 metros. Por lo tanto, se cumple la condición de estabilidad para el método explícito.

Con el fin de facilitar la impresión de los resultados en forma de gráfico, se ha programado el siguiente código en MATLAB®:

%% Ejercicio explicito iterativo surf(x,y,Uexplit) title({['Método explícito (iterativo) :: Distribución de U para t=',num2str(tf),' segundos'];['\Deltat=',num2str(dt),' :: \Deltax=\Deltay=',num2str(dx)]}); xlabel(['X (\Deltax=',num2str(dx),')']); ylabel(['Y (\Deltay=',num2str(dy),')']); zlabel('U'); axis([mx Mx my My -2 2]); print ,'-r100','ondas2D_explicito_iterativo_U_3D_t100') ('-dpng'pause plot(x,diag(Uexplit)) title({['Método explícito (iterativo) :: Distribución de U para t=',num2str(tf),' segundos en la recta y=x'];['\Deltat=',num2str(dt),' :: \Deltax=\Deltay=',num2str(dx)]}); print('-dpng','-r100','ondas2D_explicito_iterativo_U_2D_y=x_t100') %% Ejercicio explicito matricial surf(x,y,Uexplmat) title({['Método explícito (matricial) :: Distribución de U para t=',num2str(tf),' segundos'];['\Deltat=',num2str(dt),' :: \Deltax=\Deltay=',num2str(dx)]}); xlabel(['X (\Deltax=',num2str(dx),')']); ylabel(['Y (\Deltay=',num2str(dy),')']); zlabel('U'); axis([mx Mx my My -2 2]); print ,'-r100','ondas2D_explicito_matricial_U_3D_t100') ('-dpng'pause plot(x,diag(Uexplmat)) title({['Método explícito (matricial) :: Distribución de U para t=',num2str(tf),' segundos en la recta y=x'];['\Deltat=',num2str(dt),' :: \Deltax=\Deltay=',num2str(dx)]}); print('-dpng','-r100','ondas2D_explicito_matricial_U_2D_y=x_t100') %% Ejercicio Crank-Nicolson surf(x,y,Ucrank); title({['Método Crank-Nicolson :: Distribución de U para t=',num2str(tf),' segundos'];['\Deltat=',num2str(dt),' :: \Deltax=\Deltay=',num2str(dx)]}); xlabel(['X (\Deltax=',num2str(dx),')']); ylabel(['Y (\Deltay=',num2str(dy),')']); zlabel('U'); axis([mx Mx my My -2 2]); print('-dpng','-r100','ondas2D_crank-nicolson_U_3D_t100') pause plot(x,diag(Ucrank)); title({['Método Crank-Nicolson :: Distribución de U para t=',num2str(tf),' segundos en la recta y=x'];['\Deltat=',num2str(dt),' :: \Deltax=\Deltay=',num2str(dx)]}); print('-dpng','-r100','ondas2D_crank-nicolson_U_2D_y=x_t100')

15

Page 16: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

Además de las gráficas que a continuación se adjuntan, se han elaborado vídeos de un minuto en los que se muestran la evolución temporal del sistema para cada uno de los métodos. A continuación se muestran las gráficas para los instantes de tiempo 2, 5, 10, 20, 50 y 100 segundos de cada uno de los métodos. Se muestra tanto la distribución de U en todo el rectángulo como en la recta y x= :

Para t=2 s:

16

Page 17: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

Para t=5 s:

17

Page 18: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

Para t=10 s:

18

Page 19: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

Para t=20 s:

19

Page 20: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

Para t=50 s:

20

Page 21: 3º MetMatII - Solución de la ecuación de ondas bidimensional mediante métodos numéricos

Para t=100 s:

A la vista de los resultados, podemos concluir que existe un error en el método de Crank-Nicolson que hemos implementado, aunque no hemos podido localizar dónde. Al principio, el método CNS es similar al explícito, pero conforme avanza el tiempo, el modelo de CNS se va amortiguando y la membrana deja de vibrar. Como era de esperar, las dos formas en las que hemos desarrollado el método explícito producen resultados similares.

21