Mathematica:求解包含函数的共轭或函数的Abs的PDE

时间:2013-01-12 20:53:59

标签: wolfram-mathematica pde nonlinear-functions

我正在尝试使用NDSolve以数字方式解决PDE问题。我一直收到以下错误:

"NDSolve::ndnum: "Encountered non-numerical value for a derivative at t == 0.."

由于Abs[D[f[x,y,t],x]]Conjugate[D[f[x,y,t],x]]的存在,我似乎只收到此错误。我创建了一个非常简单的函数来演示这个问题。

这将有效:

noAbs = D[f[x, t], t] == f[x, t] f[x, t] D[f[x, t], x, x]
xrange = \[Pi]; trange = 5;
forSolve = {noAbs, f[x, 0] == Exp[I x], f[-xrange, t] == f[xrange, t]}
frul = NDSolve[forSolve, f, {x, -xrange, xrange}, {t, 0, trange}, 
   MaxStepSize -> 0.007, Method -> "MethodOfLines" ];

这不起作用(注意唯一的区别是我们没有Abs)。

withAbs = D[f[x, t], t] == f[x, t] f[x, t] Abs[D[f[x, t], x, x]];
forSolve = {withAbs, f[x, 0] == Exp[I x], 
  f[-xrange, t] == f[xrange, t]}
frul = NDSolve[forSolve, {f}, {x, -xrange, xrange}, {t, 0, trange}, 
   MaxStepSize -> 0.007, Method -> "MethodOfLines" ];
Plot3D[Re[f[x, t]] /. frul, {x, -xrange, xrange}, {t, 0, trange}]

现在我猜测Mathematica试图采用我的表达式的衍生物,并发现它不知道如何派生Abs函数。我是否正确地假设这一点,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

有一点耐心,根据你的功能的真实和想象部分写一切。 设置f=fRe + I fIm

equation =  ComplexExpand[
 (Derivative[0, 1][fRe][x, t] + I Derivative[0, 1][fIm][x, t]) == 
 (fRe[x, t] + I fIm[x, t])^2  Abs[Derivative[2, 0][fRe][x, t] + I Derivative[2, 0][fIm][x, t]], 
   TargetFunctions -> {Re, Im}] ;

equation

初始条件:

Plot[Evaluate@solAbs[x, 0], {x, -xrange, xrange}]

IC

边界条件:

Plot[Evaluate@(solAbs[-xrange, t] - solAbs[xrange, t]), {t, 0, trange}, PlotRange -> All]

enter image description here