use of pdepe for a space-dependent diffusivity
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Giuseppe Pontrelli
il 29 Mag 2024
Commentato: Giuseppe Pontrelli
il 29 Mag 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!
0 Commenti
Risposta accettata
Torsten
il 29 Mag 2024
Modificato: Torsten
il 29 Mag 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
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Geometry and Mesh in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!