程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了R 求解方程 - uniroot 中的误差(f,x = 2.326348,lower = 0.1,upper = 1e+08)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决R 求解方程 - uniroot 中的误差(f,x = @R_607_10814@6348,lower = 0.1,upper = 1e+08)?

开发过程中遇到R 求解方程 - uniroot 中的误差(f,x = @R_607_10814@6348,lower = 0.1,upper = 1e+08)的问题如何解决?下面主要结合日常开发的经验,给出你关于R 求解方程 - uniroot 中的误差(f,x = @R_607_10814@6348,lower = 0.1,upper = 1e+08)的解决方法建议,希望对你解决R 求解方程 - uniroot 中的误差(f,x = @R_607_10814@6348,lower = 0.1,upper = 1e+08)有所启发或帮助;

我试图在 R 中解决以下等式:

@R_607_10814@6348 = normal inverse function(y)
@H_673_6@

正态反函数是:

sqrt(-2*log(sqrt(2*pi)*y))
@H_673_6@

或者更简单:qnorm(y)@H_673_6@

所以为了求解方程,我使用了下面的函数:

f <- function(x,y)  (sqrt(-2*log(sqrt(2*pi)*y))-X)
uniroot(f,x=@R_607_10814@6348,lower=0.1,upper=100000000)$root
@H_673_6@

f <- function(x,y)  (qnorm(y)-X)
    uniroot(f,upper=100000000)$root
@H_673_6@

但这确实返回:

Error in uniroot(f,x = @R_607_10814@6348,lower = 0.1,upper = 1e+08) : 
  f.upper = f(upper) is NA
@H_673_6@

我该怎么做才能解这个方程?我已经saw this,但似乎不是同一个问题。

uniroot documentation

解决方法

这个问题在下面提到了 f 和 g,好像它们是一样的,但实际上它们不是。固定 x 时 f(x,y) = 0 的解是 y = dnorm(X),固定 x 时 g(x,y) = 0 的解是 y = pnorm(X)。 f 函数体中 -x 左侧的表达式是高斯概率密度函数 (pdf) 的倒数,而 g 中的表达式是高斯累积概率分布函数 (cdf) 的倒数。

f <- function(x,y) (sqrt(-2*log(sqrt(2*pi)*y))-X)
g <- function(x,y) qnorm(y) - x

x <- @R_607_10814@6348

f(x,dnorm(X))
## [1] 0

g(x,pnorm(X))
## [1] 4.440892e-16
@H_673_6@

1.

首先我们使用上面的 f。

两边都平方,然后它会在 uniroot 中表现得更好。也使用 0 和 1 作为边界。

x <- @R_607_10814@6348
f2 <- function(x,y) -2*log(sqrt(2*pi)*y)-x^2
result <- uniroot(f2,x = x,lower = 0,upper = 1)
result
## $root
## [1] 0.02666295
##
## $f.root
## [1] -0.000811161
##
## $iter
## [1] 9
##
## $init.it
## [1] NA
##
## $estim.prec
## [1] 6.103516e-05
@H_673_6@

比较上面的根与

dnorm(X)
## [1] 0.02665213
@H_673_6@

2.克

现在我们使用上面的 g。

result2 <- uniroot(g,upper = 1)
result2
## $root
## [1] 0.99001
##
## $f.root
## [1] 0.0003750975
##
## $iter
## [1] 11
##
## $init.it
## [1] NA
##
## $estim.prec
## [1] 6.103516e-05
@H_673_6@

比较上面的根和 pnorm(X)

pnorm(X)
## [1] 0.99
@H_673_6@
,

qnorm@H_673_6@ 的定义区间是 [0,1]@H_673_6@ 并且您收到错误,因为您试图在此区间之外找到解决方案。
如果您将搜索限制为 [0,1]@H_673_6@,它会起作用:

@H_674_88@y = @R_607_10814@6348 uniroot(function(X) qnorm(X)-y,lower=0,upper = 1) #> $root #> [1] 0.99001 #> #> $f.root #> [1] 0.0003750975 #> #> $iter #> [1] 11 #> #> $init.it #> [1] NA #> #> $estim.prec #> [1] 6.103516e-05 @H_673_6@

大佬总结

以上是大佬教程为你收集整理的R 求解方程 - uniroot 中的误差(f,x = 2.326348,lower = 0.1,upper = 1e+08)全部内容,希望文章能够帮你解决R 求解方程 - uniroot 中的误差(f,x = 2.326348,lower = 0.1,upper = 1e+08)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。