Está en la página 1de 1

function [u,x,t]=crank(n,m,dt,k)

%[u,x,t]=crank(50,150,0.01,0.1)
% Funcion que resuelve mediante diferencias finitas
% la ecuacion del calor mediante Crank-Nicolson
% n numero de pasos espaciales
% m numero de pasos temporales
% dt paso temporal
% k constante de la ecuacion
%
% Variables, incognitas, pasos y constantes
u=zeros(n+1,m+1);
h=1/n;
x=0:h:1;
s=k*dt/(2*h^2);
% Datos iniciales y condiciones de borde
u(:,1)=cos(2*pi*x);
u(1,:)=1;
u(n+1,:)=1;
%matrices del algoritmo
b=ones(n-2,1);
A=-2*eye(n-1)+diag(b,-1)+diag(b,1);
B=inv(eye(n-1)-s*A);
C=s*[2 zeros(1,n-3) 2];
% Algoritmo
for j=1:m
t(j)=(j-1)*dt;
u(2:n,j+1)=B*((eye(n-1)+s*A)*u(2:n,j)+C');
end
t(m+1)=m*dt;
% Grafica
plot(x(1:n+1),u(1:n+1,m));