<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Fast_marching_method</id>
	<title>Fast marching method - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Fast_marching_method"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Fast_marching_method&amp;action=history"/>
	<updated>2026-10-25T20:47:13Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Fast_marching_method&amp;diff=3935236&amp;oldid=prev</id>
		<title>2A01:E34:EC92:CF00:1211:FF52:ECB0:952B: /* Algorithm */</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Fast_marching_method&amp;diff=3935236&amp;oldid=prev"/>
		<updated>2024-10-26T10:42:53Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Algorithm&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{short description|Algorithm for solving boundary value problems of the Eikonal equation}}&lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;fast marching method&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref name=&amp;quot;sethian_fmm&amp;quot;&amp;gt;J.A. Sethian. A Fast Marching Level Set Method for Monotonically Advancing Fronts, Proc. Natl. Acad. Sci., 93, 4, pp.1591--1595, 1996. [https://math.berkeley.edu/~sethian/2006/Papers/sethian.fastmarching.pdf]&amp;lt;/ref&amp;gt; is a [[numerical method]] created by [[James Sethian]] for solving [[boundary value problem]]s of the [[Eikonal equation]]:&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;math&amp;gt;|\nabla u(x)|=1/f(x) \text{ for } x \in \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
: &amp;lt;math&amp;gt;u(x) = 0 \text{ for } x \in \partial \Omega&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typically, such a problem describes the evolution of a closed surface as a function of time &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; with speed &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; in the normal direction at a point &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; on the propagating surface. The speed function is specified, and the time at which the contour crosses a point &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; is obtained by solving the equation. Alternatively, &amp;lt;math&amp;gt;u(x)&amp;lt;/math&amp;gt; can be thought of as the minimum amount of time it would take to reach &amp;lt;math&amp;gt;\partial\Omega&amp;lt;/math&amp;gt; starting from the point &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;. The fast marching method takes advantage of this [[optimal control]] interpretation of the problem in order to build a solution outwards starting from the &amp;quot;known information&amp;quot;, i.e. the boundary values.&lt;br /&gt;
&lt;br /&gt;
The algorithm is similar to [[Dijkstra&amp;#039;s algorithm]] and uses the fact that information only flows outward from the seeding area. This problem is a special case of [[level-set method]]s. [[Eikonal equation#Computational algorithms|More general algorithms exist]] but are normally slower.&lt;br /&gt;
&lt;br /&gt;
Extensions to non-flat (triangulated) domains solving&lt;br /&gt;
&lt;br /&gt;
::&amp;lt;math&amp;gt;|\nabla_S u(x)|=1 / f(x),&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
for the surface &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x\in S&amp;lt;/math&amp;gt;, were introduced by [[Ron Kimmel]] and [[James Sethian]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Image:Fast_marching_maze.png| Maze as speed function shortest path&lt;br /&gt;
Image:Fast_marching_multi_stencil_2nd_order.png|Distance map multi-stencils with random source points&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Algorithm==&lt;br /&gt;
&lt;br /&gt;
First, assume that the domain has been discretized into a mesh. We will refer to mesh points as nodes. Each node &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; has a corresponding value &amp;lt;math&amp;gt;U_i = U(x_i) \approx u(x_i)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The algorithm works just like Dijkstra&amp;#039;s algorithm but differs in how the nodes&amp;#039; values are calculated. In Dijkstra&amp;#039;s algorithm, a node&amp;#039;s value is calculated using a single one of the neighboring nodes. However, in solving the [[Partial differential equation|PDE]] in &amp;lt;math&amp;gt;\mathbb{R}^n&amp;lt;/math&amp;gt;, between &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; of the neighboring nodes [[Eikonal equation#Numerical Approximation|are used]].&lt;br /&gt;
&lt;br /&gt;
Nodes are labeled as &amp;#039;&amp;#039;far&amp;#039;&amp;#039; (not yet visited), &amp;#039;&amp;#039;considered&amp;#039;&amp;#039; (visited and value tentatively assigned), and &amp;#039;&amp;#039;accepted&amp;#039;&amp;#039; (visited and value permanently assigned).&lt;br /&gt;
&lt;br /&gt;
# Assign every node &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; the value of &amp;lt;math&amp;gt;U_i=+\infty&amp;lt;/math&amp;gt; and label them as &amp;#039;&amp;#039;far&amp;#039;&amp;#039;; for all nodes &amp;lt;math&amp;gt;x_i \in \partial\Omega&amp;lt;/math&amp;gt; set &amp;lt;math&amp;gt;U_i = 0&amp;lt;/math&amp;gt; and label &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; as &amp;#039;&amp;#039;accepted&amp;#039;&amp;#039;.&lt;br /&gt;
# For every far node &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt;, use the [[Eikonal equation#Numerical approximation|Eikonal update formula]] to calculate a new value for &amp;lt;math&amp;gt;\tilde{U}&amp;lt;/math&amp;gt;. If &amp;lt;math&amp;gt;\tilde{U} &amp;lt; U_i&amp;lt;/math&amp;gt; then set &amp;lt;math&amp;gt;U_i = \tilde{U}&amp;lt;/math&amp;gt; and label &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; as &amp;#039;&amp;#039;considered&amp;#039;&amp;#039;.&lt;br /&gt;
# Let &amp;lt;math&amp;gt;\tilde{x}&amp;lt;/math&amp;gt; be the considered node with the smallest value &amp;lt;math&amp;gt;U&amp;lt;/math&amp;gt;. Label &amp;lt;math&amp;gt;\tilde{x}&amp;lt;/math&amp;gt; as &amp;#039;&amp;#039;accepted&amp;#039;&amp;#039;.&lt;br /&gt;
# For every neighbor &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; of &amp;lt;math&amp;gt;\tilde{x}&amp;lt;/math&amp;gt; that is not-accepted, calculate a tentative value &amp;lt;math&amp;gt;\tilde{U}&amp;lt;/math&amp;gt;.&lt;br /&gt;
# If &amp;lt;math&amp;gt;\tilde{U} &amp;lt; U_i &amp;lt;/math&amp;gt; then set &amp;lt;math&amp;gt;U_i = \tilde{U}&amp;lt;/math&amp;gt;. If &amp;lt;math&amp;gt;x_i&amp;lt;/math&amp;gt; was labeled as &amp;#039;&amp;#039;far&amp;#039;&amp;#039;, update the label to &amp;#039;&amp;#039;considered&amp;#039;&amp;#039;.&lt;br /&gt;
# If there exists a &amp;#039;&amp;#039;considered&amp;#039;&amp;#039; node, return to step 3. Otherwise, terminate.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Level-set method]]&lt;br /&gt;
* [[Fast sweeping method]]&lt;br /&gt;
* [[Bellman–Ford algorithm]]&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [https://www.mit.edu/~jnt/dijkstra.html Dijkstra-like Methods for the Eikonal Equation J.N. Tsitsiklis, 1995]&lt;br /&gt;
* [http://math.berkeley.edu/~sethian/ The Fast Marching Method and its Applications by James A. Sethian]&lt;br /&gt;
* [https://web.archive.org/web/20110719232108/http://mecca.louisville.edu/~msabry/projects/msfm.htm Multi-Stencils Fast Marching Methods] &lt;br /&gt;
* [http://www.mathworks.com/matlabcentral/fileexchange/24531 Multi-Stencils Fast Marching Matlab Implementation]&lt;br /&gt;
* [http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/841/pdf/imm841.pdf Implementation Details of the Fast Marching Methods]&lt;br /&gt;
* [https://rd.springer.com/article/10.1007/s11075-008-9183-x Generalized Fast Marching method] by Forcadel et al. [2008] for applications in image segmentation.&lt;br /&gt;
* [https://github.com/scikit-fmm/scikit-fmm Python Implementation of the Fast Marching Method]&lt;br /&gt;
*See Chapter 8 in [http://etd.fcla.edu/CF/CFE0001159/Rumpf_Raymond_C_200608_PhD.pdf Design and Optimization of Nano-Optical Elements by Coupling Fabrication to Optical Behavior] {{Webarchive|url=https://web.archive.org/web/20130820063106/http://etd.fcla.edu/CF/CFE0001159/Rumpf_Raymond_C_200608_PhD.pdf |date=2013-08-20 }}&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
{{Reflist}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Numerical differential equations]]&lt;/div&gt;</summary>
		<author><name>2A01:E34:EC92:CF00:1211:FF52:ECB0:952B</name></author>
	</entry>
</feed>