kinsol
notesWhen a user supplied Jacobian function j is specified, the
solution is likely to be found faster and more accurately. The
Jacobian should be given if an analytical form for f is known,
from which the Jacobian can be obtained easily by partial
differentiation. If the Jacobian is unavailable, a finite difference
method implemented internally by kinsol
is used as a substitute
and will usually yield acceptable results.
Tolerances are not explicitly specified on the virtual side of the
interface although the native kinsol
API requires them. A range
of tolerances over ten orders of magnitude is automatically tried
before giving up.
Similarly to the glpk
and lpsolve
library interfaces
(glpk and lpsolve), the only expressible constraint through
the virtual code interface is that all variables are
non-negative. Arbitrary upper and lower bounds can be simulated by
appropriate variable substitutions in the formulation of the problem.
The kinsol
library natively requires a system function f
with equally many inputs as outputs, and will search only for the
input associated with an output vector of all zeros, but the virtual
code interface relaxes these requirements by allowing a function that
transforms between lists of unequal lengths, and will search for the
input of f causing it to match any given “optimal” output
o. These effects are achieved by padding the shorter of the two
vectors transparently and subtracting the specified optimum from the
result.
The kinsol
library can be configured to use single precision,
double precision, or extended precision arithmetic, but only a double
precision configuration is compatible with avram
. This
condition is checked when avram
is configured and it will not
interface with alternative kinsol
configurations.
The kinsol
library has some more advanced features to which
this interface doesn't do justice, such as preconditioning, scaling,
solution of systems with band limited Jacobians, and concurrent
computation.