Error in solving system of two reaction-diffusion equations?

20 ビュー (過去 30 日間)
Rose
Rose 2017 年 12 月 5 日
編集済み: Torsten 2022 年 5 月 3 日

Hello there,

I have a system of two reaction-diffusion equations that I want to solve numerically (attached is the file). However, it doesn't resemble with the standard system used in pdepe.m example. The problems I have are:

(1) I don't know how to incorporate it and write c, f, s for my system. As per my knowledge the problem is with the extra term $\gamma \partial u/\partial x$.

(2) I tried coding it up but I got an error:

Warning: Failure at t=2.806210e-02. Unable to meet integration tolerances without reducing the step size below the smallest value allowed (5.551115e-17) at time t. > In ode15s (line 730) In pdepe (line 289) In pde_bee (line 67)

Here is the code I wrote:

   m = 0; % not sure what m should be for my system of equations
  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];
sol = pdepe(m,@pdex4pde,@pdex4ic,@pdex4bc,x,t);
u1 = sol(:,:,1);
u2 = sol(:,:,2);
figure;
surf(x,t,u1);
title('u1(x,t)');
xlabel('Distance x');
ylabel('Time t');
figure;
surf(x,t,u2);
title('u2(x,t)');
xlabel('Distance x');
ylabel('Time t');
% --------------------------------------------------------------------------
function [c,f,s] = pdex4pde(x,t,u,DuDx)
delta = 0.5;
gamma = 0.1;
alpha = 0.1;
beta = 0.1;
muB = 0.2;
kB = 0.2;
deltaB = 0.1;
Du1Dx = DuDx(1);
%Du2Dx = DuDx(2);
u1 = u(1); % u in my eqns
u2 = u(2); % v in my eqns
c = [1; 1];
f = [delta*Du1Dx-gamma*u1; 0] .* DuDx;
F = -alpha*u1 + beta*u2;
s = [F; muB*kB*u2^2/(kB^2+u2^2)-deltaB*u2-F];
% --------------------------------------------------------------------------
function u0 = pdex4ic(x)
u0 = [1; 0];
% --------------------------------------------------------------------------
function [pl,ql,pr,qr] = pdex4bc(xl,ul,xr,ur,t)
pl = [0; ul(2)];
ql = [1; 0];
pr = [ur(1)-1; 0];
qr = [0; 1];

Thank you so much for your attention.

採用された回答

Torsten
Torsten 2017 年 12 月 6 日
"pdepe" is not designed to solve mixtures of partial differential equations and ordinary differential equations (the equation for u is a partial differential equation, the equation for v is an ordinary differential equation).
You will have to discretize the first equation in space on your own and solve the complete resulting system of ordinary differential equations using ODE15S.
Look up "method of lines" for more details.
Best wishes
Torsten.
  9 件のコメント
SDO
SDO 2019 年 11 月 18 日
編集済み: SDO 2019 年 11 月 18 日
ZIYI LIU
ZIYI LIU 2020 年 10 月 8 日
Hello Torsten,
What if the boundary conditions of u contain dvdt?
I have a really similar system to this one, but my boundary conditions of u is dvdt, and I wrote my code but cannot get the correct result.
Thanks!
Best,
Ziyi

サインインしてコメントする。

その他の回答 (1 件)

Bill Greene
Bill Greene 2017 年 12 月 14 日
The flux term in your pdex4pde function doesn't match the equations you show in your attached pdf. Assuming the pdf is correct, change f to this:
f = [delta*Du1Dx-gamma*u1; 0];
That change will also resolve the convergence problems you are observing.
  3 件のコメント
Bill Greene
Bill Greene 2017 年 12 月 15 日
I could not find any specification of boundary conditions in the problem description so it is unclear to me exactly what the desired boundary conditions are. It is not uncommon to set the total flux (both diffusive and convective components) equal zero. So that seems just as reasonable to me as setting du/dx=0.
Regarding the setting of boundary conditions for u(2), since the flux is identically zero in equation 2, setting qr(2)=ql(2)=1 and pr(2)=pl(2)=0 has no effect, adverse or otherwise, on the solution. Its just a simple way to satisfy pdepe's requirement for boundary conditions on all dependent variables.
In general, pdepe is far more versatile than many people (including Mathworks documentation writers) understand.
Torsten
Torsten 2017 年 12 月 15 日
編集済み: Torsten 2017 年 12 月 15 日
From a physical standpoint, setting the total flux to zero at x=0 makes no sense because the convective flux of u must leave the system. Otherwise, u will accumulate at x=0.
It's correct that setting qr(2)=ql(2)=1 and pr(2)=pl(2)=0 has no effect on the solution for v if v was the only solution variable. Nonetheless, the boundary values that v attains over time will influence u. And this not only at the boundary, but over the complete domain because of the fluxes of u in the spatial coordinate. And since u and v are coupled, this in turn will also influence v over the complete domain.
I admit that I don't know about the strength of this effect, but the uncertainty alone would keep me from using this tool for the above problem.
Best wishes
Torsten.

サインインしてコメントする。

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by