Solve Non-Linear Equations using R



  • 问题背景:用inverse transformation method来模拟分布。
    在这个过程中,涉及到已知F(y)求y的问题。
    $0.75\times 0.85^y + (\frac{20}{23})^{y+1} + 2F(y) - 1.75=0$

    library(nleqslv)
    '假设F(y)是0.1求y
    F = 0.1
    invsimu <- function(y) { 
    '这个方程需要等于0
      (1.75 - 0.75*(0.85)^y - (20/23)^(y+1))/2-F
      }
    
    answer <- nleqslv(0, invsimu)$x
    


  • 另一个例子:注意,这里为了迭代M的值,IAC返回的是一个函数;nleqslv的初始根猜测是50的原因是不想找到0根

    library(nleqslv)
    
    M=seq(0.5,1.5, by=0.1)
    R=rep(0, length(M))
    IAC=function(M){
        return(function(R){
          1+(R*(1.1-1.15*exp(-M)))-((exp(M*(R-1))-1)/(R-1))-exp(M*(R-1))
        }) 
    }
    for (i in 1:length(R)) {
      R[i]=nleqslv(50, IAC(M[i]))$x 
    }
    R
    

登录后回复