Struct Svensson
pub struct Svensson {
reference_date: NaiveDate,
params: Vec<f64>,
}Expand description
A Svensson discount curve — Nelson-Siegel with a second hump.
z(τ) = β₀ + β₁·L(τ/λ₁) + β₂·[L(τ/λ₁) − e^{−τ/λ₁}] + β₃·[L(τ/λ₂) − e^{−τ/λ₂}]with L(x) = (1 − e^{−x})/x. Six parameters, stored
[β₀, β₁, β₂, β₃, u₁, u₂]; both decays are squashed into a range, for the
reason DECAY_MIN gives.
It nests Nelson-Siegel: at β₃ = 0 the second hump contributes nothing
and the shape is the four-parameter one. That is what makes the extra pair
worth carrying — a Svensson fit can be no worse than a Nelson-Siegel fit of
the same universe.
Fields§
§reference_date: NaiveDate§params: Vec<f64>[β₀, β₁, β₂, β₃, u₁, u₂], the u unconstrained decays.
Implementations§
§impl Svensson
impl Svensson
pub fn new(
reference_date: NaiveDate,
beta0: f64,
beta1: f64,
beta2: f64,
beta3: f64,
lambda1: f64,
lambda2: f64,
) -> Result<Self, CurveError>
pub fn new( reference_date: NaiveDate, beta0: f64, beta1: f64, beta2: f64, beta3: f64, lambda1: f64, lambda2: f64, ) -> Result<Self, CurveError>
A Svensson curve from its natural parameters.
§Errors
CurveError::NonFinite for a non-finite parameter, or a decay that is
not strictly positive.
pub fn reference_date(&self) -> NaiveDate
pub fn reference_date(&self) -> NaiveDate
The curve’s reference date.
pub fn natural(&self) -> (f64, f64, f64, f64, f64, f64)
pub fn natural(&self) -> (f64, f64, f64, f64, f64, f64)
The natural parameters (β₀, β₁, β₂, β₃, λ₁, λ₂), decays squashed back.
pub fn parameters(&self) -> &[f64]
pub fn parameters(&self) -> &[f64]
The free parameters, [β₀, β₁, β₂, β₃, u₁, u₂].
pub fn from_parameters(reference_date: NaiveDate, params: &[f64]) -> Self
pub fn from_parameters(reference_date: NaiveDate, params: &[f64]) -> Self
This form carrying params verbatim. See
NelsonSiegel::from_parameters.
§Panics
If params is not WIDTH long.
pub fn view<R: Scalar>(&self) -> SvenssonView<'_, R>
pub fn view<R: Scalar>(&self) -> SvenssonView<'_, R>
This curve lifted into mode R.
pub(crate) fn view_with_slice<'a, R: Scalar>(
&'a self,
rest: &mut &'a [R],
) -> SvenssonView<'a, R>
pub(crate) fn view_with_slice<'a, R: Scalar>( &'a self, rest: &mut &'a [R], ) -> SvenssonView<'a, R>
One step of a substituted walk.
pub(crate) fn view_seeding<R: Scalar + Seedable>(
&self,
seed: &mut Option<usize>,
) -> SvenssonView<'_, R>
pub(crate) fn view_seeding<R: Scalar + Seedable>( &self, seed: &mut Option<usize>, ) -> SvenssonView<'_, R>
One step of a seeded walk.