Sunteți pe pagina 1din 3

MÉTODO DE DIFERENCIAS FINITAS PROGRESIVAS PARA LA ECUACIÓN DE CALOR

clear all
clc
%Ecuación del calor en diferencias finitas hacia adelante
%Ut-alfa*Uxx=0, 0<x<L , 0<t<T
%U(0,t)=g1 U(L,t)=g2, U(x,0)=f(x)
%Salida: w(i,j)=aproximación de U(xi,tj).
%Correr con: L=1, T=1, m=10 , n=10, alfa=1, f=sin(pi*x), g1=50 g2=100
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^2);
U=zeros(m+1,n+1);
for j=1:n+1
U(1,j)=g1((j-1)*k);
U(m+1,j)=g2((j-1)*k);
end
for i=1:m+1
U(i,1)=f((i-1)*h);
end
if f(0)==g1(0)
U(1,1)=g1(0);
else
U(1,1)=(f(0)+g1(0))/2;
end
if f(L)==g2(L)
U(m+1,1)=g2(L);
else
U(m+1,1)=(f(L)+g2(L))/2;
end

for j=2:n+1
for i=2:m
U(i,j)=lamda*(U(i+1,j-1)+U(i-1,j-1))+(1-2*lamda)*U(i,j-1);
end
end
U=U';
U
x=0:h:L;
y=0:k:T;
[X Y]=meshgrid(x,y);
mesh(X,Y,U);
MÉTODO DE DIFERENCIAS FINITAS REGRESIVAS PARA LA ECUACIÓN DE CALOR

clear all
clc
%Ecuación del calor en diferencias finitas hacia atrás.
%Ut-alfa*Uxx=0, 0<x<L , 0<t<T
%U(0,t)=g1 U(L,t)=g2, U(x,0)=f(x)
%Salida: w(i,j)=aproximación de U(xi,tj).
%Correr con: L=1, T=1, m=10 , n=10, alfa=1, f=sin(pi*x), g1=50 g2=100
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^2);
w=zeros(m-1,n+1);
for i=1:m-1;
%w(1,j)=f(i*h)+lamda*f(k*j);
w(i,1)=f(i*h);
%w(1,)=f(i*h)+lamda*f(k*j);
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
U=zeros(m+1,n+1);
for j=1:n+1
U(1,j)=g1(j*k);
U(m+1,j)=g2(j*k);
end
w(1,1)+lamda*0.12;
for i=2:n+1
r=w(1,i-1)+lamda*U(1,i);
s=w(m-1,i-1)+lamda*U(m+1,i);
t(:,i-1)=[r;w(2:m-2,i-1);s];
w(:,i)=inv(A)*t(:,i-1);
end
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);

S-ar putea să vă placă și