0% found this document useful (0 votes)
1K views2 pages

Matlab Code For Heat Equation

This document contains the code to solve a 1-D heat equation using an implicit finite difference scheme known as the Crank-Nicolson method. It takes in parameters like the domain endpoints, number of spatial and temporal steps, diffusion coefficient, and maximum time. It sets up the coefficient matrix A and load vector using the Crank-Nicolson scheme. In a time stepping loop, it solves the system of equations at each time step to obtain the solution vector, plots it, and updates for the next time step until the maximum time is reached.
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
0% found this document useful (0 votes)
1K views2 pages

Matlab Code For Heat Equation

This document contains the code to solve a 1-D heat equation using an implicit finite difference scheme known as the Crank-Nicolson method. It takes in parameters like the domain endpoints, number of spatial and temporal steps, diffusion coefficient, and maximum time. It sets up the coefficient matrix A and load vector using the Crank-Nicolson scheme. In a time stepping loop, it solves the system of equations at each time step to obtain the solution vector, plots it, and updates for the next time step until the maximum time is reached.
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1/ 2

function [U,x]=HeatImplicit_N(a,b,nx,nt,alpha,tmax)

%HeatBTCS:Solve 1-D equation with BTCS Scheme


%
%input a,b end points of the spece domain default a=0,b=1
%
nx number of spatial steps default nx=20
%
nt number of time steps default nt=10
%
alpha diffusion coefficient default alpha=0.01
%
tmax maximum time for the simulation default tmax=0.5
%
%output T matix of solution:
T(:)=T(x) at t=t(m)
if nargin<1
a=0;b=1;
end
if nargin<3,nx=20;end
if nargin<4,nt=20;end
if nargin<5,alpha=0.01;end
if nargin<6,tmax=3;end
%
%compute the step sizes
clc
close all
dx=(b-a)/(nx-1);
dt=tmax/(nt-1);
x=[0:nx-1]*dx;
U=zeros(nx,1); %memory allocation for the solution
d=zeros(nx,1);
U0=f(x); %setup initial conditions
Uold=U0';
%
%setup the coefficient matix
r=(alpha*dt)/(2*dx^2);
a=-r;
b=1+2*r;
c=-r;
a=a*ones(nx,1);
b=b*ones(nx,1);
A=spdiags([a b a],-1:1,nx,nx);
A(1,1)=1;A(1,2)=0;A(nx,nx)=1;A(nx,nx-1)=-1;
d=r;
e=1-2*r;
f=r
d=d*ones(nx,1);
e=e*ones(nx,1);
B=spdiags([d e d],-1:1,nx,nx);
B(1,1)=0;B(1,2)=0;B(nx,nx)=0;B(nx,nx-1)=0;
C=zeros(nx,1);
%setup the load vector
for tn=1:nt
C(nx)=dx*sin(tn*dt);
g=B*Uold + C;
Unew=cgs(A,g);
plot(x,U0,'b:',x,Unew,'r.-')
legend('initial value', 'solution')
title(sprintf('time t=%0.2f',(tn-1)*dt))
Uold=Unew;
U=Unew;
drawnow

end
function y=f(x)
%initial condition function
y=x.*(1-x.^2).^2;

You might also like