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:
*
*
*
@@ -105,41 +113,53 @@
* https://en.wikipedia.org/wiki/Incomplete_gamma_function
*
*
+ *
+ * It provides the following functionality:
*
- *
*
*
+ *
+ *
+ *
+ *
+ *
* @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:
*
*
*
@@ -105,46 +112,60 @@
* https://en.wikipedia.org/wiki/Incomplete_gamma_function
*
*
+ *
+ * It provides the following functionality:
*
- *
*
*
+ *
+ *
+ *
+ *
+ *
* @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:
*
*
*
@@ -105,41 +113,53 @@
* https://en.wikipedia.org/wiki/Incomplete_gamma_function
*
*
+ *
+ * It provides the following functionality:
*
- *
*
*
+ *
+ *
+ *
+ *
+ *
* @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);
}
}
);