PITCON7 is a FORTRAN90 library which implements the continuation method for systems of nonlinear equations.
The program is designed for problems in which N variables X are constrained by N-1 nonlinear equations, which we may write as
F(X) = 0Generally, there is an entire family of solutions to such a problem, which can be thought of as an implicitly defined curve in N-dimensional space. We might write this as X(LAMBDA), where LAMBDA is often thought of as arc length. However, we only mention this in order to suggest that the solution points form a curve. The parameterizing variable LAMBDA is not practically computable or necessary to know (and the actual structure of the X solutions could be more complicated than we suggest here.)
Given one solution point on this curve (an approximate value will do), PITCON attempts to follow the curve of solutions that passes through that point, and to produce further solutions along the curve. The program can be instructed to watch out for "target points", that is, points on the solution curve for which one of the variables attains a special value, and "limit points", for which some variable attains an extreme value.
As a simple but tricky example, we mention the Freudenstein-Roth function, which has the form:
FX(1) = X1 - X2*X2*X2 + 5*X2*X2 - 2*X2 - 13 + 34*(X3-1) FX(2) = X1 + X2*X2*X2 + X2*X2 - 14*X2 - 29 + 10*(X3-1)A suitable starting point is (15,-2,0). The program is typically asked to find a target point for which the X3 coordinate is 1, and to watch out for limit points in the first or third variables. Generally, the program will discover the target point (5,4,1), and will, if asked, also spot limit points in X1 at:
(14.28309, -1.741377, 0.2585779) and (61.66936, 1.983801, -0.6638797)or limit points for the third variable, which occur at:
(20.48586, -0.8968053, 0.5875873) and (61.02031, 2.230139, -0.6863528)If you have the program take small steps, so that you get a good image of the solution curve, you will see that there are a pair of hairpin turns along the path!
If PITCON is allowed to take fairly large steps, a typical sequence of solution points might be:
15.0000 -2.00000 0.000000E+00 14.7105 -1.94205 0.653814E-01 14.2846 -1.72915 0.268742 16.9061 -1.20941 0.546845 24.9179 -0.599064 0.555136 34.8981 -0.405153E-01 0.353312 44.8809 0.487811 0.594414E-01 54.8607 1.09476 -0.304459 61.3810 1.81339 -0.624499 -48.6139 4.67873 2.88055 5.00000 4.00000 1.00000Note that when the program computes the solution with X3 = 2.88055, it realizes that is has passed a target point where X3 = 1, so that it actually "goes back" and determines where that point lies.
An earlier version of PITCON is available as an ACM TOMS algorithm 596, through the NETLIB web site.
The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.
PITCON7 is available in a FORTRAN90 version.
CONTINUATION, a MATLAB library which implements the continuation method for a simple 2D problem, which involves finding a point on the unit circle, and then finding a sequence of nearby points which trace out the full curve, using only the information available in the implicit definition of the curve from the function f(x,y)=x^2+y^2-1.
PITCON66, a FORTRAN77 library which seeks to produce a sequence of points that satisfy a set of nonlinear equations with one degree of freedom; this is version 6.6 of PITCON.
TEST_CON, a FORTRAN90 library which implements test problems for numerical continuation.
TOMS502,
a FORTRAN77 library which
seeks to produce a sequence of points that satisfy a set of nonlinear
equations with one degree of freedom;
this library is commonly called DERPAR;
this is ACM TOMS algorithm 502.
TOMS596,
a FORTRAN77 library which
seeks to produce a sequence of points that satisfy a set of nonlinear
equations with one degree of freedom;
this library is commonly called PITCON;
this is ACM TOMS algorithm 596.
Professor Werner Rheinboldt,
John Burkardt
Problem 1 is a simple demonstration test, involving the Freudenstein-Roth function. There are 2 equations, and 3 variables. The solution curve has some severe bends. This file solves the problem with a minimum of fuss. Files you may copy include:
Problem 2 handles the Aircraft Stability problem. There are 7 equations in 8 variables. This is a mildly nonlinear problem, whose solution curve has some limit points that are difficult to track. Files you may copy include:
Problem 3 is a boundary value problem with 22 variables. This problem has a limit point in the LAMBDA parameter, which we seek. We solve this problem 6 times, illustrating the use of full and banded jacobians, and of user-generated, or forward or central difference approximated jacobian matrices.
The first 21 variables represent the values of a function along a grid of 21 points between 0 and 1. By increasing the number of grid points, the problem can be set up with arbitrarily many variables. This change requires changing a single parameter in the main program. Files you may copy include:
Problem 4 is another version of the Freudenstein Roth problem. This version of the problem tests the parameterization fixing option. The user may demand that PITCON always use a given index for continuation, rather than varying the index from step to step. The Freudenstein-Roth curve may be parameterized by the variable of index 2, although this may increase the number of steps required to traverse the curve.
This file carries out 6 runs, with and without the parameterization fixed, and with no limit point search, or with limit points sought for index 1 or for index 3. Files you may copy include:
Problem 5 is another version of the boundary value problem This time, we do NOT seek the limit point in the LAMBDA parameter, but rather the two target points where LAMBDA=0.8, which occurs twice, before and after LAMBDA "goes around the bend".
We run this test 3 times, comparing the behavior of the full Newton iteration, the Newton iteration that fixes the Jacobian during the correction of each point, and the Newton iteration that fixes the Jacobian as long as possible. Files you may copy include:
Problem 6 repeats the Freudenstein Roth function. This version of the problem demonstrates the jacobian checking option. Two runs are made. Each is allowed only five steps. The first run is with the correct jacobian. The second run uses a defective jacobian, and demonstrates not only the jacobian checker, but also shows that "slightly" bad jacobians can cause the Newton convergence to become linear rather than quadratic. Files you may copy include:
Problem 7 is the materially nonlinear problem, with up to 71 variables. This is a two point boundary value problem, representing the behavior of a rod under a load. The shape of the rod is represented by piecewise polynomials, whose form and continuity are specifiable as options. The problem as programmed can allow up to 71 variables, but a simple change of a few parameters will allow the problem to be arbitrarily large.
This is a complicated program. It is intended to demonstrate the advanced kinds of problems that can be solved with PITCON, as opposed to the "toy" problems like the Freudenstein-Roth function. is a simple demonstration test. Files you may copy include:
Problem 8 is a version of the Freudenstein-Roth function. This version of the problem tests the jacobian approximation options. We run the problem 3 times, first with the user jacobian, second with the forward difference approximation, and third with the central difference approximation. Files you may copy include:
You can go up one level to the FORTRAN90 source codes.