R Under development (unstable) (2026-02-18 r89435 ucrt) -- "Unsuffered Consequences" Copyright (C) 2026 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > if(!require("BB"))stop("this test requires package BB.") Loading required package: BB > if(!require("setRNG"))stop("this test requires setRNG.") Loading required package: setRNG > > # Use a preset seed so test values are reproducable. > test.rng <- list(kind="Mersenne-Twister", normal.kind="Inversion", seed=1236) > old.seed <- setRNG(test.rng) > #iseed <- 1236 # this seed was used for tests conducted on March 25, 2008. > #set.seed(iseed) > > troesch <- function(x) { + n <- length(x) + tnm1 <- 2:(n-1) + F <- rep(NA, n) + h <- 1 / (n+1) + h2 <- 10 * h^2 + F[1] <- 2 * x[1] + h2 * sinh(10 * x[1]) - x[2] + F[tnm1] <- 2 * x[tnm1] + h2 * sinh(10 * x[tnm1]) - x[tnm1-1] - x[tnm1+1] + + F[n] <- 2 * x[n] + h2 * sinh(10* x[n]) - x[n-1] - 1 + F + } > > p0 <- sort(runif(100)) > ans1 <- dfsane(par=p0, fn=troesch, method=1) Iteration: 0 ||F(x0)||: 2.112497 iteration: 10 ||F(xn)|| = 0.1708528 iteration: 20 ||F(xn)|| = 0.04376194 iteration: 30 ||F(xn)|| = 0.03621161 iteration: 40 ||F(xn)|| = 0.01936748 iteration: 50 ||F(xn)|| = 0.01612449 iteration: 60 ||F(xn)|| = 0.005286395 iteration: 70 ||F(xn)|| = 0.004403901 iteration: 80 ||F(xn)|| = 0.003846459 iteration: 90 ||F(xn)|| = 0.003002941 iteration: 100 ||F(xn)|| = 0.001871959 iteration: 110 ||F(xn)|| = 9.861048e-05 iteration: 120 ||F(xn)|| = 0.0004547003 iteration: 130 ||F(xn)|| = 0.00238987 iteration: 140 ||F(xn)|| = 0.001617593 iteration: 150 ||F(xn)|| = 8.564658e-06 iteration: 160 ||F(xn)|| = 8.383969e-06 iteration: 170 ||F(xn)|| = 1.920274e-06 > ans2 <- dfsane(par=p0, fn=troesch, method=2) Iteration: 0 ||F(x0)||: 2.112497 iteration: 10 ||F(xn)|| = 0.1697327 iteration: 20 ||F(xn)|| = 0.04631053 iteration: 30 ||F(xn)|| = 0.02047333 iteration: 40 ||F(xn)|| = 0.0127475 iteration: 50 ||F(xn)|| = 0.009584953 iteration: 60 ||F(xn)|| = 0.005918844 iteration: 70 ||F(xn)|| = 0.002319422 iteration: 80 ||F(xn)|| = 0.001424931 iteration: 90 ||F(xn)|| = 0.0008849832 iteration: 100 ||F(xn)|| = 0.0004182595 iteration: 110 ||F(xn)|| = 0.0003373133 iteration: 120 ||F(xn)|| = 0.004946487 iteration: 130 ||F(xn)|| = 7.547532e-05 iteration: 140 ||F(xn)|| = 6.363869e-05 iteration: 150 ||F(xn)|| = 3.572272e-05 iteration: 160 ||F(xn)|| = 2.628939e-05 iteration: 170 ||F(xn)|| = 0.00440232 iteration: 180 ||F(xn)|| = 8.01035e-06 iteration: 190 ||F(xn)|| = 7.29029e-06 iteration: 200 ||F(xn)|| = 0.0002006002 iteration: 210 ||F(xn)|| = 1.153591e-05 iteration: 220 ||F(xn)|| = 0.001022267 > ans3 <- sane(par=p0, fn=troesch, method=1) Iteration: 0 ||F(x0)||: 2.112497 iteration: 10 ||F(xn)|| = 0.1708528 iteration: 20 ||F(xn)|| = 0.04376194 iteration: 30 ||F(xn)|| = 0.0369635 iteration: 40 ||F(xn)|| = 0.01911966 iteration: 50 ||F(xn)|| = 0.02283271 iteration: 60 ||F(xn)|| = 0.01258888 iteration: 70 ||F(xn)|| = 0.01702996 iteration: 80 ||F(xn)|| = 0.009203832 iteration: 90 ||F(xn)|| = 0.007663768 iteration: 100 ||F(xn)|| = 0.005572009 iteration: 110 ||F(xn)|| = 0.006098556 iteration: 120 ||F(xn)|| = 0.004225583 iteration: 130 ||F(xn)|| = 0.003419364 iteration: 140 ||F(xn)|| = 0.003384428 iteration: 150 ||F(xn)|| = 0.002462463 iteration: 160 ||F(xn)|| = 0.002223469 iteration: 170 ||F(xn)|| = 0.001894652 iteration: 180 ||F(xn)|| = 0.001593481 iteration: 190 ||F(xn)|| = 0.001544238 iteration: 200 ||F(xn)|| = 0.001371717 iteration: 210 ||F(xn)|| = 0.001380736 iteration: 220 ||F(xn)|| = 0.001050085 iteration: 230 ||F(xn)|| = 0.0008261566 iteration: 240 ||F(xn)|| = 0.0007552435 iteration: 250 ||F(xn)|| = 0.0007209885 iteration: 260 ||F(xn)|| = 0.000668964 iteration: 270 ||F(xn)|| = 0.0003739778 iteration: 280 ||F(xn)|| = 0.0002911901 iteration: 290 ||F(xn)|| = 0.0002275736 iteration: 300 ||F(xn)|| = 0.0003757738 iteration: 310 ||F(xn)|| = 0.0001164746 iteration: 320 ||F(xn)|| = 1.973216e-05 iteration: 330 ||F(xn)|| = 8.459368e-06 iteration: 340 ||F(xn)|| = 5.58544e-06 iteration: 350 ||F(xn)|| = 4.336389e-06 iteration: 360 ||F(xn)|| = 1.980692e-06 > ans4 <- sane(par=p0, fn=troesch, method=2) Iteration: 0 ||F(x0)||: 2.112497 iteration: 10 ||F(xn)|| = 0.1697327 iteration: 20 ||F(xn)|| = 0.04631053 iteration: 30 ||F(xn)|| = 0.02981959 iteration: 40 ||F(xn)|| = 0.0128087 iteration: 50 ||F(xn)|| = 0.007747446 iteration: 60 ||F(xn)|| = 0.00671027 iteration: 70 ||F(xn)|| = 0.003478671 iteration: 80 ||F(xn)|| = 0.002820685 iteration: 90 ||F(xn)|| = 0.0008380247 iteration: 100 ||F(xn)|| = 0.0004486009 iteration: 110 ||F(xn)|| = 0.0003331791 iteration: 120 ||F(xn)|| = 0.0002376972 iteration: 130 ||F(xn)|| = 0.0002024058 iteration: 140 ||F(xn)|| = 7.542183e-05 iteration: 150 ||F(xn)|| = 4.284926e-05 iteration: 160 ||F(xn)|| = 3.877718e-05 iteration: 170 ||F(xn)|| = 1.107082e-05 iteration: 180 ||F(xn)|| = 1.048127e-05 iteration: 190 ||F(xn)|| = 1.130515e-06 > #ans <- nlsolve(par=p0, fn=troesch) > > c(ans1$resid, ans2$resid,ans3$resid, ans4$resid) [1] 8.128599e-08 5.286920e-08 7.824700e-08 8.492120e-08 > c(ans1$feval, ans2$feval,ans3$feval,ans4$feval) [1] 240 266 1046 463 > > # switched BFGS=TRUE to BFGS=FALSE below for speed, and 500 to 100 > > nsim <- 50 > dfsane1.troesch <- dfsane2.troesch <- sane1.troesch <- sane2.troesch <- matrix(NA, nsim, 5) > for (i in 1:nsim) { + cat("Simulation" , i, "\n") + p0 <- sort(runif(50)) + t1 <- system.time(ans <- sane(par=p0, fn=troesch, method=1, + control=list(BFGS=FALSE, trace=F)))[1] + if (!is.null(ans))sane1.troesch[i, ] <- c(ans$resid, ans$feval, ans$iter, ans$conv, t1) + t2 <- system.time(ans <- sane(par=p0, fn=troesch, method=2, + control=list(BFGS=FALSE, trace=F)))[1] + if (!is.null(ans))sane2.troesch[i, ] <- c(ans$resid, ans$feval, ans$iter, ans$conv, t2) + t3 <- system.time(ans <- dfsane(par=p0, fn=troesch, method=1, + control=list(BFGS=FALSE, trace=F)))[1] + if (!is.null(ans))dfsane1.troesch[i, ] <- c(ans$resid, ans$feval, ans$iter, ans$conv, t3) + t4 <- system.time(ans <- dfsane(par=p0, fn=troesch, method=2, + control=list(BFGS=FALSE, trace=F)))[1] + if (!is.null(ans)) dfsane2.troesch[i, ] <- c(ans$resid, ans$feval, ans$iter, ans$conv, t4) + } Simulation 1 Simulation 2 Simulation 3 Simulation 4 Simulation 5 Simulation 6 Simulation 7 Simulation 8 Simulation 9 Simulation 10 Simulation 11 Simulation 12 Simulation 13 Simulation 14 Simulation 15 Simulation 16 Simulation 17 Simulation 18 Simulation 19 Simulation 20 Simulation 21 Simulation 22 Simulation 23 Simulation 24 Simulation 25 Simulation 26 Simulation 27 Simulation 28 Simulation 29 Simulation 30 Simulation 31 Simulation 32 Simulation 33 Simulation 34 Simulation 35 Simulation 36 Simulation 37 Simulation 38 Simulation 39 Simulation 40 Simulation 41 Simulation 42 Simulation 43 Simulation 44 Simulation 45 Simulation 46 Simulation 47 Simulation 48 Simulation 49 Simulation 50 > > z <- apply(sane1.troesch, 2, summary) > print(z) [,1] [,2] [,3] [,4] [,5] Min. 2.236800e-09 209.00 97.00 0 0.000 1st Qu. 5.319011e-08 247.00 106.25 0 0.000 Median 7.169645e-08 264.00 115.00 0 0.000 Mean 6.502567e-08 270.94 117.04 0 0.007 3rd Qu. 8.580688e-08 292.50 123.75 0 0.010 Max. 9.876373e-08 407.00 162.00 0 0.020 > print(z[,1], digits=18) Min. 1st Qu. Median 2.23679963633939700e-09 5.31901101511107478e-08 7.16964544866227192e-08 Mean 3rd Qu. Max. 6.50256652046534884e-08 8.58068778276177998e-08 9.87637293450962375e-08 > > z <- apply(sane2.troesch, 2, summary) > print(z) [,1] [,2] [,3] [,4] [,5] Min. 3.353729e-09 191.00 87.00 0 0.0000 1st Qu. 5.126360e-08 214.00 97.25 0 0.0000 Median 7.571545e-08 223.00 102.50 0 0.0000 Mean 6.818466e-08 231.22 104.98 0 0.0056 3rd Qu. 8.745042e-08 242.00 108.75 0 0.0100 Max. 9.982193e-08 302.00 137.00 0 0.0200 > print(z[,1], digits=18) Min. 1st Qu. Median 3.35372943154086864e-09 5.12636046020707421e-08 7.57154464742049401e-08 Mean 3rd Qu. Max. 6.81846564602675467e-08 8.74504152835740862e-08 9.98219278065438380e-08 > > z <- apply(dfsane1.troesch, 2, summary) > print(z) [,1] [,2] [,3] [,4] [,5] Min. 1.892016e-08 104.00 97.00 0 0.0000 1st Qu. 6.561860e-08 131.25 116.75 0 0.0000 Median 8.047880e-08 144.50 128.00 0 0.0000 Mean 7.626571e-08 145.64 128.44 0 0.0058 3rd Qu. 9.052229e-08 159.50 139.75 0 0.0100 Max. 9.907555e-08 194.00 159.00 0 0.0200 > print(z[,1], digits=18) Min. 1st Qu. Median 1.89201573236015297e-08 6.56185951863389370e-08 8.04788015884763866e-08 Mean 3rd Qu. Max. 7.62657083386709856e-08 9.05222946544071492e-08 9.90755489236852945e-08 > > z <- apply(dfsane2.troesch, 2, summary) > print(z) [,1] [,2] [,3] [,4] [,5] Min. 2.149523e-08 95.00 91.00 0 0.000 1st Qu. 6.071587e-08 108.00 103.50 0 0.000 Median 7.347776e-08 117.00 112.50 0 0.000 Mean 7.236210e-08 116.34 112.42 0 0.003 3rd Qu. 8.656972e-08 124.00 120.75 0 0.000 Max. 9.990350e-08 140.00 136.00 0 0.020 > print(z[,1], digits=18) Min. 1st Qu. Median 2.14952285301628333e-08 6.07158653622953798e-08 7.34777641955904645e-08 Mean 3rd Qu. Max. 7.23620986210723977e-08 8.65697237671817762e-08 9.99035028380436505e-08 > > > > proc.time() user system elapsed 6.25 0.07 6.32