Nothing
# Copyright (c) Rob Carnell 2026
test_that("Broyden banded function behaves consistently across solver options", {
library(nleqslv)
brdban <- function(x, ml = 5, mu = 1) {
n <- length(x)
y <- numeric(n)
for (k in 1:n) {
k1 <- max(1, k - ml)
k2 <- min(n, k + mu)
temp <- 0.0
for (j in k1:k2) {
if (j != k) {
temp <- temp + x[j] * (1.0 + x[j])
}
}
y[k] <- x[k] * (2.0 + 5.0 * x[k]^2) + 1.0 - temp
}
y
}
n <- 10
xstart <- -rep(1, n)
ztol <- 1000 * .Machine$double.eps
# --- Newton method, default vs. banded Jacobian ---
z1 <- nleqslv(xstart, brdban, method = "Newton")
z2 <- nleqslv(xstart, brdban, method = "Newton",
control = list(dsub = 5, dsuper = 1))
expect_equal(z1$termcd, 1)
expect_equal(z2$termcd, 1)
expect_equal(z1$message, expectedMessage1)
expect_equal(z2$message, expectedMessage1)
expect_equal(z2$x, z1$x)
expect_equal(z2$x, z1$x, tolerance = ztol)
# --- Newton with ml = 2, mu = 2 ---
z1 <- nleqslv(xstart, brdban, ml = 2, mu = 2, method = "Newton")
z2 <- nleqslv(xstart, brdban, ml = 2, mu = 2, method = "Newton",
control = list(dsub = 2, dsuper = 2))
expect_equal(z1$termcd, 1)
expect_equal(z2$termcd, 1)
expect_equal(z1$message, expectedMessage1)
expect_equal(z2$message, expectedMessage1)
expect_equal(z2$x, z1$x, tolerance = ztol)
# --- Broyden method with ml = 2, mu = 2 ---
z3 <- nleqslv(xstart, brdban, ml = 2, mu = 2, method = "Broyden")
z4 <- nleqslv(xstart, brdban, ml = 2, mu = 2, method = "Broyden",
control = list(dsub = 2, dsuper = 2))
expect_equal(z3$termcd, 1)
expect_equal(z4$termcd, 1)
expect_equal(z3$message, expectedMessage1)
expect_equal(z4$message, expectedMessage1)
expect_equal(z3$x, z1$x)
expect_equal(z4$x, z1$x)
expect_equal(z4$x, z3$x, tolerance = ztol)
})
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.