再次赞一下happyfish给出的ndsolveMethod代码。我在没有加载有限元程序包的情况下,用ndsolveMethod对MMA文档中的一个微分方程测试过,其结果显示,的确使用了有限元法(我用的是MMA10.3)。也就是说,在版本10中,有些情况下NDSolve会自动调用有限元法来解方程。
下面是测试用的完整代码:
uif=NDSolve[{Laplacian[u[x,y],{x,y}]==0,
u[x,0]==0,u[x,1]==1,
u[0,y]==0,u[1,y]==0},
u,{x,0,1},{y,0,1}]
Plot3D[u[x,y]/.uif[[1]],{x,0,1},{y,0,1},
ColorFunction->"TemperatureMap"]
ndsolveMethod[expr___]:=DeleteDuplicates/@{DeleteCases[Cases[
Select[Flatten@Trace[NDSolve[expr],TraceInternal->True],
!FreeQ[#,NDSolve`MethodData]&],x_Symbol:>If[
Context[x]=="NDSolve`"&&StringFreeQ[SymbolName[x],"$"],
SymbolName@x,Nothing],Infinity,Heads->True],
"MethodData"],Cases[Flatten@Trace[NDSolve[expr],
TraceInternal->True],HoldForm[Method->___],Infinity]};
ndsolveMethod[{Laplacian[u[x,y],{x,y}]==0,
u[x,0]==0,u[x,1]==1,
u[0,y]==0,u[1,y]==0},
u,{x,0,1},{y,0,1}]
以上代码在MMA10.3中运行后相关结果为:
{Method->{FiniteElement,IntegrationOrder->Automatic,
InterpolationOrder->Automatic,PrecomputeGeometryData->True}}
但不知在本版9中会怎样。不知谁电脑上还装有Mathematica 9?可否帮忙运行一下以上程序,把结果贴出来,看一看都用到什么方法?
(顺便提一下,我的原问题后来有所补充修正。)