## pdepe help! (boundry condition in PDE solver)

### Yizhou Du (view profile)

on 16 Jan 2019
Latest activity Commented on by Yizhou Du

on 15 Feb 2019

### Josh Meyer (view profile)

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:

Yizhou Du

### Yizhou Du (view profile)

on 16 Jan 2019
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;

### Josh Meyer (view profile)

on 15 Feb 2019

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.

Yizhou Du

### Yizhou Du (view profile)

on 15 Feb 2019
Thank you. That works.