Está en la página 1de 5

PROGRAMA ECCALOR

clear all
clc
%Ecuacin del calor en diferencias finitas hacia atrs.
%Ut-alfa^2 Uxx=0, 0<x<L , 0<t<T
%U(0,t)=U(L,t)=0, U(x,0)=f(x)
%Salida: w(i,j)=aproximacin de U(xi,tj).
%Correr con: L=1, T=1, m=10 , n=10, alfa=1, f=sin(pi*x)
L=input('ingrese L=');
T=input('ingrese T=');
m=input('ingrese m=');
n=input('ingrese n=');
alfa=input('ingrese alfa=');
h=L/m;
k=T/n;
lamda=alfa^2*k/(h^2);
for i=1:m-1;
w(i,1)=f(i*h);
end
A=zeros(m-1,m-1);
for i=1:m-1;
A(i,i)=1+2*lamda;
end
for i=2:m-1
j=i-1;
A(i,j)=-lamda;
A(j,i)=-lamda;
end
A
for i=2:n+1
w(:,i)=inv(A)*w(:,i-1);
end
U=zeros(m+1,n+1);
for i=1:m-1;
U(i+1,:)=w(i,:);
end
U=U';
U
for i=1:m+1;
x(i)=(i-1)*h;
end
for j=1:n+1;
y(j)=(j-1)*k;
end
[X Y]=meshgrid(x,y);
mesh(X,Y,U);
POISSON:
clear all
clc
%Ecuacin de Poisson en diferencias finitas.
%Uxx+Uyy=0, a<x<b , c<y<d
%U(x,y)=g(x,y) para a=x o x=b y c<y<d
%U(x,y)=g(x,y) para c=y o y=d y a<x<b
%Salida: w(i,j)=aproximacin de U(xi,tj).

%Correr con: a=c=0, TOL=0.0001, m=4 , n=4.


a=input('ingrese a=');
b=input('ingrese b=');
c=input('ingrese c=');
d=input('ingrese d=');
m=input('ingrese m=');
%particion del eje x
n=input('ingrese n=');
%particin del eje y
TOL=input('ingrese TOL=');
N=input('ingrese N=');
%Mximo nmero de iteraciones
h=(b-a)/n;
k=(d-c)/m;
for i=1:n+1;
x(i)=a+(i-1)*h;
end
% x(1)=a;
%x(n+1)=b;
for j=1:m+1;
y(j)=c+(j-1)*k;
end
%y(1)=c;
%y(m+1)=d;
for i=1:n+1;
for j=1:m+1;
w(i,j)=0;
end
end
for i=1:n+1;
w(i,1)=Gg2(x(i),c);
w(i,n+1)=Gg2(x(i),d);
end
for j=1:m+1
w(1,j)=Gg1(a,y(j));
w(m+1,j)=Gg1(b,y(j));
end
lamda=h^2/k^2;
u=2*(1+lamda);
l=1;
while l<=N
z=(-h^2*fun(x(2),y(m))+Gg1(a,y(m))+lamda*Gg2(x(2),d)+lamda*w(2,m-1)+w(3,m))/u;
NORM=abs(z-w(2,m));
w(2,m)=z;
for i=3:n-1;
z=(-h^2*fun(x(i),y(m))+lamda*Gg2(x(i),d)+w(i-1,m)+w(i+1,m)+lamda*w(i,m-1))/u;
if abs(w(i,m)-z)>NORM
NORM=abs(w(i,m)-z);
end
w(i,m)=z;
end
z=(-h^2*fun(x(n),y(m))+Gg1(b,y(m))+lamda*Gg2(x(n),d)+w(n-1,m)+lamda*w(n,m-1))/u;
if abs(w(n,m)-z)>NORM
NORM=abs(w(n,m)-z);
end
w(n,m)=z;
for j=m-1:-1:3;
z=(-h^2*fun(x(2),y(j))+Gg1(a,y(j))+lamda*w(2,j+1)+lamda*w(2,j-1)+w(3,j))/u;
if abs(w(2,j)-z)>NORM

NORM=abs(w(2,j)-z);
end
w(2,j)=z;
for i=3:n-1;
z=(-h^2*fun(x(i),y(j))+w(i-1,j)+lamda*w(i,j+1)+w(i+1,j)+lamda*w(i,j-1))/u;
if abs(w(i,j)-z)>NORM
NORM=abs(w(i,j)-z);
end
w(i,j)=z;
end
z=(-h^2*fun(x(n),y(j))+Gg1(b,y(j))+w(n-1,j)+lamda*w(n,j+1)+lamda*w(n,j-1))/u;
if abs(w(n,j)-z)>NORM
NORM=abs(w(n,j)-z);
end
w(n,j)=z;
end
z=(-h^2*fun(x(2),y(2))+Gg1(a,y(2))+lamda*Gg2(x(2),c)+lamda*w(2,3)+w(3,2))/u;
if abs(w(2,2)-z)>NORM
NORM=abs(w(2,2)-z);
end
w(2,2)=z;
for i=3:n-1;
z=(-h^2*fun(x(i),y(2))+lamda*Gg2(x(i),c)+w(i-1,2)+lamda*w(i,3)+w(i+1,2))/u;
if abs(w(i,2)-z)>NORM
NORM=abs(w(i,2)-z);
end
w(i,2)=z;
end
z=(-h^2*fun(x(n),y(2))+Gg1(b,y(2))+lamda*Gg2(x(n),c)+w(n-1,2)+lamda*w(n,3))/u;
if abs(w(n,2)-z)>NORM
NORM=abs(w(n,2)-z);
end
w(n,2)=z;
U=zeros(n+1,m+1);
if NORM<=TOL
for i=1:n+1;
for j=1:m+1;
U(i,j)=w(i,j);
end
end
end
l=l+1;
end
U=U';
U
[X Y]=meshgrid(x,y);
mesh(X,Y,U);
ONDA:
clear all
clc
%Ecuacin de la onda en diferencias finitas.
%Utt-alfa^2 Uxx=0, 0<x<L , 0<t<T
%U(0,t)=U(L,t)=0, U(x,0)=f(x), Ut(x,0)=g(x)

%Salida: w(i,j)=aproximacin de U(xi,tj).


%Correr con: L=1, T=1, m=10 , n=10, alfa=1, f=sin(pi*x)
L=input('ingrese L=');
T=input('ingrese T=');
m=input('ingrese m=');
n=input('ingrese n=');
alfa=input('ingrese alfa=');
h=L/m;
k=T/n;
lamda=(alfa)*k/h;
for j=1:n+1;
w(1,j)=0;
end
for j=1:n+1;
w(m+1,j)=0;
end
for i=2:m;
w(i,1)=f(i*h);
end
for i=2:m;
w(i,2)=f(i*h)+k*g(i*h);
end
for j=2:n;
for i=2:m;
w(i,j+1)=2*(1-lamda^2)*w(i,j)+(lamda^2)*(w(i+1,j)+w(i-1,j))-w(i,j-1);
end
end
w=w'
for i=1:m+1;
x(i)=(i-1)*h;
end
for j=1:n+1;
y(j)=(j-1)*k;
end
[X Y]=meshgrid(x,y);
mesh(X,Y,w);
figure;
%i=3;
for i=1:m
%axis([0 T 0 3]);
%u=[y(j) y(j+1)];
%v=[w(i,j) w(i,j+1)];
%plot(u,v);
plot(x,w(i,:))
pause(2)
hold on
end
for j=1:n
%axis([0 T 0 3]);
%u=[y(j) y(j+1)];
%v=[w(i,j) w(i,j+1)];
%plot(u,v);
plot(x,w(:,j))
pause(2)
hold on
end

También podría gustarte