diff --git a/ReleaseNotes/08_01_2023.txt b/ReleaseNotes/08_01_2023.txt new file mode 100644 index 00000000000..9a7312976f5 --- /dev/null +++ b/ReleaseNotes/08_01_2023.txt @@ -0,0 +1,31 @@ + +Features: + +Bug Fixes/Re-organization: + + - Special Function Incomplete Gamma Limit Asymptote - Constructor (1) + - Special Function Incomplete Gamma Limit Asymptote - Z Zero (2) + - Special Function Incomplete Gamma Limit Asymptote - Z Infinity (3) + - Special Function Incomplete Gamma Lower Euler Integral (4, 5, 6) + - Special Function Incomplete Gamma Lower Euler Integral - Limit (7, 8) + - Special Function Incomplete Gamma Lower Euler Integral - Constructor (9, 10) + - Special Function Incomplete Gamma Lower Euler Integral - Evaluate (11, 12, 13) + - Special Function Incomplete Gamma Lower Limit Power Integrand (14, 15, 16) + - Special Function Incomplete Gamma Lower Limit Power Integrand - s (17, 18) + - Special Function Incomplete Gamma Lower Limit Power Integrand - Exponent (19, 20) + - Special Function Incomplete Gamma Lower Limit Power Integrand - Constructor (21, 22) + - Special Function Incomplete Gamma Lower Limit Power Integrand - Evaluate (23, 24) + - Special Function Incomplete Gamma Lower Limit Power Integrand - Anti-derivative (25, 26, 27) + - Special Function Incomplete Gamma Lower Limit Power Integrand - Evaluate (28, 29) + - Special Function Incomplete Gamma Upper Euler Integral (30, 31, 32) + - Special Function Incomplete Gamma Upper Euler Integral - Limit (33, 34) + - Special Function Incomplete Gamma Upper Euler Integral - Constructor (35, 36) + - Special Function Incomplete Gamma Upper Euler Integral - Evaluate (37, 38, 39) + + +Samples: + +IdeaDRIP: + + - Regression for Curreny Returns (Results in Exhibits 2.18-2.20) (40-46) + - A Short-List of Risk Factors of a Top-down Asset Allocation Exercise (47-60) diff --git a/ScheduleSheet.xlsx b/ScheduleSheet.xlsx index e814dadb650..63f6d57d580 100644 Binary files a/ScheduleSheet.xlsx and b/ScheduleSheet.xlsx differ diff --git a/src/main/java/org/drip/specialfunction/incompletegamma/LowerEulerIntegral.java b/src/main/java/org/drip/specialfunction/incompletegamma/LowerEulerIntegral.java index 96bf8fb04d1..52b56420052 100644 --- a/src/main/java/org/drip/specialfunction/incompletegamma/LowerEulerIntegral.java +++ b/src/main/java/org/drip/specialfunction/incompletegamma/LowerEulerIntegral.java @@ -1,11 +1,19 @@ package org.drip.specialfunction.incompletegamma; +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 @@ /** * LowerEulerIntegral implements the Euler's Second Kind Integral Version of the Lower Incomplete - * Gamma Function. The References are: + * Gamma Function. The References are: * *

* + * + * It provides the following functionality: * - *

* * + *
+ * + * + * + * + * + * + * + *
Module Computational Core Module
Library Function Analysis Library
Project Special Function Implementation and Analysis
Package Upper/Lower Incomplete Gamma Functions
+ * * @author Lakshmi Krishnamurthy */ -public class LowerEulerIntegral extends org.drip.function.definition.R1ToR1 +public class LowerEulerIntegral extends R1ToR1 { - private double _limit = java.lang.Double.NaN; + private double _limit = Double.NaN; /** - * LowerEulerIntegral Constructor + * LowerEulerIntegral Constructor * * @param limit The Upper Limit - * @param dc The Derivative Control + * @param derivativeControl The Derivative Control * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public LowerEulerIntegral ( - final org.drip.numerical.differentiation.DerivativeControl dc, + final DerivativeControl derivativeControl, final double limit) - throws java.lang.Exception + throws Exception { - super (dc); + super (derivativeControl); - if (!org.drip.numerical.common.NumberUtil.IsValid (_limit = limit)) - { - throw new java.lang.Exception ("LowerEulerIntegral Constructor => Invalid Inputs"); + if (!NumberUtil.IsValid (_limit = limit)) { + throw new Exception ("LowerEulerIntegral Constructor => Invalid Inputs"); } } @@ -156,30 +176,19 @@ public double limit() @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 ("LowerEulerIntegral::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (s)) { + throw new Exception ("LowerEulerIntegral::evaluate => Invalid Inputs"); } - return org.drip.numerical.integration.NewtonCotesQuadratureGenerator.Zero_PlusOne ( - 0., - _limit, - 10000 - ).integrate ( - new org.drip.function.definition.R1ToR1 (null) - { + return NewtonCotesQuadratureGenerator.Zero_PlusOne (0., _limit, 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. : (0 == t ? 1. : - java.lang.Math.pow ( - t, - s - 1 - ) - ) * java.lang.Math.exp (-t); + return Double.isInfinite (t) ? 0. : (0 == t ? 1. : Math.pow (t, s - 1)) * Math.exp (-t); } } ); diff --git a/src/main/java/org/drip/specialfunction/incompletegamma/LowerLimitPowerIntegrand.java b/src/main/java/org/drip/specialfunction/incompletegamma/LowerLimitPowerIntegrand.java index 7916c220140..9f4ea911a36 100644 --- a/src/main/java/org/drip/specialfunction/incompletegamma/LowerLimitPowerIntegrand.java +++ b/src/main/java/org/drip/specialfunction/incompletegamma/LowerLimitPowerIntegrand.java @@ -1,11 +1,18 @@ package org.drip.specialfunction.incompletegamma; +import org.drip.function.definition.R1ToR1; +import org.drip.numerical.common.NumberUtil; +import org.drip.numerical.differentiation.DerivativeControl; + /* * -*- 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 @@ /** * LowerLimitPowerIntegrand contains the Integrand that is the Product of the Limit raised to a Power - * Exponent and the corresponding Lower Incomplete Gamma, for a given s. The References are: + * Exponent and the corresponding Lower Incomplete Gamma, for a given s. The References are: * *

* + * + * It provides the following functionality: * - *

* * + *
+ * + * + * + * + * + * + * + *
Module Computational Core Module
Library Function Analysis Library
Project Special Function Implementation and Analysis
Package Upper/Lower Incomplete Gamma Functions
+ * * @author Lakshmi Krishnamurthy */ -public class LowerLimitPowerIntegrand extends org.drip.function.definition.R1ToR1 +public class LowerLimitPowerIntegrand extends R1ToR1 { - private double _s = java.lang.Double.NaN; - private double _limitExponent = java.lang.Double.NaN; + private double _s = Double.NaN; + private double _limitExponent = Double.NaN; /** - * LowerLimitPowerIntegrand Constructor + * LowerLimitPowerIntegrand Constructor * - * @param dc The Derivative Control + * @param derivativeControl The Derivative Control * @param s s * @param limitExponent The Limit Power Exponent * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public LowerLimitPowerIntegrand ( - final org.drip.numerical.differentiation.DerivativeControl dc, + final DerivativeControl derivativeControl, final double s, final double limitExponent) - throws java.lang.Exception + throws Exception { - super (dc); + super (derivativeControl); - if (!org.drip.numerical.common.NumberUtil.IsValid (_s = s) || - !org.drip.numerical.common.NumberUtil.IsValid (_limitExponent = limitExponent) || - 1. >= _limitExponent) + if (!NumberUtil.IsValid (_s = s) || + !NumberUtil.IsValid (_limitExponent = limitExponent) || + 1. >= _limitExponent) { - throw new java.lang.Exception ("LowerLimitPowerIntegrand Constructor => Invalid Inputs"); + throw new Exception ("LowerLimitPowerIntegrand Constructor => Invalid Inputs"); } } @@ -172,48 +193,31 @@ public double limitExponent() @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 ("LowerLimitPowerIntegrand::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (z)) { + throw new Exception ("LowerLimitPowerIntegrand::evaluate => Invalid Inputs"); } - return java.lang.Math.pow ( - z, - _limitExponent - 1. - ) * new org.drip.specialfunction.incompletegamma.LowerEulerIntegral ( - null, - z - ).evaluate (_s); + return Math.pow (z, _limitExponent - 1.) * new LowerEulerIntegral (null, z).evaluate (_s); } - @Override public org.drip.function.definition.R1ToR1 antiDerivative() + @Override public R1ToR1 antiDerivative() { - return new org.drip.function.definition.R1ToR1 (null) - { + return new R1ToR1 (null) { @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 - ("LowerLimitPowerIntegrand::antiDerivative::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (z)) { + throw new Exception ( + "LowerLimitPowerIntegrand::antiDerivative::evaluate => Invalid Inputs" + ); } return ( - java.lang.Math.pow ( - z, - _limitExponent - ) * new org.drip.specialfunction.incompletegamma.LowerEulerIntegral ( - null, - z - ).evaluate (_s) + - new org.drip.specialfunction.incompletegamma.UpperEulerIntegral ( - null, - z - ).evaluate (_s + _limitExponent) + Math.pow (z, _limitExponent) * new LowerEulerIntegral (null, z).evaluate (_s) + + new UpperEulerIntegral (null, z).evaluate (_s + _limitExponent) ) / _limitExponent; } }; @@ -222,9 +226,9 @@ public double limitExponent() @Override public double integrate ( final double left, final double right) - throws java.lang.Exception + throws Exception { - org.drip.function.definition.R1ToR1 antiDerivative = antiDerivative(); + R1ToR1 antiDerivative = antiDerivative(); return antiDerivative.evaluate (right) - antiDerivative.evaluate (left); } diff --git a/src/main/java/org/drip/specialfunction/incompletegamma/UpperEulerIntegral.java b/src/main/java/org/drip/specialfunction/incompletegamma/UpperEulerIntegral.java index 9a9653b3820..8feb84083fc 100644 --- a/src/main/java/org/drip/specialfunction/incompletegamma/UpperEulerIntegral.java +++ b/src/main/java/org/drip/specialfunction/incompletegamma/UpperEulerIntegral.java @@ -1,11 +1,19 @@ package org.drip.specialfunction.incompletegamma; +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 @@ /** * UpperEulerIntegral implements the Euler's Second Kind Integral Version of the Upper Incomplete - * Gamma Function. The References are: + * Gamma Function. The References are: * *

* + * + * It provides the following functionality: * - *

* * + *
+ * + * + * + * + * + * + * + *
Module Computational Core Module
Library Function Analysis Library
Project Special Function Implementation and Analysis
Package Upper/Lower Incomplete Gamma Functions
+ * * @author Lakshmi Krishnamurthy */ -public class UpperEulerIntegral extends org.drip.function.definition.R1ToR1 +public class UpperEulerIntegral extends R1ToR1 { - private double _limit = java.lang.Double.NaN; + private double _limit = Double.NaN; /** - * UpperEulerIntegral Constructor + * UpperEulerIntegral Constructor * - * @param dc The Derivative Control + * @param derivativeControl The Derivative Control * @param limit The Lower Limit * - * @throws java.lang.Exception Thrown if the Inputs are Invalid + * @throws Exception Thrown if the Inputs are Invalid */ public UpperEulerIntegral ( - final org.drip.numerical.differentiation.DerivativeControl dc, + final DerivativeControl derivativeControl, final double limit) - throws java.lang.Exception + throws Exception { - super (dc); + super (derivativeControl); - if (!org.drip.numerical.common.NumberUtil.IsValid (_limit = limit)) - { - throw new java.lang.Exception ("UpperEulerIntegral Constructor => Invalid Inputs"); + if (!NumberUtil.IsValid (_limit = limit)) { + throw new Exception ("UpperEulerIntegral Constructor => Invalid Inputs"); } } @@ -156,27 +176,19 @@ public double limit() @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 ("UpperEulerIntegral::evaluate => Invalid Inputs"); + if (!NumberUtil.IsValid (s)) { + throw new Exception ("UpperEulerIntegral::evaluate => Invalid Inputs"); } - return org.drip.numerical.integration.NewtonCotesQuadratureGenerator.GaussLaguerreLeftDefinite ( - _limit, - 100 - ).integrate ( - new org.drip.function.definition.R1ToR1 (null) - { + return NewtonCotesQuadratureGenerator.GaussLaguerreLeftDefinite (_limit, 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, - s - 1 - ) * java.lang.Math.exp (-t); + return Double.isInfinite (t) ? 0. : Math.pow (t, s - 1) * Math.exp (-t); } } );