Skip to main content

Module germ

Module germ 

Source
Expand description

Germs at dt = 0: the hyperreals a loop of infinitely many infinitesimal steps leaves, known by the series of their expansion in dt with exact computable-real coefficients.

A Hyperreal is a rational function of dt; (1 + dt)^(1/dt), the state after ⌈1/dt⌉ Euler steps of x′ = x, is not. It is the germ of an analytic function at dt = 0, whose series e − (e/2)·dt + (11e/24)·dt² − … has computable coefficients, and its standard part is the first of them. A Germ holds such a value as the operations that built it — the series of a rational function, a flow, sums, products, reciprocals — and computes coefficients on demand, each once.

Flows. N steps of an affine update x ↦ A(dt)·x with A(0) = I, A(dt) = I + Σ_{k≥1} dt^k·A_k, and N = T/dt + δ, leave exp(N·log A(dt))·x₀. Writing L(dt) = log A(dt) = Σ_{k≥1} dt^k·L_k, the exponent is C_0 + Σ_{j≥1} dt^j·C_j with C_j = T·L_{j+1} + δ·L_j, and C_0 = T·A_1. The standard part is e^{T·A_1}·x₀ always. When the A_k commute, so do the C_j, and exp(Σ_{j≥1} dt^j·C_j) = Σ_m dt^m·E_m with E_0 = I and E_m = (1/m)·Σ_{k=1}^m k·C_k·E_{m−k}; every coefficient is then exact. When they do not, the coefficients past the standard part are refused by name rather than approximated.

Nonlinear flows. A flow of a polynomial differential equation is known to its standard part, the equation’s solution at T enclosed by validated integration; its higher orders are refused by name (Germ::standard). A solution that leaves every bound before T leaves a germ that is not limited and has only a sign (Germ::unlimited); the sum of it and a limited germ, and its product with one whose standard part is nonzero, are unlimited too.

Fractional orders. A germ’s orders are the multiples of 1/q for its ramification q: order k is the coefficient of dt^(k/q). A value of the real closure (Puiseux) is read from its branch on that branch’s own grid; two germs meet on the least grid both lie on, each refined to it.

Functions. exp, ln and the real n-th roots are germs of their arguments, each coefficient from the ones before it: with g = Σ g_k·t^k, t = dt^(1/q),

  • e = exp(g) for a limited g: e_0 = e^{g_0} and k·e_k = Σ_{j=1..k} j·g_j·e_{k−j};
  • l = ln(g) for an appreciable positive g: l_0 = ln(g_0) and l_k = (g_k − (1/k)·Σ_{j=1..k−1} j·l_j·g_{k−j}) / g_0;
  • w = ⁿ√g for g = c·t^v·(1 + …), refined until n divides v, c > 0 for an even n: w starts at ⁿ√c·t^(v/n) and w_{v/n+j} = (1/(j·c))·Σ_{i=1..j} ((1/n + 1)·i − j)·g_{v+i}·w_{v/n+j−i} (Miller’s recurrence for a power series raised to 1/n).

The exponential of an infinite value lies beyond every power of dt, and the logarithm of an infinitesimal or an infinite one carries ln(dt); neither is a germ, and both are refused by name.

Signs. A germ’s sign is the sign of its first nonzero coefficient. Coefficients compare exactly on the exact forms; a general one that cannot be told from zero within the budget, or a germ whose coefficients through dt^SIGN_ORDERS all vanish, is a loud error, never a guess.

Structs§

Flow
N steps of an affine update, the shared part of each component’s germ.
Germ
A germ at dt = 0. See the module documentation.

Enums§

GermError
Why a coefficient or a sign is not given.

Constants§

SIGN_ORDERS
How many orders of dt a sign or a standard part looks through before it is refused.