1D Heat Conduction using explicit Finite Difference Method

Hello I am trying to write a program to plot the temperature distribution in a insulated rod using the explicit Finite Central Difference Method and 1D Heat equation. The rod is heated on one end at 400k and exposed to ambient temperature on the right end at 300k. I am using a time of 1s, 11 grid points and a .002s time step. When I plot it gives me a crazy curve which isn't right. I think I am messing up my initial and boundary conditions. Here is my code.
L=1;
t=1;
k=.001;
n=11;
nt=500;
dx=L/n;
dt=.002;
alpha=k*dt/dx^2;
T0(1)=400;
for j=1:nt
for i=2:n
T1(i)=T0(i)+alpha*(T0(i+1)-2*T0(i)+T0(i-1));
end
T0=T1;
end
plot(x,T1)

댓글 수: 2

First place, it is not giving any curve..there is a error in your code. Please recheck your code once.
I am not sure I understand correctly. In the above I wrote this equation to be iterated
With Boundary conditions
and Initial Conditions
with T0=400k and TL=Ti=300k
I am not sure how to set these boundary conditions in the code. Or if there is a curve I need to derive before doing the iterations.

댓글을 달려면 로그인하십시오.

 채택된 답변

michio
michio 2016년 12월 15일
편집: michio 2016년 12월 15일
It seems your initial condition and boundary conditon (x = L) are missing in the code. Try
L=1;
t=1;
k=.001;
n=11;
nt=500;
dx=L/n;
dt=.002;
alpha=k*dt/dx^2;
T0=400*ones(1,n);
T1=300*ones(1,n);
T0(1) = 300;
T0(end) = 300;
for j=1:nt
for i=2:n-1
T1(i)=T0(i)+alpha*(T0(i+1)-2*T0(i)+T0(i-1));
end
T0=T1;
end
plot(T1)

댓글 수: 9

Although your code didn't plot the graph properly for me it helped me figure out how to define the boundaries. I was able to plot it properly by switching around a few things. Thanks for your help!
Glad to know that you figure things out. One additional tip is vectorization instead of for-loop, ie.
for i=2:n-1
T1(i) = T0(i) + alpha*(T0(i+1)-2*T0(i)+T0(i-1));
end
is equivalent to
T1(2:n-1) = T0(2:n-1) + alpha*(T0(3:n)-2*T0(2:n-1)+T0(1:n-2));
The later runs much faster.
Are the time step and grid spacing missing? I guess it would be:
if true
T1(2:n-1) = T0(2:n-1) + alpha*dt/dx^2*(T0(3:n)-2*T0(2:n-1)+T0(1:n-2));
end
Look at the definition of "alpha" in the code ...
Best wishes
Torsten.
@Derek Shaw Can you please share the code. I am also struck in the same and cannot figure out the correct code for plotting..
Thanks
L=1;
t=1;
k=.001;
n=11;
nt=10000;
dx=L/n;
dt=.002;
alpha=k*dt/dx^2;
T0=400*ones(1,n+1);
T1=300*ones(1,n+1);
T0(1) = 300;
T0(end) = 300;
for j=1:nt
for i=2:n
T1(i)=T0(i)+alpha*(T0(i+1)-2*T0(i)+T0(i-1));
end
T0=T1;
end
plot((0:n)*L/n,T1)
SYML2nd
SYML2nd 2022년 12월 4일
편집: SYML2nd 2022년 12월 4일
Hi @Torsten I have a question that regards this code.
If one end should be at 400K and the other end is at 300K.
Why, before the for cycle, is T0 = [300,400,..,400,300]?
For me it should have been T0=[400,300,...,300,300]. If T(0,t)=T0=400 K, then this boundary condition should be fixed during the whole calculation. Can you explain?
Yes, code should be
L=1;
t=1;
k=.001;
n=11;
nt=10000;
dx=L/n;
dt=.002;
alpha=k*dt/dx^2;
T0=300*ones(1,n+1);
T0(1) = 400;
T1 = T0;
for j=1:nt
for i=2:n
T1(i)=T0(i)+alpha*(T0(i+1)-2*T0(i)+T0(i-1));
end
T0=T1;
end
plot((0:n)*L/n,T1)

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

youssef aider
youssef aider 2019년 2월 12일
here is one, you can just change the boundaries
clear
clc
clf
% domain descritization
alpha = 0.05;
xmin = 0;
xmax = 0.2;
N = 100;
dx = (xmax-xmin)/(N-1);
x = xmin:dx:xmax;
dt = 4.0812E-5;
tmax = 1;
t = 0:dt:tmax;
% problem initialization
phi0 = ones(1,N)*300;
phiL = 230;
phiR = phiL;
% solving the problem
r = alpha*dt/(dx^2) % for stability, must be 0.5 or less
for j = 2:length(t) % for time steps
phi = phi0;
for i = 1:N % for space steps
if i == 1 || i == N
phi(i) = phiL;
else
phi(i) = phi(i)+r*(phi(i+1)-2*phi(i)+phi(i-1));
end
end
phi0 = phi;
plot(x,phi0)
shg
pause(0.05)
end
Alugunuri
Alugunuri 2023년 2월 8일

0 개 추천

how to write code with neumqn BCs ?

카테고리

도움말 센터File Exchange에서 Mathematics에 대해 자세히 알아보기

제품

질문:

2016년 12월 15일

답변:

2023년 2월 8일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by