Learn R Programming

Fast symbolic multivariate polynomials in R

Overview

Multivariate polynomials are interesting and useful objects. Here I present the mvp package which hopefully improves upon previous R functionality provided by the packages multipol, mpoly, and spray. The mvp package follows mpoly in using a symbolic, rather than numeric, representation of a multivariate polynomial; but it offers speed advantages over mpoly. mvp uses the excellent print and coercion methods of the mpoly package. mvp includes some pleasing substitution idiom not found elsewhere; it is theoretically comparable in speed to the spray package and I present some timings in the package vignette.

The mvp package uses C++’s STL map class for efficiency, which has the downside that the order of the terms, and the order of the symbols within each term, is undefined. This does not matter as the mathematical value of a multivariate polynomial is unaffected by reordering; and the print method (taken from mpoly) does a good job in producing human-readable output.

Installation

You can install the released version of mvp from CRAN with:

# install.packages("mvp")  # uncomment this to install the package
library("mvp")

The mvp package in use

Creating a multivariate polynomial is straightforward:

X <- as.mvp("1 + a^2 + a*b*c^3")
X
#> mvp object algebraically equal to
#> 1 + a b c^3 + a^2

and arithmetic operations work as expected:

Y <- as.mvp("12*a^2  + b - c^2 + 4*d")
X+Y
#> mvp object algebraically equal to
#> 1 + a b c^3 + 13 a^2 + b - c^2 + 4 d
X-3*Y
#> mvp object algebraically equal to
#> 1 + a b c^3 - 35 a^2 - 3 b + 3 c^2 - 12 d
X^2
#> mvp object algebraically equal to
#> 1 + 2 a b c^3 + 2 a^2 + a^2 b^2 c^6 + 2 a^3 b c^3 + a^4

Substitution uses the subs() function:

X
#> mvp object algebraically equal to
#> 1 + a b c^3 + a^2
subs(X,a=1)
#> mvp object algebraically equal to
#> 2 + b c^3
subs(X,a=1,b=2)
#> mvp object algebraically equal to
#> 2 + 2 c^3
subs(X,a=1,b=2,c=3)
#> [1] 56
subs(X+Y,a="1+x^2",b="x+y",c=0)
#> mvp object algebraically equal to
#> 14 + 4 d + x + 26 x^2 + 13 x^4 + y

Further information

For more detail, see the package vignette

vignette("mvp")

Copy Link

Version

Install

install.packages('mvp')

Monthly Downloads

327

Version

1.0-18

License

GPL (>= 2)

Issues

Pull Requests

Stars

Forks

Maintainer

Robin K S Hankin

Last Published

January 31st, 2025

Functions in mvp (1.0-18)

lowlevel

Low level functions
rmvp

Random multivariate polynomials
ooom

One over one minus a multivariate polynomial
mpoly

Conversion to and from mpoly form
mvp-package

tools:::Rd_package_title("mvp")
knight

Chess knight
zero

The zero polynomial
series

Decomposition of multivariate polynomials by powers
special

Various functions to create simple multivariate polynomials
summary

Summary methods for mvp objects
subs

Substitution
allvars

All variables in a multivariate polynomial
as.function.mvp

Functional form for multivariate polynomials
invert

Replace symbols with their reciprocals
constant

The constant term
drop

Drop empty variables
coeffs

Functionality for coeffs objects
deriv

Differentiation of mvp objects
horner

Horner's method
kahle

A sparse multivariate polynomial
mvp

Multivariate polynomials, mvp objects
letters

Single-letter symbols
Ops.mvp

Arithmetic Ops Group Methods for mvp objects
all_equal_mvp

Approximate equality of mvp objects
print

Print methods for mvp objects