2013-03-09 4 views
1

Как установить максимальную итерацию = 20 для следующего кода метода Bisection? Должен ли я работать только на feval или что-то еще?Установите максимальную итерацию для метода Bisection?

rf.bisection <- function(f, lower, upper, tol=1e-4) { 
flow <- f(lower) 
fupper <- f(upper) 
feval <- 2 

if (flow * fupper > 0) stop("The given interval does not contain the root! 
\n") 
diff <- upper - lower 

while (abs(diff) > tol) { 
    newpoint <- (lower + upper)/2 
    newf <- f(newpoint) 
    if (abs(newf) <= tol) break 
    if (flow * newf < 0) upper <- newpoint 
    if (fupper * newf < 0) lower <- newpoint 
    diff <- upper - lower 
    feval <- feval + 1 
} 
list(x = newx, value = newf, fevals=feval) 
} 

ответ

2

Изменение состояния в while к while (abs(diff) > tol & feval<22). 22, потому что на первой итерации feval уже 2.

+0

Это даст вам 18 итераций, если вы не инициализируете 'feval' с 0. – eugen

+0

Это сработало! Спасибо за вашу помощь. –

+0

@eugen, вы правы, я думал об оценках функций, исправлен. –