I need to solve a 1D heat equation by Crank-Nicolson method . The tempeture on both ends of the interval is given as the fixed value u(0,t)=2, u(L,t)=0.5. I solve the equation through the below code, but the result is wrong. Attached figures are the correct result. I don't know why? Could you please anyone offer me a hand? Thanks a lot.
clear all;L=1;dx=0.1;imax=L/dx+1;X=linspace(0,L,imax);% inital value
f0 = 2-1.5.*X+sin(pi.*X);dt=0.05;nstep=15;D=1.44;alpha=D*dt/(dx)^2;e = ones(imax,1);B = [-alpha*e 2*(1+alpha)*e -alpha*e];Lx = spdiags(B,[-1 0 1],imax,imax);B = [alpha*e 2*(1-alpha)*e alpha*e];Rx = spdiags(B,[-1 0 1],imax,imax);%%CN method:
u=zeros(imax,nstep+1);u(:,1)=(f0)';for n=2:nstep+1 u(:,n)=Lx\(Rx*u(:,n-1)); % boundary value
u(1,n)=2; u(end,n)=0.5;end% display contour plot
t=[0:nstep];[Xg,tg] = meshgrid(X,t);figure;contourf(Xg,tg,u.');
Best Answer