tanh_ramp_stf
signals.tanh_ramp_stf(center_time, ramp_duration, end_value, start_value=None)
Create an Stf representing a hyperbolic tangent ramp.
Parameters
- center_time (float or Tensor) – The time at which the ramp has its greatest slope, t0. It must either be a scalar or contain a single element.
- ramp_duration (float or Tensor) – The characteristic time for the hyperbolic tangent ramp, tramp. It must either be a scalar or contain a single element.
- end_value (float or complex or Tensor) – The asymptotic value of the ramp towards t→+∞, a+. It must either be a scalar or contain a single element.
- start_value (float or complex or Tensor , optional) – The asymptotic value of the ramp towards t→−∞, a−. If passed, it must either be a scalar or contain a single element. Defaults to minus end_value.
Returns
The sampleable hyperbolic tangent ramp.
Return type
SEE ALSO
Graph.signals.linear_ramp_stf
: Create an Stf representing a linear ramp.
boulderopal.signals.tanh_ramp
: Create a Signal object representing a hyperbolic tangent ramp.
Graph.signals.tanh_ramp_pwc
: Corresponding operation with Pwc output.
Graph.tanh
: Calculate the element-wise hyperbolic tangent of an object.
Notes
The hyperbolic tangent ramp is defined as
Tanh(t)=2a++a−+2a+−a−tanh(trampt−t0),where the function’s asymptotic values a± are defined by:
a±:=t→±∞limTanh(t),and t0 is related to tramp by:
dtdTanh(t)t=t0=2tramp(a+−a−).With the default value of startvalue ($a-$), the ramp expression simplifies to
Tanh(t)=Atanh(trampt−t0),where A=a+ is the end value (the start value is then −A).
Examples
Define a simple sampleable hyperbolic tangent ramp.
>>> tanh = graph.signals.tanh_ramp_stf(
... center_time=0.4, ramp_duration=0.2, end_value=2, start_value=-1
... )
>>> graph.discretize_stf(tanh, duration=1, segment_count=5, name="tanh")
<Pwc: name="tanh", operation_name="discretize_stf", value_shape=(), batch_shape=()>
>>> result = bo.execute_graph(graph=graph, output_node_names="tanh")
>>> result["output"]["tanh"]
{'durations': array([0.2, 0.2, 0.2, 0.2, 0.2]),
'values': array([-0.85772238, -0.19317574, 1.19317574, 1.85772238, 1.97992145]),
'time_dimension': 0}
Define a hyperbolic tangent ramp with optimizable parameters.
>>> center_time = graph.optimizable_scalar(
... lower_bound=0.25e-6, upper_bound=0.75e-6, name="center_time"
... )
>>> ramp_duration = graph.optimizable_scalar(
... lower_bound=0.1e-6, upper_bound=0.3e-6, name="ramp_duration"
... )
>>> end_value = graph.optimizable_scalar(
... lower_bound=0, upper_bound=3e6, name="end_value"
... )
>>> graph.signals.tanh_ramp_stf(
... center_time=center_time, ramp_duration=ramp_duration, end_value=end_value
... )
<Stf: operation_name="add", value_shape=(), batch_shape=()>