在 Base R 中实现代数方程

Implementing an algebraic equation in Base R

提问人:Simon Harmel 提问时间:11/16/2023 更新时间:11/16/2023 访问量:39

问:

我是 R 中代数方程的新手,正在尝试在 R 中实现以下方程(下图)。

然而,尽管我试图做到精确,但我希望答案是,但我得到了.0.05086511.43653

我想知道我错过了什么,因为我真的找不到任何错误?

delta_T=0.1522
n=18
NT=324
NC=162
p=0.264
N=NT+NC

V_T2 =  ((NT+NC)/(NT*NC))*(1 + ((n - 1)*p)) +
    ( delta_T^2 * ( 
      (((N - 2)*(1-p)^2 ) + (n*(N - 2*n)*p^2) +
         (2* (N - 2*n) * p * (1 - p)) ) /
         (2* (N-2)) * ( (N-2) - (2* (n-1)*p) ) 
    )  )

V_T2

# > [1] 11.43653 BUT I expect the answer to be 0.050865

enter image description here

R 函数 数学

评论

0赞 Chris 11/16/2023
地狱是执行的 parens 和层次结构,你的估计是正确的,并且在 parens 灌木丛之前做得很好,[1] 0.009259259、[1] 0.05081481、[1] 1001.592,除以 [1] 459823.2、[1] 5.045791e-05、[1] 0.05086527 - 在切成部分之前,我第一次尝试这个是这个 [1] 2222.64。因此,在估算之后,显然需要小心。(NT + NC) / (NT * NC) (NT + NC) / (NT * NC)*(1 + (n -1)*p) (N-2)*(1-p)^2 + n*(N-2*n)*p^2 + 2*(N - 2*n)*p*(1-p)(2 * (N -2))*((N-2)- 2*(n-1)*p) delta_T^2*(1001.592/459823.2)(NT + NC) / (NT * NC)*(1 + (n -1)*p) + delta_T^2*(1001.592/459823.2)
0赞 Chris 11/16/2023
徘徊在路上,人们可能会看看[1] 405。我的伙伴告诉我它会走到这一步。NT + NC / NT * NC

答:

1赞 Mark 11/16/2023 #1

你得到错误答案的原因是,在第二学期,你认为你在做

numerator 
/
denominator

但你实际上在做的是

numerator 
/
(2 * (N - 2)) 
* 
((N - 2) - (2 * (n - 1) * p) )

所以,换句话说,你缺少分母周围的括号。

但是,一般来说,在处理复杂的方程式时,将代码分解为中间变量会很有帮助,这样更容易调试,并且可以对它们进行健全性检查:

equation <- function(NT, NC, n, p, delta_T) {
    N <- NT + NC
    first_term <- N / (NT * NC) * (1 + ((n - 1) * p))
    numerator <- (N - 2) * (1 - p)^2 + n * (N - 2 * n) * p^2 +
         2 * (N - 2 * n) * p * (1 - p)
    denominator <- 2 * (N-2) * (N - 2 - 2 * (n - 1) * p) 
    second_term <- delta_T^2 * (numerator / denominator)
    first_term + second_term
}