【发布时间】:2012-12-27 04:43:42
【问题描述】:
我正在尝试使用 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 函数。我的假设是否正确,如何解决这个问题?
【问题讨论】:
标签: wolfram-mathematica pde nonlinear-functions