This repository contains a function that utilises the Dirichlet distribution method to generate points on the (n−1)
-dimensional simplex. The randomSimplexMatrix.m
generates m x n
matrices where each row is a random sample from the (n−1)
-dimensional simplex, i.e., it produces vectors where each element is a non-negative number and the sum of all elements in each vector is 1.
-
Generation of K Unit-Exponential Distributed Random Draws:
- In each row (sample), the function generates K uniform random numbers
y_i
from the open interval(0,1]
. - These are transformed to unit-exponential distributed random numbers
x_i = -log(y_i)
.
- In each row (sample), the function generates K uniform random numbers
-
Normalization:
- Compute the sum
S
of allx_i
values.
- Compute the sum
-
Calculation of Simplex Coordinates:
- The coordinates
t_1, ..., t_K
of the final point on the unit simplex are computed ast_i = x_i / S
.
- The coordinates
-
Output:
- Returns a matrix, where each row is a vector on the
(n-1)
-dimensional simplex.
- Returns a matrix, where each row is a vector on the
-
Polynomial Stability/Stability of discrete-time control systems:
Use simplex sampling to generate coefficients for polynomials and analyse their stability by checking if all roots lie within the unit circle.
-
Lyapunov Functions:
Construct Lyapunov functions with randomly sampled coefficients to study the stability of equilibrium points in dynamical systems.
-
Parameter Space Exploration:
Investigate the behavior of dynamical systems under different parameter regimes by sampling parameters from a simplex. Identify bifurcation points where system behavior changes qualitatively.
-
Nonlinear Dynamics:
Model/simulate nonlinear systems to study chaos, where initial conditions or parameters are sampled from a simplex.
-
simplexSpace.m
Demonstrates various plots and visualisations of simplex sampling.
-
MultivariateND.m
Showcases an application of simplex sampling for sampling from a multivariate normal distribution.
-
VoronoiDiagram.m
Visualise the Voronoi diagram of random points on a 2-dimensional simplex, divides regions based on proximity.
n = 100; % Number of columns (dimensionality of simplex)
m = 1500; % Number of rows (number of samples)
y = randomSimplexMatrix(n, m);
disp('Generated simplex matrix:');
disp(y);