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