## Double factors

This page lists the built-in methods and operators for creating random variables of type **double.** For both static methods and operators, you can often pass in random variables as arguments e.g. `Variable<double>`

instead of **double**. For compactness, this is not shown in the syntax below.

These methods provide a convenient short alternative to using `Variable<T>.Factor`

and passing in the factor method, as described on this page.

#### Distribution Factors

A distribution factor creates a random variable from a parameterised distribution.

Distribution |
Syntax |
Description |
---|---|---|

Gaussian |
`Variable.GaussianFromMeanAndPrecision(double mean, double precision)` |
Creates a double random variable with a Gaussian distribution of the specified mean and precision (inverse variance). |

Gaussian |
`Variable.GaussianFromMeanAndVariance(double mean, double variance)` |
Creates a double random variable with a Gaussian distribution of the specified mean and variance. |

Gamma |
`Variable.GammaFromShapeAndScale(double shape, double scale)` |
Creates a positive double random variable with a Gamma distribution of the specified shape and scale. |

Gamma |
`Variable.GammaFromShapeAndRate(double shape, double rate)` |
Creates a positive double random variable with a Gamma distribution of the specified shape and rate. |

Gamma |
`Variable.GammaFromMeanAndVariance(double mean, double variance)` |
Creates a positive double random variable with a Gamma distribution of the specified mean and variance. |

Beta |
`Variable.Beta(double trueCount, double falseCount)` |
Creates a double random variable with a Beta distribution with the specified counts. |

Beta |
`Variable.BetaFromMeanAndVariance(double mean, double variance)` |
Creates a double random variable with a Beta distribution of the specified mean and variance. |

Truncated Gaussian |
`Variable.TruncatedGaussian(double mean, double variance, double lowerBound, double upperBound)` |
Creates a double random variable with a TruncatedGaussian distribution of the specified mean, variance, lower bound, and upper bound. |

Truncated Gamma |
`Variable.TruncatedGamma(double shape, double rate, double lowerBound, double upperBound)` |
Creates a double random variable with a TruncatedGamma distribution of the specified shape, rate, lower bound, and upper bound. |

#### Arithmetic and Mathematical Operations

Arithmetic operations are supported via operator overloads or static methods.

Operation |
Syntax |
Description |
---|---|---|

Plus |
a + b | Creates a double random variable equal to the sum of and `a` `b` . |

Minus |
a - b | Creates a double random variable equal to the difference of and `a` `b` . |

Negative |
-a | Creates a double random variable equal to the negative of `a` . |

Times |
a * b | Creates a double random variable equal to the product of and `a` `b` . |

Divide |
a / b | Creates a double random variable equal to the ratio of to `a` `b` . |

Power |
a ^ b | Creates a doublerandom variable equal to raised to the power `a` `b` . |

Sum of elements |
`Variable.Sum(double[] array)` `Variable.Sum(IList<double> array)` |
Creates a double random variable equal to the sum of the elements of the array. |

Exp |
`Variable.Exp(double exponent)` |
Creates a double random variable which takes e to the power of exponent. |

Log |
`Variable.Exp(double x)` |
Creates a double random variable equal to the natural log of `x` . |

Logistic |
`Variable.Logistic(double x)` |
Creates a double random variable equal to `1/(1+exp(-x))` . |

Max |
`Variable.Max(double a, double b)` |
Creates a double random variable equal to the maximum of and `a` `b` . |

Min |
`Variable.Min(double a, double b)` |
Creates a double random variable equal to the minimum of and `a` `b` . |

Conditional sum of elements |
`Variable.SumWhere(bool[] a, Vector b)` |
Creates a double random variable equal to the sum of the elements of where `b` is true.`a` |

Inner product |
`Variable.InnerProduct(Vector a, Vector b)` `Variable.InnerProduct(double[] a, Vector b)` `Variable.InnerProduct(double[] a, double[] b)` |
Creates a double random variable equal to the inner product of vectors and `a` .`b` |

#### Miscellaneous Operations

Operation |
Syntax |
Description |
---|---|---|

FunctionEvaluate |
`Variable.FunctionEvaluate(IFunction func, Vector x)` |
Evaluate a random function at a point. Used to construct Gaussian Process models like this one. |

GetItem |
`Variable.GetItem(Vector source, int index)` |
Extract an element of a random vector. |

Double |
`Variable.Double(int integer)` |
Convert an integer to double. |