spray (version 1.0-6)

# Ops.spray: Arithmetic Ops Group Methods for sprays

## Description

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.

## Usage

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

## Arguments

e1,e2,S,S1,S2

Objects of class spray, here interpreted as sparse multivariate polynomials

x

Real valued scalar

n

Non-negative integer

## Value

The functions all return spray objects except “`==`”, which returns a logical.

## Details

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).

`ooom`

## Examples

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

# }
```