首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中的唯一根解

R中的唯一根解
EN

Stack Overflow用户
提问于 2016-08-15 18:56:07
回答 2查看 50.3K关注 0票数 10

我想找到以下函数的根:

代码语言:javascript
运行
复制
       x=0.5
       f <- function(y) ((1-pbeta(1-exp(-0.002926543
        *( 107.2592+y)^1.082618 *exp(0.04097536*(107.2592+y))),shape1=0.2640229,shape2=0.1595841)) -
(1-pbeta(1-exp(-0.002926543*(x)^1.082618 *exp(0.04097536*(x))),shape1=0.2640229,shape2=0.1595841))^2)

sroot=uniroot(f, lower=0, upper=1000)$root

单根(f,下端= 0,上= 1000)中的错误: f()值在非相反符号的端点处

我如何解决这个错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-16 00:26:48

uniroot() 及其使用的注意事项

uniroot正在实施粗糙的二分法。这种方法比(准)牛顿法简单得多,但需要更强的假设来确保根:f(lower) * f(upper) < 0的存在。

这可能是相当痛苦的,因为这样的假设是一个充分的条件,但不是必要的条件。在实践中,如果f(lower) * f(upper) > 0,仍然有可能存在一个根,但由于这不是百分之百肯定,二分法不能承担风险。

考虑一下这个例子:

代码语言:javascript
运行
复制
# a quadratic polynomial with root: -2 and 2
f <- function (x) x ^ 2 - 4

显然,[-5, 5]是有根源的。但

代码语言:javascript
运行
复制
uniroot(f, lower = -5, upper = 5)
#Error in uniroot(f, lower = -5, upper = 5) : 
#  f() values at end points not of opposite sign

实际上,二分法的使用需要对f进行观察/检查,这样才能提出一个合理的根所在的区间。在R中,我们可以使用curve()

代码语言:javascript
运行
复制
curve(f, from = -5, to = 5); abline(h = 0, lty = 3)

从图中,我们观察到[-5, 0][0, 5]中存在根。所以这些都很好:

代码语言:javascript
运行
复制
uniroot(f, lower = -5, upper = 0)
uniroot(f, lower = 0, upper = 5)

您的问题

现在让我们尝试一下您的函数(为了提高可读性,我已经将它拆分成几行;通过这种方式检查正确性也很容易):

代码语言:javascript
运行
复制
f <- function(y) {
  g <- function (u) 1 - exp(-0.002926543 * u^1.082618 * exp(0.04097536 * u))
  a <- 1 - pbeta(g(107.2592+y), 0.2640229, 0.1595841)
  b <- 1 - pbeta(g(x), 0.2640229, 0.1595841)
  a - b^2
  }

x <- 0.5
curve(f, from = 0, to = 1000)

这个函数怎么可能是一条水平线呢?它不能有根!

  1. 检查上面的f,它真的做了你想做的正确的事情吗?我怀疑g有什么问题;您可能把括号放错地方了?
  2. 一旦您得到f正确,使用curve检查适当的间隔有一个根存在。然后使用uniroot
票数 28
EN

Stack Overflow用户

发布于 2017-10-26 18:18:35

尝试使用一个小间隔,但允许uniroot()扩展该间隔:

代码语言:javascript
运行
复制
uniroot(f, lower=0, upper=1, extendInt = "yes")$root
[1] -102.9519
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38961221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档