Nothing
# Copyright (c) Rob Carnell 2026
test_that("Dennis–Schnabel example converges under multiple configurations", {
# Problem definition
dslnex <- function(x) {
y <- numeric(2)
y[1] <- x[1]^2 + x[2]^2 - 2
y[2] <- exp(x[1] - 1) + x[2]^3 - 2
y
}
jacdsln <- function(x) {
n <- length(x)
Df <- matrix(0, n, n)
Df[1, 1] <- 2 * x[1]
Df[1, 2] <- 2 * x[2]
Df[2, 1] <- exp(x[1] - 1)
Df[2, 2] <- 3 * x[2]^2
Df
}
xstart <- c(2, 0.5)
## Helper: check convergence
expect_converged <- function(z) {
expect_true(
all(abs(z$fvec) <= 1e-8),
info = paste("Message:", z$message)
)
}
# ---------------------------
# Broyden numerical Jacobian
# ---------------------------
for (z in c("cline", "qline", "gline")) {
res <- nleqslv(xstart, dslnex, global = z, control = list(btol = 0.01))
expect_converged(res)
}
# -------------------------------------
# Broyden numerical Jacobian + doglegs
# -------------------------------------
for (z in c("dbldog", "pwldog")) {
for (delta in c(-1.0, -2.0)) {
res <- nleqslv(
xstart, dslnex,
global = z,
control = list(btol = 0.01, delta = delta)
)
expect_converged(res)
}
}
# -------------------------------------
# Broyden analytical Jacobian
# -------------------------------------
for (z in c("dbldog", "pwldog")) {
for (delta in c(-1.0, -2.0)) {
res <- nleqslv(
xstart, dslnex, jacdsln,
global = z,
control = list(btol = 0.01, delta = delta)
)
expect_converged(res)
}
}
# -------------------------------------
# Newton analytical Jacobian
# -------------------------------------
for (z in c("dbldog", "pwldog")) {
for (delta in c(-1.0, -2.0)) {
res <- nleqslv(
xstart, dslnex, jacdsln,
method = "Newton",
global = z,
control = list(btol = 0.01, delta = delta)
)
expect_converged(res)
}
}
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.