如何用R中的数字向量表示多项式

42-*_*42- 17 r polynomial-math

在R中,如何表示多项式表达式并使用数字向量对象进行多项式数学运算?例如:

x1 <- c(2,1)  # 2 + x
x2 <- c(-1,3)  # -1 + 3*x
Run Code Online (Sandbox Code Playgroud)

并希望:

x1 * x2 # to return -2 + 5*x + 3*x^2 
Run Code Online (Sandbox Code Playgroud)

注意:我今天早上回答了一个问题,然后海报显然删除了它(让我想知道它是否是作业.)所以我从记忆中重新发布了这个问题.

Das*_*son 15

可以直接使用系数乘以系数outer,然后汇总结果

x1 <- c(2,1)  # 2 + x
x2 <- c(-1,3)  # -1 + 3*x
tmp <- outer(x1, x2)
tapply(tmp, row(tmp) + col(tmp) - 1, sum)
# 1  2  3 
#-2  5  3

x1 <- c(2, 1) # 2 + x
x2 <- c(-1, 3, 2) # -1 + 3*x + 2*x^2
tmp <- outer(x1, x2)
tapply(tmp, row(tmp) + col(tmp) - 1, sum) # should give -2 + 5*x + 7*x^2 + 2*x^3
# 1  2  3  4 
#-2  5  7  2
Run Code Online (Sandbox Code Playgroud)

正如评论中所讨论的那样,代码中的"-1"不是必需的.当提出帮助我的解决方案时,因为它允许我将输出中的每个位置映射outer到最终向量中的最终位置.如果我们改为'-2',那么它将映射到结果多项式中x的指数.但我们真的不需要它,所以像下面这样的东西也会起作用:

tmp <- outer(x1, x2)
tapply(tmp, row(tmp) + col(tmp), sum)
Run Code Online (Sandbox Code Playgroud)


42-*_*42- 12

使用多项包:

 require(polynom)
# Loading required package: polynom
# From the example for as.polynomial
 p <- as.polynomial(c(1,0,3,0))
 p
# 1 + 3*x^2 

 x1 <- c(2,1)
 x2 <- c(-1,3)
 px1 <- as.polynomial(x1)
 px2 <- as.polynomial(x2)

 px1*px2
# -2 + 5*x + 3*x^2 
 prod.p <- .Last.value
 str(prod.p)
# Class 'polynomial'  num [1:3] -2 5 3
 unclass(prod.p)
# [1] -2  5  3
Run Code Online (Sandbox Code Playgroud)

  • 还有一个Ryacas套餐. (6认同)
  • 我可以补充说,这不允许对多项式表达式进行符号处理,因为系数存储为常规的"double"值,并且在算术运算期间精度会丢失.如果需要对这些表达式执行符号计算,我建议使用Mathematica. (2认同)