TEST_CON
Continuation Tests
TEST_CON
is a MATLAB library which
defines test functions for continuation codes.
A simple continuation code is an algorithm
for producing a sequence of solutions of the system of equations
F(X) = 0, where there are fewer equations F than variables X.
Commonly, there is one more variable than equation, resulting in
one degree of freedom. The set of solutions will then generally
describe a curve.
A continuation code might carry out the following steps:

choose a problem by picking an index number.

for problems with several options, pick an option index.

find out the number of variables.

get a starting point X0.

get a suggested stepsize H.

get the tangent vector T at X0.

use the estimate X1=X0+H*T as a starting point for
a new point on the curve; use Newton method to refine the estimate.

If the Newton iteration failed, reduce H and try again.

If the new point was computed "easily", increase H.

Go back to step 6 if another point is desired.
TEST_CON includes routines to

return the number of problems available (p00_problem_num);

return the number of different "options" for each problem (p00_option_num);

return the problem size NVAR (p00_nvar);

provide a starting point X0 (p00_start);

provide a suggested stepsize H (p00_stepsize);

determine the tangent vector T(X) (p00_tan);

apply Newton's method to an approximate solution (p00_newton);

take a single continuation step (compute the "next" point) (p00_step);

compute a target point, for which one component has a selected value
(p00_target);

choose the continuation parameter index (p00_par_index);

evaluate the function F(X) (p00_fun);

evaluate the jacobian J(X) (p00_problem_jac);

return the problem title (p00_title);
The list of problems includes:

The FreudensteinRoth function

The Boggs function

The Powell function

The Broyden function

The Wacker function

The Aircraft stability function

The Cell kinetic function

The Riks mechanical problem

The Oden mechanical problem

Torsion of a square rod, finite difference solution

Torsion of a square rod, finite element solution

The materially nonlinear problem

Simpson's mildly nonlinear boundary value problem

Keller's boundary value problem

The Trigger Circuit

The MooreSpence Chemical Reaction Integral Equation

The Bremermann Propane Combustion System

The semiconductor problem

The Nitric acid absorption flash

The Buckling Spring
Licensing:
The computer code and data files described and made available on this web page
are distributed under
the GNU LGPL license.
Languages:
TEST_CON is available in
a FORTRAN77 version and
a FORTRAN90 version and
a MATLAB version.
Related Data and Programs:
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^21.
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 ACM TOMS algorithm 596.
PITCON7,
a FORTRAN90 library which
seeks to produce a sequence of points that satisfy a set of nonlinear
equations with one degree of freedom;
this is version 7.0 of ACM TOMS algorithm 596.
TEST_CON,
a dataset directory which
contains sequences of points that lie on multidimensional curves defined by
sets of nonlinear equations;
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.
Reference:

Ivo Babuska, Werner Rheinboldt,
Reliable Error Estimations and Mesh Adaptation for the Finite
Element Method,
in International Conference on Computational Methods
in Nonlinear Mechanics,
edited by John Oden,
Elsevier, 1980,
ISBN: 0444853820,
LC: QA808.I57.

Paul Boggs,
The Solution of Nonlinear Systems by Astable
Integration Techniques,
SIAM Journal on Numerical Analysis,
Volume 8, Number 4, December 1971, pages 767785.

Hans Bremermann,
Calculation of Equilibrium Points for Models of Ecological and
Chemical Systems,
in Proceedings of a Conference on the Applications of Undergraduate
Mathematics in the Engineering, Life, Managerial
and Social Sciences,
Georgia Institute of Technology, June 1973, pages 198217.

Charles Broyden,
A New Method of Solving Nonlinear Simultaneous Equations,
The Computer Journal,
Volume 12, 1969, pages 9499.

Tama Copeman,
Air Products and Chemicals, Inc.
Box 538,
Allentown, Pennsylvania, 18105.

Cor denHeijer, Werner Rheinboldt,
On Steplength Algorithms for a Class of Continuation Methods,
SIAM Journal on Numerical Analysis,
Volume 18, Number 5, October 1981, pages 925947.

Ferdinand Freudenstein, Bernhard Roth,
Numerical Solutions of Nonlinear Equations,
Journal of the ACM,
Volume 10, Number 4, October 1963, pages 550556.

Kathie Hiebert,
A Comparison of Software Which Solves Systems of Nonlinear
Equations,
Technical Report SAND800181,
Sandia National Laboratory, 1980.

Herbert Keller,
Numerical Methods for Twopoint Boundary Value Problems,
Dover, 1992,
ISBN: 0486669254,
LC: QA372.K42.

Raman Mehra, William Kessel, James Carroll,
Global stability and contral analysis of aircraft at high angles of attack,
Technical Report CR2152481, 2, 3,
Office of Naval Research, June 1977.

Rami Melhem, Werner Rheinboldt,
A Comparison of Methods for Determining Turning Points of Nonlinear Equations,
Computing,
Volume 29, Number 3, September 1982, pages 201226.

Gerald Moore, Alastair Spence,
The Calculation of Turning Points of Nonlinear Equations,
SIAM Journal on Numerical Analysis,
Volume 17, Number 4, August 1980, pages 567576.

John Oden,
Finite Elements of Nonlinear Continua,
Dover, 2006,
ISBN: 0486449734,
LC: QA808.2.O33.

Gerd Poenisch, Hubert Schwetlick,
Computing Turning Points of Curves Implicitly Defined by Nonlinear
Equations Depending on a Parameter,
Computing,
Volume 26, Number 2, June 1981, pages 107121.

SJ Polak, A Wachten, H Vaes, A deBeer, Cor denHeijer,
A Continuation Method for the Calculation of Electrostatic
Potentials in Semiconductors,
Technical Report ISATIS/CARD,
NV Philips GloeilampenFabrieken, 1979.

Tim Poston, Ian Stewart,
Catastrophe Theory and its Applications,
Dover, 1996,
ISBN13: 9780486692715,
LC: QA614.58.P66.

Michael Powell,
A Fortran Subroutine for Solving Systems of Nonlinear
Algebraic Equations,
in Numerical Methods for Nonlinear Algebraic Equations,
edited by Philip Rabinowitz,
Gordon and Breach, 1970,
ISBN13: 9780677142302,
LC: QA218.N85.

Werner Rheinboldt,
Computation of Critical Boundaries on Equilibrium Manifolds,
SIAM Journal on Numerical analysis,
Volume 19, Number 3, June 1982, pages 653669.

Werner Rheinboldt, John Burkardt,
A Locally Parameterized Continuation Process,
ACM Transactions on Mathematical Software,
Volume 9, Number 2, June 1983, pages 215235.

Werner Rheinboldt, John Burkardt,
Algorithm 596:
A Program for a Locally Parameterized
Continuation Process,
ACM Transactions on Mathematical Software,
Volume 9, Number 2, June 1983, pages 236241.

Werner Rheinboldt,
Numerical Analysis of Parameterized Nonlinear Equations,
Wiley, 1986,
ISBN: 0471888141,
LC: QA372.R54.

Werner Rheinboldt,
Sample Problems for Continuation Processes,
Technical Report ICMA80?,
Institute for Computational Mathematics and Applications,
Department of Mathematics,
University of Pittsburgh, November 1980.

Werner Rheinboldt,
Solution Fields of Nonlinear Equations and Continuation Methods,
SIAM Journal on Numerical Analysis,
Volume 17, Number 2, April 1980, pages 221237.

Werner Rheinboldt,
On the Solution of Some Nonlinear Equations Arising in the
Application of Finite Element Methods,
in The Mathematics of Finite Elements and Applications II,
edited by John Whiteman,
Academic Press, 1976,
LC: TA347.F5.M37.

E Riks,
The Application of Newton's Method to the Problem of Elastic
Stability,
Transactions of the ASME, Journal of Applied Mechanics,
December 1972, pages 10601065.

Albert Schy, Margery Hannah,
Prediction of Jump Phenomena in Rollcoupled Maneuvers
of Airplanes,
Journal of Aircraft,
Volume 14, Number 4, 1977, pages 375382.

Bruce Simpson,
A Method for the Numerical Determination of Bifurcation
States of Nonlinear Systems of Equations,
SIAM Journal on Numerical Analysis,
Volume 12, Number 3, June 1975, pages 439451.

HansJoerg Wacker, Erich Zarzer, Werner Zulehner,
Optimal Stepsize Control for the Globalized Newton Method,
in Continuation Methods,
edited by HansJoerg Wacker,
Academic Press, 1978,
ISBN: 0127292500,
LC: QA1.S899.

John Young, Albert Schy, Katherine Johnson,
Prediction of Jump Phenomena in Aircraft Maneuvers, Including
Nonlinear Aerodynamic Effects,
Journal of Guidance and Control,
Volume 1, Number 1, 1978, pages 2631.
Source Code:

ch_cap.m
returns the capitalized version of a character;

p00_fun.m,
evaluates the function for any problem.

p00_jac.m,
evaluates the jacobian for any problem.

p00_jac_check.m,
compares the jacobian with a finite difference estimate.

p00_jac_dif.m,
estimates the jacobian via finite differences.

p00_limit.m,
seeks a limit point.

p00_newton.m,
applies Newton's method to an approximate root.

p00_nvar.m,
sets the number of variables for any problem.

p00_option_num.m,
returns the number of options for a given problem.

p00_par_index.m,
chooses the index of the continuation parameter.

p00_problem_num.m,
returns the number of problems.

p00_start.m,
returns a starting point for any problem.

p00_step.m,
tries to take one continuation step from the current point.

p00_stepsize.m,
returns the stepsize for any problem.

p00_tan.m,
returns the tangent vector for any problem.

p00_title.m,
sets the title for any problem.

p01_fun.m,
evaluates the function for problem 1.

p01_gx.m,
evaluates the underlying function for problem 1.

p01_jac.m,
evaluates the jacobian for problem 1.

p01_nvar.m,
sets the number of variables for problem 1.

p01_option_num.m,
sets the number of options for problem 1.

p01_stepsize.m,
returns a stepsize for problem 1.

p01_start.m,
returns a starting point for problem 1.

p01_title.m,
sets the title for problem 1.

p02_fun.m,
evaluates the function for problem 2.

p02_gx.m,
evaluates the underlying function for problem 2.

p02_jac.m,
evaluates the jacobian for problem 2.

p02_nvar.m,
sets the number of variables for problem 2.

p02_option_num.m,
sets the number of options for problem 2.

p02_start.m,
returns a starting point for problem 2.

p02_stepsize.m,
returns a stepsize for problem 2.

p02_title.m,
sets the title for problem 2.

p03_fun.m,
evaluates the function for problem 3.

p03_gx.m,
evaluates the underlying function for problem 3.

p03_jac.m,
evaluates the jacobian for problem 3.

p03_nvar.m,
sets the number of variables for problem 3.

p03_option_num.m,
sets the number of options for problem 3.

p03_start.m,
returns a starting point for problem 3.

p03_stepsize.m,
returns a stepsize for problem 3.

p03_title.m,
sets the title for problem 3.

p04_fun.m,
evaluates the function for problem 4.

p04_gx.m,
evaluates the underlying function for problem 4.

p04_jac.m,
evaluates the jacobian for problem 4.

p04_nvar.m,
sets the number of variables for problem 4.

p04_option_num.m,
sets the number of options for problem 4.

p04_start.m,
returns a starting point for problem 4.

p04_stepsize.m,
returns a stepsize for problem 4.

p04_title.m,
sets the title for problem 4.

p05_fun.m,
evaluates the function for problem 5.

p05_jac.m,
evaluates the jacobian for problem 5.

p05_nvar.m,
sets the number of variables for problem 5.

p05_option_num.m,
sets the number of options for problem 5.

p05_start.m,
returns a starting point for problem 5.

p05_stepsize.m,
returns a stepsize for problem 5.

p05_title.m,
sets the title for problem 5.

p06_fun.m,
evaluates the function for problem 6.

p06_barray.m,
sets the B array.

p06_carray.m,
sets the C array.

p06_jac.m,
evaluates the jacobian for problem 6.

p06_nvar.m,
sets the number of variables for problem 6.

p06_option_num.m,
sets the number of options for problem 6.

p06_start.m,
returns a starting point for problem 6.

p06_stepsize.m,
returns a stepsize for problem 6.

p06_title.m,
sets the title for problem 6.

p07_fun.m,
evaluates the function for problem 7.

p07_jac.m,
evaluates the jacobian for problem 7.

p07_nvar.m,
sets the number of variables for problem 7.

p07_option_num.m,
sets the number of options for problem 7.

p07_start.m,
returns a starting point for problem 7.

p07_stepsize.m,
returns a stepsize for problem 7.

p07_title.m,
sets the title for problem 7.

p08_fun.m,
evaluates the function for problem 8.

p08_gx.m,
sets data used for Rik's mechanical problem.

p08_hx.m,
reports the constraint equation data.

p08_jac.m,
evaluates the jacobian for problem 8.

p08_nvar.m,
sets the number of variables for problem 8.

p08_option_num.m,
sets the number of options for problem 8.

p08_start.m,
returns a starting point for problem 8.

p08_stepsize.m,
returns a stepsize for problem 8.

p08_title.m,
sets the title for problem 8.

p09_fun.m,
evaluates the function for problem 9.

p09_gx.m,
is used by problem 9.

p09_jac.m,
evaluates the jacobian for problem 9.

p09_nvar.m,
sets the number of variables for problem 9.

p09_option_num.m,
sets the number of options for problem 9.

p09_start.m,
returns a starting point for problem 9.

p09_stepsize.m,
returns a stepsize for problem 9.

p09_title.m,
sets the title for problem 9.

p10_fun.m,
evaluates the function for problem 10.

p10_gx.m,
is used by problem 10.

p10_jac.m,
evaluates the jacobian for problem 10.

p10_nvar.m,
sets the number of variables for problem 10.

p10_option_num.m,
sets the number of options for problem 10.

p10_start.m,
returns a starting point for problem 10.

p10_stepsize.m,
returns a stepsize for problem 10.

p10_title.m,
sets the title for problem 10.

p11_fun.m,
evaluates the function for problem 11.

p11_gauss.m,
returns the Gauss quadrature abscissas and weights.

p11_gul.m,
computes G(U,LAMBDA) and dG/dU and dG/dLAMBDA.

p11_jac.m,
evaluates the jacobian for problem 11.

p11_nvar.m,
sets the number of variables for problem 11.

p11_option_num.m,
sets the number of options for problem 11.

p11_phi.m,
is used by problem 11.

p11_shape.m,
evaluates the shape functions for problem 11.

p11_start.m,
returns a starting point for problem 11.

p11_stepsize.m,
returns a stepsize for problem 11.

p11_title.m,
sets the title for problem 11.

p12_fun.m,
evaluates the function for problem 12.

p12_gauss.m,
returns an 8 point Gauss quadrature rule.

p12_jac.m,
evaluates the jacobian for problem 12.

p12_legendre_val.m,
evaluates the Legendre polynomials and derivatives.

p12_nvar.m,
sets the number of variables for problem 12.

p12_option_num.m,
sets the number of options for problem 12.

p12_start.m,
returns a starting point for problem 12.

p12_stepsize.m,
returns a stepsize for problem 12.

p12_theta.m,
is a utility routine used in problem 12.

p12_title.m,
sets the title for problem 12.

p13_fun.m,
evaluates the function for problem 13.

p13_fx2.m,
computes the function by recasting it on a square grid.

p13_gp.m,
evaluates the derivative of the right hand side function.

p13_gx.m,
evaluates the right hand side function.

p13_jac.m,
evaluates the jacobian for problem 13.

p13_jac2.m,
computes the jacobian by recasting it on a square grid.

p13_nvar.m,
sets the number of variables for problem 13.

p13_option_num.m,
sets the number of options for problem 13.

p13_start.m,
returns a starting point for problem 13.

p13_stepsize.m,
returns a stepsize for problem 13.

p13_title.m,
sets the title for problem 13.

p14_fun.m,
computes the function for problem 14.

p14_fu.m,
computes the auxilliary function F(LAMBDA,U).

p14_fudl.m,
computes d F(LAMBDA,U) / d LAMBDA.

p14_fudu.m,
computes d F(LAMBDA,U) / d U

p14_gu.m,
computes the auxilliary function G(U).

p14_gudu.m,
computes d G(U) / d U.

p14_jac.m,
computes the jacobian of problem 14.

p14_nvar.m,
sets the number of variables for problem 14.

p14_option_num.m,
sets the number of options for problem 14.

p14_start.m,
returns a starting point for problem 14.

p14_stepsize.m,
returns a stepsize for problem 14.

p14_title.m,
sets the title for problem 14.

p15_fun.m,
evaluates the function for problem 15.

p15_gx.m,
returns the coefficients of the linear portion of the function.

p15_jac.m,
computes the jacobian for problem 15.

p15_nvar.m,
sets the number of variables for problem 15.

p15_option_num.m,
sets the number of options for problem 15.

p15_start.m,
returns a starting point for problem 15.

p15_stepsize.m,
returns a stepsize for problem 15.

p15_title.m,
sets the title for problem 15.

p16_fun.m,
evaluates the function for problem 16.

p16_jac.m,
computes the jacobian for problem 16.

p16_nvar.m,
sets the number of variables for problem 16.

p16_option_num.m,
sets the number of options for problem 16.

p16_start.m,
returns a starting point for problem 16.

p16_stepsize.m,
returns a stepsize for problem 16.

p16_title.m,
sets the title for problem 16.

p17_fun.m,
evaluates the function for problem 17.

p17_jac.m,
evaluates the jacobian for problem 17.

p17_nvar.m,
sets the number of variables for problem 17.

p17_option_num.m,
sets the number of options for problem 17.

p17_start.m,
returns a starting point for problem 17.

p17_stepsize.m,
returns a stepsize for problem 17.

p17_title.m,
sets the title for problem 17.

p18_fun.m,
evaluates the function for problem 18.

p18_gx.m,
evaluates the auxilliary function G ( T, U, LAMBDA ).

p18_gpu.m,
evaluates d G ( T, U, LAMBDA ) / dU.

p18_gpl.m,
evaluates d G ( T, U, LAMBDA ) / d LAMBDA.

p18_jac.m,
evaluates the jacobian for problem 18.

p18_nvar.m,
sets the number of variables for problem 18.

p18_option_num.m,
sets the number of options for problem 18.

p18_start.m,
returns a starting point for problem 18.

p18_stepsize.m,
returns a stepsize for problem 18.

p18_title.m,
sets the title for problem 18.

p19_fun.m,
evaluates the function for problem 19.

p19_con.m,
returns physical constants.

p19_conp.m,
returns physical constant derivatives.

p19_jac.m,
evaluates the jacobian for problem 19.

p19_nvar.m,
sets the number of variables for problem 19.

p19_option_num.m,
sets the number of options for problem 19.

p19_start.m,
returns a starting point for problem 19.

p19_stepsize.m,
returns a stepsize for problem 19.

p19_title.m,
sets the title for problem 19.

p20_fun.m,
evaluates the function for problem 20.

p20_i4_get.m,
returns the value of an integer parameter for problem 20.

p20_i4_set.m,
sets the value of an integer parameter for problem 20.

p20_i4_store.m,
sets or gets the value of an integer parameter for problem 20.

p20_jac.m,
evaluates the jacobian for problem 20.

p20_nvar.m,
sets the number of variables for problem 20.

p20_option_num.m,
returns the number of options for problem 20.

p20_r8_get.m,
returns the value of a real parameter for problem 20.

p20_r8_set.m,
sets the value of a real parameter for problem 20.

p20_r8_store.m,
sets or gets the value of a real parameter for problem 20.

p20_setup.m,
finds a solution (L,THETA,LAMBDA,MU) given L and THETA.

p20_start.m,
returns a starting point for problem 20.

p20_stepsize.m,
returns step sizes for problem 20.

p20_title.m,
sets the title for problem 20.

r8_mop.m,
returns the Ith power of 1 as an R8.

r8_sign.m,
returns the sign of an R8.

r8_uniform_01.m,
returns a random R8 between 0 and 1.

r8vec_amax_index.m,
returns the index of the maximum absolute value in an R8VEC.

s_eqi.m,
is TRUE if two strings are equal, ignoring case and trailing blanks;

timestamp.m,
prints the current YMDHMS date as a time stamp.

zero_rc.m,
seeks the root of a function F(X) using reverse communication.
Examples and Tests:

test_con_test.m,
calls all the tests;

p00_jac_test.m,
compares the jacobian to a finite difference estimate;

p00_newton_test.m,
applies the Newton algorithm to a perturbed copy of the starting point.

p00_nvar_test.m,
calls P00_NVAR to get the size of each problem;

p00_option_num_test.m,
calls P00_OPTION_NUM to get the number of options for each problem;

p00_start_test.m,
calls P00_START to get the starting point for each problem;

p00_stepsize_test.m,
calls P00_STEPSIZE to get the stepsize of each problem;

p00_tan_test.m,
calls P00_TAN to compute the tangent vector at the starting point.

p00_title_test.m,
calls P00_TITLE to get the title of each problem;

p01_limit_test.m,
searches for limit points in problem 1;

p01_target_test.m,
searches for target points in problem 1;

p06_limit_test.m,
searches for limit points in problem 6.

test_con_test_output.txt,
the output file.
You can go up one level to
the MATLAB source codes.
Last revised on 14 October 2008.