3
我想用NDSolve
來數值求解PDE。我不斷收到以下錯誤:Mathematica:解決包含功能的共軛功能或功能的Abs的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}]
現在我猜數學試圖把我的表情的衍生物,發現它不知道如何推導Abs
功能。我是否正確地承認這一點,以及如何解決這個問題?
非常感謝您的回覆。你有什麼想法,爲什麼Mathematica失敗,沒有明確分離成實部和虛部?另外,如果有人在後面讀到這一點:由於我的實際表達顯然比這個要長得多,所以將「手動」方程改爲包含顯式實部和虛部並不是那麼有吸引力。 對於任何複雜函數f做一個「顯性複雜化」的通用方法是: f函數[{x,t} fre [x,t] + I fim [x,t]] –
另外,爲了收集實數和虛數的平等,我會加上: ComplexExpand [Thread [Im [equation],Equal]] ComplexExpand [Thread [Re [equation],Equal]]' –