mvp (version 1.0-14)

series: Decomposition of multivariate polynomials by powers

Description

Power series of multivariate polynomials, in various forms

Usage

trunc(S,n)
truncall(S,n)
trunc1(S,...)
series(S,v,showsymb=TRUE)
# S3 method for series
print(x,...)
onevarpow(S,...)
taylor(S,vx,va,debug=FALSE)
mvp_taylor_onevar(allnames,allpowers,coefficients, v, n)
mvp_taylor_allvars(allnames,allpowers,coefficients, n)
mvp_taylor_onepower_onevar(allnames, allpowers, coefficients, v, n)
mvp_to_series(allnames, allpowers, coefficients, v)

Arguments

S

Object of class mvp

n

Non-negative integer specifying highest order to be retained

v

Variable to take Taylor series with respect to. If missing, total power of each term is used (except for series() where it is mandatory)

x,...

Object of class series and further arguments, passed to the print method; in trunc1() a list of variables to truncate

showsymb

In function series(), Boolean, with default TRUE meaning to substitute variables like x_m_foo with (x-foo) for readability reasons; see the vignette for a discussion

vx,va,debug

In function taylor(), names of variables to take series with respect to; and a Boolean with default FALSE meaning to return the mvp and TRUE meaning to return the string that is passed to eval()

allnames,allpowers,coefficients

Components of mvp objects

Author

Robin K. S. Hankin

Details

Function onevarpow() returns just the terms in which the symbols corresponding to the named arguments have powers equal to the arguments' powers. Thus:


 onevarpow(as.mvp("x*y*z + 3*x*y^2 + 7*x*y^2*z^6 + x*y^3"),x=1,y=2)
mvp object algebraically equal to
3  +  7 z^6

Above, we see that only the terms with x^1*y^2 have been extracted, corresponding to arguments x=1,y=2.

Function series() returns a power series expansion of powers of variable v. The value returned is a list of three elements named mvp, varpower, and variablename. The first element is a list of mvp objects and the second is an integer vector of powers of variable v (element variablename is a character string holding the variable name, argument v).

Function trunc(S,n) returns the terms of S with the sum of the powers of the variables \(\leq n\). Alternatively, it discards all terms with total power \(>n\).

Function trunc1() is similar to trunc(). It takes a mvp object and an arbitrary number of named arguments, with names corresponding to variables and their values corresponding to the highest power in that variable to be retained. Thus trunc1(S,x=2,y=4) will discard any term with variable x raised to the power 3 or above, and also any term with variable y raised to the power 5 or above. The highest power of x will be 2 and the highest power of y will be 4.

Function truncall(S,n) discards any term of S with any variable raised to a power greater than n.

Function series() returns an object of class series; the print method for series objects is sensitive to the value of getOption("mvp_mult_symbol"); set this to "*" to get mpoly-compatible output.

Function taylor() is a convenience wrapper for series().

Functions mvp_taylor_onevar(), mvp_taylor_allvars() and mvp_to_series() are low-level helper functions that are not intended for the user.

See Also

Examples

Run this code
trunc(as.mvp("1+x")^6,2)

trunc(as.mvp("1+x+y")^3,2)      # discards all terms with total power>2
trunc1(as.mvp("1+x+y")^3,x=2)   # terms like y^3 are treated as constants

trunc(as.mvp("1+x+y^2")^3,3)    # discards x^2y^2 term (total power=4>3)
truncall(as.mvp("1+x+y^2")^3,3) # retains  x^2y^2 term (all vars to power 2)

onevarpow(as.mvp("1+x+x*y^2  + z*y^2*x"),x=1,y=2)

(p2 <- rmvp(10))
series(p2,"a")

# Works well with pipes:

f <- function(n){as.mvp(sub('n',n,'1+x^n*y'))}
Reduce(`*`,lapply(1:6,f)) %>% series('y')
Reduce(`*`,lapply(1:6,f)) %>% series('x')


(p <- horner("x+y",1:4))
onevarpow(p,x=2)   # coefficient of x^2
onevarpow(p,x=3)   # coefficient of x^3


p %>% trunc(2)
p %>% trunc1(x=2)
(p %>% subs(x="x+dx") -p) %>% trunc1(dx=2)

# Nice example of Horner's method:
(p <- as.mvp("x + y + 3*x*y"))
trunc(horner(p,1:5)*(1-p)^2,4)  # should be 1


## Third order taylor expansion of f(x)=sin(x+y) for x=1.1, about x=1:
(sinxpy <- horner("x+y",c(0,1,0,-1/6,0,+1/120,0,-1/5040,0,1/362880)))  # sin(x+y)
dx <- as.mvp("dx")
t3 <- sinxpy  + aderiv(sinxpy,x=1)*dx + aderiv(sinxpy,x=2)*dx^2/2 + aderiv(sinxpy,x=3)*dx^3/6
t3 %<>% subs(x=1,dx=0.1)  # t3 = Taylor expansion of sin(y+1.1)
t3 %>% subs(y=0.3)  - sin(1.4)  # numeric; should be small

Run the code above in your browser using DataLab