# Prints Diagnostic Characteristics of BVP Solvers

### Description

Prints several diagnostics of the simulation to the screen, e.g. conditioning parameters

### Usage

1 2 3 4 |

### Arguments

`obj ` |
the output as produced by |

`x ` |
the output as produced by |

`xout ` |
points |

`...` |
optional arguments to the generic function. |

### Details

When the integration output is saved as a data.frame, then the required
attributes are lost and method `diagnostics`

will not work anymore.

### Value

S3 method `diagnostics`

prints diagnostic features of the simulation.

What exactly is printed will depend on the solution method.

The diagnostics of all solvers include the
number of function evaluations, the number of jacobian evaluations, and
the number of steps.
The diagnostics of both `bvptwp`

and `bvpcol`

also include the
the number of boundary evaluations and the number of boundary jacobian
evaluations.
In case the problem was solved with `bvpshoot`

, the diagnostics
of the initial value problem solver will also be written to screen.

Note that the number of function evaluations are *without* the extra calls performed to generate the ordinary output variables (if present).

In case the method used was
`bvptwp`

, will also return the *conditioning parameters*. They are:
kappa, kappa1, kappa2, sigma and gamma1.

See http://www.scpe.org/index.php/scpe/article/view/626

the kappa's are based on the Inf-norm, gamma1 is based on the 1-norm, If kappa, kappa1 and gamma1 are of moderate size, the problem is well conditioned. If large, the problem is ill-conditioned. If kappa1 is large and gamma1 is small, the problem is ill-conditioned in the maximum and well conditioned in the 1-norm. This is typical for problems that involve different time scales ("stiff" problems). If kappa1 is small and kappa, kappa2 are large the problem has not the correct dichotomy.

S3 method `approx`

calculates an approximate solution vector at points
inbetween the original `x`

-values. If beyond the integration interval,
it will not extrapolate, but just return the values at the edges.
This works only when the solution was generated with `bvpcol`

, and
usses information in the arrays rwork and iwork, stored as attributes.
The returned matrix will be of class "bvpSolve"

### See Also

diagnostics.deSolve for a description of diagnostic messages of the
initial value problem solver as used by `bvpshoot`

`plot.bvpSolve`

, for a description of plotting the output of the
BVP solvers.

### Examples

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | ```
## =============================================================================
## Diagnostic messages
## =============================================================================
f2 <- function(x, y, parms) {
dy <- y[2]
dy2 <- -1/x*y[2] - (1-1/(4*x^2))*y[1] + sqrt(x)*cos(x)
list(c(dy, dy2))
}
x <- seq(1, 6, 0.1)
yini <- c(y = 1, dy = NA)
yend <- c(-0.5, NA)
sol <- bvptwp(yini = yini, yend = yend, x = x, func = f2)
sol2 <- bvpcol(yini = yini, yend = yend, x = x, func = f2)
sol3 <- bvpshoot(yini = yini, yend = yend, x = x, func = f2, guess = 0)
plot(sol, which = "y")
diagnostics(sol)
diagnostics(sol2)
diagnostics(sol3)
## =============================================================================
## approx
## =============================================================================
soldetail <- approx(sol2, xout = seq(2,4,0.01))
plot(soldetail)
# beyond the interval
approx(sol2, xout = c(0,1,2))
approx(sol2, xout = c(6,100))
``` |