Я пытаюсь численно решить PDE, используя NDSolve
. Я продолжаю получать следующую ошибку:
"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
. Правильно ли я предполагаю это, и как можно обойти эту проблему?