3

を使用して偏微分方程式を数値的に解こうとして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関数を導出する方法がわからないことがわかったと思います。私はこれを想定するのは正しいですか、そしてこの問題をどのように回避するのですか?

4

1 に答える 1

3

少しの忍耐とあなたの機能の現実と想像の部分の観点からすべてを書くことで。設定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}] ;

方程式

最初の状態 :

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

IC

境界条件:

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

ここに画像の説明を入力してください

于 2013-01-12T21:47:24.947 に答える