From 23249ff1e10534422749e2b7c4574cf65f27c00b Mon Sep 17 00:00:00 2001 From: Lakshmi Krishnamurthy Date: Sun, 4 Feb 2024 20:32:10 -0500 Subject: [PATCH] Features: Bug Fixes/Re-organization: - Special Function Derived Log Big Pi - N Ellipsoid Volume (1) - Special Function Derived Log Small Pi (2, 3, 4) - Special Function Derived Log Small Pi - Big Estimator (5, 6) - Special Function Derived Log Small Pi - Constructor (7, 8) - Special Function Derived Log Small Pi - Evaluate (9, 10) - Special Function Derived Log Small Pi - Weierstrass (11, 12) - Special Function Derived Power Source Exponential Decay (13, 14, 15) - Special Function Derived Power Source Exponential Decay - Source Coefficient (16, 17) - Special Function Derived Power Source Exponential Decay - Constructor (18, 19) - Special Function Derived Power Source Exponential Decay - Evaluate (20, 21, 22) - Special Function Derived Riemann Zeta (23, 24, 25) - Special Function Derived Riemann Zeta - Gamma Estimator (26, 27) - Special Function Derived Riemann Zeta - Constructor (28, 29) - Special Function Derived Riemann Zeta - Evaluate (30, 31, 32) - Special Function Derived Riemann Zeta - Apery's Constant (33, 34) - Special Function Derived Stretched Exponential Moment (35, 36, 37) - Special Function Derived Stretched Exponential Moment - Beta (38, 39) - Special Function Derived Stretched Exponential Moment - Tau (40, 41) - Special Function Derived Stretched Exponential Moment - Constructor (42, 43) - Special Function Derived Stretched Exponential Moment - Evaluate (44, 45, 46) - Special Function Derived Stretched Exponential Moment - Weierstrass #1 (47, 48, 49) - Special Function Derived Stretched Exponential Moment - Weierstrass #2 (50, 51) - Special Function Digamma Binet First Integral (52, 53) - Special Function Digamma Binet First Integral - Constructor (54) - Special Function Digamma Binet First Integral - Evaluate (55, 56, 57) - Special Function Digamma Cumulative Series Term (58, 59, 60) Samples: IdeaDRIP: --- ReleaseNotes/06_20_2023.txt | 36 +++++ ScheduleSheet.xlsx | Bin 52944 -> 52746 bytes .../specialfunction/derived/LogSmallPi.java | 67 +++++---- .../derived/PowerSourceExponentialDecay.java | 83 ++++++----- .../specialfunction/derived/RiemannZeta.java | 97 ++++++------- .../derived/StretchedExponentialMoment.java | 130 +++++++++--------- .../digamma/BinetFirstIntegral.java | 57 +++++--- .../digamma/CumulativeSeriesTerm.java | 34 ++++- 8 files changed, 306 insertions(+), 198 deletions(-) create mode 100644 ReleaseNotes/06_20_2023.txt diff --git a/ReleaseNotes/06_20_2023.txt b/ReleaseNotes/06_20_2023.txt new file mode 100644 index 000000000000..32634956215e --- /dev/null +++ b/ReleaseNotes/06_20_2023.txt @@ -0,0 +1,36 @@ + +Features: + +Bug Fixes/Re-organization: + + - Special Function Derived Log Big Pi - N Ellipsoid Volume (1) + - Special Function Derived Log Small Pi (2, 3, 4) + - Special Function Derived Log Small Pi - Big Estimator (5, 6) + - Special Function Derived Log Small Pi - Constructor (7, 8) + - Special Function Derived Log Small Pi - Evaluate (9, 10) + - Special Function Derived Log Small Pi - Weierstrass (11, 12) + - Special Function Derived Power Source Exponential Decay (13, 14, 15) + - Special Function Derived Power Source Exponential Decay - Source Coefficient (16, 17) + - Special Function Derived Power Source Exponential Decay - Constructor (18, 19) + - Special Function Derived Power Source Exponential Decay - Evaluate (20, 21, 22) + - Special Function Derived Riemann Zeta (23, 24, 25) + - Special Function Derived Riemann Zeta - Gamma Estimator (26, 27) + - Special Function Derived Riemann Zeta - Constructor (28, 29) + - Special Function Derived Riemann Zeta - Evaluate (30, 31, 32) + - Special Function Derived Riemann Zeta - Apery's Constant (33, 34) + - Special Function Derived Stretched Exponential Moment (35, 36, 37) + - Special Function Derived Stretched Exponential Moment - Beta (38, 39) + - Special Function Derived Stretched Exponential Moment - Tau (40, 41) + - Special Function Derived Stretched Exponential Moment - Constructor (42, 43) + - Special Function Derived Stretched Exponential Moment - Evaluate (44, 45, 46) + - Special Function Derived Stretched Exponential Moment - Weierstrass #1 (47, 48, 49) + - Special Function Derived Stretched Exponential Moment - Weierstrass #2 (50, 51) + - Special Function Digamma Binet First Integral (52, 53) + - Special Function Digamma Binet First Integral - Constructor (54) + - Special Function Digamma Binet First Integral - Evaluate (55, 56, 57) + - Special Function Digamma Cumulative Series Term (58, 59, 60) + + +Samples: + +IdeaDRIP: diff --git a/ScheduleSheet.xlsx b/ScheduleSheet.xlsx index 61336370d37e88abd1f3ac3876cda5a2652f88d4..d972cc1cc841c0bd972916bcbfcc6caafcf53fdf 100644 GIT binary patch delta 37539 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 VlWER90^!D!sLmn=q{#pP0074c delta 37762 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 diff --git a/src/main/java/org/drip/specialfunction/derived/LogSmallPi.java b/src/main/java/org/drip/specialfunction/derived/LogSmallPi.java index 4d2876d44b0c..0f38bc893170 100644 --- a/src/main/java/org/drip/specialfunction/derived/LogSmallPi.java +++ b/src/main/java/org/drip/specialfunction/derived/LogSmallPi.java @@ -1,11 +1,17 @@ package org.drip.specialfunction.derived; +import org.drip.function.definition.R1ToR1; +import org.drip.numerical.common.NumberUtil; + /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! + * Copyright (C) 2025 Lakshmi Krishnamurthy + * Copyright (C) 2024 Lakshmi Krishnamurthy + * Copyright (C) 2023 Lakshmi Krishnamurthy * Copyright (C) 2022 Lakshmi Krishnamurthy * Copyright (C) 2021 Lakshmi Krishnamurthy * Copyright (C) 2020 Lakshmi Krishnamurthy @@ -78,7 +84,7 @@ /** * LogSmallPi implements the Log Small Pi Function - the Reciprocal of the Log Big Pi Function. The - * References are: + * References are: * *

*
    @@ -102,21 +108,35 @@ * Wikipedia (2019): Gamma Function https://en.wikipedia.org/wiki/Gamma_function * *
+ * + * It provides the following functionality: * - *

* * + *
+ * + * + * + * + * + * + * + *
Module Product Core Module
Library Fixed Income Analytics
Project Special Function Implementation and Analysis
Package Special Functions Derived using Others
+ * * @author Lakshmi Krishnamurthy */ -public class LogSmallPi extends org.drip.function.definition.R1ToR1 +public class LogSmallPi extends R1ToR1 { - private org.drip.function.definition.R1ToR1 _logBigPiEstimator = null; + private R1ToR1 _logBigPiEstimator = null; /** * Generate the Weierstrass Infinite Sum Series Version of Log Small Pi Estimator @@ -129,12 +149,9 @@ public class LogSmallPi extends org.drip.function.definition.R1ToR1 public static final LogSmallPi Weierstrass ( final int termCount) { - try - { - return new LogSmallPi (org.drip.specialfunction.derived.LogBigPi.Weierstrass (termCount)); - } - catch (java.lang.Exception e) - { + try { + return new LogSmallPi (LogBigPi.Weierstrass (termCount)); + } catch (Exception e) { e.printStackTrace(); } @@ -142,22 +159,21 @@ public static final LogSmallPi Weierstrass ( } /** - * LogSmallPi Constructor + * LogSmallPi Constructor * * @param logBigPiEstimator The Log Big Pi Estimator * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public LogSmallPi ( - final org.drip.function.definition.R1ToR1 logBigPiEstimator) - throws java.lang.Exception + final R1ToR1 logBigPiEstimator) + throws Exception { super (null); - if (null == (_logBigPiEstimator = logBigPiEstimator)) - { - throw new java.lang.Exception ("LogSmallPi Constructor => Invalid Inputs"); + if (null == (_logBigPiEstimator = logBigPiEstimator)) { + throw new Exception ("LogSmallPi Constructor => Invalid Inputs"); } } @@ -167,18 +183,17 @@ public LogSmallPi ( * @return The Log Big Pi Estimator */ - public org.drip.function.definition.R1ToR1 logBigPiEstimator() + public R1ToR1 logBigPiEstimator() { return _logBigPiEstimator; } @Override public double evaluate ( final double z) - throws java.lang.Exception + throws Exception { - if (!org.drip.numerical.common.NumberUtil.IsValid (z)) - { - throw new java.lang.Exception ("LogSmallPi::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (z)) { + throw new Exception ("LogSmallPi::evaluate => Invalid Inputs"); } return -1. * _logBigPiEstimator.evaluate (z); diff --git a/src/main/java/org/drip/specialfunction/derived/PowerSourceExponentialDecay.java b/src/main/java/org/drip/specialfunction/derived/PowerSourceExponentialDecay.java index 24f84db4820d..6f319b9c6ac3 100644 --- a/src/main/java/org/drip/specialfunction/derived/PowerSourceExponentialDecay.java +++ b/src/main/java/org/drip/specialfunction/derived/PowerSourceExponentialDecay.java @@ -1,11 +1,19 @@ package org.drip.specialfunction.derived; +import org.drip.function.definition.R1ToR1; +import org.drip.numerical.common.NumberUtil; +import org.drip.numerical.differentiation.DerivativeControl; +import org.drip.numerical.integration.NewtonCotesQuadratureGenerator; + /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! + * Copyright (C) 2025 Lakshmi Krishnamurthy + * Copyright (C) 2024 Lakshmi Krishnamurthy + * Copyright (C) 2023 Lakshmi Krishnamurthy * Copyright (C) 2022 Lakshmi Krishnamurthy * Copyright (C) 2021 Lakshmi Krishnamurthy * Copyright (C) 2020 Lakshmi Krishnamurthy @@ -78,7 +86,7 @@ /** * PowerSourceExponentialDecay implements the Power Source Exponential Decay Function. The References - * are: + * are: * *

*
    @@ -102,29 +110,43 @@ * Wikipedia (2019): Gamma Function https://en.wikipedia.org/wiki/Gamma_function * *
+ * + * It provides the following functionality: * - *

* * + *
+ * + * + * + * + * + * + * + *
Module Product Core Module
Library Fixed Income Analytics
Project Special Function Implementation and Analysis
Package Special Functions Derived using Others
+ * * @author Lakshmi Krishnamurthy */ -public class PowerSourceExponentialDecay extends org.drip.function.definition.R1ToR1 +public class PowerSourceExponentialDecay extends R1ToR1 { - private double _sourcePowerCoefficient = java.lang.Double.NaN; + private double _sourcePowerCoefficient = Double.NaN; /** - * Construct the Analytic Version of PowerSourceExponentialDecay + * Construct the Analytic Version of PowerSourceExponentialDecay * * @param logGammaEstimator The Log Gamma Estimator * @param sourcePowerCoefficient The Source Power Coefficient * - * @return The Analytic Version of PowerSourceExponentialDecay + * @return The Analytic Version of PowerSourceExponentialDecay */ public static final PowerSourceExponentialDecay Analytic ( @@ -172,25 +194,24 @@ public static final PowerSourceExponentialDecay Analytic ( } /** - * PowerSourceExponentialDecay Constructor + * PowerSourceExponentialDecay Constructor * - * @param dc The Derivative Control + * @param derivativeControl The Derivative Control * @param sourcePowerCoefficient The Source Power Coefficient * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public PowerSourceExponentialDecay ( - final org.drip.numerical.differentiation.DerivativeControl dc, + final DerivativeControl derivativeControl, final double sourcePowerCoefficient) throws java.lang.Exception { - super (dc); + super (derivativeControl); - if (!org.drip.numerical.common.NumberUtil.IsValid (_sourcePowerCoefficient = sourcePowerCoefficient) - || 0. >= _sourcePowerCoefficient) - { - throw new java.lang.Exception ("PowerSourceExponentialDecay Constructor => Invalid Inputs"); + if (!NumberUtil.IsValid (_sourcePowerCoefficient = sourcePowerCoefficient) || + 0. >= _sourcePowerCoefficient) { + throw new Exception ("PowerSourceExponentialDecay Constructor => Invalid Inputs"); } } @@ -207,28 +228,20 @@ public double sourcePowerCoefficient() @Override public double evaluate ( final double exponentialDecayCoefficient) - throws java.lang.Exception + throws Exception { - if (!org.drip.numerical.common.NumberUtil.IsValid (exponentialDecayCoefficient) || - 0. >= exponentialDecayCoefficient) - { - throw new java.lang.Exception ("PowerSourceExponentialDecay::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (exponentialDecayCoefficient) || 0. >= exponentialDecayCoefficient) { + throw new Exception ("PowerSourceExponentialDecay::evaluate => Invalid Inputs"); } - return org.drip.numerical.integration.NewtonCotesQuadratureGenerator.GaussLaguerreLeftDefinite ( - 0., - 100 - ).integrate ( - new org.drip.function.definition.R1ToR1 (null) - { + return NewtonCotesQuadratureGenerator.GaussLaguerreLeftDefinite (0., 100).integrate ( + new R1ToR1 (null) { @Override public double evaluate ( final double t) - throws java.lang.Exception + throws Exception { - return java.lang.Double.isInfinite (t) ? 0. : java.lang.Math.pow ( - t, - _sourcePowerCoefficient - ) * java.lang.Math.exp (-1. * exponentialDecayCoefficient * t); + return Double.isInfinite (t) ? 0. : Math.pow (t, _sourcePowerCoefficient) * + Math.exp (-1. * exponentialDecayCoefficient * t); } } ); diff --git a/src/main/java/org/drip/specialfunction/derived/RiemannZeta.java b/src/main/java/org/drip/specialfunction/derived/RiemannZeta.java index 7f97894dd575..cdcb2386440f 100644 --- a/src/main/java/org/drip/specialfunction/derived/RiemannZeta.java +++ b/src/main/java/org/drip/specialfunction/derived/RiemannZeta.java @@ -1,11 +1,20 @@ package org.drip.specialfunction.derived; +import org.drip.function.definition.R1ToR1; +import org.drip.numerical.common.NumberUtil; +import org.drip.numerical.differentiation.DerivativeControl; +import org.drip.numerical.integration.NewtonCotesQuadratureGenerator; +import org.drip.specialfunction.gamma.NemesAnalytic; + /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! + * Copyright (C) 2025 Lakshmi Krishnamurthy + * Copyright (C) 2024 Lakshmi Krishnamurthy + * Copyright (C) 2023 Lakshmi Krishnamurthy * Copyright (C) 2022 Lakshmi Krishnamurthy * Copyright (C) 2021 Lakshmi Krishnamurthy * Copyright (C) 2020 Lakshmi Krishnamurthy @@ -101,21 +110,35 @@ * Wikipedia (2019): Gamma Function https://en.wikipedia.org/wiki/Gamma_function * * + * + * It provides the following functionality: * - *

* * + *
+ * + * + * + * + * + * + * + *
Module Product Core Module
Library Fixed Income Analytics
Project Special Function Implementation and Analysis
Package Special Functions Derived using Others
+ * * @author Lakshmi Krishnamurthy */ -public class RiemannZeta extends org.drip.function.definition.R1ToR1 +public class RiemannZeta extends R1ToR1 { - private org.drip.function.definition.R1ToR1 _gammaEstimator = null; + private R1ToR1 _gammaEstimator = null; /** * Compute the Apery's Constant (i.e., Riemann Zeta at Value 3.) @@ -125,43 +148,32 @@ public class RiemannZeta extends org.drip.function.definition.R1ToR1 public static final double AperyConstant() { - try - { - return new RiemannZeta ( - null, - new org.drip.specialfunction.gamma.NemesAnalytic ( - null - ) - ).evaluate ( - 3. - ); - } - catch (java.lang.Exception e) - { + try { + return new RiemannZeta (null, new NemesAnalytic (null)).evaluate (3.); + } catch (Exception e) { } - return java.lang.Double.NaN; + return Double.NaN; } /** - * RiemannZeta Constructor + * RiemannZeta Constructor * - * @param dc The Derivative Control + * @param derivativeControl The Derivative Control * @param gammaEstimator The Gamma Estimator * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public RiemannZeta ( - final org.drip.numerical.differentiation.DerivativeControl dc, - final org.drip.function.definition.R1ToR1 gammaEstimator) + final DerivativeControl derivativeControl, + final R1ToR1 gammaEstimator) throws java.lang.Exception { - super (dc); + super (derivativeControl); - if (null == (_gammaEstimator = gammaEstimator)) - { - throw new java.lang.Exception ("RiemannZeta Constructor => Invalid Inputs"); + if (null == (_gammaEstimator = gammaEstimator)) { + throw new Exception ("RiemannZeta Constructor => Invalid Inputs"); } } @@ -171,34 +183,27 @@ public RiemannZeta ( * @return The Gamma Estimator */ - public org.drip.function.definition.R1ToR1 gammaEstimator() + public R1ToR1 gammaEstimator() { return _gammaEstimator; } @Override public double evaluate ( final double s) - throws java.lang.Exception + throws Exception { - if (!org.drip.numerical.common.NumberUtil.IsValid (s)) - { - throw new java.lang.Exception ("RiemannZeta::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (s)) { + throw new Exception ("RiemannZeta::evaluate => Invalid Inputs"); } - return org.drip.numerical.integration.NewtonCotesQuadratureGenerator.GaussLaguerreLeftDefinite ( - 0., - 10000 - ).integrate ( - new org.drip.function.definition.R1ToR1 (null) - { + return NewtonCotesQuadratureGenerator.GaussLaguerreLeftDefinite (0., 10000 ).integrate ( + new R1ToR1 (null) { @Override public double evaluate ( final double t) - throws java.lang.Exception + throws Exception { - return java.lang.Double.isInfinite (t) || 0. == t ? 0. : java.lang.Math.pow ( - t, - s - 1 - ) / ((java.lang.Math.exp (t) - 1.)); + return Double.isInfinite (t) || 0. == t ? 0. : + Math.pow (t, s - 1) / ((Math.exp (t) - 1.)); } } ) / _gammaEstimator.evaluate (s); diff --git a/src/main/java/org/drip/specialfunction/derived/StretchedExponentialMoment.java b/src/main/java/org/drip/specialfunction/derived/StretchedExponentialMoment.java index c9fb4bb4045a..f17daccd3db0 100644 --- a/src/main/java/org/drip/specialfunction/derived/StretchedExponentialMoment.java +++ b/src/main/java/org/drip/specialfunction/derived/StretchedExponentialMoment.java @@ -1,11 +1,20 @@ package org.drip.specialfunction.derived; +import org.drip.function.definition.R1ToR1; +import org.drip.numerical.common.NumberUtil; +import org.drip.numerical.differentiation.DerivativeControl; +import org.drip.numerical.integration.NewtonCotesQuadratureGenerator; +import org.drip.specialfunction.loggamma.InfiniteSumEstimator; + /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! + * Copyright (C) 2025 Lakshmi Krishnamurthy + * Copyright (C) 2024 Lakshmi Krishnamurthy + * Copyright (C) 2023 Lakshmi Krishnamurthy * Copyright (C) 2022 Lakshmi Krishnamurthy * Copyright (C) 2021 Lakshmi Krishnamurthy * Copyright (C) 2020 Lakshmi Krishnamurthy @@ -78,7 +87,7 @@ /** * StretchedExponentialMoment estimates the specified Moment Stretched Exponential Integral Function. - * The References are: + * The References are: * *

*
    @@ -102,31 +111,46 @@ * Wikipedia (2019): Gamma Function https://en.wikipedia.org/wiki/Gamma_function * *
+ * + * It provides the following functionality: * - *

* * + *
+ * + * + * + * + * + * + * + *
Module Product Core Module
Library Fixed Income Analytics
Project Special Function Implementation and Analysis
Package Special Functions Derived using Others
+ * * @author Lakshmi Krishnamurthy */ -public class StretchedExponentialMoment extends org.drip.function.definition.R1ToR1 +public class StretchedExponentialMoment extends R1ToR1 { - private double _tau = java.lang.Double.NaN; - private double _beta = java.lang.Double.NaN; + private double _tau = Double.NaN; + private double _beta = Double.NaN; /** - * Construct the Weierstrass Version of the Log of StretchedExponentialMoment Estimator + * Construct the Weierstrass Version of the Log of StretchedExponentialMoment Estimator * * @param tau Tau * @param beta Beta * @param termCount Number of Terms in the Estimation * - * @return Weierstrass Version of the Log of StretchedExponentialMoment Estimator + * @return Weierstrass Version of the Log of StretchedExponentialMoment Estimator */ public static final StretchedExponentialMoment Weierstrass ( @@ -134,42 +158,31 @@ public static final StretchedExponentialMoment Weierstrass ( final double beta, final int termCount) { - final org.drip.specialfunction.loggamma.InfiniteSumEstimator weierstrassLogGamma = - org.drip.specialfunction.loggamma.InfiniteSumEstimator.Weierstrass (termCount); + final InfiniteSumEstimator weierstrassLogGamma = InfiniteSumEstimator.Weierstrass (termCount); - if (null == weierstrassLogGamma) - { + if (null == weierstrassLogGamma) { return null; } - try - { - return new StretchedExponentialMoment ( - null, - tau, - beta - ) - { + try { + return new StretchedExponentialMoment (null, tau, beta) { @Override public double evaluate ( final double moment) - throws java.lang.Exception + throws Exception { - if (!org.drip.numerical.common.NumberUtil.IsValid (moment) || 1. > moment) - { - throw new java.lang.Exception - ("StretchedExponentialMoment::Weierstrass::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (moment) || 1. > moment) { + throw new Exception ( + "StretchedExponentialMoment::Weierstrass::evaluate => Invalid Inputs" + ); } - return java.lang.Math.exp ( - moment * java.lang.Math.log (tau) + - weierstrassLogGamma.evaluate (moment / beta) - - java.lang.Math.log (beta) + return Math.exp ( + moment * Math.log (tau) + weierstrassLogGamma.evaluate (moment / beta) - + Math.log (beta) ); } }; - } - catch (java.lang.Exception e) - { + } catch (Exception e) { e.printStackTrace(); } @@ -177,27 +190,26 @@ public static final StretchedExponentialMoment Weierstrass ( } /** - * StretchedExponentialMoment Constructor + * StretchedExponentialMoment Constructor * - * @param dc The Derivative Control + * @param derivativeControl The Derivative Control * @param tau Tau * @param beta Beta * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public StretchedExponentialMoment ( - final org.drip.numerical.differentiation.DerivativeControl dc, + final DerivativeControl derivativeControl, final double tau, final double beta) - throws java.lang.Exception + throws Exception { - super (dc); + super (derivativeControl); - if (!org.drip.numerical.common.NumberUtil.IsValid (_tau = tau) || 0. >= _tau || - !org.drip.numerical.common.NumberUtil.IsValid (_beta = beta) || 0. >= _beta) - { - throw new java.lang.Exception ("StretchedExponentialMoment Constructor => Invalid Inputs"); + if (!NumberUtil.IsValid (_tau = tau) || 0. >= _tau || + !NumberUtil.IsValid (_beta = beta) || 0. >= _beta) { + throw new Exception ("StretchedExponentialMoment Constructor => Invalid Inputs"); } } @@ -225,32 +237,20 @@ public double beta() @Override public double evaluate ( final double moment) - throws java.lang.Exception + throws Exception { - if (!org.drip.numerical.common.NumberUtil.IsValid (moment) || 1. > moment) - { - throw new java.lang.Exception ("StretchedExponentialMoment::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (moment) || 1. > moment) { + throw new Exception ("StretchedExponentialMoment::evaluate => Invalid Inputs"); } - return org.drip.numerical.integration.NewtonCotesQuadratureGenerator.GaussLaguerreLeftDefinite ( - 0., - 100 - ).integrate ( - new org.drip.function.definition.R1ToR1 (null) - { + return NewtonCotesQuadratureGenerator.GaussLaguerreLeftDefinite (0., 100).integrate ( + new R1ToR1 (null) { @Override public double evaluate ( final double t) - throws java.lang.Exception + throws Exception { - return java.lang.Double.isInfinite (t) || 0. == t ? 0. : java.lang.Math.pow ( - t, - moment - 1 - ) * java.lang.Math.exp ( - -java.lang.Math.pow ( - t / _tau, - _beta - ) - ); + return Double.isInfinite (t) || 0. == t ? 0. : Math.pow (t, moment - 1) * + Math.exp (-Math.pow (t / _tau, _beta)); } } ); diff --git a/src/main/java/org/drip/specialfunction/digamma/BinetFirstIntegral.java b/src/main/java/org/drip/specialfunction/digamma/BinetFirstIntegral.java index 7a7b71b0bcbe..0aa6a9d080ed 100644 --- a/src/main/java/org/drip/specialfunction/digamma/BinetFirstIntegral.java +++ b/src/main/java/org/drip/specialfunction/digamma/BinetFirstIntegral.java @@ -1,11 +1,18 @@ package org.drip.specialfunction.digamma; +import org.drip.function.definition.R1ToR1; +import org.drip.numerical.common.NumberUtil; +import org.drip.numerical.laplacian.LaplaceTransformGaussLegendre; + /* * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /*! + * Copyright (C) 2025 Lakshmi Krishnamurthy + * Copyright (C) 2024 Lakshmi Krishnamurthy + * Copyright (C) 2023 Lakshmi Krishnamurthy * Copyright (C) 2022 Lakshmi Krishnamurthy * Copyright (C) 2021 Lakshmi Krishnamurthy * Copyright (C) 2020 Lakshmi Krishnamurthy @@ -78,7 +85,7 @@ /** * BinetFirstIntegral demonstrates the Estimation of the Digamma Function using the Binet's First - * Integral. The References are: + * Integral. The References are: * *

*
    @@ -102,15 +109,27 @@ * Wikipedia (2019): Digamma Function https://en.wikipedia.org/wiki/Digamma_function * *
+ * + * It provides the following functionality: * - *

* * + *
+ * + * + * + * + * + * + * + *
Module Product Core Module
Library Fixed Income Analytics
Project Special Function Implementation and Analysis
Package Estimation Techniques for Digamma Function
+ * * @author Lakshmi Krishnamurthy */ @@ -118,37 +137,35 @@ public class BinetFirstIntegral extends org.drip.function.definition.R1ToR1 { /** - * BinetFirstIntegral Constructor + * BinetFirstIntegral Constructor * - * @param dc The Derivative Control + * @param derivativeControl The Derivative Control */ public BinetFirstIntegral ( - final org.drip.numerical.differentiation.DerivativeControl dc) + final org.drip.numerical.differentiation.DerivativeControl derivativeControl) { - super (dc); + super (derivativeControl); } @Override public double evaluate ( final double z) - throws java.lang.Exception + throws Exception { - if (!org.drip.numerical.common.NumberUtil.IsValid (z)) - { - throw new java.lang.Exception ("BinetFirstIntegral::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (z)) { + throw new Exception ("BinetFirstIntegral::evaluate => Invalid Inputs"); } - return -1. * new org.drip.numerical.laplacian.LaplaceTransformGaussLegendre ( + return -1. * new LaplaceTransformGaussLegendre ( null, - new org.drip.function.definition.R1ToR1 (null) - { + new R1ToR1 (null) { @Override public double evaluate ( final double t) - throws java.lang.Exception + throws Exception { - return 0 == t ? 0. : 0.5 - (1. / t) + 1. / (java.lang.Math.exp (t) - 1.); + return 0 == t ? 0. : 0.5 - (1. / t) + 1. / (Math.exp (t) - 1.); } } - ).evaluate (z) + java.lang.Math.log (z) - 0.5 / z; + ).evaluate (z) + Math.log (z) - 0.5 / z; } } diff --git a/src/main/java/org/drip/specialfunction/digamma/CumulativeSeriesTerm.java b/src/main/java/org/drip/specialfunction/digamma/CumulativeSeriesTerm.java index e6e605c6caae..127fbb81da4d 100644 --- a/src/main/java/org/drip/specialfunction/digamma/CumulativeSeriesTerm.java +++ b/src/main/java/org/drip/specialfunction/digamma/CumulativeSeriesTerm.java @@ -6,6 +6,9 @@ */ /*! + * Copyright (C) 2025 Lakshmi Krishnamurthy + * Copyright (C) 2024 Lakshmi Krishnamurthy + * Copyright (C) 2023 Lakshmi Krishnamurthy * Copyright (C) 2022 Lakshmi Krishnamurthy * Copyright (C) 2021 Lakshmi Krishnamurthy * Copyright (C) 2020 Lakshmi Krishnamurthy @@ -78,7 +81,7 @@ /** * CumulativeSeriesTerm implements a Single Term in the Cumulative Series for Digamma Estimation. The - * References are: + * References are: * *

*
    @@ -102,15 +105,34 @@ * Wikipedia (2019): Digamma Function https://en.wikipedia.org/wiki/Digamma_function * *
+ * + * It provides the following functionality: * - *

*
    - *
  • Module = Computational Core Module
  • - *
  • Library = Function Analysis Library
  • - *
  • Project = Special Function Implementation Analysis
  • - *
  • Package = Estimation Techniques for Digamma Function
  • + *
  • Construct the Abramowitz-Stegun (2017) Cumulative Sum Series Term for DiGamma
  • + *
  • Construct the Mezo-Hoffman (2017) Cumulative Sum Series Term for DiGamma
  • + *
  • Construct the Gauss Cumulative Sum Series Term for DiGamma
  • + *
  • Construct the Asymptotic Cumulative Sum Series Term for DiGamma
  • + *
  • Construct the Asymptotic Cumulative Sum Series Term for exp (-diGamma)
  • + *
  • Construct the Asymptotic Cumulative Sum Series Term for exp (diGamma + 0.5)
  • + *
  • Construct the Taylor-Riemann Zeta Series Term for Digamma
  • + *
  • Construct the Newton-Stern Series Term for Digamma
  • *
* + *
+ * + * + * + * + * + * + * + *
Module Product Core Module
Library Fixed Income Analytics
Project Special Function Implementation and Analysis
Package Estimation Techniques for Digamma Function
+ * * @author Lakshmi Krishnamurthy */