issue with pdepe: "Spatial discretization has failed."

조회 수: 2 (최근 30일)
Mart Last
Mart Last 2018년 3월 26일
답변: Bill Greene 2018년 3월 26일
I am trying to solve the system of coupled partial differential equations described in the attachment using the function pdepe. My code runs into this error:
Error using pdepe (line 293)
Spatial discretization has failed. Discretization supports only parabolic and elliptic equations, with flux term involving
spatial derivative.
Error in pde_ex (line 7)
sol = pdepe(0,@main,@initial,@bound,x,t);
Here's the code I'm using:
function pde_ex
clc;
dt = 100;
tmax=10^5;
t = 0:dt:tmax;
x = t/tmax;
sol = pdepe(0,@main,@initial,@bound,x,t);
u1 = u(:,:,1)
u2 = u(:,:,2)
% -----------------------
function [c,f,s] = main(x,t,u,dudx)
c = [1; 1];
f = [1; 1].*dudx;
s1 = -1*((1+[0, 1]*u))*([1, 0]*u)*(1+[0, 1]*u);
s2 = -1*([0, 1]*u) + ([1, 0]*u)/(1+[1, 0]*u);
s=[s1;s2];
% -----------------------
function [pa,pb,qa,qb] = bound(xa,ua,xb,ub,t)
pa = [-1; 0];
qa = [1; 1];
pb = [0; 0];
qb = [1; 1];
% -----------------------
function u0 = initial(x)
u0=[0; 0];
What I've seen in answers to similar questions is that the boundary conditions might not be implemented correctly (e.g. /answers/169414-spatial-discretization-has-failed-pdex1). I've checked this but haven't been able to find the error. If not that, I'm unsure what this error means and how to fix it.
Any help would be much appreciated.
  댓글 수: 3
Mart Last
Mart Last 2018년 3월 26일
편집: Mart Last 2018년 3월 26일
Thanks. The original equations were a bit more cumbersome and I tried to simplify them somewhat before posting this - s1 should have been:
s1 = -1*([0, 1]*u)*([1, 0]*u)*(1+[1, 0]*u);
and pa = [1;0]; but that does not solve the problem.
As for pa: the spatial discretization works when I use:
function [pa,pb,qa,qb] = bound(xa,ua,xb,ub,t)
pa = ua-[-1; 0];
qa = [1; 1];
pb = ub-[0; 0];
qb = [1; 1];
But I'm not sure why one would define pa and pb as such. Is there a more thorough documentation available on how pdepe handles boundary conditions than [help/matlab/ref/pdepe.html#f93-998749]?
Torsten
Torsten 2018년 3월 26일
Setting pa and pb as above does not define the problem you are trying to solve.
My guess is that the problem occurs because you only prescribe gradients at the boundaries. On the other side, I don't see why this should not be possible.
Best wishes
Torsten.

댓글을 달려면 로그인하십시오.

답변 (1개)

Bill Greene
Bill Greene 2018년 3월 26일
Beyond the problems already mentioned by Torsten, the reason for the error message is that you have listed the returned arguments from the bound function incorrectly. It should be:
function [pa,qa,pb,qb] = bound(xa,ua,xb,ub,t)
Your initial conditions and your boundary conditions are inconsistent but this should not prevent pdepe from obtaining a "solution."
Finally, for future reference, it would make your code much easier to debug if you wrote it in a simpler and more direct way, e.g.
u1=u(1,:);
u2=u(2,:);
f=dudx;
s1 = -u2.*(u1+u1.^2);
s2 = -u2 + u1./(1+u1);

카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by