tests/testthat/test-xsearchzeros.R

# Copyright (c) Rob Carnell 2026

# High-degree polynomial system from Kearfott (1987)
hdp <- function(x) {
  f <- numeric(3)
  f[1] <- 5 * x[1]^9 - 6 * x[1]^5 * x[2]^2 + x[1] * x[2]^4 + 2 * x[1] * x[3]
  f[2] <- -2 * x[1]^6 * x[2] + 2 * x[1]^2 * x[2]^3 + 2 * x[2] * x[3]
  f[3] <- x[1]^2 + x[2]^2 - 0.265625
  f
}

test_that("searchZeros finds 12 real roots for Kearfott high-degree polynomial system", {
  set.seed(123)

  N <- 40
  xstart <- matrix(runif(3 * N, min = -1, max = 1), nrow = N, ncol = 3)

  ans <- searchZeros(
    xstart, hdp,
    method = "Broyden",
    global = "dbldog"
  )

  # Expect exactly 12 distinct real roots
  expect_equal(nrow(ans$x), 12)

  # All solutions must satisfy ||f(x)|| <= 1e-10
  expect_true(all(ans$xfnorm <= 1e-10))

  # Re-run from the discovered roots
  zans <- searchZeros(
    ans$xstart, hdp,
    method = "Broyden",
    global = "dbldog"
  )

  expect_equal(length(zans$idxcvg), 12)
})

Try the nleqslv package in your browser

Any scripts or data that you put into this service are public.

nleqslv documentation built on April 10, 2026, 9:08 a.m.