그레이트솔트 호의 파도
ImageMesh를 사용하여 이미지 세그먼트를 BoundaryMeshRegion 객체로 변환할 수 있습니다. 이러한 메쉬 영역은 유한 요소법 (FEM) 등의 다른 분야에서의 함수의 이용을 가능하게 합니다.
이 FEM과의 관련을 설명하기 위해 유타주에 위치한 그레이트솔트 호의 표면 물결의 주요 모드를 구합니다.
In[1]:=

img = EntityValue[Entity["Lake", "GreatSaltLake::yw8cf"], "Image"]
Out[1]=

이미지를 평균 시프트 필터로 정규화합니다.
In[2]:=

img2 = MeanShiftFilter[img, 3, 0.1]
Out[2]=

영역 확장법을 사용하여 세그먼트를 얻습니다.
In[3]:=

mask = RegionBinarize[img2, \!\(\*
GraphicsBox[
TagBox[RasterBox[CompressedData["
1:eJzt1jEKwkAQQNFdK0uv4C1sLW0VD6AYxSZCFMRzCJ7XiF3SzFb7lf8ggUCK
D8MmM99f1sdJSuk67W/r3X3ZdbvHZtY/bNvr+dQ2h1V7a05Nt9h/Xnv21ytJ
kiRJkiRJkn5H7tVuGLMqzqo4q+KsiuNW8bKsimNWfbNwXVbF5Yzuqp0xZFUB
dBaui5kF/T5AsxJ1jNAsq0qgs3BlOSPDMrMLmvUBDcNnsbqov2x4FrWrdscA
NIu6SjCzoEOEZlGniF5Ta0eMmVXCqjjmCJlV5KzaDWNWxXGreFnMKvAIazeM
MUfIXEmtKsCs8hSWsCrOqjhmlSRJkiRJkvS/3tRrD1M=
"], {{0, 147}, {150,
0}}, {0, 1},
ColorFunction->GrayLevel],
BoxForm`ImageTag["Bit", ColorSpace -> Automatic, Interleaving -> None],
Selectable->False],
DefaultBaseStyle->"ImageGraphics",
ImageSizeRaw->{150, 147},
PlotRange->{{0, 150}, {0, 147}}]\), 1/5]
Out[3]=

호수 표면의 BoundaryMeshRegion 객체를 추출합니다.
In[4]:=

\[ScriptCapitalR] = ImageMesh[mask]
Out[4]=

호수의 표면 메쉬를 생성합니다.
In[5]:=

\[CapitalOmega] =
TriangulateMesh[\[ScriptCapitalR], MaxCellMeasure -> 8]
Out[5]=

호수의 영역 내의 라플라시안의 고유 함수를 구하여 호수 표면의 파동 방정식을 풉니다.
In[6]:=

\[ScriptCapitalL] = -\!\(
\*SubsuperscriptBox[\(\[Del]\), \({x, y}\), \(2\)]\(\[CurlyPhi][x,
y]\)\);
경계 조건을 사용합니다.
In[7]:=

\[ScriptCapitalB] = DirichletCondition[\[CurlyPhi][x, y] == 0, True];
고유함수 Φ의 정규 직교 기저를 고유값 Λ에서 생성합니다.
In[8]:=

{\[CapitalLambda], \[CapitalPhi]} =
NDEigensystem[{\[ScriptCapitalL], \[ScriptCapitalB]}, \[CurlyPhi][x,
y], {x, y} \[Element] \[CapitalOmega], 64];
최초 여섯개의 진동 모드를 표시합니다.
In[9]:=

GraphicsGrid[
Partition[
Table[ContourPlot[\[CapitalPhi][[
k]], {x, y} \[Element] \[CapitalOmega], PlotRange -> All,
PlotLabel -> \[CapitalLambda][[k]], PlotTheme -> "Minimal"], {k,
6}],
3
],
ImageSize -> 512
]
Out[9]=

감쇠 진동 모드의 시간적 진화는 다음으로 주어집니다.
In[10]:=

\[CapitalTheta][\[Lambda]_, \[Xi]_, t_] = FullSimplify[
DSolveValue[Join[{ \!\(
\*SubscriptBox[\(\[PartialD]\), \(t,
t\)]\(\(TraditionalForm\`\[CurlyTheta]\)[
t]\)\) + \[Xi] \!\(
\*SubscriptBox[\(\[PartialD]\), \(t\)]\(\(TraditionalForm\`\
\[CurlyTheta]\)[
t]\)\) == -\[Lambda] \!\(TraditionalForm\`\[CurlyTheta]\)[
t] }, {\!\(TraditionalForm\`\[CurlyTheta]\)[0] ==
1, \[CurlyTheta]'[0] ==
0} ], \!\(TraditionalForm\`\[CurlyTheta]\)[t], t],
{\[Lambda] > 0, \[Xi] > 0, \[Xi]^2 < 4 \[Lambda], t \[Element] Reals}
]
Out[10]=

고유 함수의 초기 섭동을 확장하고 이를 시간의 흐름속에 진화하도록 하여, 호수위의 파도의 전파 시뮬레이션을 제공합니다.
전체 Wolfram 언어 입력 표시하기
