在 R 中,如何表示多项式表达式并使用数字向量对象进行多项式数学运算?例如:
x1 <- c(2,1) # 2 + x
x2 <- c(-1,3) # -1 + 3*x
并且想要:
x1 * x2 # to return -2 + 5*x + 3*x^2
注意:我今天早上回答了一个问题,然后海报显然删除了它(让我怀疑它是否是家庭作业。)所以我从记忆中重新发布了这个问题。
在 R 中,如何表示多项式表达式并使用数字向量对象进行多项式数学运算?例如:
x1 <- c(2,1) # 2 + x
x2 <- c(-1,3) # -1 + 3*x
并且想要:
x1 * x2 # to return -2 + 5*x + 3*x^2
注意:我今天早上回答了一个问题,然后海报显然删除了它(让我怀疑它是否是家庭作业。)所以我从记忆中重新发布了这个问题。
可以直接使用乘以系数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
正如评论中所讨论的,代码中的“-1”不是必需的。当提出对我有帮助的解决方案时,因为它允许我将输出中的每个位置映射outer
到最终向量中的位置。如果我们改为使用“-2”,那么它将映射到结果多项式中 x 上的指数。但我们真的不需要它,所以像下面这样的东西也可以工作:
tmp <- outer(x1, x2)
tapply(tmp, row(tmp) + col(tmp), sum)
使用多项式包:
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
多项式乘法是系数的卷积
convolve(c(2,1),rev(c(-1,3)),type="open")
#[1] -2 5 3