Professional Documents
Culture Documents
function w=Poisson(xl,xr,yb,yt,M,N)
% Ecuacin de Poisson por diferencias finitas
% Entrada: [xl,xr], tiempo[yb,yt], pasos M, tiempos N
f=@(x,y) 0; g1=@(x) log(x.^2+1); g2=@(x) log(x.^2+4);
g3=@(y) 2*log(y); g4=@(y) log(y.^2+1);
m=M+1; n=N+1; mn=m*n; close all
h=(xr-xl)/M; h2=h^2; k=(yt-yb)/N; k2=k^2;
x=xl+(0:M)*h; y=yb+(0:N)*k;
x=xl+(0:M)*h; y=yb+(0:N)*k;
for i=2:m-1
for j=2:n-1
A(i+(j-1)*m,i-1+(j-1)*m)=1/h2; A(i+(j-1)*m,i+1+(j-1)*m)=1/h2;
A(i+(j-1)*m,i+(j-1)*m)=-2/h2-2/k2;
A(i+(j-1)*m,i+(j-2)*m)=1/k2; A(i+(j-1)*m,i+j*m)=1/k2;
b(i+(j-1)*m)=f(x(i),y(j));
end
end
for i=1:m
j=1; A(i+(j-1)*m,i+(j-1)*m)=1; b(i+(j-1)*m)=g1(x(i));
j=n; A(i+(j-1)*m,i+(j-1)*m)=1; b(i+(j-1)*m)=g2(x(i));
end
for j=2:n-1
i=1; A(i+(j-1)*m,i+(j-1)*m)=1; b(i+(j-1)*m)=g3(y(j));
i=m; A(i+(j-1)*m,i+(j-1)*m)=1; b(i+(j-1)*m)=g4(y(j));
end
v=A/b;
w=reshape(v(1:mn),m,n);
mesh(x,y,w)
end
function w=Poisson_FEM_1(xl,xr,yb,yt,M,N)
% Ecuacin de Poisson por Elementos Finitos
% Entrada: [xl,xr], tiempo[yb,yt], pasos M, tiempos N
f=@(x,y) 0; r=@(x,y) 0; g1=@(x) log(x.^2+1); g2=@(x) log(x.^2+4); g3=@(y)
2*log(y); g4=@(y) log(y.^2+1);
m=M+1; n=N+1; mn=m*n; close all
h=(xr-xl)/M; h2=h^2; k=(yt-yb)/N; k2=k^2; hk=h*k;
x=xl+(0:M)*h; y=yb+(0:N)*k; % valores para la mesh
A=zeros(mn,mn); b=zeros(mn,1);
for i=2:m-1 % puntos del interior
for j=2:n-1
rsum=r(x(i)-2*h/3,y(j)-k/3)+r(x(i)-h/3,y(j)-
2*k/3)+r(x(i)+h/3,y(j)-k/3);
rsum=rsum+r(x(i)+2*h/3,y(j)+k/3)+r(x(i)+h/3,y(j)+2*k/3)+r(x(i)-
h/3,y(j)+k/3);
A(i+(j-1)*m,i+(j-1)*m)=2*(h2+k2)/(hk)-hk*rsum/18;
A(i+(j-1)*m,i-1+(j-1)*m)=-k/h-hk*(r(x(i)-h/3,y(j)+k/3)+r(x(i)-
2*h/3,y(j)-k/3))/18;
A(i+(j-1)*m,i-1+(j-2)*m)=-hk*(r(x(i)-2*h/3,y(j)-k/3)+r(x(i)-
h/3,y(j)-2*k/3))/18;
A(i+(j-1)*m,i+(j-2)*m)=-k/h-hk*(r(x(i)-h/3,y(j)-
2*k/3)+r(x(i)+h/3,y(j)-k/3))/18;
A(i+(j-1)*m,i+1+(j-1)*m)=-k/h-hk*(r(x(i)+h/3,y(j)-
k/3)+r(x(i)+2*h/3,y(j)+k/3))/18;
A(i+(j-1)*m,i+1+j*m)=-
hk*(r(x(i)+2*h/3,y(j)+k/3)+r(x(i)+h/3,y(j)+2*k/3))/18;
A(i+(j-1)*m,i+j*m)=-k/h-hk*(r(x(i)+h/3,y(j)+2*k/3)+r(x(i)-
h/3,y(j)+k/3))/18;
fsum=f(x(i)-2*h/3,y(j)-k/3)+f(x(i)-h/3,y(j)-
2*k/3)+f(x(i)+h/3,y(j)-k/3);
fsum=fsum+f(x(i)+2*h/3,y(j)+k/3)+f(x(i)+h/3,y(j)+2*k/3)+f(x(i)-
h/3,y(j)+k/3);
b(i+(j-1)*m)=-h*k*fsum/6;
end
end
for i=1:m
j=1; A(i+(j-1)*m,i+(j-1)*m)=1; b(i+(j-1)*m)=g1(x(i));
j=n; A(i+(j-1)*m,i+(j-1)*m)=1; b(i+(j-1)*m)=g2(x(i));
end
for j=2:n-1
end
v=A\b;
w=reshape(v(1:mn),m,n);
mesh(x,y,w)
end
Ejm: Sea la ecuacin de Laplace:
2 2
(, ) + 2 (, ) = 0
2
(4, ) = 0
Algoritmo ya mencionado.
w=Poisson(20,180,80,0,8,8)
w =Columns 1 through 8
0.0028 0.0039 0.0038 0.0036 0.0034 0.0032 0.0028
0.0021
0.0034 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
0.0038 0.0000 0 0 0 0 0 0.0000
0.0041 0.0000 0 0 0 0 0 0.0000
0.0043 0.0000 0 0 0 0 0 0.0000
0.0044 0.0000 0 0 0 0 0 0.0000
0.0046 0.0000 0 0 0 0 0 0.0000
0.0047 0.0001 0.0000 0.0000 0.0000 0.0000 0.0000 0.0001
0.0048 0.0039 0.0038 0.0036 0.0034 0.0032 0.0028 0.0021
Column 9
0.0028
0.0034
0.0038
0.0041
0.0043
0.0044
0.0046
0.0047
0.0048
b) Para la Segunda ecuacin de Laplace:
w=Poisson_FEM_1(180,20,80,0,8,8)
w =Columns 1 through 8
Column 9
10.3860
10.1505
9.8835
9.5753
9.2107
8.7647
8.1898
7.3803
6.0014
Para las funciones Parabolicas:
a) Para la ecuacin Parcial Parablica: METODO DE
CRANK-NICOLSON.
function w=Crank_Nicolson(xl,xr,yb,yt,M,N)
% Ecuacin del calor por Crank-Nicolson
% Entrada: [xl,xr], tiempo[yb,yt], pasos M, tiempos N
f=@(x)sin(2*pi*x).^2;
l=@(t)0*t;
r=@(t)0*t;
D=1;
h=(xr-xl)/M; k=(yt-yb)/N; m=M-1; n=N; close all
sigma=D*k/h/h;
a=diag(2+2*sigma*ones(m,1))+diag(-sigma*ones(m-1,1),1);
a=a+diag(-sigma*ones(m-1,1),-1);
b=diag(2-2*sigma*ones(m,1))+diag(sigma*ones(m-1,1),1);
b=b+diag(sigma*ones(m-1,1),-1);
lside=l(yb+(0:n)*k); rside=r(yb+(0:n)*k);
w(:,1)=f(xl+(1:m)*h);
for j=1:n
sides=[lside(j)+lside(j+1); zeros(m-2,1); rside(j)+rside(j+1)];
w(:,j+1)=a\(b*w(:,j)+sigma*sides);
end
w=[lside; w; rside]
x=(0:m+1)*h; t=(0:n)*k;
mesh(x,t,w)
view(60,30);axis([xl xr yb yt -1 1])
end
EJEMPLO:
SEA
2
(, ) 2 (, ) = 0
(, 0) = 4 ^2; Para 0 1
w=Crank_Nicolson(xl,xr,yb,yt,M,N)
Tomando valores en:
Xl=0(Este valor es para cuando x=0);
Donde (, 0) = 4 ^2; Para 0 1
Xr=1;
yb=0;
yt=1;
M=10;
N=10;
w=Crank_Nicolson(0,1,0,1,10,10)
w =
Columns 1 through 8
0 0 0 0 0 0 0
0
0.3455 0.0455 -0.0057 0.0655 -0.0639 0.0684 -0.0629
0.0571
0.9045 -0.1826 0.2520 -0.1180 0.0953 -0.0600 0.0447
-0.0322
0.9045 -0.0691 0.2550 -0.1209 0.1166 -0.0814 0.0662
-0.0508
0.3455 0.4087 -0.0415 0.1005 -0.0390 0.0345 -0.0200
0.0148
0.0000 0.6856 -0.2272 0.2395 -0.1400 0.1104 -0.0772
0.0585
0.3455 0.4087 -0.0415 0.1005 -0.0390 0.0345 -0.0200
0.0148
0.9045 -0.0691 0.2550 -0.1209 0.1166 -0.0814 0.0662
-0.0508
0.9045 -0.1826 0.2520 -0.1180 0.0953 -0.0600 0.0447
-0.0322
0.3455 0.0455 -0.0057 0.0655 -0.0639 0.0684 -0.0629
0.0571
0 0 0 0 0 0 0
0
Columns 9 through 11
0 0 0
-0.0501 0.0435 -0.0372
0.0248 -0.0194 0.0157
0.0404 -0.0318 0.0252
-0.0101 0.0075 -0.0056
-0.0436 0.0333 -0.0255
-0.0101 0.0075 -0.0056
0.0404 -0.0318 0.0252
0.0248 -0.0194 0.0157
-0.0501 0.0435 -0.0372
0 0 0
w =
Columns 1 through 8
0 0 0 0 0 0 0
0
0.3455 0.0455 -0.0057 0.0655 -0.0639 0.0684 -0.0629
0.0571
0.9045 -0.1826 0.2520 -0.1180 0.0953 -0.0600 0.0447
-0.0322
0.9045 -0.0691 0.2550 -0.1209 0.1166 -0.0814 0.0662
-0.0508
0.3455 0.4087 -0.0415 0.1005 -0.0390 0.0345 -0.0200
0.0148
0.0000 0.6856 -0.2272 0.2395 -0.1400 0.1104 -0.0772
0.0585
0.3455 0.4087 -0.0415 0.1005 -0.0390 0.0345 -0.0200
0.0148
0.9045 -0.0691 0.2550 -0.1209 0.1166 -0.0814 0.0662
-0.0508
0.9045 -0.1826 0.2520 -0.1180 0.0953 -0.0600 0.0447
-0.0322
0.3455 0.0455 -0.0057 0.0655 -0.0639 0.0684 -0.0629
0.0571
0 0 0 0 0 0 0
0
Columns 9 through 11
0 0 0
-0.0501 0.0435 -0.0372
0.0248 -0.0194 0.0157
0.0404 -0.0318 0.0252
-0.0101 0.0075 -0.0056
-0.0436 0.0333 -0.0255
-0.0101 0.0075 -0.0056
0.0404 -0.0318 0.0252
0.0248 -0.0194 0.0157
-0.0501 0.0435 -0.0372
0 0 0
Para las funciones Hiperblicas:
2 2
(, ) 2 (, ) = 0
2
(, 0) = sin( ) + sin(2 ) ;
(, ) = 0 0 1
U = onda ('sin(pi*x)+sin(2*pi*x)','0',1,0.5,2,11,11)
U =
Columns 1 through 4
0 0.896802246667421 1.53884176858763
1.7600735106701
0 0.769420884293813 1.32843787866876
1.53884176858763
0 0.43163563200134 0.769420884293813
0.94840112333371
0 -2.22044604925031e-16 0.0515988766662898
0.181635632001339
0 -0.380036755335051 -0.587785252292474
0.519420884293813
0 -0.587785252292474 -0.951056516295154
0.951056516295154
0 -0.571019760960103 -0.951056516295154
1.01942088429381
0 -0.36327126400268 -0.639384128958763
0.769420884293814
0 -0.0683643679986601 -0.18163563200134
0.360615871041237
0 0.18163563200134 0.210403889918866
0
0 0.278768257917526 0.36327126400268
0.142039521920206
Columns 5 through 8
1.53884176858763 1 0.36327126400268
0.142039521920206
1.38003675533505 0.951056516295153 0.428980239039897
1.11022302462516e-16
0.951056516295153 0.809016994374947 0.587785252292473
0.360615871041237
0.377381362373607 0.587785252292473 0.740652626376287
0.769420884293813
-0.181635632001341 0.309016994374947 0.769420884293813
1.01942088429381
-0.587785252292473 -6.66133814775094e-16 0.587785252292473
0.951056516295153
-0.769420884293814 -0.309016994374948 0.181635632001339
0.519420884293813
-0.740652626376288 -0.587785252292474 -0.377381362373608
0.181635632001341
-0.587785252292474 -0.809016994374948 -0.951056516295154
0.948401123333711
-0.428980239039897 -0.951056516295154 -1.38003675533505
1.53884176858763
-0.363271264002681 -1 -1.53884176858763
1.7600735106701
Columns 9 through 11
-0.36327126400268 -0.278768257917526 0
-0.210403889918866 -0.18163563200134 0
0.18163563200134 0.0683643679986599 0
0.639384128958763 0.36327126400268 0
0.951056516295154 0.571019760960103 0
0.951056516295153 0.587785252292473 0
0.587785252292473 0.38003675533505 0
-0.05159887666629 -6.66133814775094e-16 0
-0.769420884293814 -0.43163563200134 0
-1.32843787866876 -0.769420884293814 0
-1.53884176858763 -0.896802246667421 0