詳細
例題
例
関連項目
NDSolve`FEM`
DiscretizePDE::femdpop
例題
例 (3)
NDSolveValue[{D[u[x], {x, 2}] == u[x] ^ (3 / 2) / Sqrt[x], u[0] == 1, u[10] == 0}, u, {x, 0, 10}, Method -> "FiniteElement"]1つの解決法として,複素平面でソルバが使えるような0の複素成分を方程式に加えることがある:
NDSolveValue[{D[u[x],{x,2}]==u[x]^(3/2)/Sqrt[x]+0.I,u[0]==1,u[10]==0},u,{x,0,10},Method->"FiniteElement"]この場合,別の方法として,InitialSeedingの値の複素数を指定することもできる:
sol = NDSolveValue[{D[u[x], {x, 2}] == u[x] ^ (3 / 2) / Sqrt[x], u[0] == 1, u[10] == 0}, u, {x, 0, 10}, Method -> "FiniteElement", InitialSeeding -> u[x] == 0.I]Reを使って解を可視化する:
Plot[Re[sol[x]], {x, 0, 10}, PlotRange -> All]Plot[Im[sol[x]], {x, 0, 10}, PlotRange -> All]このメッセージはオーバーフローが起ったことを示す場合もある:
f[x_ ? NumericQ] := If[x <= 1 / 2, 0, 2 * $MaxNumber]
NDSolve[{DiffusionPDETerm[{u[x], {x}}, 1] == f[x], DirichletCondition[u[x] == 0, x == 0]}, u, {x, 0, 1}]このメッセージは,MachinePrecision(機械精度)数が生成されたときとは異なる精度を持つ数を示す場合もある:
f[x_ ? NumericQ] := If[x <= 1 / 2, 0, 2 * $MaxMachineNumber]
NDSolve[{DiffusionPDETerm[{u[x], {x}}, 1] == f[x], DirichletCondition[u[x] == 0, x == 0]}, u, {x, 0, 1}]