nk 1.0.0
C++ Numerical Computing Runtime
Loading...
Searching...
No Matches
specfun.hpp
Go to the documentation of this file.
1// src/builtin/include/nk/builtin/specfun.hpp
2//
3// Pure C++ Special mathematical functions (gamma, beta, bessel, erf, combinatorics).
4#pragma once
5
6#include <memory_resource>
7#include <nk/value/value.hpp>
8#include <nk/value/span.hpp>
9
10namespace nk::builtin {
11
14
15
22
23// ── Gamma & Beta Functions ──────────────────────────────────────────────────
24
30Value gamma(const Value &x, std::pmr::memory_resource *mr = nullptr);
31
37Value gammaln(const Value &x, std::pmr::memory_resource *mr = nullptr);
38
45Value gammainc(const Value &x, const Value &a, std::pmr::memory_resource *mr = nullptr);
46
53Value gammaincinv(const Value &y, const Value &a, std::pmr::memory_resource *mr = nullptr);
54
60Value psi(const Value &x, std::pmr::memory_resource *mr = nullptr);
61
68Value beta(const Value &z, const Value &w, std::pmr::memory_resource *mr = nullptr);
69
76Value betaln(const Value &z, const Value &w, std::pmr::memory_resource *mr = nullptr);
77
85Value betainc(const Value &x, const Value &z, const Value &w, std::pmr::memory_resource *mr = nullptr);
86
94Value betaincinv(const Value &y, const Value &z, const Value &w, std::pmr::memory_resource *mr = nullptr);
95
96// ── Error Functions ─────────────────────────────────────────────────────────
97
103Value erf(const Value &x, std::pmr::memory_resource *mr = nullptr);
104
110Value erfc(const Value &x, std::pmr::memory_resource *mr = nullptr);
111
117Value erfcx(const Value &x, std::pmr::memory_resource *mr = nullptr);
118
124Value erfinv(const Value &x, std::pmr::memory_resource *mr = nullptr);
125
131Value erfcinv(const Value &x, std::pmr::memory_resource *mr = nullptr);
132
133// ── Bessel & Airy Functions ─────────────────────────────────────────────────
134
141Value besselj(const Value &nu, const Value &z, std::pmr::memory_resource *mr = nullptr);
142
149Value bessely(const Value &nu, const Value &z, std::pmr::memory_resource *mr = nullptr);
150
157Value besseli(const Value &nu, const Value &z, std::pmr::memory_resource *mr = nullptr);
158
165Value besselk(const Value &nu, const Value &z, std::pmr::memory_resource *mr = nullptr);
166
174Value besselh(const Value &nu, int k, const Value &z, std::pmr::memory_resource *mr = nullptr);
175
177struct EllipKE {
180};
181
188
194Value airy(int k, const Value &z, std::pmr::memory_resource *mr = nullptr);
195
200Value airy(const Value &z, std::pmr::memory_resource *mr = nullptr);
201
206Value expint(const Value &x, std::pmr::memory_resource *mr = nullptr);
207
212EllipKE ellipke(const Value &m, std::pmr::memory_resource *mr = nullptr);
213
219EllipJ ellipj(const Value &u, const Value &m, std::pmr::memory_resource *mr = nullptr);
220
226Value legendre(int n, const Value &x, std::pmr::memory_resource *mr = nullptr);
227
228// ── Combinatorics & Number Theory ───────────────────────────────────────────
229
235Value factorial(const Value &n, std::pmr::memory_resource *mr = nullptr);
236
242Value primes(double n, std::pmr::memory_resource *mr = nullptr);
243
249Value primes(const Value &n, std::pmr::memory_resource *mr = nullptr);
250
256Value isprime(const Value &x, std::pmr::memory_resource *mr = nullptr);
257
263Value factor(double n, std::pmr::memory_resource *mr = nullptr);
264
269Value factor(const Value &n, std::pmr::memory_resource *mr = nullptr);
270
277Value nchoosek(double n, double k, std::pmr::memory_resource *mr = nullptr);
278
284Value nchoosekCombinations(const Value &v, double kd, std::pmr::memory_resource *mr = nullptr);
285
291Value nchoosek(const Value &v, int k, std::pmr::memory_resource *mr = nullptr);
292
298Value nchoosek(const Value &v, const Value &k, std::pmr::memory_resource *mr = nullptr);
299
305Value perms(const Value &v, std::pmr::memory_resource *mr = nullptr);
306
313Value gcd(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr);
314
321Value lcm(const Value &a, const Value &b, std::pmr::memory_resource *mr = nullptr);
322
328Value colperm(const Value &s, std::pmr::memory_resource *mr = nullptr);
329
335Value symrcm(const Value &s, std::pmr::memory_resource *mr = nullptr);
336
337
339} // namespace nk::builtin
Core MATLAB-compatible multidimensional array and scalar value type.
Definition value.hpp:61
Value perms(const Value &v, std::pmr::memory_resource *mr=nullptr)
All permutations of a vector elements.
Value gammaincinv(const Value &y, const Value &a, std::pmr::memory_resource *mr=nullptr)
Inverse incomplete gamma function.
Value factorial(const Value &n, std::pmr::memory_resource *mr=nullptr)
Factorial of non-negative integer elements (n!).
Value primes(double n, std::pmr::memory_resource *mr=nullptr)
Generates row vector of all prime numbers less than or equal to n (primes(n)).
Value besseli(const Value &nu, const Value &z, std::pmr::memory_resource *mr=nullptr)
Modified Bessel function of the first kind (I_ν(z)).
Value gcd(const Value &a, const Value &b, std::pmr::memory_resource *mr=nullptr)
Greatest common divisor of two integers or arrays (gcd(a, b)).
Value colperm(const Value &s, std::pmr::memory_resource *mr=nullptr)
Column permutation vector for sparse matrix bandwidth/fill-in reduction (colperm(s)).
Value betaln(const Value &z, const Value &w, std::pmr::memory_resource *mr=nullptr)
Natural logarithm of the beta function (ln B(z, w)).
Value erf(const Value &x, std::pmr::memory_resource *mr=nullptr)
Error function (erf(x) = 2/√π ∫_0^x e^(-t^2) dt).
EllipKE ellipke(const Value &m, std::pmr::memory_resource *mr=nullptr)
Complete elliptic integrals of the first and second kind ([K, E] = ellipke(m)).
Value besselh(const Value &nu, int k, const Value &z, std::pmr::memory_resource *mr=nullptr)
Bessel function of the third kind (Hankel function H_ν^(k)(z)).
Value expint(const Value &x, std::pmr::memory_resource *mr=nullptr)
Exponential integral function (E_1(x)).
Value erfcx(const Value &x, std::pmr::memory_resource *mr=nullptr)
Scaled complementary error function (erfcx(x) = exp(x^2) * erfc(x)).
Value betainc(const Value &x, const Value &z, const Value &w, std::pmr::memory_resource *mr=nullptr)
Incomplete beta function (I_x(z, w)).
Value besselk(const Value &nu, const Value &z, std::pmr::memory_resource *mr=nullptr)
Modified Bessel function of the second kind (K_ν(z)).
Value erfc(const Value &x, std::pmr::memory_resource *mr=nullptr)
Complementary error function (erfc(x) = 1 - erf(x)).
Value factor(double n, std::pmr::memory_resource *mr=nullptr)
Computes prime factors of positive integer (factor(n)).
Value besselj(const Value &nu, const Value &z, std::pmr::memory_resource *mr=nullptr)
Bessel function of the first kind (J_ν(z)).
Value erfinv(const Value &x, std::pmr::memory_resource *mr=nullptr)
Inverse error function (erfinv(y)).
Value erfcinv(const Value &x, std::pmr::memory_resource *mr=nullptr)
Inverse complementary error function (erfcinv(y)).
Value nchoosek(double n, double k, std::pmr::memory_resource *mr=nullptr)
Computes binomial coefficient n choose k (nchoosek(n, k)).
Value psi(const Value &x, std::pmr::memory_resource *mr=nullptr)
Digamma / polygamma function (ψ(x) = d/dx ln Γ(x)).
Value lcm(const Value &a, const Value &b, std::pmr::memory_resource *mr=nullptr)
Least common multiple of two integers or arrays (lcm(a, b)).
Value bessely(const Value &nu, const Value &z, std::pmr::memory_resource *mr=nullptr)
Bessel function of the second kind (Neumann function Y_ν(z)).
Value betaincinv(const Value &y, const Value &z, const Value &w, std::pmr::memory_resource *mr=nullptr)
Inverse incomplete beta function.
Value legendre(int n, const Value &x, std::pmr::memory_resource *mr=nullptr)
Associated Legendre functions (P_n^m(x)).
EllipJ ellipj(const Value &u, const Value &m, std::pmr::memory_resource *mr=nullptr)
Jacobi elliptic functions ([sn, cn, dn] = ellipj(u, m)).
Value airy(int k, const Value &z, std::pmr::memory_resource *mr=nullptr)
Airy function (Ai(z) or k-th derivative / Bi).
Value symrcm(const Value &s, std::pmr::memory_resource *mr=nullptr)
Symmetric reverse Cuthill-McKee ordering permutation vector (symrcm(s)).
Value isprime(const Value &x, std::pmr::memory_resource *mr=nullptr)
Tests if array elements are prime numbers (isprime(x)).
Value gammaln(const Value &x, std::pmr::memory_resource *mr=nullptr)
Logarithm of the absolute value of the gamma function (ln|Γ(x)|).
Value beta(const Value &z, const Value &w, std::pmr::memory_resource *mr=nullptr)
Beta function (B(z, w) = Γ(z)Γ(w) / Γ(z+w)).
Value gamma(const Value &x, std::pmr::memory_resource *mr=nullptr)
Complete gamma function (Γ(x)).
Value nchoosekCombinations(const Value &v, double kd, std::pmr::memory_resource *mr=nullptr)
Generates all combinations of vector elements taken k at a time (nchoosek(v, k)).
Value gammainc(const Value &x, const Value &a, std::pmr::memory_resource *mr=nullptr)
Incomplete gamma function (P(a, x)).
Jacobi elliptic functions ([sn, cn, dn] = ellipj(u, M)).
Definition specfun.hpp:183
Value sn
Jacobi elliptic sine function sn(u|M).
Definition specfun.hpp:184
Value dn
Jacobi delta amplitude function dn(u|M).
Definition specfun.hpp:186
Value cn
Jacobi elliptic cosine function cn(u|M).
Definition specfun.hpp:185
Complete elliptic integrals of the first and second kinds ([K, E] = ellipke(M)).
Definition specfun.hpp:177
Value E
Complete elliptic integral of the second kind.
Definition specfun.hpp:179
Value K
Complete elliptic integral of the first kind.
Definition specfun.hpp:178