42- - 1 year ago 75
R Question

# How to represent polynomials with numeric vectors in R

In R how would one represent polynomial expressions and do polynomial math with the numeric vector objects? For example:

``````x1 <- c(2,1)  # 2 + x
x2 <- c(-1,3)  # -1 + 3*x
``````

And want:

``````x1 * x2 # to return -2 + 5*x + 3*x^2
``````

Note: I answered a question this morning and then the poster apparently deleted it (making me wonder if it were homework.) So I am re-posting the question from memory.

One could multiply the coefficients directly using `outer` and then aggregate the results

``````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
``````

as discussed in the comments the '-1' in the code isn't necessary. When coming up with the solution that helped me because it allowed me to map each location in the output of `outer` to where it would end up in the final vector. If we did a '-2' instead then it would map to the exponent on x in the resulting polynomial. But we really don't need it so something like the following would work just as well:

``````tmp <- outer(x1, x2)
tapply(tmp, row(tmp) + col(tmp), sum)
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download