MATLAB Answers

Yizhou Du
0

pdepe help! (boundry condition in PDE solver)

Asked by Yizhou Du
on 16 Jan 2019
Latest activity Commented on by Yizhou Du
on 15 Feb 2019
Hello, I need some help with differential equation solving in MATLAB.
I need to slove heat-conduction equation: Cρ*dT(x,t)/dt = df(dT(x,t)/dx)/dx.
Boundry condition: T(x,0)=T0; dT(L,t)/dx=0; T(0,t) = Tg(t) [is the upper boundary condition and, (here, Tg is an instrument-recorded temperature)]
However, the boundary conditions Tg(t) are not periodic(Temperature is changed with time and have no fixed transform relation with time).
How can use pdepe to solve it?
Can someone help me??
This is my code:

  1 Comment

This is my code;
function pdex1
m = 0;
x = [0 0.005 0.01 0.05 0.1 0.2 0.5 0.7 0.9 0.95 0.99 0.995 1];
t = [0 0.005 0.01 0.05 0.1 0.5 1 1.5 2];
C = 4.0;
k = 419;
density = 8960;
TT = [25 30 35 40 45 50 55 60 65];
sol = pdepe(m,@pdex1pde,@pdex1ic,@pdex1bc,x,t);
u1 = sol(:,:,1);
figure
surf(x,t,u1)
title('u1(x,t)')
xlabel('Distance x')
ylabel('Time t')
% --------------------------------------------------------------
function [c,f,s] = pdex01pde(x,t,u,DuDx)
c = density*C;
f = k * DuDx;
y = u(1);
F = 0*y;
s = F;
% % --------------------------------------------------------------
function u0 = pdex1ic(x);
u0 = 25;
% --------------------------------------------------------------
function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)
pl = ul-TT(i);
ql = 0;
pr = 0;
qr = 1;

Sign in to comment.

1 Answer

Answer by Josh Meyer
on 15 Feb 2019
 Accepted Answer

Your boundary condition function includes the line
pl = ul-TT(i);
TT(i) is not defined within view of the function, so that is what is causing the error. To make that work you need to pass TT in as an extra parameter. But, still, the index i is undefined. So I would recommend just doing something like:
function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t)
Tg = 25; % Or Tg = h(t) if you can express it as a function of t
pl = ul-Tg;
ql = 0;
pr = 0;
qr = 1;
If you really want to pass in TT as a parameter, change the header of the boundary function to
function [pl,ql,pr,qr] = pdex1bc(xl,ul,xr,ur,t,TT)
and then define the variable
bc = @(xl,ul,xr,ur,t) pdex1bc(xl,ul,xr,ur,t,TT);
This allows pdepe to pass in the 4 inputs it expects, and allows you to pass in the extra TT input from the workspace. You'll need to define the index i somewhere within pdex1bc as well. The call to pdepe then becomes
sol = pdepe(m,@pdex1pde,@pdex1ic,bc,x,t);
Also, although these don't cause errors some other possible issues are:
  • The constant k appears in your flux term f = ..., but not in your original equation.
  • Your source term should just be s = 0 from the original equation, but you have lines to define y, F, and s.

  1 Comment

Thank you. That works.

Sign in to comment.