You are on page 1of 5

En M-FILE

Primera Parte
echo on; clc;
clc; clear all; format short;
%-------------------------------------------------------------------------% Este Script calcula la solucin aproximada de la Ecuacin de Laplace
% para un ejemplo especifico, por el Mtodo de Diferencias Finitas,con una
% interpretacin grfica.
%
ECUACIN DE LAPLACE
%
u (x,y) +
u (x,y) = 0
%
xx
yy
% Con condiciones de contorno:
% u(x,0) = f1(x), u(x,b) = f2(x)
para 0 <= x <= a,
% u(0,y) = f3(y), u(a,y) = f4(y)
para 0 <= y <= b,
% La solucin es aproximada sobre el rectangulo
%
0 <= x <= a ,
0 <= y <= b.
%-------------------------------------------------------------------------pause % presione una tecla para continuar
clc;
%-------------------------------------------------------------------------% Funciones de Contorno del Ejemplo
% f1(x),f2(x),f3(y),f4(y) en f1.m f2.m f3.m f4.m
% funcin z = f1(x)
% z = 0;
% funcin z = f2(x)
% z = 100;
% funcin z = f3(y)
% z = 75;
% funcin z = f4(y)
% z = 50;
pause
clc;
%-------------------------------------------------------------------------% Creando las funciones de Contorno con el comando diary, preferible crear
% las funciones m-files para otros ejemplos.
%-------------------------------------------------------------------------delete output
delete f1.m
diary f1.m; disp('function z = f1(x)');...
disp('z = 0;');...
diary off;
delete f2.m
diary f2.m; disp('function z = f2(x)');...
disp('z = 100;');...
diary off;
delete f3.m
diary f3.m; disp('function z = f3(y)');...
disp('z = 75;');...
diary off;
delete f4.m
diary f4.m; disp('function z = f4(y)');...
disp('z = 50;');...
diary off;
f1(0); f2(0); f3(0); f4(0);
pause
clc;
%-------------------------------------------------------------------------% Ejemplo de la Ecuacin de Laplace con las condiciones de Dirichlet

% Cota superior de [0,a]


a,
i.e. 0 <= x <= a
% Cota superior de [0,b]
b,
i.e. 0 <= t <= b.
% Tamao de paso h.
% Tamao de la tolerancia tol.
% Nmero maximo de iteraciones.
%-------------------------------------------------------------------------a =
4;
b =
4;
h =
0.5;
tol =
0.01;
max1 = 25;
%-------------------------------------------------------------------------%
Obteniendo la Solucin
%-------------------------------------------------------------------------U = dirich('f1','f2','f3','f4',a,b,h,tol,max1);
pause
clc;
%-------------------------------------------------------------------------%
Preparacin de las matrices para los grficos
%-------------------------------------------------------------------------[X,Y] = meshgrid(0:h:a,0:h:b);
W = rot90(U);
W = flipud(W);
clc; figure(1); clf;
%-------------------------------------------------------------------------%
Seccin Grfica
%-------------------------------------------------------------------------whitebg('w');
meshz(X,Y,W);
xlabel('x');
ylabel('y');
zlabel('u');
view([1 -1 1]);
Mx1 = 'Solucin de la Ecuacin de Laplace.';
title(Mx1);
figure(gcf); pause
%-------------------------------------------------------------------------%
Preparacin de los Resultados
%-------------------------------------------------------------------------W = rot90(U);
clc;
%-------------------------------------------------------------------------%
Presentacin de los Resultados
%-------------------------------------------------------------------------clc,echo off,diary output,...
disp(' '),disp(Mx1),disp(' '),disp(W),...
diary off,echo on

Segunda Parte
Lo guardas con el nombre DIRICH
function U = dirich(f1,f2,f3,f4,a,b,h,tol,max1)
%
%
% Este programa calcula la solucion aproximada de la ecuacion de DIRICHLET.
% pro el metodo de diferencias finitas
%
%
ECUACION DE DIRICHLET
%

%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

(x,y)

xx

(x,y)

yy

Con condiciones de frontera:


u(x,0) = f1(x), u(x,b) = f2(x)

para 0 <= x <= a,

u(0,y) = f3(y), u(a,y) = f4(y)

para 0 <= y <= b,

La aproximacion numerica es sobre el rectangulo:


0 <= x <= a ,
ENTRADA
f1
f2
f3
f4
a
b
h
tol
max1
SALIDA
U

0 <= y <= b.

nombre de la funcin frontera


nombre de la funcin frontera
nombre de la funcin frontera
nombre de la funcin frontera
con un intervalo [0 a]: 0<=x<=a
con un intervalo [0 b]: 0<=y<=b
tamao de paso
tolerancia de convergencia
numero mximo de iteraciones
matriz: solucin

n = fix(a/h)+1;
m = fix(b/h)+1;
ave = (a*(feval(f1,0)+feval(f2,0)) ...
+ b*(feval(f3,0)+feval(f4,0)))/(2*a+2*b);
U = ave*ones(n,m);
for j=1:m,
U(1,j) = feval(f3,h*(j-1));
U(n,j) = feval(f4,h*(j-1));
end
for i=1:n,
U(i,1) = feval(f1,h*(i-1));
U(i,m) = feval(f2,h*(i-1));
end
U(1,1) = (U(1,2) + U(2,1))/2;
U(1,m) = (U(1,m-1) + U(2,m))/2;
U(n,1) = (U(n-1,1) + U(n,2))/2;
U(n,m) = (U(n-1,m) + U(n,m-1))/2;
w = 4/(2+sqrt(4-(cos(pi/(n-1))+cos(pi/(m-1)))^2));
err = 1;
cnt = 0;
while ((err>tol)&(cnt<=max1))
err = 0;
for j=2:(m-1),
for i=2:(n-1),
relx = w*(U(i,j+1)+U(i,j-1)+U(i+1,j)+ U(i-1,j)-4*U(i,j))/4;
U(i,j) = U(i,j) + relx;
if (err<=abs(relx)), err=abs(relx); end
end
end
cnt = cnt+1;
end

En Command Window
Se obtienen los siguientes resultados
Solucin de la Ecuacin de Laplace.
Columns 1 through 8
87.5000
100.0000
75.0000
73.6940
75.0000
62.3801
75.0000
55.9975
75.0000
51.1205
75.0000
46.0779
75.0000
39.2181
75.0000
27.1765
37.5000

100.0000 100.0000 100.0000 100.0000 100.0000 100.0000


85.3232

88.1861

78.1064

78.8808

73.2219

71.0521

68.7303 63.3994
63.3009 54.5344
54.9414 42.6670

88.5403 87.7966
78.1785

48.7720

74.0498

66.3162
56.2483

45.3533

35.9191

60.4893

54.0422

52.4062

43.7900

43.9730

31.7919

17.3486

69.8288

63.7244

32.6031

38.8029 25.2758 1 9.6354


0

76.5853

68.7070
59.2815

86.0606 82.3959

33.6176

17.1569

19.4876

Column 9
75.0000
50.0000
50.0000
50.0000
50.0000
50.0000
50.0000
50.0000
25.0000

S o lu c i n d e la E c u a c i n d e L a p la c e .

1 0 0

8 0

6 0

Grafica

4 0

2 0

0
0

4
0 .5

3 .5
1

3
1 .5

2 .5
2

2
2 .5

1 .5
3

1
3 .5

0 .5
4

0
y

You might also like