secant: Univariate secant method

Description Usage Arguments Value Examples

Description

Find the root of a function using the secant method.

Usage

1
2
3
unisecant(f, x0, x1, tol = 10 * .Machine$double.eps, maxit = 100L)

simple_unisecant(f, x0, x1, tol = 10 * .Machine$double.eps, maxit = 100L)

Arguments

f

function

x0

initial value

x1

second initial value

tol

tolerance, defaults to 10*.Machine$double.eps

maxit

maximum number of iterations

Value

a list

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
f  <- function(x) x^2 - 2
x0 <- 0; x1 <- 1
unisecant(f, x0, x1)
simple_unisecant(f, x0, x1)

(out <- unisecant(f, x0, x1))

curve(f(x), col = "red", from = .9, to = 2.1)
with(out$evals, points(x, fx))
for(k in 2:out$n_evals) {
  with(out$evals, abline(
    a = fx[k-1] - (fx[k]-fx[k-1]) / (x[k]-x[k-1]) * x[k-1],
    b = (fx[k]-fx[k-1]) / (x[k]-x[k-1]),
    col = "blue"
  ))
  Sys.sleep(.5)
}





f <- sin
x0 <- 2; x1 <- 1.9
(out <- unisecant(f, x0, x1))

curve(f(x), col = "red", from = 0, to = 2*pi)
with(out$evals, points(x, fx))
for(k in 2:out$n_evals) {
  with(out$evals, abline(
    a = fx[k-1] - (fx[k]-fx[k-1]) / (x[k]-x[k-1]) * x[k-1],
    b = (fx[k]-fx[k-1]) / (x[k]-x[k-1]),
    col = "blue"
  ))
  Sys.sleep(.5)
}




f <- log
x0 <- .40; x1 <- .50
(out <- unisecant(f, x0, x1))

curve(f(x), col = "red", from = .25, to = 1.5)
with(out$evals, points(x, fx))
for(k in 2:out$n_evals) {
  with(out$evals, abline(
    a = fx[k-1] - (fx[k]-fx[k-1]) / (x[k]-x[k-1]) * x[k-1],
    b = (fx[k]-fx[k-1]) / (x[k]-x[k-1]),
    col = "blue"
  ))
  Sys.sleep(.5)
}



f <- function(x) (x-.24) * (x - .51) * (x - .76)
x0 <- .40; x1 <- .45
(out <- unisecant(f, x0, x1))

curve(f(x), col = "red", from = .15, to = .85)
with(out$evals, points(x, fx))
for(k in 2:out$n_evals) {
  with(out$evals, abline(
    a = fx[k-1] - (fx[k]-fx[k-1]) / (x[k]-x[k-1]) * x[k-1],
    b = (fx[k]-fx[k-1]) / (x[k]-x[k-1]),
    col = "blue"
  ))
  Sys.sleep(.5)
}




f <- function(x) pbeta(x, 6, 4) - .5
x0 <- .30; x1 <- .40
(out <- unisecant(f, x0, x1))

curve(f(x), col = "red", from = 0, to = 1)
with(out$evals, points(x, fx))
for(k in 2:out$n_evals) {
  with(out$evals, abline(
    a = fx[k-1] - (fx[k]-fx[k-1]) / (x[k]-x[k-1]) * x[k-1],
    b = (fx[k]-fx[k-1]) / (x[k]-x[k-1]),
    col = "blue"
  ))
  Sys.sleep(.5)
}

dkahle/kumerical documentation built on May 27, 2019, 11:49 p.m.