当前位置: 首页 > 知识库问答 >
问题:

函数返回NaN

漆雕宏浚
2023-03-14

我不明白为什么下面的函数返回NaN,甚至答案不应该是NaN。我试着搜索类似的问题,但大多数是在其他编程语言中,我无法理解。

a0 = 1.5; a1 = 0.4; b1 = 0.3; g1= 0.7
nu = rep(0,1)
h.new = rep(0,1)
ddp = rep(0,1)

nu[1]=0

h.new[1] = a0/(1-a1-b1)
ddp[1] = 0.5*log(g1)- g1*h.new[1] + 
  nu[1]*(log(nu[1])-1) - log(factorial(nu[1]))+(g1)*nu[1]* 
  (1+log(h.new[1]/nu[1]))
###> ddp
###[1] NaN
###h.new = 1.5/(1-0.4-0.3) = 5

###ddp 
###= 0.5*log(0.7)- (0.7)*(5) + 
###(0)*(log(0)-1) - log(0!)+(0.7)*(0)* 
###(1+log(5/0))

###= 0.5*log(0.7)- (0.7)*(5)

###= -3.6783

提前谢了。

共有1个答案

慎建本
2023-03-14

通常,0*inf在r中给出nan:计算机不/不能知道您要如何接受限制。如果您知道希望这些限制为零,则可以指定在nu==0的特殊情况下计算的工作方式:

term3 <- if (nu==0) 0 else nu*(log(nu)-1)
term5 <- if (nu==0) 0 else g1*nu*(1+log(h.new/nu))
ddp = 0.5*log(g1)-
    g1*h.new + 
    term3 - 
    log(factorial(nu))+
    term5

您可以使用zprod函数来实现这一点:

zprod <- function(x,y) {
     if (x==0) 0 else x*y
}
ddp = 0.5*log(g1)- g1*h.new + 
      zprod(nu,log(nu)-1) - log(factorial(nu))+
      g1*zprod(nu,1+log(h.new/nu))
 类似资料:
  • 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回

  • 函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回

  • 在rust中,任何函数都有返回类型,当函数返回时,会返回一个该类型的值。我们先来看看main函数: fn main() { //statements } 之前有说过,函数的返回值类型是在参数列表后,加上箭头和类型来指定的。不过,一般我们看到的main函数的定义并没有这么做。这是因为main函数的返回值是(),在rust中,当一个函数返回()时,可以省略。main函数的完整形式如下:

  • 问题内容: 我在返回查询时遇到了几个问题。 在这里,我想做的是: 我在不同的帖子上看到了回调函数,但是它不适用于我想做的事情。 问题答案: 我在不同的帖子上看到了回调函数,但是它不适用于我想做的事情。 是的,您只需要更改对代码的思考方式即可。与其编写,不如编写一个名为的函数: 然后,而不是这样写: 您可以这样写: 现在,您可能会问自己,在那之后还有其他事情吗?好吧,您需要修改函数使其行为类似于和而

  • Lua 具有一项与众不同的特性,允许函数返回多个值。Lua 的库函数中,有一些就是返回多个值。 示例代码:使用库函数 string.find,在源字符串中查找目标字符串,若查找成功,则返回目标字符串在源字符串中的起始位置和结束位置的下标。 local s, e = string.find("hello world", "llo") print(s, e) -->output 3 5 返回多个值

  • 我一直在做这个岩石剪刀剪刀程序一段时间,它没有显示的方式,它应该是应该的。我在代码中使用了值返回函数。问题在程序的末尾显现出来。游戏的结果将被替换,但实际显示的是另一个提示,供用户输入他们的选择。下面是我的代码: