Source code for pybop.models._exponential_decay

import pybamm
from pybamm.models.base_model import BaseModel


[docs] class ExponentialDecayModel(BaseModel): """ Exponential decay model defined by the equation: dy/dt = -k * y, y(0) = y0 Note: The output variables are named "y_{i}" for each state. For example, the first state is "y_0", the second is "y_1", etc. The model parameters are "k" (decay rate) and "y0" (initial condition). Parameters ---------- name : str Name of the model (default: "Experimental Decay Model"). n_states : int Number of states in the system, must be >= 1 (default is 1). """ def __init__( self, name: str = "Experimental Decay Model", n_states: int = 1, ): if n_states < 1: raise ValueError("The number of states (n_states) must be at least 1.") super().__init__(name=name) self.n_states = n_states # Initialise the PyBaMM model, variables, parameters ys = [pybamm.Variable(f"y_{i}") for i in range(n_states)] k = pybamm.Parameter("k") y0 = pybamm.Parameter("y0") # Set up the right-hand side and initial conditions self.rhs = {y: -k * y for y in ys} self.initial_conditions = {y: y0 for y in ys} # Define model outputs and set default values self.variables = {f"y_{en}": i for en, i in enumerate(ys)} | { "Time [s]": pybamm.t } @property def default_parameter_values(self) -> pybamm.ParameterValues: return pybamm.ParameterValues({"k": 0.1, "y0": 1}) @property def default_quick_plot_variables(self): return [f"y_{i}" for i in range(self.n_states)]