{{ message }}
/ maths Public

Maths includes mathematical functions not defined in the standard Go math package.

# theriault/maths

Switch branches/tags
Nothing to show

## Latest commit

a1e87c8

## Files

Failed to load latest commit information.
Type
Name
Commit time
Jul 31, 2022
Jul 31, 2022
May 21, 2022
Aug 15, 2022
Jul 31, 2022
Aug 15, 2022
May 11, 2022
Aug 15, 2022
May 11, 2022
May 16, 2022

# Maths

maths includes mathematical functions not defined in the standard Go math package.

## Installation

go get github.com/theriault/maths

## What's Included

### Combinatorics

import "github.com/theriault/maths/combinatorics"

#### Factorial

$\displaystyle n! \; = \; \prod_{i=1}^{n} i$

combinatorics.Factorial(10) // will return uint64(3628800)

#### Falling Factorial

$\displaystyle x^{\underline{n}} \; = \; \prod _{k=1}^{n}(x-k+1)$

combinatorics.FallingFactorial(8, 3) // will return uint64(336)
combinatorics.PartialPermutations(8, 3) // will return uint64(336)

#### Rising Factorial

$\displaystyle x^{\overline{n}} \; = \; \prod _{k=1}^{n}(x+k-1)$

combinatorics.RisingFactorial(2, 3) // will return uint64(24)

### Number Theory

import "github.com/theriault/maths/numbertheory"

#### Aliquot Sum

$\displaystyle s(n) = \sigma_1(n) - n = \sum_{\substack{i = 1 \\ i | n}}^{n-1} i$

numbertheory.AliquotSum(60) // will return uint64(108)

#### Coprime

$\displaystyle f(a,b) = \begin{cases}\text{true} &amp;\text{if}\ \gcd(a,b) = 1 \\ \text{false} &amp;\text{else} \end{cases}$

numbertheory.Coprime(3*5*7, 11*13*17) // will return true

#### Digit Sum

$\displaystyle f_b(n) = \sum_{i=0}^{\lfloor \log_b{n} \rfloor} \frac{n \bmod b^{i+1} - n \bmod b^i}{b^i}$

numbertheory.DigitSum(9045, 10) // will return int(18)

#### Digital Root

$\displaystyle f_{b}(n)={\begin{cases} 0 &amp;\text{if}\ n=0\\ n\ \bmod (b-1)&amp;{\text{if}}\ n\not \equiv 0{\pmod {b-1}} \\ b-1 &amp;\text{else} \end{cases}}$

numbertheory.DigitalRoot(9045, 10) // will return int(9)

#### Divisors function

$\displaystyle \sigma_z(n) = \sum_{\substack{i = 1 \\ i | n}}^{n} i^{z}$

##### Number-of-divisors (z = 0)
numbertheory.NumberOfDivisors(48) // will return uint64(10)
##### Sum-of-divisors (z = 1)
numbertheory.SumOfDivisors(48) // will return uint64(124)

#### Greatest Common Divisor

numbertheory.GCD(48,18) // will return int(6)

#### Least Common Multiple

numbertheory.LCM(48,18) // will return int(144)

#### MĂ¶bius function

$\displaystyle \mu(n) = \begin{cases} +1 &amp; n \text{ is square-free with even number of prime factors} \\ -1 &amp; n \text{ is square-free with odd number of prime factors} \\ 0 &amp; n \text{ is not square-free} \end{cases}$

numbertheory.Mobius(70) // will return int8(-1)

#### Politeness

$\displaystyle p(n) = \left( \prod_{\substack{p |n \\ p \neq 2}}^{n} v_p(n) + 1\right)-1$

where $v_p(n)$ is the $p$-adic order

numbertheory.Politeness(32) // will return uint64(0)

#### Polygonal Numbers

$\displaystyle p(s, n) = \frac{(s-2)n^2-(s-4)n}{2}$

numbertheory.PolygonalNumber(3, 4) // will return uint64(10)

Finding $n$:

$\displaystyle p(s, x) = \frac{\sqrt{8(s-2)x+(s-4)^2}+(s-4)}{2(s-2)}$

numbertheory.PolygonalRoot(3, 10) // will return float64(4)

Finding $s$:

$\displaystyle p(n, x) = 2+\frac{2}{n} \cdot \frac{x-n}{n-1}$

numbertheory.PolygonalSides(4, 10) // will return float64(3)

#### Prime Factorization

numbertheory.PrimeFactorization(184756) // will return []uint64{2, 2, 11, 13, 17, 19}

#### Primorial

$\displaystyle n\# = \prod_{\substack{i=2 \\ i \in \mathbb{P}}}^{n} i$

numbertheory.Primorial(30) // will return uint64(6469693230)

$\displaystyle rad(n) = \prod_{p | n}p$

numbertheory.Radical(60) // will return uint64(30)

#### Totient

##### Euler's Totient

$\displaystyle \varphi(n) = n \prod_{p | n} \left(1 - \frac{1}{p}\right)$

numbertheory.Totient(68) // will return uint64(32)
##### Jordan's Totient

$\displaystyle J_k(n) = n^k \prod_{p | n} \left(1 - \frac{1}{p^k}\right)$

numbertheory.TotientK(60, 2) // will return uint64(2304)

### Statistics

import "github.com/theriault/maths/statistics"

#### Average/Mean

##### Generalized Mean
statistics.GeneralizedMean([]float64{1, 1000}, 2) // will return float64(707.1071347398497)
statistics.RootMeanSquare(1, 1000)  // will return float64(707.1071347398497)
##### Arithmetic Mean

$\displaystyle \bar{x} = \frac{1}{n}\left (\sum_{i=1}^n{x_i}\right ) = \frac{x_1+x_2+\cdots +x_n}{n}$

statistics.Mean(1, 1000) // will return float64(500.5)
##### Geometric Mean

$\displaystyle \bar{x} = \left( \prod_{i=1}^n{x_i} \right )^\frac{1}{n} = \exp{\left( {\frac{1}{n}\sum\limits_{i=1}^{n}\ln x_i} \right)} = \left(x_1 x_2 \cdots x_n \right)^\frac{1}{n}$

statistics.GeometricMean(1, 1000) // will return float64(31.62...)
##### Harmonic Mean

$\displaystyle \bar{x} = n \left ( \sum_{i=1}^n \frac{1}{x_i} \right ) ^{-1}$

statistics.HarmonicMean(1, 1000) // will return float64(1.99...)

#### Central Moment

statistics.CentralMoment([]uint8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, 2) // returns float64(8.25)

#### Interquartile Range (IQR)

statistics.InterquartileRange(3, 6, 7, 8, 8, 10, 13, 15, 16, 20) // returns float64(7.25)

#### Kurtosis

##### Population
statistics.Kurtosis(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // returns float64(1.5133)
##### Sample
statistics.SampleKurtosis(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // returns float64(2.522167)
##### Excess Sample Kurtosis
statistics.ExcessSampleKurtosis([]uint8{8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8}) // returns float64(-1.6445)

#### Logistic Function

$\displaystyle f(x) = \frac{L}{1+e^{-k(x-x_0)}}$

• $L$ - curve's max value
• $x_0$ - sigmoid's midpoint
• $k$ - logistic growth rate
maxValue := 1.0
midpoint := 0.0
growthRate := 1.0
fx := statistics.LogisticFunction(maxValue, midpoint, growthRate) // will return func (x float64) float64

#### Mode

statistics.Mode(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // will return []float64{8}

#### Moving Averages

##### Simple Moving Average

\displaystyle {\begin{aligned}{\textit {SMA}}{k}&={\frac{p{n-k+1}+p_{n-k+2}\cdots +p_{n}}{k}}\&={\frac{1}{k}}\sum_{i=n-k+1}^np_i\end{aligned}}

statistics.SimpleMovingAverage(3, 1, 2, 3, 4, 5, 6, 7, 8, 9) // will return []float64{2, 3, 4, 5, 6, 7, 8}

#### Power Sum

$\displaystyle S_p(x_1, x_2, ..., x_n) = \sum_{i=1}^{n} x_i^p$

statistics.PowerSum([]float64{2, 3, 4}, 2) // will return float64(29)

#### Power Sum Around

$\displaystyle S_{p,y}(x_1, x_2, ..., x_n) = \sum_{i=1}^{n} (x_i - y)^p$

statistics.PowerSumAround([]float64{2, 3, 4}, 3, 2) // will return float64(29)

#### Quantiles (Median/Tertile/Quartile/.../Percentile)

n := []float64{3, 6, 7, 8, 8, 10, 13, 15, 16, 20}
statistics.Quantile(n, 2) // median: will return []float64{9}
statistics.Quantile(n, 3) // tertiles: will return []float64{8, 13}
statistics.Quantile(n, 4) // quartiles: will return []float64{7.25, 9, 14.5}
statistics.Quantile(n, 100) // percentile: will return []float64{3.27, 3.54, 3.81, 4.08, ...95 other values...}

// aliases
statistics.Tertile(n) // will return []float64{8, 13}
statistics.Quartile(n) // will return []float64{7.25, 9, 14.5}
statistics.Percentile(n) // will return []float64{3.27, 3.54, 3.81, 4.08, ...95 other values...}

Median (Source | Tests | Wikipedia)

n := []float64{3, 6, 7, 8, 8, 10, 13, 15, 16, 20}
statistics.Median(n) // will return float64(9)

#### Sample Extrema (Max/Min/Range)

##### Sample Maximum / Largest Observation
n := []uint8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
statistics.Max(n...) // will return uint8(10)
##### Sample Minimum / Smallest Observation
n := []uint8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
statistics.Min(n...) // will return uint8(1)
##### Range
n := []uint8{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
statistics.Range(n...) // will return uint8(9)

#### Skewness

##### Population
statistics.Skewness(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // returns float64(-0.274241)
##### Sample
statistics.SampleSkewness(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // returns float64(-0.319584)

#### Standard Deviation

##### Population

$\displaystyle \sigma = \sqrt{\left(\frac{1}{N} \sum_{i=1}^{N} x_{i}^{2} \right) - \mu^2}$

statistics.StandardDeviation(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // will return []float64{8}
##### Sample

$\displaystyle s = \sqrt{\sigma^2 \frac{N}{N-1}}$

statistics.SampleStandardDeviation(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // will return []float64{8}

#### Standard Error

##### Population

$\displaystyle \sigma_{\bar{x}} = \frac{\sigma}{\sqrt{n}}$

statistics.StandardError(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // will return []float64{8}
##### Sample

$\displaystyle s_{\bar{x}} = \frac{s}{\sqrt{n}}$

statistics.SampleStandardError(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // will return []float64{8}

#### Sum/Summation

$\displaystyle S(x_1, x_2, ..., x_n) = \sum_{i=1}^{n} x_i$

statistics.Sum(1.1, 1.2, 1.3) // will return float64(3.6)

#### Variance

##### Population

$\displaystyle \sigma^2 = \left(\frac{1}{N} \sum_{i=1}^{N} x_{i}^{2} \right) - \mu^2$

statistics.Variance(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // will return []float64{8}
##### Sample

$\displaystyle s^2 = \sigma^2 \frac{N}{N-1}$

statistics.SampleVariance(8, 3, 6, 2, 7, 1, 8, 3, 7, 4, 8) // will return []float64{8}

#### Weighted Average/Mean

##### Weighted Generalized Mean
X := []uint8{8, 7, 3, 2, 6, 11, 6, 7, 2, 1, 7}
W := []uint8{1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2}
mean, err := statistics.WeightedGeneralizedMean(X, Y, 1) // will return float64(5.5)
##### Weighted Arithmetic Mean
X := []uint8{8, 7, 3, 2, 6, 11, 6, 7, 2, 1, 7}
W := []uint8{1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2}
mean, err := statistics.WeightedMean(X, Y) // will return float64(5.5)
##### Weighted Geometric Mean
X := []uint8{8, 7, 3, 2, 6, 11, 6, 7, 2, 1, 7}
W := []uint8{1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2}
mean, err := statistics.WeightedGeometricMean(X, Y) // will return float64(4.6)
##### Weighted Harmonic Mean
X := []uint8{8, 7, 3, 2, 6, 11, 6, 7, 2, 1, 7}
W := []uint8{1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2}
mean, err := statistics.WeightedHarmonicMean(X, Y) // will return float64(5.8)

## Complexity

See docs/complexity.md for information on time complexity and space complexity.

Maths includes mathematical functions not defined in the standard Go math package.

v0.0.8 Latest
Jul 31, 2022

## Packages 0

No packages published