我正在创建一个查找函数根的函数。该特定算法试图顺序地减小已知根所在的窗口的宽度。我希望它采用x的函数,窗口和epsilon的值。用户选择Epsilon,越接近零,根越精确。
这是我的代码:
root.finder <- function(f, x_0, x_1, epsilon) {
if (f(x_0)*f(x_1)>=0)
warning("check values x_0 and x_1")
while(abs(x_1 - x_0) >= epsilon)
x_2 <- (x_0 + x_1)/2
if (f(x_2)*f(x_0) < 0) {
x_1 <- x_2
} else {
x_0 <- x_2
}
print(x_2)
}
我试图通过使用:
来测试它root.finder(x^3-3*x+1, 0, 1, 1)
但它运行并且不会停止运行。 这个功能有什么问题?
答案 0 :(得分:0)
根据评论,我认为您需要在if
循环体中包含while
语句,如下所示:
root.finder <- function(f, x_0, x_1, epsilon) {
if (f(x_0)*f(x_1)>=0)
warning("check values x_0 and x_1")
while(abs(x_1 - x_0) >= epsilon) {
x_2 <- (x_0 + x_1)/2
if (f(x_2)*f(x_0) < 0) {
x_1 <- x_2
} else {
x_0 <- x_2
}
}
print(x_2)
}