詳細
例題
例
関連項目
NDSolve`FEM`
ElementMesh::femimq
例題
例 (2)
このメッセージは,指定されたメッシュ要素が自己交差する場合,誤った順序を持つ場合,あるいは領域を持たない場合に生成される:
Needs["NDSolve`FEM`"]ToElementMesh["Coordinates" -> {{0, 0}, {1, 0}, {1, 1}, {0, 1}}, "MeshElements" -> {QuadElement[{{3, 2, 1, 4}}]}]ToElementMesh["Coordinates" -> {{0, 0}, {1, 0}, {1, 1}, {0, 1}}, "MeshElements" -> {QuadElement[{{1, 2, 3, 4}}]}]data = {{2.62713, 145.509, 1.}, {2.62713, 155.609, 2.}, {4.50713, 154.346, 2.}, {6.38713, 153.084, 2.}};Interpolation[data, InterpolationOrder -> 1];この問題は,数値的に非厳密であるために,メッシュの作成中に,領域を持たない三角形が生成されたために起こるものである:
m = ToElementMesh[data[[All, 1 ;; 2]]]m["Quality"]m["Wireframe"]pos = Position[m["Quality"], _ ? (# <= 0.1&)];
Show[
m["Wireframe"],
m["Wireframe"[pos, "MeshElement" -> "MeshElements", "ElementMeshDirective" -> Directive[EdgeForm[Red], FaceForm[]]]]]入力データに少し摂動を与えることにより,この問題を修正することができる:
data2 = data;
data2[[All, 1 ;; 2]] += RandomReal[10 ^ -12 * {-1, 1}, Dimensions[data2[[All, 1 ;; 2]]]];if = Interpolation[data2, InterpolationOrder -> 1];if["ElementMesh"]["Quality"]