Nothing
# Copyright (c) Rob Carnell 2026
# Broyden banded function
# More, Garbow, Hillstrom: Testing Unconstrained Optimization Software
# ACM Trans. Math. Software, 7, March 1981, 17--41
# Function as shown in this paper is for optimizing not for non linear equations
# from the paper it is not clear what was used by the authors for their tests
# of non linear equation solvers
# function 31
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
for (j in k1:k2) {
if (j != k) {
temp <- temp + x[j] * (1 + x[j])
}
}
y[k] <- x[k] * (2 + 5 * x[k]^2) + 1 - temp
}
y
}
xsol <- c(
-0.42830, -0.47660, -0.51965, -0.55810, -0.59251,
-0.62450, -0.62324, -0.62139, -0.62045, -0.58647
)
test_that("Known solution produces correct function values", {
fsol <- brdban(xsol)
expect_true(all(abs(fsol) < 1e-4))
})
test_that("nleqslv converges from xstart = -1", {
n <- 10
xstart <- rep(-1, n)
znlq <- nleqslv(
xstart, brdban,
global = "dbldog", method = "Newton",
control = list(trace = 0, ftol = 1e-8, xtol = 1e-8, btol = 1e-2, delta = -1)
)
expect_equal(znlq$termcd, 1)
expect_equal(znlq$message, expectedMessage1)
expect_true(all(abs(znlq$fvec) <= 1e-7))
expect_equal(znlq$x, xsol, tolerance = 1E-5)
})
test_that("nleqslv converges from xstart = -2 with Newton method", {
n <- 10
xstart <- rep(-2, n)
znlq <- nleqslv(
xstart, brdban,
global = "dbldog", method = "Newton",
control = list(trace = 0, ftol = 1e-8, xtol = 1e-8, btol = 1e-2, delta = -1)
)
expect_equal(znlq$termcd, 1)
expect_equal(znlq$message, expectedMessage1)
expect_true(all(abs(znlq$fvec) <= 1e-8))
expect_equal(znlq$x, xsol, tolerance = 1E-5)
})
test_that("nleqslv converges from xstart = -2 without specifying method", {
n <- 10
xstart <- rep(-2, n)
znlq <- nleqslv(
xstart, brdban,
global = "dbldog",
control = list(trace = 0, ftol = 1e-8, xtol = 1e-8, btol = 1e-2, delta = -1)
)
expect_equal(znlq$termcd, 1)
expect_equal(znlq$message, expectedMessage1)
expect_true(all(abs(znlq$fvec) <= 1e-7))
expect_equal(znlq$x, xsol, tolerance = 1E-5)
})
test_that("Repeat convergence test for xstart = -2", {
n <- 10
xstart <- rep(-2, n)
znlq <- nleqslv(
xstart, brdban,
global = "dbldog",
control = list(trace = 0, ftol = 1e-8, xtol = 1e-8, btol = 1e-2, delta = -1)
)
expect_equal(znlq$termcd, 1)
expect_equal(znlq$message, expectedMessage1)
expect_true(all(abs(znlq$fvec) <= 1e-8))
expect_equal(znlq$x, xsol, tolerance = 1E-5)
})
test_that("Broyden Banded function with testnslv", {
n <- 10
xstart <- rep(-1, n)
temp <- testnslv(xstart, brdban)
expect_true(inherits(temp, "test.nleqslv"))
expect_true(is.data.frame(temp$out))
expect_true(all(temp$out$termcd %in% c(1,2)))
expect_true(all(temp$out$Iter < 25))
})
test_that("Broyden Banded with function scale", {
temp_brdban <- function(x, fscale) brdban(x) / fscale
n <- 10
xstart <- -rep(1,n)
Fscale <- rep(1,n)
temp <- testnslv(xstart, temp_brdban, fscale=Fscale)
expect_true(all(temp$out$Fnorm < 1E-12))
temp <- nleqslv(xstart, temp_brdban, fscale=Fscale)
Fscale <- c(10, 5, rep(1, n-2))
temp2 <- testnslv(xstart, temp_brdban, fscale=Fscale)
expect_true(all(temp2$out$Fnorm < 1E-12))
temp2 <- nleqslv(xstart, temp_brdban, fscale=Fscale)
expect_equal(temp$x, temp2$x, tolerance = 1E-6)
Fscale <- c(20, 5, 2, rep(1, n-3))
temp3 <- testnslv(xstart, temp_brdban, fscale=Fscale)
expect_true(all(temp3$out$Fnorm < 1E-12))
temp3 <- nleqslv(xstart, temp_brdban, fscale=Fscale)
expect_equal(temp$x, temp3$x, tolerance = 1E-6)
})
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.