Está en la página 1de 1

Programa de Calor Explícito

Programa  calor.m
%Ecuacion del calor por Diferencias Finitas Explicitas
clear all
%entrada de datos
m=input('ingrese num. intervalos para la variable espacial: ');
n=input('ingrese num. intervalos para la variable temporal: ');
a=input('ingrese el extremo a= ');
b=input('ingrese el extremo b= ');
T=input('ingrese el tiempo final T= ');
C=input('ingrese el coeficiente c^2= ');
fun=input('Ingrese la funcion f(x)=','s');
f=inline(fun,'x');
alfa=input('Ingrese la funcion h1(t)=','s');
beta=input('Ingrese la funcion h2(t)=','s');
alfafrontera=inline(alfa,'t');
betafrontera=inline(beta,'t');
%partición
xnodos=linspace(a,b,m+1);
tnodos=linspace(0,T,n+1);
h=(b-a)/m;
k=T/n;
r=C*k/h^2;
ss=strcat('coeficiente lamda = ',num2str(r));
disp(ss);
if r<=0.5
fprintf('La aproximacion esta garantizada ...\n');
else
fprintf('Peligro ... La aproximacion ¡NO! esta garantizada ...\n');
end
%construyendo la matriz ensamblaje
A=(1-2*r)*eye(m-1)+diag(r*ones(1,m-2),+1)+diag(r*ones(1,m-2),-1);
%solucion inicial para t=0 en el interior de [a,b]
fprintf('La matriz de ensamblaje es ...\n');
A
for i=2:m
solfila(i-1)=f(xnodos(i));
end
xx=input('Pulse una tecla para continuar ... ','s');
%solucion inicial para t=0 en todo el intervalo [a,b]
sol=[alfafrontera(tnodos(1)),solfila,betafrontera(tnodos(1))];
%el proceso iterativo en el metodo explicito
for j=2:n+1
fila = A*solfila'+[r*alfafrontera(tnodos(i-1)),zeros(1,m-
3),r*betafrontera(tnodos(i-1))]';
solfila=fila';
sol=[sol;alfafrontera(tnodos(i-1)),solfila,betafrontera(tnodos(i-1))];
end
sol
%grafica de la solucion aproximada
mesh(xnodos,tnodos,sol);
title('solucion aproximada por el metodo explicito');

También podría gustarte