Effacer les filtres
Effacer les filtres

use of pdepe for a space-dependent diffusivity

3 vues (au cours des 30 derniers jours)
Giuseppe Pontrelli
Giuseppe Pontrelli le 29 Mai 2024
I have a space-dependent heat equation
Dc/dt = d/dx (D(x) dc/dx)
where the function D(x) is not defined as a function, but a position-dependent
vector of (n) points : diff
The vector diff has the same length of x, so I have x(i) and diff(i), i=1,…,n
How can I implement pdepe?
cb = pdepe(m,@heatcyl,@heatic,@heatbc,x,t); % run solver
function [c,f,s] = heatcyl(x,t,u,dudx) % diffusion equation equation
c = 1;
f = dudx*diff; ???? <<<<<<<<< not sure about that, since diff is a vector
s = 0;
end
function u0 = heatic(x) % initial condition
u0=1;
end
function [pl,ql,pr,qr] = heatbc(xl,ul,xr,ur,t) %BCs
global diff n
pl=0;
ql=1;
pr=ur;
qr=0;
end
Thank you!

Réponse acceptée

Torsten
Torsten le 29 Mai 2024
Modifié(e) : Torsten le 29 Mai 2024
First: Don't name the vector "diff" since "diff" is an internal MATLAB function. Name it D, e.g.
Second: To get the correct value of D, use
f = interp1(X,D,x)*dudx;
where X is the coordinate vector to which the D-values belong.
You can pass both to your function by using
cb = pdepe(m,@(x,t,u,dudx)heatcyl(x,t,u,dudx,X,D),@heatic,@heatbc,x,t); % run solver
...
function [c,f,s] = heatcyl(x,t,u,dudx,X,D) % diffusion equation equation
c = 1;
f = interp1(X,D,x)*dudx;
s = 0;
end
  1 commentaire
Giuseppe Pontrelli
Giuseppe Pontrelli le 29 Mai 2024
thank you Torsten. Your suggestions were very useful, and now the code run nicely!

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Partial Differential Equation Toolbox dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by