Allows arithmetic operators to be used for spray calculations, such as addition, multiplication, division, integer powers, etc. Objects of class spray are interpreted as sparse multivariate polynomials.
# S3 method for spray
Ops(e1, e2 = NULL)
spray_negative(S)
spray_times_spray(S1,S2)
spray_times_scalar(S,x)
spray_plus_spray(S1,S2)
spray_plus_scalar(S,x)
spray_power_scalar(S,n)
spray_eq_spray(S1,S2)
Objects of class spray, here interpreted as sparse multivariate polynomials
Real valued scalar
Non-negative integer
The functions all return spray objects except “==
”, which
returns a logical.
The function Ops.spray()
passes unary and binary arithmetic
operators (“+
”, “-
”, “*
”,
“/
”,“==
”, and “^
”) to the
appropriate specialist function.
The most interesting operators are “*
” and
“+
” which execute multivariate polynomial multiplication
and addition respectively.
Testing for equality uses spray_eq_spray()
. Note that
spray_eq_spray(S1,S2)
is algebraically equivalent to
is.zero(S1-S2)
, but faster (FALSE
is returned as soon as
a mismatch is found).
# NOT RUN { M <- matrix(sample(0:3,21,replace=TRUE),ncol=3) a <- spray(M,sample(7)) b <- homog(3,4) # arithmetic operators mostly work as expected: a + 2*b a - a*b^2/4 a+b S1 <- spray(partitions::compositions(4,3)) S2 <- spray(diag(3)) # S2 = x+y+z stopifnot( (S1+S2)^3 == S1^3 + 3*S1^2*S2 + 3*S1*S2^2 + S2^3 ) # }