EvaluateOnElementMesh[{x1,…},f,mesh]
形式的なパラメータ{x1,…}に依存する f がElementMesh mesh 上で評価されたInterpolatingFunctionを返す.
EvaluateOnElementMesh[{x1,…},{f1,…},mesh]
複数の式{f1,…}を同じメッシュ mesh 上で評価する.
EvaluateOnElementMesh[{x1,…},f,mesh]
mesh に複数の材料領域がある場合にDiscontinuousInterpolatingFunctionを返す.
EvaluateOnElementMesh
EvaluateOnElementMesh[{x1,…},f,mesh]
形式的なパラメータ{x1,…}に依存する f がElementMesh mesh 上で評価されたInterpolatingFunctionを返す.
EvaluateOnElementMesh[{x1,…},{f1,…},mesh]
複数の式{f1,…}を同じメッシュ mesh 上で評価する.
EvaluateOnElementMesh[{x1,…},f,mesh]
mesh に複数の材料領域がある場合にDiscontinuousInterpolatingFunctionを返す.
詳細とオプション
- EvaluateOnElementMeshは,InterpolatingFunctionとDiscontinuousInterpolatingFunctionのいずれかを返す.
- 補間関数は,解
がメッシュのノードの値である方程式系
を解くことによって作成される.
の弱形式の離散化された行列で,形状関数
と検定関数
を持つ. - EvaluateOnElementMeshは決して
をメッシュノードで評価しないが,メッシュ要素の統合点で評価する. - EvaluateOnElementMeshは以下のオプションを持つ.
-
"DiscontinuousInterpolation" Automatic 自動的に不連続性を処理することをオフにする "ExtrapolationHandler" Automatic 外挿がどのように処理されるかを指定する "MarkerPriority" Automatic 境界での動作を指定する
例題
すべて開く すべて閉じる例 (2)
<<NDSolve`FEM`mesh = ToElementMesh[Disk[]]fun = EvaluateOnElementMesh[{x, y}, Sin[x ^ 2 + y ^ 2], mesh]Plot3D[fun[x, y], {x, y}∈mesh]複数の材料のElementMeshを作成して可視化する:
mesh = ToElementMesh[RegionDifference[Rectangle[], Disk[{1 / 2, 1 / 2}, 1 / 6]], "RegionHoles" -> None, "RegionMarker" -> {{{1 / 5, 1 / 5}, 1}}];
mesh["Wireframe"["MeshElementStyle" -> {FaceForm[Gray], FaceForm[White]}]]function = If[ElementMarker == 1, 0, 1];difun = EvaluateOnElementMesh[{x, y}, function, mesh]Plot3D[difun[x, y], {x, y}∈mesh, Mesh -> All]オプション (3)
"DiscontinuousInterpolation" (1)
複数の材料マーカーを含むメッシュが与えられる場合には,不連続補間がデフォルトである.不連続補間を行いたくない場合には,"DiscontinuousInterpolation" Falseのオプションでオフにすることができる.
mesh = ToElementMesh[RegionDifference[Rectangle[], Disk[{1 / 2, 1 / 2}, 1 / 6]], "RegionHoles" -> None, "RegionMarker" -> {{{1 / 5, 1 / 5}, 1}}];
mesh["Wireframe"["MeshElementStyle" -> {FaceForm[Gray], FaceForm[White]}]]function = If[ElementMarker == 1, 0, 1];EvaluateOnElementMesh[{x, y}, function, mesh]メッシュ上で不連続関数を評価するが,InterpolatingFunctionを生成する:
EvaluateOnElementMesh[{x, y}, function, mesh, "DiscontinuousInterpolation" -> False]"ExtrapolationHandler" (1)
デフォルトで,EvaluateOnElementMeshを通して生成されたInterpolatingFunctionあるいはDiscontinuousInterpolatingFunctionは,警告メッセージを発して外挿を行うことによって,外挿を処理する.この動作は変更可能である.
mesh = ToElementMesh[Disk[]];
fun = EvaluateOnElementMesh[{x, y}, Sin[x ^ 2 + y ^ 2], mesh]領域外でInterpolatingFunctionについてクエリを行う:
fun[2, 2]領域外のクエリにIndeterminateを返す外挿ハンドラを含むInterpolatingFunctionを構築する:
fun = EvaluateOnElementMesh[{x, y}, Sin[x ^ 2 + y ^ 2], mesh, "ExtrapolationHandler" -> {Function[Indeterminate]}]fun[2, 2]領域外のクエリについて外挿し,警告メッセージを発しない外挿ハンドラを含むInterpolatingFunctionを構築する:
fun = EvaluateOnElementMesh[{x, y}, Sin[x ^ 2 + y ^ 2], mesh, "ExtrapolationHandler" -> {Automatic, "WarningMessage" -> False}]fun[2, 2]外挿の処理についての詳細は,ElementMeshInterpolationを参照されたい.
"MarkerPriority" (1)
マーカーの優先度を指定することによって,どの値が材料の境界領域で使われるかを制御することができる.以下の1Dのメッシュ例について考える:
mesh = ToElementMesh[ToBoundaryMesh["Coordinates" -> {{-1}, {0}, {1}}, "BoundaryElements" -> {PointElement[{{1}, {2}, {3}}]}], "RegionMarker" -> {{{-1 / 2}, 10}, {{1 / 2}, 20}}]mesh["MeshElementMarkerUnion"]マーカー10の要素すべてに–1の値,そしてその他の要素に1の値を与える関数を書く:
function = If[ElementMarker == 10, -1, 1];fun = EvaluateOnElementMesh[{x}, function, mesh]Plot[fun[x], {x, -1, 1}]fun[0]不連続補間関数のマーカー優先度を調べると,マーカー10がマーカー20に優先することが分かる.これは,マーカー10に関連付けられた値がマーカー20に関連付けられた値よりも高い優先権を持つことを意味する:
fun["MarkerPriority"]境界領域での値は,マーカーの優先権を変更することによって設定できる:
fun = EvaluateOnElementMesh[{x}, function, mesh, "MarkerPriority" -> {20, 10}]fun["MarkerPriority"]境界領域の位置
における値がマーカー20に関連付けられた値に変更された:
fun[0]全体的なプロットは同じように見えるが,境界領域での値のみが変更された:
Plot[fun[x], {x, -1, 1}]考えられる問題 (1)
EvaluateOnElementMeshを使ってInterpolatingFunctionの勾配を計算する際に問題が生じることがある.
bmesh = ToBoundaryMesh["Coordinates" -> {{0, 0}, {1, 0}, {1, 1 / 2}, {1, 1}, {0, 1}, {0, 1 / 2}}, "BoundaryElements" -> {LineElement[{{1, 2}, {2, 3}, {3, 4}, {4, 5}, {5, 6}, {6, 1}, {3, 6}}]}];
mesh = ToElementMesh[bmesh, "RegionMarker" -> {{{1 / 2, 1 / 3}, 1}, {{1 / 2, 2 / 3}, 2}}];op = Inactive[Div][-Piecewise[{{3, ElementMarker == 1}}, 1] * IdentityMatrix[2].Inactive[Grad][u[x, y], {x, y}], {x, y}];Subscript[Γ, D] = {DirichletCondition[u[x, y] == 1, y == 0], DirichletCondition[u[x, y] == 0, y == 1]};uFun = NDSolveValue[{op == 0, Subscript[Γ, D]}, u, {x, y}∈mesh];Plot3D[uFun[x, y], {x, y}∈mesh]field = EvaluateOnElementMesh[{x, y}, Grad[-uFun[x, y], {x, y}], mesh]Plot[field[[2]][x, 0.5], {x, 0, 1}]連続的な値は予測通りである.これは勾配が補間関数上で直接計算されてから,要素メッシュ上で評価されたために起る.よりよいアプローチは,まず補間関数をDiscontinuousInterpolatingFunctionに変換することである:
duFun = DiscontinuousInterpolatingFunction[uFun]DiscontinuousInterpolatingFunction上の勾配を計算する:
field = -Grad[duFun[x, y], {x, y}]Plot[Evaluate[field[[2]] /. y -> 0.5], {x, 0, 1}]Plot[Evaluate[field[[2]] /. x -> 0.5], {y, 0, 1}]
における定数の値は,異なる"MarkerPriority"を指定することによって変更できる:
duFun = DiscontinuousInterpolatingFunction[uFun, "MarkerPriority" -> {2, 1}];
field = -Grad[duFun[x, y], {x, y}];
Plot[Evaluate[field[[2]] /. y -> 0.5], {x, 0, 1}]テクニカルノート
テキスト
Wolfram Research (2024), EvaluateOnElementMesh, Wolfram言語関数, https://reference.wolfram.com/language/FEMDocumentation/ref/EvaluateOnElementMesh.html.
CMS
Wolfram Language. 2024. "EvaluateOnElementMesh." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/FEMDocumentation/ref/EvaluateOnElementMesh.html.
APA
Wolfram Language. (2024). EvaluateOnElementMesh. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/FEMDocumentation/ref/EvaluateOnElementMesh.html
BibTeX
@misc{reference.wolfram_2026_evaluateonelementmesh, author="Wolfram Research", title="{EvaluateOnElementMesh}", year="2024", howpublished="\url{https://reference.wolfram.com/language/FEMDocumentation/ref/EvaluateOnElementMesh.html}", note=[Accessed: 11-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_evaluateonelementmesh, organization={Wolfram Research}, title={EvaluateOnElementMesh}, year={2024}, url={https://reference.wolfram.com/language/FEMDocumentation/ref/EvaluateOnElementMesh.html}, note=[Accessed: 11-August-2026]}