uiua-math

uiua-math

Constants

ε constant

Literal value0.00…02220446049250313

Floating point epsilon

Monadic functions

Mean function

|1

Arithmetic mean

Source code
Mean÷/+

GMean function

|1

Geometric mean

Source code
GMean÷:1/×

HMean function

|1

Harmonic mean

Source code
HMean÷/+÷:1

QMean function

|1

Quadratic mean

Source code
QMean÷/+°

Median function

|1

Median
TODO: O(n) median algorithm?

Source code
Median÷2/+÷2-1

Var function

|1

Variance

Source code
Var-°÷/+°

Stdev function

|1

Standard deviation

Source code
StdevVar

MDet function

|1

Matrix Determinant

Source code
MDetGaussEliminate‼(¯/|×)0 1

Mgje function

|1

Perform Gauss-Jordan elimination

Source code
MgjeGaussEliminate‼(|)("Elimination cannot be completed"0)

MInv function

|1

Matrix Inverse

Source code
MInv((÷2) Mgje("Matrix has no inverse"0) :=.°)

MCof function

|1

Matrix Cofactors

Source code
MCof¯.2°MSquarify(MDet MSquarify¤¬°)¤0°=.

Fact function

|1

Pervasive factorial

Source code
Fact/×°+10

Gamma function

|1

Gamma function
Γ(z)

Source code
Gamma(
-1/2 (
-1
# From https://en.wikipedia.org/wiki/Lanczos_approximation
°[
0.9999999999999999
1975.3739023578853
¯4397.382392792243
3462.6328459862716
¯1156.9851431631168
154.53815050252774
¯6.253671612368916
0.034642762454736804
¯7.477617197444297e-7
6.304125382185226e-8
¯2.7405717035683877e-8
4.048694881756761e-9
]
/+÷1+¤:)
××× τ ¯e + 8 # g
)

Erf function

|1

Error function

Source code
Erf(
÷:1+1×0.3275911 (:e¯×.) ±
:[1.061405429 ¯1.453152027 1.421413741
¯0.284496736 0.254829592
]:0
׬×(×+)¤
)

Perms function

|1Indices?N

Permutation indices of N items

Source code
Perms(+1):¤¤°

PSet function

|1

Powerset of a list

Source code
PSet:2¤

RPFFT function

|1

Rank-polymorphic fast fourier transform

Source code
RPFFT((fft).|°(fft).)

Dyadic functions

Dot function

|2

Dot product

Source code
Dot/+×

Cross function

|2

Cross product

Source code
Cross2-(×2).

Mmp function

|2?AB

Matrix product


Computes AB

Source code
Mmp(Dot:|Dot: MInv)

Mvp function

|2?MV

Matrix-vector product


Computes MV where V is represented as a 1D list of numbers

Source code
Mvp(Dot|DotMInv)

Mpow function

|2?PM

Matrix power

Source code
Mpow(Dot,):=.,

Qqp function

|2?PQ

Quaternion product


Computes PQ for quaternion arrays P and Q.


Semi-pervasive; the last axis of the inputs must be of length 4,
and will be interpreted as the input quaternions' real, i, j, and k.


# Computes (1+2i+3j+4k)(1+3i+5j+7k) and (2+4i+6j+8k)(5+6i+7j+8k)
Qqp [1_2_3_4 2_4_6_8] [1_3_5_7 5_6_7_8]
## ╭─
## ╷ ¯48 6 6 12
## ¯120 24 60 48
## ╯
Source code
Qqp/+-1×±QqpMask×°

RQuat function

|2?θU

Create 3D rotation quaternions.


Expects an angle array θ and a unit vector axis array U.


Semi-pervasive; the unit vector array must have one extra trailing
axis compared to the angle array, and that axis must be length 3.


For each angle-vector pair, computes cos(θ/2) + Usin(θ/2).


# Creates two rotation quaternions:
# - η radians about 0_0_1
# - π radians about 3/5_4/5_0
RQuat η_π [0_0_1 3/5_4/5_0]

To use rotation quaternions created by RQuat to rotate 3D
vectors, see QRot.

Source code
RQuat°×:°÷2

QRot function

|2?QV

Rotate a 3D vector array using a quaternion array.


To create rotation quaternions to use with QRot, see RQuat.


Expects a quaternion array Q and a 3D vector array V.


Semi-pervasive; the input arrays should have matching shapes aside
from the final axis, which should be of lengths 4 and 3 respectively.


For each quaternion-vector pair, computes Q * V * Q'.


RQuat η 0_0_1        # Create a rotation by η radians about 0_0_1
QRot ¤:[3_2_0 1_3_2] # Use the quaternion to rotate 3_2_0 and 1_3_2

QRot can be used with ⍜ to undo the rotations afterward.

Source code
QRot(QRotImpl|QRotImpl(1°)¯)

GCD function

|2

Greatest common divisor


Ignores sign

Source code
GCD±

LCM function

|2

Least common multiple


Ignores sign

Source code
LCM÷GCD×

Base function

|2

Encode an array of numbers into digits of a given base


Analogous to for base 2; the least significant digit is first.


Base allows multiple bases as input.


# Encodes 6 in base 2, 7 in base 3, 8 in base 4, and 9 in base 5.
Base [2_3 4_5] [6_7 8_9]
## ╭─
## ╷ 0 1 1
## ╷ 1 2 0
##
## 0 2 0
## 4 1 0
## ╯

You can use ⌝Base to decode from a base/bases.


# Decodes 6 in base 2, 7 in base 3, 8 in base 4, and 9 in base 5.
⌝Base [2_3 4_5] [[0_1_1 1_2_0] [0_2_0 4_1_0]]
## ╭─
## ╷ 6 7
## 8 9
## ╯
Source code
Base(
(¤÷)¤/+1[]
| /+פ,°)

ModInv function

|2?NM

Inverse of N modulo M (M if nonexistent)

Source code
ModInv1:×,

ModOrd function

|2?NM

Multiplicative order of N modulo M

Source code
ModOrd1=1:,

Binom function

|2?KN

Binomial coefficient aka N choose K

Source code
Binom/×÷+1-

CFrac function

|2?NX

Convert a number X to a continued fraction to N terms.


Use °CFrac to convert to a number from a continued fraction.

Source code
CFrac([(÷1)]|/(+÷:1))

BoxMuller function

|2.2

Box-Muller transform


Converts uniformly distributed pairs of input values to
standard normally distributed pairs of output values

Source code
BoxMuller×°×τ:ׯ2e¬

Gaussian function

|2?SizeStandardDeviation

Generate a 2 dimensional square Gaussian kernel

Source code
Gaussian÷/+:e¯÷2°÷:.-÷2-1

GeomPmf function

|2?pX

Geometric distribution


Probability of X failures before the first success of repeated trials with success probability p

Source code
GeomPmf×𝄈¬

GeomCmf function

|2?pX

Cumulative geometric distribution


Probability of X or fewer failures before the first success of repeated trials with success probability p

Source code
GeomCmf¬𝄈(+1)

PoissonPmf function

|2?λX

Poisson distribution


Probability of X occurrences of an unlikely event over many trials with expected value λ

Source code
PoissonPmf÷×(Fact|𝄈|e¯)

PoissonCmf function

|2?λX

Cumulative Poisson distribution


Probability of X or fewer occurrences of an unlikely event over many trials with expected value λ

Source code
PoissonCmf/+PoissonPmf¤(+1)

FFTConvolve function

|2

Rank-polymorphic convolution using fast fourier transform

Source code
FFTConvolveR=0type(
0:-1+,, # Pad to size of final array
×/×RPFFT× # Multidimensional FFT, multiply, and normalize
)

Triadic functions

DistRand function

|3Indices?DistributionShapeSeed

Seeded random indices from a distribution array


Given a seed, a shape, and a probability distribution array
of any rank containing numbers that sum to 1, DistRand returns
an array of deep indices into the distribution arrays, chosen
randomly weighted by the distribution. The generated random
indices will fill the shape given to the function. If the
distribution array is rank 1, the output will have the shape
given. If the distribution array is rank >1, the output will
have a shape equal to the shape given suffixed with the rank of
the distribution array.


# Generate random indices in the shape 2_3 with a seed of 8
DistRand [0.1 0.4 0.3 0.2] 2_3 8
## ╭─
## ╷ 1 2 3
## 2 1 2
## ╯
Source code
DistRand(>):¤gen\+

BinomPmf function

|3?pnX

Binomial distribution


Probability that n Bernoulli trials each with success probability p will amount to X successes

Source code
BinomPmf××(>||-¬) :

BinomCmf function

|3?pnX

Cumulative binomial distribution


Probability that n Bernoulli trials each with success probability p will amount to X or fewer successes


NOTE: This function only accepts scalars for X. Use each or rows if multiple X values are desired

Source code
BinomCmf/+BinomPmf¤(+1)

NormalPdf function

|3?σμX

Normal distribution


Probability density of a gaussian/bell curve with mean μ and standard deviation σ

Source code
NormalPdf÷(×τ|e÷2¯°÷-)

NormalCdf function

|3?σμX

Cumulative normal distribution


Probability that a normally distributed random variable with mean μ and standard deviation σ is less than X

Source code
NormalCdf÷2+1Erf÷×2-

Quad function

|3?ABC

Po-Shen quadratic solver


Returns roots as a list


Outputs complex-typed numbers only if the roots are complex

Source code
QuadR0:-+:±-:°:0¯÷2÷: