Source code for mud.examples.exp_decay

"""
Exponential Decay Example


"""
import numpy as np
from scipy.stats.distributions import uniform  # type: ignore

from mud.base import SpatioTemporalProblem


[docs]def exp_decay_1D( u_0=0.75, time_range=[0, 4.0], domain=[0, 1], num_samples=10000, lambda_true=0.5, t_start=0.0, sampling_freq=100.0, std_dev=0.05, ): def u_t_lambda_1(t, l1): return u_0 * np.exp(-np.outer(l1, t)) # Build initial samples initial = uniform(loc=domain[0], scale=domain[1] - domain[0]) exp_decay = SpatioTemporalProblem() exp_decay.domain = domain exp_decay.times = np.arange(t_start, time_range[1], 1 / sampling_freq) exp_decay.sample_dist = "u" exp_decay.lam = initial.rvs(size=num_samples) exp_decay.data = u_t_lambda_1(exp_decay.times, exp_decay.lam) exp_decay.true_vals = u_t_lambda_1(exp_decay.times, lambda_true)[0] exp_decay.std_dev = std_dev return exp_decay
[docs]def exp_decay_2D( time_range=[0, 3.0], domain=np.array([[0.7, 0.8], [0.25, 0.75]]), num_samples=100, lambda_true=[0.75, 0.5], N=100, t_start=0.0, sampling_freq=10.0, std_dev=0.05, ): def u_t_lambda_2(t, l1, l2): return (l1 * np.exp(-np.outer(t, l2))).T # Build initial samples num_params = domain.shape[0] mn = np.min(domain, axis=1) mx = np.max(domain, axis=1) initial = uniform(loc=mn, scale=mx - mn) exp_decay = SpatioTemporalProblem() exp_decay.domain = domain exp_decay.times = np.arange(t_start, time_range[1], 1 / sampling_freq)[0:N] exp_decay.sample_dist = "u" exp_decay.lam = initial.rvs(size=(num_samples, num_params)) exp_decay.data = u_t_lambda_2( exp_decay.times, exp_decay.lam[:, 0], exp_decay.lam[:, 1] ) exp_decay.true_vals = u_t_lambda_2(exp_decay.times, lambda_true)[0] exp_decay.std_dev = std_dev return exp_decay