首页 > 解决方案 > 在R中进行二项式展开

问题描述

我正在研究 R 中的二项式展开,我遇到了一些问题,我觉得这些值没有意义。这是我的代码,我使用“从头开始”的阶乘和组合来计算。我试过 x=6, y=2 和 n=4 我得到 2784 作为答案。如果我尝试 1,它会给出 0。如果 n=i 我得到无穷大,因为分母将等于 0

  fact=1
  for(i in 1:n){
    fact=fact*i
  }
  return(fact)
}

Combi<-function(n,r){
  result=f(n)/(f(r)*f(n-r))
  return(result)
}
Combi(6,4)
expand.binomial<-function(x,y,n){
  sumz=0
  for(i in 1:n){
    if(i==n){
      break
    }
      sumz=sumz+Combi(n,i)*(x**i)*(y**(n-i))
  }
  return(sumz)
}

标签: r

解决方案


你应该知道,0!1。在这种情况下,f应该定义如下

f <- function(n) {
  if (n == 0) {
    return(1)
  }
  fact <- 1
  for (i in 1:n) {
    fact <- fact * i
  }
  return(fact)
}

此外,在 中expand.binomial,指数应从0到开始n,即

expand.binomial <- function(x, y, n) {
  sumz <- 0
  for (i in 0:n) {
    sumz <- sumz + Combi(n, i) * (x**i) * (y**(n - i))
  }
  return(sumz)
}

测试

> expand.binomial(6, 2, 4)
[1] 4096

> expand.binomial(6, 2, 1)
[1] 8

> expand.binomial(6, 2, 0)
[1] 1

推荐阅读