ToGradedMesh
詳細とオプション
- グレーデッドメッシュは,座標間の間隔が指数関数的に変化する不均一または異方性のメッシュである.
- グレーデッドメッシュは,偏微分方程式またはその境界における急激な勾配または不連続性を捉えるために使われる.
- 以下の任意の特性 prop を使うことができる.
-
"Alignment"adir "Uniform" アラインメントの方向 adir を使う "ElementCount"n Automatic n 個の要素を使う "ElementMarker"m 0 ElementMarker m を使う "GradingRatio"r Automatic 段階付けの率 r を使う "MaximalDistance"dmax Automatic 座標間の最長距離が dmax となるように座標を選ぶ "MinimalDistance"dmin Automatic 座標間の最短距離が dmin となるように座標を選ぶ - 以下のアラインメント adir を与えることができる.
-
"Left" 左に座標が多く集中している "Right" 右に座標が多く集中している "BothEnds" 両端に座標が多く集中している "Central" 中央に座標が多く集中している "Uniform" 座標間に一様の間隔を使う fun[interval,props] 関数 fun を区間 interval と特性 props に使う - ToGradedMeshは,1DLineプリミティブを受け取り,1DのグレーデッドElementMeshを返す.
- 要素の端の座標間のデフォルト最短距離は,
で計算される.ここで
は入力のLine要素の端点間の距離,
は要素数である. - ToGradedMeshは以下のオプションを持つ.
-
"MeshOrder" Automatic 要素メッシュの次数
例題
すべて開く すべて閉じる例 (3)
Needs["NDSolve`FEM`"]mesh = ToGradedMesh[{Line[{{0}, {1}}]}]MeshRegion[mesh]mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Left"|>]MeshRegion[mesh]Lineを,"BothEnds"の点分布でデフォルト値を使ったグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "BothEnds"|>]MeshRegion[mesh]スコープ (25)
基本の用法 (5)
–1から1までのLineを"Right"の点分布を持つグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{-1}, {1}}], <|"Alignment" -> "Right"|>]MeshRegion[mesh]–1から1までのLineを"Central"の点分布を持つグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{-1}, {1}}], <|"Alignment" -> "Central"|>]MeshRegion[mesh]–1から1までのLineを"Left"の点分布を持つグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{-1}, {1}}], <|"Alignment" -> "Left"|>]MeshRegion[mesh]–1から1までのLineを"BothEnds"の点分布を持つグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{-1}, {1}}], <|"Alignment" -> "BothEnds"|>]MeshRegion[mesh]中央集中のアラインメントを2つ持つグレーデッドメッシュを作成する:
mesh = ToGradedMesh[{
{Line[{{0}, {1}}], <|"Alignment" -> "Central"|>},
{Line[{{1}, {3}}], <|"Alignment" -> "Central"|>}
}]MeshRegion[mesh]Alignment(アラインメント) (3)
mesh = ToGradedMesh[Line[{{0}, {1}}]]MeshRegion[mesh]mesh = ToGradedMesh[Line[{{0}, {1}}], <|"Alignment" -> "Uniform"|>]MeshRegion[mesh]Lineを,10個の要素を持ち,最短の座標距離が
であり,"Central"の点分布を持つグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Central", "ElementCount" -> 10, "MinimalDistance" -> 0.05|>, "MeshOrder" -> 1]MeshRegion[mesh]Min[Differences[MeshOrderAlteration[mesh, 1]["Coordinates"]]]Options[cheb] = {"ElementCount" -> Automatic};
cheb[{start_, end_}, OptionsPattern[]] :=
Module[{n, base},
n = OptionValue["ElementCount"];
base = Table[Cos[θ], {θ, -π, 0, π / n}];
Rescale[base, {-1, 1}, {start, end}]
]mesh = ToGradedMesh[Line[{{-3}, {2}}], <|"Alignment" -> cheb|>]MeshRegion[mesh]ElementCount(要素数) (3)
47個の要素を使って,単位区間が一様である1Dメッシュを作成する:
mesh = ToGradedMesh[{Line[{{0}, {1}}], <|"Alignment" -> "Uniform", "ElementCount" -> 47|>}]Lineを,点が右により多くあり,50個の要素を持つグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Right", "ElementCount" -> 50|>]MeshRegion[mesh]–1から1までのLineを,デフォルトの値を使って"Right"の点分布を持つグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{-1}, {1}}], <|"Alignment" -> "Central"|>]MeshRegion[mesh]デフォルトの要素数は20個である.以下は同じメッシュを作成する:
mesh = ToGradedMesh[Line[{{-1}, {1}}], <|"Alignment" -> "Central", "ElementCount" -> 20|>]MaximalDistance(最長距離) (1)
MinimalDistance(最短距離) (4)
Lineを,右に点が多くあり,最初の間隔が1/50であるグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Right", "MinimalDistance" -> 1 / 50|>]MeshRegion[mesh]Min[Differences[MeshOrderAlteration[mesh, 1]["Coordinates"]]]点の間隔に0.025の一様な区間距離を持つ1Dメッシュを作る:
mesh = ToGradedMesh[{Line[{{0}, {1}}], <|"Alignment" -> "Uniform", "MinimalDistance" -> 0.025|>}];Min[Differences[MeshOrderAlteration[mesh, 1]["Coordinates"]]]MeshRegion[mesh]Lineを,"Central"の点分布を持つグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Central"|>]MeshRegion[mesh]Min[Differences[MeshOrderAlteration[mesh, 1]["Coordinates"]]]中央の点において,隣接の一次座標間の距離は,領域の長さを要素数の2倍で割って(
)計算する.
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Central", "MinimalDistance" -> 1 / 20|>]Min[Differences[MeshOrderAlteration[mesh, 1]["Coordinates"]]]Lineを,左により多くの点があり,10個の要素を作成し,最短間隔が1/33であるグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Left", "ElementCount" -> 10, "MinimalDistance" -> 1 / 33|>, "MeshOrder" -> 1]MeshRegion[mesh]Min[Differences[MeshOrderAlteration[mesh, 1]["Coordinates"]]]GradingRatio(段階付けの率) (4)
Lineを,"Central"の点分布を持ち,段階付けの率が
であるグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Central", "GradingRatio" -> 2|>]MeshRegion[mesh]Lineを,右により多くの点があり,10個の要素を作成し,段階付けの率が
であるグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Right", "ElementCount" -> 10, "GradingRatio" -> 2|>]MeshRegion[mesh]Lineを,右により多くの点があり,段階付けの率が
であるグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Right", "GradingRatio" -> 2|>]Flatten[Differences[MeshOrderAlteration[mesh, 1]["Coordinates"]]]Lineを,両端により多くの点があり,段階付けの率が
であるグレーデッドメッシュに変換する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "BothEnds", "GradingRatio" -> 2|>]MeshRegion[mesh]Flatten[Differences[MeshOrderAlteration[mesh, 1]["Coordinates"]]]複数のものの領域 (5)
3つの線分プリミティブから,点が右に集中,両端に集中,そして左に集中するメッシュを作成する:
mesh = ToGradedMesh[{
{Line[{{-3}, {-1}}], <|"Alignment" -> "Right"|>},
{Line[{{-1}, {1}}], <|"Alignment" -> "BothEnds"|>},
{Line[{{1}, {2}}], <|"Alignment" -> "Left"|>}
}]MeshRegion[mesh]同じ最長距離をもつ一様なメッシュに繋がれている最大距離を持つ,点が左に集中するメッシュを作成する:
mesh = ToGradedMesh[{
{Line[{{0}, {1}}], <|"Alignment" -> "Left", "MaximalDistance" -> 0.1|>},
{Line[{{1}, {2}}], <|"MaximalDistance" -> 0.1|>}
}]MeshRegion[mesh]さまざまなセクションに要素マーカーがある同じメッシュを作成する:
mesh = ToGradedMesh[{
{Line[{{0}, {1}}], <|"Alignment" -> "Left", "MaximalDistance" -> 0.1, "ElementMarker" -> 1|>},
{Line[{{1}, {2}}], <|"MaximalDistance" -> 0.1, "ElementMarker" -> 2|>}
}]mesh["MeshElementMarkerUnion"]メッシュ座標分布をそれぞれの直線と3つの領域マーカー
に割り当てて,3つのLineプリミティブをグレーデッドメッシュに変換する:
mesh = ToGradedMesh[{
{Line[{{0}, {1}}], <|"Alignment" -> "Left", "ElementCount" -> 10, "MinimalDistance" -> 1 / 50, "ElementMarker" -> 1|>},
{Line[{{1}, {2}}], <|"Alignment" -> "Central", "ElementCount" -> 10, "MinimalDistance" -> 1 / 50, "ElementMarker" -> 2|>},
{Line[{{2}, {3}}], <|"Alignment" -> "Right", "ElementCount" -> 10, "GradingRatio" -> 1.5, "ElementMarker" -> 3|>}
}]Show[mesh["Wireframe"["MeshElementStyle" -> {Red, Green, Blue}]],
Graphics[Point[Join[#, {0.}]& /@ mesh["Coordinates"]]], AspectRatio -> 1 / 3]各直線にメッシュ座標分布と要素領域マーカーを割り当てて,3つのLineプリミティブをグレーデッドメッシュに変換する:
mesh = ToGradedMesh[{
{Line[{{-2}, {-1}}], <|"Alignment" -> "Right", "ElementCount" -> 10, "MinimalDistance" -> 1 / 50, "ElementMarker" -> 1|>},
{Line[{{-1}, {1}}], <|"Alignment" -> "BothEnds", "ElementCount" -> 20, "MinimalDistance" -> 1 / 50, "ElementMarker" -> 2|>},
{Line[{{1}, {2}}], <|"Alignment" -> "Left", "ElementCount" -> 10, "GradingRatio" -> 1.5, "ElementMarker" -> 3|>}
}]Show[mesh["Wireframe"["MeshElementStyle" -> {Red, Green, Blue}]],
Graphics[Point[Join[#, {0.}]& /@ mesh["Coordinates"]]], AspectRatio -> 1 / 3]オプション (4)
"MeshOrder" (4)
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Left"|>]mesh["MeshOrder"]mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Left"|>, "MeshOrder" -> 1]MeshRegion[mesh]座標が右に集中している一次のグレーデッドメッシュを作成する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Right"|>, "MeshOrder" -> 1]MeshRegion[mesh]対数スケールを使い,ノードが異方性メッシュに沿ってどのように分布しているかを可視化する:
ListLogPlot[Transpose@mesh["Coordinates"], PlotRange -> All, Frame -> True, FrameLabel -> {{"Coordinate", None}, {"Node Number", "Coordinate vs Node Number"}}]座標が左に集中している二次のグレーデッドメッシュを作成する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Left"|>]MeshRegion[mesh]対数スケールを使い,二次ノードがグレーデッドメッシュに沿ってどのように分布しているかを可視化する:
ListLogPlot[Transpose@mesh["Coordinates"], PlotRange -> All, Frame -> True, FrameLabel -> {{"Coordinate", None}, {"Node Number", "Coordinate vs Node Number"}}]メッシュのデータ構造は,二次ノードを一次ノードの後に保存する.対数スケールを使い,ソートされた二次ノードがグレーデッドメッシュに沿ってどのように分布しているかを可視化する:
ListLogPlot[Transpose@Sort[mesh["Coordinates"]], PlotRange -> All, Frame -> True, FrameLabel -> {{"Coordinate", None}, {"Nodes", "Coordinate vs Nodes"}}]アプリケーション (4)
2つの1Dのグレーデッドメッシュの積から,2Dのグレーデッドメッシュを作成する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <| "Alignment" -> "Left"|>];
productMesh = ElementMeshRegionProduct[mesh, mesh];
productMesh["Wireframe"]"Central"の点分布を持つ1Dのグレーデッドメッシュを作成する:
meshX = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Central"|>];"Central"の点分布と50個の要素を持つ,2つ目の1Dのグレーデッドメッシュを作成する:
meshY = ToGradedMesh[Line[{{0}, {1}}], <|"Alignment" -> "Central", "ElementCount" -> 50|>];productMesh = ElementMeshRegionProduct[meshX, meshY]productMesh["Wireframe"]"BothEnds"の点分布と50個の要素を持ち,端点の距離が1/200である,3つ目の1Dのグレーデッドメッシュを作成する:
meshZ = ToGradedMesh[Line[{{0}, {1}}], <| "Alignment" -> "BothEnds", "ElementCount" -> 50, "MinimalDistance" -> 1 / 200|>]productMesh = ElementMeshRegionProduct[productMesh, meshZ]productMesh["Wireframe"]初期条件が
および
であり,
における境界条件が
および
である.
において,
および
である.
無限領域をモデル化するために,150個の要素と最短距離1/1000で,
からのLineの部分上で左揃えのグレーデッドメッシュを作成する:
mesh = ToGradedMesh[Line[{{0}, {1000}}], <|"Alignment" -> "Left", "ElementCount" -> 150, "MinimalDistance" -> 1 / 1000|>];このメッシュは,左に細かいメッシュの解像度,右に少しだけの要素を持ち,過剰な量のメッシュ要素を必要とすることなく,無限領域を模倣するのに十分な分だけ領域を拡張することができるので,不必要に計算時間を増やさずに済む.
vars = {{cA[t, x], cB[t, x]}, t, {x}};
pars = <|"DiffusionCoefficient" -> {{dA, 0}, {0, dB}}, "BoundaryCondition1" -> <|"AmbientConcentration" -> {kc / ka cB[t, x], ka / kc cA[t, x]}, "MassTransferCoefficient" -> {ka, kc}|>, "BoundaryCondition2" -> <|"MassConcentration" -> {abulk, 0}|>, dA -> 1, dB -> 1, ka -> 1, kc -> 1, abulk -> 1|>;pde = {MassTransportPDEComponent[vars, pars] == MassTransferValue[x == 0, vars, pars, "BoundaryCondition1"], cA[0, x] == 1, cB[0, x] == 0};{cAfun, cBfun} = NDSolveValue[{pde, MassConcentrationCondition[x == 1000, vars, pars, "BoundaryCondition2"]}, {cA, cB}, {t, 0, 10}, x∈mesh];{cAfunSmall, cBfunSmall} = NDSolveValue[{pde, MassConcentrationCondition[x == 1, vars, pars, "BoundaryCondition2"]}, {cA, cB}, {t, 0, 10}, x∈Line[{{0}, {1}}]];frames = Table[Plot[{cAfun[t, x], cBfun[t, x], cAfunSmall[t, x], cBfunSmall[t, x]}, {x, 0, 1}, PlotRange -> All, PlotLegends -> {"SubscriptBox[CA, ∞]", "SubscriptBox[CB, ∞]", "SubscriptBox[CA, small]", "SubscriptBox[CB, small]"}, PlotLabel -> t], {t, 0, 2, 0.01}];
ListAnimate@frames無限大での境界条件の動作を捉えるためには,より大きな領域に拡張する必要がある.
単位正方領域上で,拡散係数のスケールに大きな違いがある直立異方性の拡散方程式
を解く.一定のディリクレ境界条件が左の境界に,不連続のディリクレ境界条件が右の境界に与えられる.偏微分方程式を定義する:
pde = Inactive[Div][{{-1, 0}, {0, -(1/1000000)}} . Inactive[Grad][ϕ[x, y], {x, y}], {x, y}] == 0;Γ1 = DirichletCondition[ϕ[x, y] == 0, x == 0];
Γ2 = DirichletCondition[ϕ[x, y] == -1, (x == 1) && (0.25 ≤ y ≤ 0.75)];
方向の拡散係数のスケールに大きな違いがあるため,偏微分方程式は基本的に
方向には一次元である.
と
におけるディリクレ条件の不連続性に対処するために,グレーデッドメッシュが構築される.
xmesh = ToGradedMesh[Line[{{0}, {1}}], <| "ElementCount" -> 10|>];"Central"のアラインメントでそれぞれ50個の要素を持つグレーデッドメッシュを作成する:
meshY = ToGradedMesh[{{Line[{{0}, {0.5}}], <| "Alignment" -> "Central", "ElementCount" -> 50, "MinimalDistance" -> 1 / 1000|>}, {Line[{{0.5}, {1}}], <|"Alignment" -> "Central", "ElementCount" -> 50, "MinimalDistance" -> 1 / 1000|>}}
];productMesh = ElementMeshRegionProduct[xmesh, meshY]productMesh["Wireframe"]ϕfun = NDSolveValue[{pde, Γ1, Γ2}, ϕ, {x, y}∈productMesh];DensityPlot[ϕfun[x, y], {x, y}∈productMesh, ColorFunction -> "TemperatureMap", PlotPoints -> 50, AspectRatio -> Automatic, PlotLegends -> Automatic, PlotRange -> All]Plot[Evaluate[ϕfun[x, y] /. x -> 1], {y, 0, 1}, PlotPoints -> 200, PlotLabel -> "phi on Right Boundary"]Plot[Evaluate[D[ϕfun[x, y], x] /. x -> 1], {y, 0, 1}, PlotPoints -> 200, MaxRecursion -> 6, PlotLabel -> "X-Derivative phi on Right Boundary", PlotRange -> All]解の質を評価するために,グレーデッドメッシュの解とデフォルトのメッシュの解を比べると有益である:
ϕfun2 = NDSolveValue[{pde, Γ1, Γ2}, ϕ, {x, y}∈Rectangle[]];
Plot[Evaluate[{Legended[ϕfun[x, y], "Anisotropic Mesh"], Legended[ϕfun2[x, y], "Default Mesh"]} /. x -> 1], {y, 0, 1}, PlotPoints -> 200, PlotLabel -> "phi on Right Boundary"]関数の動作は,異方性メッシュでより少ないオーバーシュートを持つ:
Plot[Evaluate[{Legended[D[ϕfun[x, y], x], "Anisotropic Mesh"], Legended[D[ϕfun2[x, y], x], "Default Mesh"]} /. x -> 1], {y, 0, 1}, PlotPoints -> 200, MaxRecursion -> 6, PlotLabel -> "X-Derivative phi on Right Boundary", PlotRange -> All]考えられる問題 (7)
"Left"または"Right"のアラインメントでは,最小の要素数は1である:
ToGradedMesh[{Line[{{0}, {2}}], <|"Alignment" -> "Left", "ElementCount" -> 0|>}]mesh = ToGradedMesh[{Line[{{0}, {2}}], <|"Alignment" -> "Left", "ElementCount" -> 1|>}]"Central"または"BothEnds"のアラインメントでは,
の最小値,つまり要素数は2である:
ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "BothEnds", "ElementCount" -> 1|>]mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "BothEnds", "ElementCount" -> 2|>]"Right"または"Left"の点分布は,最短距離が
(入力Lineの長さが
,要素数が
)の場合には作成できない:
ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Right", "MinimalDistance" -> 1, "ElementCount" -> 10|>]ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Right", "MinimalDistance" -> 1 / 10, "ElementCount" -> 10|>]"BothEnds"または"Central"の点分布は,最短距離が
(入力Lineの長さが
,要素数が
)の場合には作成できない:
ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Central", "MinimalDistance" -> 1, "ElementCount" -> 10|>]ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Central", "MinimalDistance" -> 1 / 5, "ElementCount" -> 10|>]ToGradedMeshは,段階付けの率が0以下である場合には作成できない:
ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Central", "GradingRatio" -> -1|>]ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Central", "GradingRatio" -> 1|>]メッシュ生成は,最も近い座標間の距離
が要素数上の入力メッシュの端点間の距離よりも長い場合には期待通りにいかない.
端点間の距離が2(
)である入力の Lineについて考える.この入力Lineは,要素が5個(
)で,最も近い座標間の距離が1に等しく(
),"Left"のアライメントを持つグレーデッドメッシュに変換される:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Left", "ElementCount" -> 5, "MinimalDistance" -> 1|>]MeshRegion[mesh]mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Left", "ElementCount" -> 5, "MinimalDistance" -> 1 / 5|>]MeshRegion[mesh]特性"GradingRatio"は,一様なアラインメントには意味を持たない:
ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Uniform", "GradingRatio" -> 10000|>] == ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> "Uniform"|>]おもしろい例題 (1)
Options[function] = {"ElementCount" -> Automatic, "MinimalDistance" -> Automatic};
function[{start_, end_}, OptionsPattern[]] :=
Module[
{n, len, r, base, minD},
len = end - start;
n = OptionValue["ElementCount"];
minD = OptionValue["MinimalDistance"];
r = Abs@FindRoot[len * (r ^ (1 / n) - 1) / (r - 1) - minD == 0,
{r, 1.00001, 10000}, Method -> "Brent"][[1, 2]];
base = Table[(r ^ (i / n) - 1) / (r - 1), {i, 0, n}];
base = len * base + start;
base
]点分布が関数によて与えられるグレーデッドメッシュを作成する:
mesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> function|>, "MeshOrder" -> 1]MeshRegion[mesh]これを,フィボナッチ数を分布として使う関数と比べる.フィボナッチ分布を得るための関数を書く:
Options[fib] = {"ElementCount" -> Automatic};
fib[{start_, end_}, OptionsPattern[]] :=
Module[
{n, fibNumbers, base},
n = OptionValue["ElementCount"];
fibNumbers = Table[Fibonacci[i], {i, 1, n}];
base = FoldList[Plus, 0, fibNumbers];
base = start + (end - start)base / Last[base];
base
];点の分布を指定する関数を使って,Lineをグレーデッドメッシュに変換する:
fibmesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> fib, "ElementCount" -> 6|>, "MeshOrder" -> 1]MeshRegion[fibmesh]要素間の距離がフィボナッチ数列のパターンに従うことを確かめる:
Flatten[Differences[fibmesh["Coordinates"]]]fibmesh = ToGradedMesh[Line[{{0}, {2}}], <|"Alignment" -> fib, "ElementCount" -> 20|>, "MeshOrder" -> 1];{MeshRegion[fibmesh], MeshRegion[mesh]}対数スケールを使って,fibmesh と mesh のノード分布を可視化する:
ListLogPlot[{Flatten@Transpose@fibmesh["Coordinates"],
Flatten@Transpose@mesh["Coordinates"]},
PlotRange -> All, Frame -> True,
FrameLabel -> {{"座標", None}, {"ノード数", "座標とノード数の関係"}},
PlotLegends -> {"フィボナッチ分布", "異方性分布"}]フィボナッチ分布の構築において,最初の間隔は必要ないことに注意する.他の分布は指定の最短距離を持つより一様な段階付けをベキ法則のアプローチを使うのに対し,フィボナッチ数列は要素の数のみが必要であるからである.
テクニカルノート
-
▪
- 要素メッシュの生成 ▪
- 要素メッシュの可視化
関連するガイド
-
▪
- 有限要素法
テキスト
Wolfram Research (2021), ToGradedMesh, Wolfram言語関数, https://reference.wolfram.com/language/FEMDocumentation/ref/ToGradedMesh.html.
CMS
Wolfram Language. 2021. "ToGradedMesh." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/FEMDocumentation/ref/ToGradedMesh.html.
APA
Wolfram Language. (2021). ToGradedMesh. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/FEMDocumentation/ref/ToGradedMesh.html
BibTeX
@misc{reference.wolfram_2026_togradedmesh, author="Wolfram Research", title="{ToGradedMesh}", year="2021", howpublished="\url{https://reference.wolfram.com/language/FEMDocumentation/ref/ToGradedMesh.html}", note=[Accessed: 15-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_togradedmesh, organization={Wolfram Research}, title={ToGradedMesh}, year={2021}, url={https://reference.wolfram.com/language/FEMDocumentation/ref/ToGradedMesh.html}, note=[Accessed: 15-August-2026]}