You are on page 1of 5

PR

ACTICAS DE C

ALCULO NUM

ERICO III
PR

ACTICA6: la ecuacion de Laplace en un dominio rectangular mediante


diferencias nitas
En esta pr actica resolveremos la ecuaci on de Laplace con condiciones de contorno de
tipo Dirichlet mediante diferencias nitas. Este es el problema correspondiente a la ob-
tenci on de la distribucion de temperaturas en una placa rectangular con unas distribucion
ja de temperatura en los bordes de la placa.
Nuestro problema de prueba ser a:
u
xx
+u
yy
=0
(x)
(y)
(x) = 100sinh(pi/10)sin(pi x/10)/sinh(pi)
(y) = 100sin(pi/10)sinh(pi y/10)/sinh(pi)
x
1
0
1
u=0
u=0
y
cuya soluci on analtica es:
u
an
(x, y) =
100 sinh(y/10) sin(x/10)
sinh()
1 Diferencias nitas:
La aproximacion de diferencias nitas (con un esquema de 5 puntos para el laplaciano) de
la ecuaci on de Poisson

2
u u
xx
+ u
yy
= f(x, y) (1)
responde, como sabemos, al siguiente metodo:
u(x + h, y) + u(x h, y) + u(x, y + h) + u(x, y h) 4u(x, y) h
2
f(x, y)
En esta expresi on asumimos, por simplicidad, un mismo espaciado h en las dos direc-
ciones. Tomaremos el origen de coordenadas en el vertice inferior izquierdo de la placa. En
esta pr actica resolveremos la ecuaci on de Laplace tanto mediante esta regla de 5 puntos
como mediante la de 9 puntos.
Nuestra rutina de diferencias nitas (dfelip.m) tendra la siguiente sintaxis:
function [x,y,u,lap]=dfelip(h,a,b,fx0,fxa,fy0,fyb)
Donde el signicado de los inputs es el siguiente:
% h: espaciado del reticulo en cada una de las dos direcciones.
% a: longitud de la placa en la direccion x
% b: longitud de la placa en la direccion y
% fx0: funcion correspondiente a la condicion de Dirichlet para x=0
% fxa: Idem para x=a
% fy0: Idem para y=0
% fyb: Idem para y=b
y el signicado de los outputs es:
% x: vector de coordenadas en la direccion x
% y: vector de cordenadas en la direccion y
% u: matriz del campo de temperaturas en los puntos del reticulo
% lap: matriz laplaciana obtenida
Damos el programa dfelip explcitamente:
function [x,y,u,L]=dfelip(h,a,b,fx0,fxa,fy0,fyb,rule)
[x,y,u,IP,nv,in,jn,aa]=gridrD(h,a,b,fx0,fxa,fy0,fyb);
[L,B]=feval(rule,u,IP,nv,in,jn,aa);
v=L\B;
for a=1:nv
u(in(a),jn(a))=v(a);
end;
Vemos que el programa llama a dos funciones. La primera de ellas, gridrD.m, crea
los vectores x e y, inicializa la funcion soluci on considerando las condiciones de contorno
y hace los mismo con otras variables necesarias para la construccion del sistema lineal.
La segunda se utiliza para la construccion de la matriz laplaciana L y la de terminos
independientes B; cuando rule=lapla5, la lnea
[L,B]=feval(rule,u,IP,nv,in,jn,aa);
es, por supesto, equivalente a
[L,B]=lapla5(u,IP,nv,in,jn,aa);
Describiremos m as adelante en que consiste la rutina lapla5.m. Antes, es necesario en-
tender la utilidad de gridrD.m.
La rutina gridrD.m crea la matriz u(i, j), i = 1...nx, j = 1...ny que va a representar
a nuestro dominio rectangular y donde se almacenaran los valores de la soluci on numerica.
Inicializaremos la matriz u(i, j) rellenando todas sus posiciones con un valor numerico
(IP) que no se vaya a alcanzar en la frontera del dominio; por ejemplo IP=10000. A
continuaci on especicaremos las condiciones de contorno (Dirichlet) del problema jando
los valores u(1, j), u(nx, j), u(i, 1), u(i, ny) (nx y ny el n umero en las direcciones x e y).
Con una la eleccion de IP conveniente, los valores asignados distinguiran a los puntos (i, j)
interiores de los que no lo son, pues s olo los interiores vericaran que u(i, j) =IP.
Como sabemos, la resolucion mediante diferencias nitas desemboca en la resolucion de
un sistema lineal en el que las inc ognitas ser an los valores numericos de la soluci on, u(i, j),
en los puntos interiores. Parte de la dicultad en la implementacion est a en identicar los
nodos, y hacerlos corresponder con las inc ognitas. Esta es la tarea esencial de gridrD.m.
Para aclarar ideas y simplicar la realizaci on de la pr actica, damos a continuaci on
la rutina gridDr.m de forma explcita. Los comentarios explican el signicado de las
variables, y de los input y outputs:
function [x,y,u,IP,nv,in,jn,aa]=gridrD(h,a,b,fx0,fxa,fy0,fyb)
%----------------------------------------------------------------------------
% Introducimos el simbolo de punto interior para el dominio:
% IP: Punto interior =10000
IP=10000;
%------------------------------------
% Parametros de nuestro problema
%------------------------------------
% Empezamos el calculo
% Creamos los vectores x e y (igualmente espaciados) en ambos casos
% Espaciado del grid
nx=floor(a/h); ny=floor(b/h);
x=linspace(0,a,nx);
y=linspace(0,b,ny);
% Vamos a definir ahora nuestro dominio mediante la matriz u
% Inicialmente ponemos todos los puntos como interiores
u([1:nx],[1:ny])=IP;
% Ahora especificamos las condiciones Dirichlet del problema:
u(:,ny)=feval(fyb,x);
u(nx,:)=feval(fxa,y);
u(1,:)=feval(fx0,y);
u(:,1)=feval(fy0,x);
len=nx*ny;
% -----------------------------------------------
% Inicializacion de algunas variables y correspondencia
% entre punto del grid (i,j) y numeracion del nodo.
% ------------------------------------------------------
in=zeros(len,1);
jn=zeros(len,1);
aa=zeros(nx,ny);
nv=0;
for i=1:nx
for j=1:ny
if u(i,j)==IP
% nv es el numero de la incognita en el vector y del sistema linea L y=b
nv=nv+1;
% ij(nv) da la coordenada x correspondiente a la incognita
in(nv)=i;
% y jn(nv) da la y
jn(nv)=j;
% la matriz aa identifica coordenadas (i,j) con el numero de incognita
aa(i,j)=nv;
end;
end;
end;
Una vez caracterizados los puntos del dominio y establecido la correspondencia entre
punto del grid (i, j) e inc ognita, deberemos construir la matriz laplaciana L y el vector B
que contiene la informaci on sobre la funcion f(x, y) y las condiciones de Dirichlet del prob-
lema. Esta tarea la realizar an las rutinas lapla5.m (laplaciano de 5 puntos) y lapla9.m
(laplaciano de 9 puntos). La resolucion del sistema L v=B, nos proporcionara la soluci on
numerica del problema al identicar las incognitas en v con los valores numericos u(i, j).
En lapla5.m (y en lapla9.m) inicializaremos la matriz laplaciana L como dispersa
(comando sparse(nv,nv)), siendo nv el n umero de nodos internos. Barreremos las las
de la matriz L desde 1 hasta nv y asignaremos los elementos de la matriz laplaciana y
el vector B. El programa que realizar a esta tarea sera lapla5.m para el laplaciano de 5
puntos; en este caso, para cada punto habra que examinar el car acter de sus 4 puntos
vecinos, incluyendo su contribucion a la matriz L cuando sean interiores o a la matriz
B cuando son frontera. Mas adelante se utilizar a tambien el laplaciano de 9 puntos,
que implementaremos en la rutina lapla9.m (en este caso habra que examinar 8 puntos
vecinos).
Una vez creados L y B, resolveremos L v=B (para lo que utilizaremos el comando \
de MATLAB). El vector de valores v deber a traducirse a la matriz u(i,j) del campo de
temperaturas. Recordemos el programa dfelip:
function [x,y,u,L]=dfelip(h,a,b,fx0,fxa,fy0,fyb,rule)
[x,y,u,IP,nv,in,jn,aa]=gridrD(h,a,b,fx0,fxa,fy0,fyb);
[L,B]=feval(rule,u,IP,nv,in,jn,aa);
v=L\B;
for a=1:nv
u(in(a),jn(a))=v(a);
end;
En resumen, a las rutinas dfelip.m y gridrD.m, que se han proporcionado
de forma explcita, deberemos a nadir las funciones lapla5.m y lapla9.m para
implementar los laplacianos de 5 y 9 puntos. Tambien deberemos crear 4
funciones para cada una de las condiciones de contorno. LLamaremos a estos
cheros fx0.m, fxa.m, fy0.m, fyb.m.
Ademas de estos programas, escribiremos un programa principal, prac6.m que con-
tendra las actividades que a continuaci on se describen.
En el programa prac6.m para representar la soluci on en el retculo y comparar con la
soluci on analtica debemos trasponer la matriz u, como veremos en el pr oximo ejemplo.
Vamos realizar los siguientes ejercicios con el laplaciano lapla5.m:
1. Representar gr acamente, en distintas gr acas tridimensionales, la soluci on aproxi-
mada u
h
para h = 0.1 y la soluci on analtica. Para ilustrar la realizaci on de estas
gr acas, damos este ejemplo explcitamente:
h=0.1;a=1;b=1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[x,y,u,lap]=dfelip(h,a,b,fx0,fxa,fy0,fyb,lapla5);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definimos el mesh que utilizaremos para construir la
% solucion analitica y nuestras representaciones graficas:
[X,Y]=meshgrid(x,y);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Debemos trasponer u para que sea la u del grid
ugrid=u;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure(1);
mesh(X,Y,ugrid);
title(Sol. aproximada por DFs);
xlabel(x); ylabel(y); zlabel(Temperatura);
figure(2);
% Solucion analitica
sol=100.*sinh(pi/10.*Y).*sin(pi/10.*X)./sinh(pi);
mesh(X,Y,sol);
title(Sol exacta);
xlabel(x); ylabel(y); zlabel(Temperatura);
2. El error u
an
u
h
cometido (para h = 0.1), siendo u
an
la soluci on analtica y u
h
es la soluci on numerica con paso h. De nuevo, se deber a utilizar el comando mesh.
3. En una misma ventana gr aca (utilizando subplot):
(a) Los puntos del grid.
(b) La estructura de la matriz lap (utilizar el comando spy).
(c) La distribucion de temperaturas aproximada en la placa rectangular. Haremos
un gr aco de contornos con relleno de color (usaremos contourf(X,Y,ugrid,20)).
(d) La distribucion de temperaturas exacta en la placa rectangular.
4. Considerar h
m
= 0.25/2
m
, m = 1, ..., 6 y representar en una misma gr aca, en
funcion de m:
(a) El error m aximo e(m) = max
i,j
u
an
(x
i
, y
j
) u
h
(x
i
, y
j
), m = 1, ...6.
(b) La estimaci on de la constante asintotica de error como funcion de m para cada
metodo, es decir, c(m) = u
an
u
hm
/h
2
, m = 1, ...6 para el laplaciano de 5
puntos.
(c) La estimaci on del orden de convergencia o(m) = log

e(m)
e(m + 1)

/ log(2), m =
1, ...5
(d) El tiempo de CPU empleado en cada caso.
Los apartados 2 y 4 anteriores habran de repetirse para el laplaciano de 9 puntos,
teniendo en cuenta que la constante asintotica de error hay que estimarla en este caso
mediante c(m) = u
an
u
hm
/h
2
, m = 1, ...6.

You might also like