From 54a7a2b1d69e94ad7b64048527c14910ab1bdf97 Mon Sep 17 00:00:00 2001 From: Lakshmi Krishnamurthy Date: Sun, 4 Feb 2024 19:09:19 -0500 Subject: [PATCH] Features: Bug Fixes/Re-organization: - Special Function Derived Elliptic E Integral #1 (3, 4, 5) - Special Function Derived Elliptic E Integral - Regular Hypergeometric Estimator (6, 7) - Special Function Derived Elliptic E Integral - Constructor (8, 9) - Special Function Derived Elliptic E Integral #2 (10) - Special Function Derived Elliptic K Integral #1 (11, 12, 13) - Special Function Derived Elliptic K Integral - Regular Hypergeometric Estimator (14, 15) - Special Function Derived Elliptic K Integral - Constructor (16, 17) - Special Function Derived Elliptic K Integral #2 (18) - Special Function Derived Jacobi #1 (19, 20, 21) - Special Function Derived Jacobi - Regular Hypergeometric Estimator (22, 23) - Special Function Derived Jacobi - Constructor (24, 25, 26) - Special Function Derived Jacobi #2 (27) - Special Function Derived Kummer (28, 29, 30) - Special Function Derived Kummer - Constructor (31, 32) - Special Function Derived Kummer - Regular Hypergeometric Estimator (33, 34) - Special Function Derived Kummer - Confluent Hypergeometric (35) - Special Function Derived Legendre #1 (36, 37, 38) - Special Function Derived Legendre - Regular Hypergeometric Estimator (39, 40) - Special Function Derived Legendre - Gamma Estimator (41, 42) - Special Function Derived Legendre Constructor (43, 44) - Special Function Derived Legendre #2 (45, 46, 47) - Special Function Derived Log Big Pi (48, 49, 50) - Special Function Derived Log Big Pi - Gamma Estimator (51, 52) - Special Function Derived Log Big Pi - Constructor (53, 54) - Special Function Derived Log Big Pi - Evaluate (55, 56) - Special Function Derived Log Big Pi - Weierstrass (57, 58) - Special Function Derived Log Big Pi - N Ellipsoid Volume (59, 60) Samples: IdeaDRIP: - High-Frequency Trading in a Limit Order Book - The Mid-Price Model of Stock (1-2) --- ReleaseNotes/06_19_2023.txt | 39 ++++++++ ScheduleSheet.xlsx | Bin 52744 -> 52944 bytes .../derived/EllipticEIntegral.java | 64 ++++++++----- .../derived/EllipticKIntegral.java | 64 ++++++++----- .../drip/specialfunction/derived/Jacobi.java | 69 ++++++++------ .../drip/specialfunction/derived/Kummer.java | 51 ++++++---- .../specialfunction/derived/Legendre.java | 71 ++++++++------ .../specialfunction/derived/LogBigPi.java | 89 ++++++++++-------- 8 files changed, 289 insertions(+), 158 deletions(-) create mode 100644 ReleaseNotes/06_19_2023.txt diff --git a/ReleaseNotes/06_19_2023.txt b/ReleaseNotes/06_19_2023.txt new file mode 100644 index 000000000000..9f15fa60ea9f --- /dev/null +++ b/ReleaseNotes/06_19_2023.txt @@ -0,0 +1,39 @@ + +Features: + +Bug Fixes/Re-organization: + + - Special Function Derived Elliptic E Integral #1 (3, 4, 5) + - Special Function Derived Elliptic E Integral - Regular Hypergeometric Estimator (6, 7) + - Special Function Derived Elliptic E Integral - Constructor (8, 9) + - Special Function Derived Elliptic E Integral #2 (10) + - Special Function Derived Elliptic K Integral #1 (11, 12, 13) + - Special Function Derived Elliptic K Integral - Regular Hypergeometric Estimator (14, 15) + - Special Function Derived Elliptic K Integral - Constructor (16, 17) + - Special Function Derived Elliptic K Integral #2 (18) + - Special Function Derived Jacobi #1 (19, 20, 21) + - Special Function Derived Jacobi - Regular Hypergeometric Estimator (22, 23) + - Special Function Derived Jacobi - Constructor (24, 25, 26) + - Special Function Derived Jacobi #2 (27) + - Special Function Derived Kummer (28, 29, 30) + - Special Function Derived Kummer - Constructor (31, 32) + - Special Function Derived Kummer - Regular Hypergeometric Estimator (33, 34) + - Special Function Derived Kummer - Confluent Hypergeometric (35) + - Special Function Derived Legendre #1 (36, 37, 38) + - Special Function Derived Legendre - Regular Hypergeometric Estimator (39, 40) + - Special Function Derived Legendre - Gamma Estimator (41, 42) + - Special Function Derived Legendre Constructor (43, 44) + - Special Function Derived Legendre #2 (45, 46, 47) + - Special Function Derived Log Big Pi (48, 49, 50) + - Special Function Derived Log Big Pi - Gamma Estimator (51, 52) + - Special Function Derived Log Big Pi - Constructor (53, 54) + - Special Function Derived Log Big Pi - Evaluate (55, 56) + - Special Function Derived Log Big Pi - Weierstrass (57, 58) + - Special Function Derived Log Big Pi - N Ellipsoid Volume (59, 60) + + +Samples: + +IdeaDRIP: + + - High-Frequency Trading in a Limit Order Book - The Mid-Price Model of Stock (1-2) diff --git a/ScheduleSheet.xlsx b/ScheduleSheet.xlsx index 57cac406a4199bfd9fb87b65247899bca08db793..61336370d37e88abd1f3ac3876cda5a2652f88d4 100644 GIT binary patch delta 37756 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 delta 37543 zcmZU)Wk6J2+cr#!7&HRnFi0s~0!j@E2-1x-l1hhkYy<@aB&0i}ySuwXy1Tm>W?s^bIzLKIL=<1;Y3XT1kB>Sdw>8A#N{3)8rtbSG&FoPG&E-mb|-5) za|3H@b2ev7i+t5Z>v#?V&*X9xIy})ELX94&hD%VOR3)x6*{G7MZ4*G++|MhUn~OpW zrl-SB{#FDMQ6kuqo9Ynm�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

K? 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 diff --git a/src/main/java/org/drip/specialfunction/derived/EllipticEIntegral.java b/src/main/java/org/drip/specialfunction/derived/EllipticEIntegral.java index d6fcb6665917..aaf749d360c9 100644 --- a/src/main/java/org/drip/specialfunction/derived/EllipticEIntegral.java +++ b/src/main/java/org/drip/specialfunction/derived/EllipticEIntegral.java @@ -1,11 +1,19 @@ package org.drip.specialfunction.derived; +import org.drip.function.definition.R2ToR1; +import org.drip.specialfunction.definition.EllipticEIntegralEstimator; +import org.drip.specialfunction.definition.RegularHypergeometricEstimator; +import org.drip.specialfunction.hypergeometric.EulerQuadratureEstimator; + /* * -*- 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 @@ /** * EllipticEIntegral implements the Elliptic E Integral Function from the 2F1 Hyper-geometric - * Function. The References are: + * Function. The References are: * *

*

    @@ -103,45 +111,56 @@ * Wikipedia (2019): Hyper-geometric Function https://en.wikipedia.org/wiki/Hypergeometric_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 EllipticEIntegral extends org.drip.specialfunction.definition.EllipticEIntegralEstimator +public class EllipticEIntegral extends EllipticEIntegralEstimator { - private org.drip.specialfunction.definition.RegularHypergeometricEstimator - _regularHypergeometricEstimator = null; + private RegularHypergeometricEstimator _regularHypergeometricEstimator = null; /** - * EllipticEIntegral Constructor + * EllipticEIntegral Constructor * * @param logBetaEstimator Log Beta Estimator * @param quadratureCount Quadrature Count * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public EllipticEIntegral ( - final org.drip.function.definition.R2ToR1 logBetaEstimator, + final R2ToR1 logBetaEstimator, final int quadratureCount) - throws java.lang.Exception + throws Exception { super(); - _regularHypergeometricEstimator = new - org.drip.specialfunction.hypergeometric.EulerQuadratureEstimator ( - hypergeometricParameters(), - logBetaEstimator, - quadratureCount - ); + _regularHypergeometricEstimator = new EulerQuadratureEstimator ( + hypergeometricParameters(), + logBetaEstimator, + quadratureCount + ); } /** @@ -150,16 +169,15 @@ public EllipticEIntegral ( * @return The 2F1 Hyper-geometric Function Estimator */ - public org.drip.specialfunction.definition.RegularHypergeometricEstimator - regularHypergeometricEstimator() + public RegularHypergeometricEstimator regularHypergeometricEstimator() { return _regularHypergeometricEstimator; } @Override public double ellipticEIntegral ( final double k) - throws java.lang.Exception + throws Exception { - return 0.5 * java.lang.Math.PI * _regularHypergeometricEstimator.regularHypergeometric (k * k); + return 0.5 * Math.PI * _regularHypergeometricEstimator.regularHypergeometric (k * k); } } diff --git a/src/main/java/org/drip/specialfunction/derived/EllipticKIntegral.java b/src/main/java/org/drip/specialfunction/derived/EllipticKIntegral.java index a88898d96536..609b06d8532a 100644 --- a/src/main/java/org/drip/specialfunction/derived/EllipticKIntegral.java +++ b/src/main/java/org/drip/specialfunction/derived/EllipticKIntegral.java @@ -1,11 +1,19 @@ package org.drip.specialfunction.derived; +import org.drip.function.definition.R2ToR1; +import org.drip.specialfunction.definition.EllipticKIntegralEstimator; +import org.drip.specialfunction.definition.RegularHypergeometricEstimator; +import org.drip.specialfunction.hypergeometric.EulerQuadratureEstimator; + /* * -*- 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 @@ /** * EllipticKIntegral implements the Elliptic K Integral Function from the 2F1 Hyper-geometric - * Function. The References are: + * Function. The References are: * *

*
    @@ -103,45 +111,56 @@ * Wikipedia (2019): Hyper-geometric Function https://en.wikipedia.org/wiki/Hypergeometric_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 EllipticKIntegral extends org.drip.specialfunction.definition.EllipticKIntegralEstimator +public class EllipticKIntegral extends EllipticKIntegralEstimator { - private org.drip.specialfunction.definition.RegularHypergeometricEstimator - _regularHypergeometricEstimator = null; + private RegularHypergeometricEstimator _regularHypergeometricEstimator = null; /** - * EllipticKIntegral Constructor + * EllipticKIntegral Constructor * * @param logBetaEstimator Log Beta Estimator * @param quadratureCount Quadrature Count * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public EllipticKIntegral ( - final org.drip.function.definition.R2ToR1 logBetaEstimator, + final R2ToR1 logBetaEstimator, final int quadratureCount) - throws java.lang.Exception + throws Exception { super(); - _regularHypergeometricEstimator = new - org.drip.specialfunction.hypergeometric.EulerQuadratureEstimator ( - hypergeometricParameters(), - logBetaEstimator, - quadratureCount - ); + _regularHypergeometricEstimator = new EulerQuadratureEstimator ( + hypergeometricParameters(), + logBetaEstimator, + quadratureCount + ); } /** @@ -150,16 +169,15 @@ public EllipticKIntegral ( * @return The 2F1 Hyper-geometric Function Estimator */ - public org.drip.specialfunction.definition.RegularHypergeometricEstimator - regularHypergeometricEstimator() + public RegularHypergeometricEstimator regularHypergeometricEstimator() { return _regularHypergeometricEstimator; } @Override public double ellipticKIntegral ( final double k) - throws java.lang.Exception + throws Exception { - return 0.5 * java.lang.Math.PI * _regularHypergeometricEstimator.regularHypergeometric (k * k); + return 0.5 * Math.PI * _regularHypergeometricEstimator.regularHypergeometric (k * k); } } diff --git a/src/main/java/org/drip/specialfunction/derived/Jacobi.java b/src/main/java/org/drip/specialfunction/derived/Jacobi.java index b99d081d0380..c3d3e3209f6e 100644 --- a/src/main/java/org/drip/specialfunction/derived/Jacobi.java +++ b/src/main/java/org/drip/specialfunction/derived/Jacobi.java @@ -1,11 +1,19 @@ package org.drip.specialfunction.derived; +import org.drip.numerical.common.NumberUtil; +import org.drip.specialfunction.definition.JacobiEstimator; +import org.drip.specialfunction.definition.RegularHypergeometricEstimator; +import org.drip.specialfunction.hypergeometric.EulerQuadratureEstimator; + /* * -*- 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 @@ -102,25 +110,37 @@ * Wikipedia (2019): Hyper-geometric Function https://en.wikipedia.org/wiki/Hypergeometric_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 Jacobi extends org.drip.specialfunction.definition.JacobiEstimator +public class Jacobi extends JacobiEstimator { - private org.drip.specialfunction.definition.RegularHypergeometricEstimator - _regularHypergeometricEstimator = null; + private RegularHypergeometricEstimator _regularHypergeometricEstimator = null; /** - * Jacobi Constructor + * Jacobi Constructor * * @param alpha Alpha * @param beta Beta @@ -128,7 +148,7 @@ public class Jacobi extends org.drip.specialfunction.definition.JacobiEstimator * @param logBetaEstimator Log Beta Estimator * @param quadratureCount Quadrature Count * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public Jacobi ( @@ -137,20 +157,15 @@ public Jacobi ( final int n, final org.drip.function.definition.R2ToR1 logBetaEstimator, final int quadratureCount) - throws java.lang.Exception + throws Exception { - super ( - alpha, - beta, - n - ); + super (alpha, beta, n); - _regularHypergeometricEstimator = new - org.drip.specialfunction.hypergeometric.EulerQuadratureEstimator ( - hypergeometricParameters(), - logBetaEstimator, - quadratureCount - ); + _regularHypergeometricEstimator = new EulerQuadratureEstimator ( + hypergeometricParameters(), + logBetaEstimator, + quadratureCount + ); } /** @@ -159,22 +174,18 @@ public Jacobi ( * @return The 2F1 Hyper-geometric Function Estimator */ - public org.drip.specialfunction.definition.RegularHypergeometricEstimator - regularHypergeometricEstimator() + public RegularHypergeometricEstimator regularHypergeometricEstimator() { return _regularHypergeometricEstimator; } @Override public double jacobi ( final double z) - throws java.lang.Exception + throws Exception { int n = n(); return _regularHypergeometricEstimator.regularHypergeometric (1. - 2. * z) * - org.drip.numerical.common.NumberUtil.PochhammerSymbol ( - alpha() + 1, - n - ) / org.drip.numerical.common.NumberUtil.Factorial (n); + NumberUtil.PochhammerSymbol (alpha() + 1, n) / NumberUtil.Factorial (n); } } diff --git a/src/main/java/org/drip/specialfunction/derived/Kummer.java b/src/main/java/org/drip/specialfunction/derived/Kummer.java index 593e3f338faa..59b3ccecbd18 100644 --- a/src/main/java/org/drip/specialfunction/derived/Kummer.java +++ b/src/main/java/org/drip/specialfunction/derived/Kummer.java @@ -1,11 +1,17 @@ package org.drip.specialfunction.derived; +import org.drip.specialfunction.definition.ConfluentHypergeometricEstimator; +import org.drip.specialfunction.definition.RegularHypergeometricEstimator; + /* * -*- 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 @@ /** * Kummer implements the Kummer's Confluent Hyper-geometric Function from the 2F1 Hyper-geometric - * Function. The References are: + * Function. The References are: * *

*
    @@ -103,36 +109,46 @@ * Wikipedia (2019): Hyper-geometric Function https://en.wikipedia.org/wiki/Hypergeometric_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 Kummer extends - org.drip.specialfunction.definition.ConfluentHypergeometricEstimator +public class Kummer extends ConfluentHypergeometricEstimator { - private org.drip.specialfunction.definition.RegularHypergeometricEstimator - _regularHypergeometricEstimator = null; + private RegularHypergeometricEstimator _regularHypergeometricEstimator = null; /** - * Kummer Constructor + * Kummer Constructor * * @param regularHypergeometricEstimator Regular Hyper-geometric Estimator * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public Kummer ( - final org.drip.specialfunction.definition.RegularHypergeometricEstimator - regularHypergeometricEstimator) - throws java.lang.Exception + final RegularHypergeometricEstimator regularHypergeometricEstimator) + throws Exception { super (regularHypergeometricEstimator.hypergeometricParameters()); @@ -145,15 +161,14 @@ public Kummer ( * @return The 2F1 Hyper-geometric Function Estimator */ - public org.drip.specialfunction.definition.RegularHypergeometricEstimator - regularHypergeometricEstimator() + public RegularHypergeometricEstimator regularHypergeometricEstimator() { return _regularHypergeometricEstimator; } @Override public double confluentHypergeometric ( final double z) - throws java.lang.Exception + throws Exception { return _regularHypergeometricEstimator.regularHypergeometric (z / hypergeometricParameters().b()); } diff --git a/src/main/java/org/drip/specialfunction/derived/Legendre.java b/src/main/java/org/drip/specialfunction/derived/Legendre.java index 46823a60d34f..364dd2c834b2 100644 --- a/src/main/java/org/drip/specialfunction/derived/Legendre.java +++ b/src/main/java/org/drip/specialfunction/derived/Legendre.java @@ -1,11 +1,19 @@ package org.drip.specialfunction.derived; +import org.drip.function.definition.R1ToR1; +import org.drip.function.definition.R2ToR1; +import org.drip.specialfunction.definition.LegendreEstimator; +import org.drip.specialfunction.hypergeometric.EulerQuadratureEstimator; + /* * -*- 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 @@ /** * Legendre implements the Legendre Function from the 2F1 Hyper-geometric Function. The References - * are: + * are: * *

*
    @@ -103,21 +111,35 @@ * Wikipedia (2019): Hyper-geometric Function https://en.wikipedia.org/wiki/Hypergeometric_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 Legendre extends org.drip.specialfunction.definition.LegendreEstimator +public class Legendre extends LegendreEstimator { - private org.drip.function.definition.R1ToR1 _gammaEstimator = null; + private R1ToR1 _gammaEstimator = null; private org.drip.specialfunction.definition.RegularHypergeometricEstimator _regularHypergeometricEstimator = null; @@ -130,33 +152,28 @@ public class Legendre extends org.drip.specialfunction.definition.LegendreEstima * @param quadratureCount Quadrature Count * @param gammaEstimator Gamma Estimator * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public Legendre ( final double alpha, final double ceta, - final org.drip.function.definition.R2ToR1 logBetaEstimator, + final R2ToR1 logBetaEstimator, final int quadratureCount, - final org.drip.function.definition.R1ToR1 gammaEstimator) + final R1ToR1 gammaEstimator) throws java.lang.Exception { - super ( - alpha, - ceta - ); + super (alpha, ceta); - if (null == (_gammaEstimator = gammaEstimator)) - { - throw new java.lang.Exception ("Legendre Constructor => Invalid Inputs"); + if (null == (_gammaEstimator = gammaEstimator)) { + throw new Exception ("Legendre Constructor => Invalid Inputs"); } - _regularHypergeometricEstimator = new - org.drip.specialfunction.hypergeometric.EulerQuadratureEstimator ( - hypergeometricParameters(), - logBetaEstimator, - quadratureCount - ); + _regularHypergeometricEstimator = new EulerQuadratureEstimator ( + hypergeometricParameters(), + logBetaEstimator, + quadratureCount + ); } /** @@ -177,20 +194,20 @@ public Legendre ( * @return The Gamma Estimator */ - public org.drip.function.definition.R1ToR1 gammaEstimator() + public R1ToR1 gammaEstimator() { return _gammaEstimator; } @Override public double legendre ( final double z) - throws java.lang.Exception + throws Exception { double c = hypergeometricParameters().c(); double z2F1 = 1. - 2. * z; - return _regularHypergeometricEstimator.regularHypergeometric (z2F1) * java.lang.Math.pow ( + return _regularHypergeometricEstimator.regularHypergeometric (z2F1) * Math.pow ( z2F1 / (1. - z2F1), 0.5 * (c - 1.) ) / _gammaEstimator.evaluate (c); diff --git a/src/main/java/org/drip/specialfunction/derived/LogBigPi.java b/src/main/java/org/drip/specialfunction/derived/LogBigPi.java index 4a196655efc9..83237c25aec6 100644 --- a/src/main/java/org/drip/specialfunction/derived/LogBigPi.java +++ b/src/main/java/org/drip/specialfunction/derived/LogBigPi.java @@ -1,11 +1,18 @@ package org.drip.specialfunction.derived; +import org.drip.function.definition.R1ToR1; +import org.drip.numerical.common.NumberUtil; +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 @@ -101,21 +108,36 @@ * 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 LogBigPi extends org.drip.function.definition.R1ToR1 +public class LogBigPi extends R1ToR1 { - private org.drip.function.definition.R1ToR1 _logGammaEstimator = null; + private R1ToR1 _logGammaEstimator = null; /** * Generate the Weierstrass Infinite Sum Series Version of Log Big Pi Estimator @@ -128,12 +150,9 @@ public class LogBigPi extends org.drip.function.definition.R1ToR1 public static final LogBigPi Weierstrass ( final int termCount) { - try - { - return new LogBigPi (org.drip.specialfunction.loggamma.InfiniteSumEstimator.Weierstrass (termCount)); - } - catch (java.lang.Exception e) - { + try { + return new LogBigPi (InfiniteSumEstimator.Weierstrass (termCount)); + } catch (Exception e) { e.printStackTrace(); } @@ -148,56 +167,51 @@ public static final LogBigPi Weierstrass ( * * @return The Volume of the N-Ellipsoid * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public static final double NEllipsoidVolume ( final int termCount, final double[] radiusArray) - throws java.lang.Exception + throws Exception { - if (null == radiusArray) - { - throw new java.lang.Exception ("LogBigPi::NEllipsoidVolume => Invalid Inputs"); + if (null == radiusArray) { + throw new Exception ("LogBigPi::NEllipsoidVolume => Invalid Inputs"); } int radiusCount = radiusArray.length; - if (0 == radiusCount || org.drip.numerical.common.NumberUtil.IsValid (radiusArray)) - { - throw new java.lang.Exception ("LogBigPi::NEllipsoidVolume => Invalid Inputs"); + if (0 == radiusCount || NumberUtil.IsValid (radiusArray)) { + throw new Exception ("LogBigPi::NEllipsoidVolume => Invalid Inputs"); } double halfN = 0.5 * radiusCount; - double logNEllipsoidVolume = halfN * java.lang.Math.log (java.lang.Math.PI) - - Weierstrass (termCount).evaluate (halfN); + double logNEllipsoidVolume = halfN * Math.log (Math.PI) - Weierstrass (termCount).evaluate (halfN); - for (int radiusIndex = 0; radiusIndex < radiusCount; ++radiusIndex) - { + for (int radiusIndex = 0; radiusIndex < radiusCount; ++radiusIndex) { logNEllipsoidVolume = logNEllipsoidVolume + radiusArray[radiusIndex]; } - return java.lang.Math.exp (logNEllipsoidVolume); + return Math.exp (logNEllipsoidVolume); } /** - * LogBigPi Constructor + * LogBigPi Constructor * * @param logGammaEstimator The Log Gamma Estimator * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public LogBigPi ( - final org.drip.function.definition.R1ToR1 logGammaEstimator) - throws java.lang.Exception + final R1ToR1 logGammaEstimator) + throws Exception { super (null); - if (null == (_logGammaEstimator = logGammaEstimator)) - { - throw new java.lang.Exception ("LogBigPi Constructor => Invalid Inputs"); + if (null == (_logGammaEstimator = logGammaEstimator)) { + throw new Exception ("LogBigPi Constructor => Invalid Inputs"); } } @@ -207,18 +221,17 @@ public LogBigPi ( * @return The Log Gamma Estimator */ - public org.drip.function.definition.R1ToR1 logGammaEstimator() + public R1ToR1 logGammaEstimator() { return _logGammaEstimator; } @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 ("LogBigPi::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (z)) { + throw new Exception ("LogBigPi::evaluate => Invalid Inputs"); } return _logGammaEstimator.evaluate (z + 1.);