В R не найдены изменения знака, но не в Excel - PullRequest
0 голосов
/ 12 октября 2018

Просто пытаясь понять, почему, когда я нахожу корень следующего уравнения в Excel, я получаю значение, однако в RI получается «ошибка, не найденная при изменении знака»

(-exp(-i*x))-x + 1 

i = 1 в этом случае.

Я строю график, где значение для i составляет 1: 5.Я сделал это вручную в Excel и получил значение 0,003, когда я = 1, вот график для всех значений I: изображение 1

Когда попытаться найти корень длякогда я = 1 в R, хотя я получаю ошибку.

Этот код я использую, чтобы найти корень:

func1 <- function(x) {

  (-exp(-1*x))-x+1 
}

root <- uniroot(func1, lower =0.5, upper = 1, extendInt = "yes")
print(root)
print(root$root)

}

Построение уравнения, когда i = 1, дает следующую кривую: image 2

Глядя на кривую, не похоже, что f (x) пересекает 0, что объясняет ошибку, однако я получаю значение в excel.

Любая помощь по этому вопросу будет очень признателен

Спасибо

1 Ответ

0 голосов
/ 13 октября 2018

Это лучшее, что я могу предложить.Он использует метод производных, который я нашел в http://rpubs.com/wkmor1/simple-derivatives-in-r. Это позволит вам получить корни из метода Ньютонов.

options(scipen = 999)
f<-function(x) (-exp(-x)-x+1)
g<-function(x) { }
body(g)<-D(body(f),"x")
x <- 19
y<-vector()
y[1]<-x
for(i in 2:500) {
  y<-c(y, y[i-1] - (f(y[i-1])/g(y[i-1])))
  if(y[i]==y[i-1]) break
}
y

Вывод выглядит так:

> y
 [1] 19.000000000000000  0.999999893546867  0.418023257075328  0.194491909332762
 [5]  0.094095681658666  0.046310116577025  0.022976345768161  0.011444180565743
 [9]  0.005711176200954  0.002852869974152  0.001425756748278  0.000712708975595
[13]  0.000356312158327  0.000178145499021  0.000089070105497  0.000044534390909
[17]  0.000022267031356  0.000011133470771  0.000005566723944  0.000002783342584
[21]  0.000001391644148  0.000000695821730  0.000000347990248  0.000000173795172
[25]  0.000000086916841  0.000000043487300  0.000000023063442  0.000000013435885
[29] -0.000000003090351 -0.000000003090351

Надеюсь, это поможет.

...