Решение уравнения с использованием uniroot в R

      Error in uniroot(f.mu3, interval = c(lower, upper)) : 
  f.upper = f(upper) is NA
In addition: Warning message:
In sqrt((d[4] * mvec[4] * n - m * mu)^2 - 4 * d[4] * nvec[4] * n *  :
  NaNs produced 

Я пытаюсь найти решение сложной функции, используя uniroot. Но я не понимаю вышеуказанную ошибку (как и предупреждение!). кто-нибудь знает, как это исправить. Вот полный код R :

Что такое f.lower а также f.upper?

Примечание: в последней строке моей функции, если я изменю знак с -ve на +ve, я не получу никакого предупреждения!

      f.mu3<-function(mu){
  
  d=c(1, -1, -1, 1)
  
  nvec<-c(9,27,37,47)
  mvec<-c(70,35,24,6)
  n=sum(nvec)
  m=sum(mvec)
  
  m*n+d[1]*sqrt((d[1]*mvec[1]*n-m*mu)^2 - 4*d[1]*nvec[1]*n*m*mu)
  -m*n+d[2]*sqrt((d[2]*mvec[2]*n-m*mu)^2 - 4*d[2]*nvec[2]*n*m*mu)
  +m*n+d[3]*sqrt((d[3]*mvec[3]*n-m*mu)^2 - 4*d[3]*nvec[3]*n*m*mu)
  -m*n+d[4]*sqrt((d[4]*mvec[4]*n-m*mu)^2 - 4*d[4]*nvec[4]*n*m*mu)
}
a1<-(n/m)*(mvec[1]+2*nvec[1] - 2*sqrt(nvec[1]^2 + nvec[1]*mvec[1]))
a2<-(n/m)*(mvec[2]+2*nvec[2] - 2*sqrt(nvec[2]^2 + nvec[2]*mvec[2]))
a3<-(n/m)*(mvec[3]+2*nvec[3] - 2*sqrt(nvec[3]^2 + nvec[3]*mvec[3]))
a4<-(n/m)*(mvec[4]+2*nvec[4] - 2*sqrt(nvec[4]^2 + nvec[4]*mvec[4]))

lower=-min(a2, a3)
upper=min(a1, a4)

uniroot(f.mu3, interval = c(lower, upper))

1 ответ

f.mu3(верхний) (верхний = 0,1601443) возвращает NAN, потому что (d[4]mvec[4] нм mu)^2 - 4 d [4]nvec[4]n m mu) <0

          > (d[4]*mvec[4]*n-m*upper)^2 - 4*d[4]*nvec[4]*n*m*upper
    [1] -1.228182e-08

, поэтому ошибка возникает, когда

          uniroot(f.mu3, interval = c(lower, upper)) 
Другие вопросы по тегам