Simplicial continuation, or piecewise linear continuation (Allgower and Georg),[1] [2] is a one-parameter continuation method which is well suited to small to medium embedding spaces. The algorithm has been generalized to compute higher-dimensional manifolds by (Allgower and Gnutzman)[3] and (Allgower and Schmidt).[4]
The algorithm for drawing contours is a simplicial continuation algorithm, and since it is easy to visualize, it serves as a good introduction to the algorithm.
The contour plotting problem is to find the zeros (contours) of
f(x,y)=0
f( ⋅ )
0\leqx\leq1,0\leqy\leq1
The square is divided into small triangles, usually by introducing points at the corners of a regular square mesh
ihx\leqx\leq(i+1)hx
jhy\leqy\leq(j+1)hy
f(xi,yj)
(i,j)
f(xi,yj)
lf(x,y)
f( ⋅ )
(x0,y0),~(x1,y1),~(x2,y2)
(x,y)=(x0,y0)+(x1-x0,y1-y0)s+(x2-x0,y2-y0)t
0\leqs
0\leqt
s+t\leq1
lf(x,y)=f(x0,y0)+(f(x1,y1)-f(x0,y0))s+(f(x2,y2)-f(x0,y0))t
The first four equations can be solved for
(s,t)
f( ⋅ )
The contour of the interpolant on an individual triangle is a line segment (it is an interval on the intersection of two planes). The equation for the line can be found, however the points where the line crosses the edges of the triangle are the endpoints of the line segment.
The contour of the piecewise linear interpolant is a set of curves made up of these line segments. Any point on the edge connecting
(x0,y0)
(x1,y1)
(x,y)=(x0,y0)+t(x1-x0,y1-y0),
with
t
(0,1)
f\simf0+t(f1-f0)
So setting
f=0
t=-f0/(f1-f0)
(x,y)=(x0,y0)-f0*(x1-x0,y1-y0)/(f1-f0)
Since this only depends on values on the edge, every triangle which shares this edge will produce the same point, so the contour will be continuous. Each triangle can be tested independently, and if all are checked the entire set of contour curves can be found.
Piecewise linear continuation is similar to contour plotting (Dobkin, Levy, Thurston and Wilks),[5] but in higher dimensions. The algorithm is based on the following results:
If F(x) maps Rn Rn-1 |
An '(n-1)'-dimensional simplex has n vertices, and the function F assigns an 'n'-vector to each. The simplex is convex, and any point within the simplex is a convex combination of the vertices. That is:
If x is in the interior of an (n-1)-dimensional simplex with n vertices
vi
0<\alphai
x=\sumi\alphaivi
\sumi\alphai=1.
If the vertices of the simplex are linearly independent the non-negative scalars
\alpha
LF=\sumi\alphaiF(vi)
An (n-1)-dimensional simplex can be tested to determine if it contains the origin. |
There are basically two tests. The one which was first used labels the vertices of the simplex with a vector of signs (+/-) of the coordinates of the vertex. For example the vertex (.5,-.2,1.) would be labelled (+,-,+). A simplex is called completely labelled if there is a vertex whose label begins with a string of "+" signs of length 0,1,2,3,4,...n. A completely labelled simplex contains a neighborhood of the origin. This may be surprising, but what underlies this result is that for each coordinate of a completely labelled simplex there is a vector with "+" and another with a "-". Put another way, the smallest cube with edges parallel to the coordinate axes and which covers the simplex has pairs of faces on opposite sides of 0. (i.e. a "+" and a "-" for each coordinate).
The second approach is called vector labelling. It is based on the barycentric coordinates of the vertices of the simplex. The first step is to find the barycentric coordinates of the origin, and then the test that the simplex contains the origin is simply that all the barycentric coordinates are positive and the sum is less than 1.