lumix.linearization.functions.LXNonLinearFunctions¶
- class lumix.linearization.functions.LXNonLinearFunctions[source]¶
Pre-built approximations for common nonlinear functions.
All functions use piecewise-linear approximation with adaptive breakpoint generation for improved accuracy.
Example
# Create linearizer linearizer = LXPiecewiseLinearizer(config)
# Approximate exponential growth growth = LXNonLinearFunctions.exp(time, linearizer)
# Logarithmic decay decay = LXNonLinearFunctions.log(age, linearizer, base=10)
- __init__()¶
Methods
__init__()cos(var, linearizer[, segments])Cosine function: cos(x)
custom(var, func, linearizer[, segments, ...])Custom user-defined function.
exp(var, linearizer[, segments])Exponential function: e^x
log(var, linearizer[, base, segments])Logarithm: log_base(x)
power(var, exponent, linearizer[, segments])Power function: x^n
sigmoid(var, linearizer[, segments])Sigmoid function: 1 / (1 + e^(-x))
sin(var, linearizer[, segments])Sine function: sin(x)
sqrt(var, linearizer[, segments])Square root: √x
tan(var, linearizer[, segments])Tangent function: tan(x)
- static exp(var, linearizer, segments=30)[source]¶
Exponential function: e^x
- Parameters:
var (
LXVariable) – Input variablelinearizer (
LXPiecewiseLinearizer) – Piecewise linearizer instancesegments (
int) – Number of segments (default: 30 for good accuracy)
- Return type:
- Returns:
Output variable representing exp(var)
Example
# Population growth model population = LXNonLinearFunctions.exp(time, linearizer)
# Compound interest future_value = principal * LXNonLinearFunctions.exp(rate * time, linearizer)
- static log(var, linearizer, base=2.718281828459045, segments=30)[source]¶
Logarithm: log_base(x)
- Parameters:
var (
LXVariable) – Input variable (must be positive)linearizer (
LXPiecewiseLinearizer) – Piecewise linearizer instancebase (
float) – Logarithm base (default: e for natural log)segments (
int) – Number of segments
- Return type:
- Returns:
Output variable representing log(var)
Example
# Natural logarithm ln_demand = LXNonLinearFunctions.log(demand, linearizer)
# Base-10 logarithm log10_quantity = LXNonLinearFunctions.log(quantity, linearizer, base=10)
# Information entropy entropy = -probability * LXNonLinearFunctions.log(probability, linearizer, base=2)
- static sqrt(var, linearizer, segments=20)[source]¶
Square root: √x
- Parameters:
var (
LXVariable) – Input variable (must be non-negative)linearizer (
LXPiecewiseLinearizer) – Piecewise linearizer instancesegments (
int) – Number of segments
- Return type:
- Returns:
Output variable representing sqrt(var)
Example
# Standard deviation std_dev = LXNonLinearFunctions.sqrt(variance, linearizer)
# Euclidean distance (after squaring) distance = LXNonLinearFunctions.sqrt(x_squared + y_squared, linearizer)
# Flow velocity in pipes velocity = LXNonLinearFunctions.sqrt(pressure_drop, linearizer)
- static power(var, exponent, linearizer, segments=25)[source]¶
Power function: x^n
- Parameters:
var (
LXVariable) – Input variableexponent (
float) – Power to raise variable tolinearizer (
LXPiecewiseLinearizer) – Piecewise linearizer instancesegments (
int) – Number of segments
- Return type:
- Returns:
Output variable representing var^exponent
Example
# Cubic cost function cubic_cost = LXNonLinearFunctions.power(production, 3, linearizer)
# Quadratic relationship area = LXNonLinearFunctions.power(radius, 2, linearizer)
# Fractional power (e.g., Cobb-Douglas) output = LXNonLinearFunctions.power(capital, 0.3, linearizer)
- static sigmoid(var, linearizer, segments=40)[source]¶
Sigmoid function: 1 / (1 + e^(-x))
Useful for modeling probabilities, S-curves, saturation effects.
- Parameters:
var (
LXVariable) – Input variablelinearizer (
LXPiecewiseLinearizer) – Piecewise linearizer instancesegments (
int) – Number of segments (higher for sharper transition)
- Return type:
- Returns:
Output variable representing sigmoid(var) ∈ [0, 1]
Example
# Probability of success probability = LXNonLinearFunctions.sigmoid(score, linearizer)
# Market saturation market_share = capacity * LXNonLinearFunctions.sigmoid(time, linearizer)
# Learning curve efficiency = LXNonLinearFunctions.sigmoid(experience, linearizer)
- static sin(var, linearizer, segments=50)[source]¶
Sine function: sin(x)
Useful for seasonal patterns, cyclical behavior.
- Parameters:
var (
LXVariable) – Input variable (typically in radians)linearizer (
LXPiecewiseLinearizer) – Piecewise linearizer instancesegments (
int) – Number of segments
- Return type:
- Returns:
Output variable representing sin(var) ∈ [-1, 1]
Example
# Seasonal demand pattern (annual cycle) import math day_angle = day_of_year * 2 * math.pi / 365 seasonal_factor = LXNonLinearFunctions.sin(day_angle, linearizer)
# Daily temperature variation hour_angle = hour * 2 * math.pi / 24 temp_variation = LXNonLinearFunctions.sin(hour_angle, linearizer)
- static cos(var, linearizer, segments=50)[source]¶
Cosine function: cos(x)
Similar to sine but phase-shifted by π/2.
- Parameters:
var (
LXVariable) – Input variable (typically in radians)linearizer (
LXPiecewiseLinearizer) – Piecewise linearizer instancesegments (
int) – Number of segments
- Return type:
- Returns:
Output variable representing cos(var) ∈ [-1, 1]
Example
# Phase-shifted seasonal pattern import math day_angle = day_of_year * 2 * math.pi / 365 seasonal_factor = LXNonLinearFunctions.cos(day_angle, linearizer)
# Circular motion x-coordinate x_pos = radius * LXNonLinearFunctions.cos(angle, linearizer)
- static tan(var, linearizer, segments=40)[source]¶
Tangent function: tan(x)
Warning: Has discontinuities at x = π/2 + nπ. Ensure domain avoids these.
- Parameters:
var (
LXVariable) – Input variable (in radians, avoid discontinuities)linearizer (
LXPiecewiseLinearizer) – Piecewise linearizer instancesegments (
int) – Number of segments
- Return type:
- Returns:
Output variable representing tan(var)
Example
# Slope calculation slope = LXNonLinearFunctions.tan(angle, linearizer)
- static custom(var, func, linearizer, segments=30, adaptive=True)[source]¶
Custom user-defined function.
Allows approximation of any arbitrary function.
- Parameters:
var (
LXVariable) – Input variablefunc (
Callable[[float],float]) – Custom function to approximatelinearizer (
LXPiecewiseLinearizer) – Piecewise linearizer instancesegments (
int) – Number of segmentsadaptive (
bool) – Use adaptive breakpoints
- Return type:
- Returns:
Output variable representing func(var)
Example:
# Custom discount curve def discount_curve(q): if q < 100: return 1.0 # No discount elif q < 1000: return 0.9 # 10% discount else: return 0.8 # 20% discount discount = LXNonLinearFunctions.custom( quantity, discount_curve, linearizer, segments=50 ) # Piecewise quadratic def piecewise_quad(x): return x**2 if x < 10 else 100 + 20*(x-10) cost = LXNonLinearFunctions.custom( production, piecewise_quad, linearizer )