From c71ba35a5358f5ab30307d1c5dfb166cb8f8d97d Mon Sep 17 00:00:00 2001 From: Lakshmi Krishnamurthy Date: Sat, 12 Aug 2023 00:01:29 -0400 Subject: [PATCH] Features: - Composite R^1 Exponential Distribution Shell (1, 2) - Minimum Among Exponential Distribution #1 (3, 4) - Minimum Among Exponential Distribution #2 (5, 6, 7) - Composite R^1 Exponential Distribution Constructor (8, 9, 10) - Minimum of Realized Exponential Distributions (11, 12) - Composite R^1 Rate Distribution Shell (15, 16) - Realized R^1 Rate Distribution Standard (17, 18, 19) - Realized R^1 Rate Distribution Constructor (20, 21, 22) - R^1 Exponential Rate Distribution Array (23, 24, 25) - Probability of Index as Minimum (26, 27, 28) - Composite R^1 Order Statistics Shell (29, 30) - Exponential IID Joint Moment #1 (31, 32, 33) - Exponential IID Joint Moment #2 (34, 35, 36) - Exponential IID Joint Moment #3 (37, 38, 39) - Exponential IID Joint Moment #4 (40, 41, 42) - Two IID Exponential Sum Shell (43, 44) - Smaller R^1 Exponential Rate Distribution (45, 46) - Larger R^1 Exponential Rate Distribution (47, 48) - Two IID Exponential Sum Constructor (49, 50, 51) - Two IID Exponential Sum Support (52) - Two IID Exponential Sum Density (53, 54, 55) - Two IID Sum Quadrature Count (56, 57) - Two IID Exponential Sum Mean (58, 59, 60) Bug Fixes/Re-organization: - Composite R^1 To Minima Realization (13, 14) Samples: IdeaDRIP: --- ReleaseNotes/12_22_2022.txt | 37 +++ ScheduleSheet.xlsx | Bin 25702 -> 38267 bytes .../CompositeR1OrderStatistics.java | 175 ++++++++++ .../exponential/R1RateDistribution.java | 8 +- .../RealizedMinimaR1RateDistribution.java | 215 ++++++++++++ .../drip/measure/exponential/TwoIIDSum.java | 308 ++++++++++++++++++ 6 files changed, 739 insertions(+), 4 deletions(-) create mode 100644 ReleaseNotes/12_22_2022.txt create mode 100644 src/main/java/org/drip/measure/exponential/CompositeR1OrderStatistics.java create mode 100644 src/main/java/org/drip/measure/exponential/RealizedMinimaR1RateDistribution.java create mode 100644 src/main/java/org/drip/measure/exponential/TwoIIDSum.java diff --git a/ReleaseNotes/12_22_2022.txt b/ReleaseNotes/12_22_2022.txt new file mode 100644 index 000000000000..ea3f40243c84 --- /dev/null +++ b/ReleaseNotes/12_22_2022.txt @@ -0,0 +1,37 @@ + +Features: + + - Composite R^1 Exponential Distribution Shell (1, 2) + - Minimum Among Exponential Distribution #1 (3, 4) + - Minimum Among Exponential Distribution #2 (5, 6, 7) + - Composite R^1 Exponential Distribution Constructor (8, 9, 10) + - Minimum of Realized Exponential Distributions (11, 12) + - Composite R^1 Rate Distribution Shell (15, 16) + - Realized R^1 Rate Distribution Standard (17, 18, 19) + - Realized R^1 Rate Distribution Constructor (20, 21, 22) + - R^1 Exponential Rate Distribution Array (23, 24, 25) + - Probability of Index as Minimum (26, 27, 28) + - Composite R^1 Order Statistics Shell (29, 30) + - Exponential IID Joint Moment #1 (31, 32, 33) + - Exponential IID Joint Moment #2 (34, 35, 36) + - Exponential IID Joint Moment #3 (37, 38, 39) + - Exponential IID Joint Moment #4 (40, 41, 42) + - Two IID Exponential Sum Shell (43, 44) + - Smaller R^1 Exponential Rate Distribution (45, 46) + - Larger R^1 Exponential Rate Distribution (47, 48) + - Two IID Exponential Sum Constructor (49, 50, 51) + - Two IID Exponential Sum Support (52) + - Two IID Exponential Sum Density (53, 54, 55) + - Two IID Sum Quadrature Count (56, 57) + - Two IID Exponential Sum Mean (58, 59, 60) + + +Bug Fixes/Re-organization: + + - Composite R^1 To Minima Realization (13, 14) + + +Samples: + + +IdeaDRIP: diff --git a/ScheduleSheet.xlsx b/ScheduleSheet.xlsx index 24338f8a20f2037b819edd2b9359b9677767ea98..a535ffd72d2caa087847959ab68c8671a94e1dfa 100644 GIT binary patch delta 31512 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 -m3UJc6EDh5ytxYJE!!Giy=4j8b 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 NQo9uO1l;-O>OXBG+?D_U diff --git a/src/main/java/org/drip/measure/exponential/CompositeR1OrderStatistics.java b/src/main/java/org/drip/measure/exponential/CompositeR1OrderStatistics.java new file mode 100644 index 000000000000..1148e406f037 --- /dev/null +++ b/src/main/java/org/drip/measure/exponential/CompositeR1OrderStatistics.java @@ -0,0 +1,175 @@ + +package org.drip.measure.exponential; + +/* + * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + */ + +/*! + * Copyright (C) 2023 Lakshmi Krishnamurthy + * + * This file is part of DROP, an open-source library targeting analytics/risk, transaction cost analytics, + * asset liability management analytics, capital, exposure, and margin analytics, valuation adjustment + * analytics, and portfolio construction analytics within and across fixed income, credit, commodity, + * equity, FX, and structured products. It also includes auxiliary libraries for algorithm support, + * numerical analysis, numerical optimization, spline builder, model validation, statistical learning, + * graph builder/navigator, and computational support. + * + * https://lakshmidrip.github.io/DROP/ + * + * DROP is composed of three modules: + * + * - DROP Product Core - https://lakshmidrip.github.io/DROP-Product-Core/ + * - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/ + * - DROP Computational Core - https://lakshmidrip.github.io/DROP-Computational-Core/ + * + * DROP Product Core implements libraries for the following: + * - Fixed Income Analytics + * - Loan Analytics + * - Transaction Cost Analytics + * + * DROP Portfolio Core implements libraries for the following: + * - Asset Allocation Analytics + * - Asset Liability Management Analytics + * - Capital Estimation Analytics + * - Exposure Analytics + * - Margin Analytics + * - XVA Analytics + * + * DROP Computational Core implements libraries for the following: + * - Algorithm Support + * - Computation Support + * - Function Analysis + * - Graph Algorithm + * - Model Validation + * - Numerical Analysis + * - Numerical Optimizer + * - Spline Builder + * - Statistical Learning + * + * Documentation for DROP is Spread Over: + * + * - Main => https://lakshmidrip.github.io/DROP/ + * - Wiki => https://github.com/lakshmiDRIP/DROP/wiki + * - GitHub => https://github.com/lakshmiDRIP/DROP + * - Repo Layout Taxonomy => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md + * - Javadoc => https://lakshmidrip.github.io/DROP/Javadoc/index.html + * - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal + * - Release Versions => https://lakshmidrip.github.io/DROP/version.html + * - Community Credits => https://lakshmidrip.github.io/DROP/credits.html + * - Issues Catalog => https://github.com/lakshmiDRIP/DROP/issues + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * CompositeR1OrderStatistics generates the Order Statistics for a Composite Set of R1 + * Exponential Distributions. The References are: + * + *

+ *
    + *
  • + * Devroye, L. (1986): Non-Uniform Random Variate Generation Springer-Verlag New York + *
  • + *
  • + * Exponential Distribution (2019): Exponential Distribution + * https://en.wikipedia.org/wiki/Exponential_distribution + *
  • + *
  • + * Norton, M., V. Khokhlov, and S. Uryasev (2019): Calculating CVaR and bPOE for Common Probability + * Distributions with Application to Portfolio Optimization and Density Estimation Annals of + * Operations Research 299 (1-2) 1281-1315 + *
  • + *
  • + * Ross, S. M. (2009): Introduction to Probability and Statistics for Engineers and Scientists + * 4th Edition Associated Press New York, NY + *
  • + *
  • + * Schmidt, D. F., and D. Makalic (2009): Universal Models for the Exponential Distribution IEEE + * Transactions on Information Theory 55 (7) 3087-3090 + *
  • + *
+ * + *

+ *
+ * + * @author Lakshmi Krishnamurthy + */ + +public class CompositeR1OrderStatistics +{ + + /** + * Compute the Joint Moment of a Set of i.i.d. Distributions + * + * @param r1RateDistribution R1 Exponential Distribution + * @param variateCount Variate Count + * @param index1 First Index + * @param index2 Second Index + * + * @return Joint Moment of a Set of i.i.d. Distributions + * + * @throws Exception Thrown if the Inputs are Invalid + */ + + public static final double IIDJointMoment ( + final R1RateDistribution r1RateDistribution, + final int variateCount, + final int index1, + final int index2) + throws Exception + { + if (null == r1RateDistribution || + 0 > index1 || index1 >= variateCount || + 0 > index2 || index2 >= variateCount || index1 == index2 + ) + { + throw new Exception ( + "CompositeR1OrderStatistics::IIDJointMoment => Invalid Inputs" + ); + } + + double expectationMaxIndex = 0.; + double expectationMinIndex = 0.; + double expectationMinIndexSquared = 0.; + int maxIndex = index1 > index2 ? index1 : index2; + int minIndex = index1 < index2 ? index1 : index2; + + double inverseRate = 1. / r1RateDistribution.rate(); + + for (int k = 0; + k < minIndex; + ++k) + { + double expectation = inverseRate / (variateCount - k); + expectationMinIndexSquared += expectation * expectation; + expectationMinIndex += expectation; + } + + for (int k = 0; + k < maxIndex; + ++k) + { + expectationMaxIndex += inverseRate / (variateCount - k); + } + + return expectationMinIndex * expectationMaxIndex + expectationMinIndexSquared + + expectationMinIndex * expectationMinIndex; + } +} diff --git a/src/main/java/org/drip/measure/exponential/R1RateDistribution.java b/src/main/java/org/drip/measure/exponential/R1RateDistribution.java index 180335b1edbb..714bd7d6f8c8 100644 --- a/src/main/java/org/drip/measure/exponential/R1RateDistribution.java +++ b/src/main/java/org/drip/measure/exponential/R1RateDistribution.java @@ -163,9 +163,9 @@ public R1RateDistribution ( } /** - * Retrieve the Rate Parameter Lambda + * Retrieve the Lambda * - * @return Rate Parameter Lambda + * @return Lambda */ public double lambda() @@ -174,9 +174,9 @@ public double lambda() } /** - * Retrieve the Rate Parameter Lambda + * Retrieve the Rate Parameter * - * @return Rate Parameter Lambda + * @return Rate Parameter */ public double rate() diff --git a/src/main/java/org/drip/measure/exponential/RealizedMinimaR1RateDistribution.java b/src/main/java/org/drip/measure/exponential/RealizedMinimaR1RateDistribution.java new file mode 100644 index 000000000000..eb04e04f7cbe --- /dev/null +++ b/src/main/java/org/drip/measure/exponential/RealizedMinimaR1RateDistribution.java @@ -0,0 +1,215 @@ + +package org.drip.measure.exponential; + +/* + * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + */ + +/*! + * Copyright (C) 2023 Lakshmi Krishnamurthy + * + * This file is part of DROP, an open-source library targeting analytics/risk, transaction cost analytics, + * asset liability management analytics, capital, exposure, and margin analytics, valuation adjustment + * analytics, and portfolio construction analytics within and across fixed income, credit, commodity, + * equity, FX, and structured products. It also includes auxiliary libraries for algorithm support, + * numerical analysis, numerical optimization, spline builder, model validation, statistical learning, + * graph builder/navigator, and computational support. + * + * https://lakshmidrip.github.io/DROP/ + * + * DROP is composed of three modules: + * + * - DROP Product Core - https://lakshmidrip.github.io/DROP-Product-Core/ + * - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/ + * - DROP Computational Core - https://lakshmidrip.github.io/DROP-Computational-Core/ + * + * DROP Product Core implements libraries for the following: + * - Fixed Income Analytics + * - Loan Analytics + * - Transaction Cost Analytics + * + * DROP Portfolio Core implements libraries for the following: + * - Asset Allocation Analytics + * - Asset Liability Management Analytics + * - Capital Estimation Analytics + * - Exposure Analytics + * - Margin Analytics + * - XVA Analytics + * + * DROP Computational Core implements libraries for the following: + * - Algorithm Support + * - Computation Support + * - Function Analysis + * - Graph Algorithm + * - Model Validation + * - Numerical Analysis + * - Numerical Optimizer + * - Spline Builder + * - Statistical Learning + * + * Documentation for DROP is Spread Over: + * + * - Main => https://lakshmidrip.github.io/DROP/ + * - Wiki => https://github.com/lakshmiDRIP/DROP/wiki + * - GitHub => https://github.com/lakshmiDRIP/DROP + * - Repo Layout Taxonomy => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md + * - Javadoc => https://lakshmidrip.github.io/DROP/Javadoc/index.html + * - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal + * - Release Versions => https://lakshmidrip.github.io/DROP/version.html + * - Community Credits => https://lakshmidrip.github.io/DROP/credits.html + * - Issues Catalog => https://github.com/lakshmiDRIP/DROP/issues + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * RealizedMinimaR1RateDistribution implements the Rate Parameterization of the Realized Minimum among + * the Set of R1 Exponential Distributions. The References are: + * + *

+ *
    + *
  • + * Devroye, L. (1986): Non-Uniform Random Variate Generation Springer-Verlag New York + *
  • + *
  • + * Exponential Distribution (2019): Exponential Distribution + * https://en.wikipedia.org/wiki/Exponential_distribution + *
  • + *
  • + * Norton, M., V. Khokhlov, and S. Uryasev (2019): Calculating CVaR and bPOE for Common Probability + * Distributions with Application to Portfolio Optimization and Density Estimation Annals of + * Operations Research 299 (1-2) 1281-1315 + *
  • + *
  • + * Ross, S. M. (2009): Introduction to Probability and Statistics for Engineers and Scientists + * 4th Edition Associated Press New York, NY + *
  • + *
  • + * Schmidt, D. F., and D. Makalic (2009): Universal Models for the Exponential Distribution IEEE + * Transactions on Information Theory 55 (7) 3087-3090 + *
  • + *
+ * + *

+ * + * + * @author Lakshmi Krishnamurthy + */ + +public class RealizedMinimaR1RateDistribution + extends R1RateDistribution +{ + private R1RateDistribution[] _r1RateDistributionArray = null; + + /** + * Standard Instance of RealizedMinimaR1RateDistribution + * + * @param r1RateDistributionArray R1 Exponential Distribution Array + * + * @return Standard Instance of RealizedMinimaR1RateDistribution + */ + + public static final RealizedMinimaR1RateDistribution Standard ( + final R1RateDistribution[] r1RateDistributionArray) + throws Exception + { + if (null == r1RateDistributionArray) + { + throw new Exception ( + "RealizedMinimaR1RateDistribution Constructor => Invalid Input" + ); + } + + double compositeDistributionLambda = 0.; + int exponentialDistributionCount = r1RateDistributionArray.length; + + if (0 == exponentialDistributionCount) + { + return null; + } + + try + { + for (int distributionIndex = 0; + distributionIndex < exponentialDistributionCount; + ++distributionIndex) + { + compositeDistributionLambda += r1RateDistributionArray[distributionIndex].rate(); + } + + return new RealizedMinimaR1RateDistribution ( + r1RateDistributionArray, + compositeDistributionLambda + ); + } + catch (Exception e) + { + e.printStackTrace(); + } + + return null; + } + + private RealizedMinimaR1RateDistribution ( + final R1RateDistribution[] r1RateDistributionArray, + final double compositeDistributionLambda) + throws Exception + { + super ( + compositeDistributionLambda + ); + + _r1RateDistributionArray = r1RateDistributionArray; + } + + /** + * Retrieve the R1 Exponential Distribution Array + * + * @return The R1 Exponential Distribution Array + */ + + public R1RateDistribution[] r1RateDistributionArray() + { + return _r1RateDistributionArray; + } + + /** + * Calculate the Probability that the specified Index corresponds to the Realized Minimum + * + * @param index Specified Index + * + * @return Probability that the specified Index corresponds to the Realized Minimum + * + * @throws Exception Thrown if the Index cannot be calculated + */ + + public double probabilityOfIndexAsMinimum ( + final int index) + throws Exception + { + if (index >= _r1RateDistributionArray.length) + { + throw new Exception ( + "RealizedMinimaR1RateDistribution::probabilityOfIndexAsMinimum => Invalid Index" + ); + } + + return _r1RateDistributionArray[index].rate() / rate(); + } +} diff --git a/src/main/java/org/drip/measure/exponential/TwoIIDSum.java b/src/main/java/org/drip/measure/exponential/TwoIIDSum.java new file mode 100644 index 000000000000..2e017e6b1735 --- /dev/null +++ b/src/main/java/org/drip/measure/exponential/TwoIIDSum.java @@ -0,0 +1,308 @@ + +package org.drip.measure.exponential; + +import org.drip.function.definition.R1ToR1; +import org.drip.measure.continuous.R1Univariate; +import org.drip.numerical.integration.NewtonCotesQuadratureGenerator; +import org.drip.numerical.integration.R1ToR1Integrator; + +/* + * -*- mode: java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + */ + +/*! + * Copyright (C) 2023 Lakshmi Krishnamurthy + * + * This file is part of DROP, an open-source library targeting analytics/risk, transaction cost analytics, + * asset liability management analytics, capital, exposure, and margin analytics, valuation adjustment + * analytics, and portfolio construction analytics within and across fixed income, credit, commodity, + * equity, FX, and structured products. It also includes auxiliary libraries for algorithm support, + * numerical analysis, numerical optimization, spline builder, model validation, statistical learning, + * graph builder/navigator, and computational support. + * + * https://lakshmidrip.github.io/DROP/ + * + * DROP is composed of three modules: + * + * - DROP Product Core - https://lakshmidrip.github.io/DROP-Product-Core/ + * - DROP Portfolio Core - https://lakshmidrip.github.io/DROP-Portfolio-Core/ + * - DROP Computational Core - https://lakshmidrip.github.io/DROP-Computational-Core/ + * + * DROP Product Core implements libraries for the following: + * - Fixed Income Analytics + * - Loan Analytics + * - Transaction Cost Analytics + * + * DROP Portfolio Core implements libraries for the following: + * - Asset Allocation Analytics + * - Asset Liability Management Analytics + * - Capital Estimation Analytics + * - Exposure Analytics + * - Margin Analytics + * - XVA Analytics + * + * DROP Computational Core implements libraries for the following: + * - Algorithm Support + * - Computation Support + * - Function Analysis + * - Graph Algorithm + * - Model Validation + * - Numerical Analysis + * - Numerical Optimizer + * - Spline Builder + * - Statistical Learning + * + * Documentation for DROP is Spread Over: + * + * - Main => https://lakshmidrip.github.io/DROP/ + * - Wiki => https://github.com/lakshmiDRIP/DROP/wiki + * - GitHub => https://github.com/lakshmiDRIP/DROP + * - Repo Layout Taxonomy => https://github.com/lakshmiDRIP/DROP/blob/master/Taxonomy.md + * - Javadoc => https://lakshmidrip.github.io/DROP/Javadoc/index.html + * - Technical Specifications => https://github.com/lakshmiDRIP/DROP/tree/master/Docs/Internal + * - Release Versions => https://lakshmidrip.github.io/DROP/version.html + * - Community Credits => https://lakshmidrip.github.io/DROP/credits.html + * - Issues Catalog => https://github.com/lakshmiDRIP/DROP/issues + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * TwoIIDSum implements the PDF of the Sum of Two IID Exponential Random Variables. The References + * are: + * + *

+ *
    + *
  • + * Devroye, L. (1986): Non-Uniform Random Variate Generation Springer-Verlag New York + *
  • + *
  • + * Exponential Distribution (2019): Exponential Distribution + * https://en.wikipedia.org/wiki/Exponential_distribution + *
  • + *
  • + * Norton, M., V. Khokhlov, and S. Uryasev (2019): Calculating CVaR and bPOE for Common Probability + * Distributions with Application to Portfolio Optimization and Density Estimation Annals of + * Operations Research 299 (1-2) 1281-1315 + *
  • + *
  • + * Ross, S. M. (2009): Introduction to Probability and Statistics for Engineers and Scientists + * 4th Edition Associated Press New York, NY + *
  • + *
  • + * Schmidt, D. F., and D. Makalic (2009): Universal Models for the Exponential Distribution IEEE + * Transactions on Information Theory 55 (7) 3087-3090 + *
  • + *
+ * + *

+ * + * + * @author Lakshmi Krishnamurthy + */ + +public class TwoIIDSum + extends R1Univariate +{ + private static final int QUADRATURE_POINT_COUNT = 100; + + private R1RateDistribution _largerR1RateDistribution = null; + private R1RateDistribution _smallerR1RateDistribution = null; + + /** + * TwoIIDSum Constructor + * + * @param firstR1RateDistribution First R1 Exponential Distribution + * @param secondR1RateDistribution Second R1 Exponential Distribution + * + * @throws Exception Thrown if Inputs are Invalid + */ + + public TwoIIDSum ( + final R1RateDistribution firstR1RateDistribution, + final R1RateDistribution secondR1RateDistribution) + throws Exception + { + if (null == firstR1RateDistribution || null == secondR1RateDistribution) + { + throw new Exception ( + "TwoIIDSum Constructor: Invalid Inputs" + ); + } + + double firstRate = firstR1RateDistribution.rate(); + + double secondRate = secondR1RateDistribution.rate(); + + if (firstRate > secondRate) + { + _largerR1RateDistribution = secondR1RateDistribution; + _smallerR1RateDistribution = firstR1RateDistribution; + } + else + { + _largerR1RateDistribution = firstR1RateDistribution; + _smallerR1RateDistribution = secondR1RateDistribution; + } + } + + /** + * Retrieve the Larger Exponential Distribution + * + * @return The Larger Exponential Distribution + */ + + public R1RateDistribution largerR1RateDistribution() + { + return _largerR1RateDistribution; + } + + /** + * Retrieve the Smaller Exponential Distribution + * + * @return The Smaller Exponential Distribution + */ + + public R1RateDistribution smallerR1RateDistribution() + { + return _smallerR1RateDistribution; + } + + @Override public double[] support() + { + return new double[] + { + 0., + Double.POSITIVE_INFINITY + }; + } + + @Override public double density ( + final double t) + throws Exception + { + if (!supported ( + t + )) + { + throw new Exception ( + "TwoIIDSum::density => Variate not in Range" + ); + } + + double largerRate = _largerR1RateDistribution.rate(); + + double smallerRate = _smallerR1RateDistribution.rate(); + + if (largerRate == smallerRate) + { + return smallerRate * smallerRate * t * Math.exp ( + -1. * smallerRate * t + ); + } + + return smallerRate * largerRate * ( + Math.exp ( + -1. * smallerRate * t + ) - Math.exp ( + -1. * largerRate * t + ) + ) / (largerRate - smallerRate); + } + + @Override public double mean() + throws Exception + { + return NewtonCotesQuadratureGenerator.GaussLaguerreRightDefinite ( + 0., + QUADRATURE_POINT_COUNT + ).integrate ( + new R1ToR1 ( + null + ) + { + @Override public double evaluate ( + final double z) + throws Exception + { + return z * density ( + z + ); + } + } + ); + } + + @Override public double variance() + throws Exception + { + final double mean = mean(); + + return NewtonCotesQuadratureGenerator.GaussLaguerreRightDefinite ( + 0., + QUADRATURE_POINT_COUNT + ).integrate ( + new R1ToR1 ( + null + ) + { + @Override public double evaluate ( + final double z) + throws Exception + { + return (z - mean) * (z - mean) * density ( + z + ); + } + } + ); + } + + @Override public double cumulative ( + final double upper) + throws Exception + { + if (Double.isNaN ( + upper + )) + { + throw new Exception ( + "TwoIIDSum::cumulative => Invalid Upper Variate" + ); + } + + return R1ToR1Integrator.Boole ( + new R1ToR1 ( + null + ) + { + @Override public double evaluate ( + final double z) + throws Exception + { + return density ( + z + ); + } + }, + 0., + upper + ); + } +}