# Ops.mcnode: Operations on mcnode Objects In mc2d: Tools for Two-Dimensional Monte-Carlo Simulations

## Description

This function alters the way operations are performed on mcnode objects for a better consistancy of the theory.

## Usage

 ```1 2``` ```## S3 method for class 'mcnode' Ops(e1, e2) ```

## Arguments

 `e1` An mcnode object, a vector or an array. `e2` An optionnal mcnode object, a vector or a matrix with at least one of both objects as an mcnode.

## Details

This method will be used for any of the Group `Ops` functions.

The rules are as following (illustrated with a + function and ignoring the nvariates dimension):

• 0 + 0 = 0;

• 0 + V = V: classical recycling of the scalar;

• 0 + U = U: classical recycling of the scalar;

• 0 + VU = VU: classical recycling of the scalar;

• V + V = V: if both of the same (nsv) dimension;

• V + U = VU: the U object will be recycled "by row". The V object will be recycled classically "by column";

• V + VU = VU: if the dimension of the V is (nsv) and the dimension of the VU is (nsv x nsu). The V object will be recycled classically "by column";

• U + U = U: if both of the same (nsu) dimension;

• U + VU = VU: if the dimension of the U is (nsu) and the dimension of the VU is (nsv x nsu). The U object will be recycled "by row";

• VU + VU = VU: if the dimension of the VU nodes is (nsu x nsv);

A vector or an array may be combined with an mcnode of size (nsv x nsu) if an mcnode of this dimension may be built from this vector/array using the mcdata function. See `mcdata` for the rules.

The outm attribute is transferred as following: each + each = each; none + other = other; other1 + other2 = other1. The outm attribute of the resulting node may be changed using the `outm` function.

For multivariate nodes, a recycling on the nvariates dimension is done if a (nsu x nsv x nvariates) node is combined with a (nsu x nsv x 1) node.

## Value

The results as a mcnode object.

`mcdata`, `mcstoc`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53``` ```oldvar <- ndvar() oldunc <- ndunc() ndvar(30) ndunc(20) ## Given x0 <- mcdata(3, type="0") xV <- mcdata(1:ndvar(), type="V") xU <- mcdata(1:ndunc(), type="U") xVU <- mcdata(1:(ndunc()*ndvar()), type="VU") x0M <- mcdata(c(5, 10), type="0", nvariates=2) xVM <- mcdata(1:(2*ndvar()), type="V", nvariates=2) xUM <- mcdata(1:(2*ndunc()), type="U", nvariates=2) xVUM <- mcdata(1:(2*(ndunc()*ndvar())), type="VU", nvariates=2) ## All possible combinations ## "0" -x0 x0 + 3 ## "V" -xV 3 + xV xV * (1:ndvar()) xV * x0 xV - xV ## "U" -xU xU + 3 (1:ndunc()) * xU xU * x0 xU - xU ## Watch out the resulting type xV + xU xU + xV ## "VU" -xVU 3 + xVU (1:(ndunc()*ndvar())) * xVU xVU + xV x0 + xVU xU + xVU xVU - xVU ## Some Multivariates x0M+3 xVM * (1:ndvar()) xVM - xV xUM - xU xVUM - xU ```