blob: 5cdd0a4a90d213da9ac1615470f9be1e3a4377ec [file] [log] [blame]
<!DOCTYPE HTML>
<!-- NewPage -->
<html lang="de">
<head>
<!-- Generated by javadoc (11.0.8) on Mon Nov 30 13:15:36 CET 2020 -->
<title>WeibullUtil</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="dc.created" content="2020-11-30">
<link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="Style">
</head>
<body>
<!-- ======== START OF CLASS DATA ======== -->
<main role="main">
<div class="header">
<div class="subTitle"><span class="packageLabelInType">Package</span>&nbsp;<a href="package-summary.html">org.eclipse.app4mc.amalthea.model.util</a></div>
<h2 title="Class WeibullUtil" class="title">Class WeibullUtil</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>Object</li>
<li>
<ul class="inheritance">
<li>WeibullUtil</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<pre>public class <span class="typeNameLabel">WeibullUtil</span>
extends Object</pre>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== NESTED CLASS SUMMARY ======== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="nested.class.summary">
<!-- -->
</a>
<h3>Nested Class Summary</h3>
<table class="memberSummary">
<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Class</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static class&nbsp;</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="WeibullUtil.Parameters.html" title="class in org.eclipse.app4mc.amalthea.model.util">WeibullUtil.Parameters</a></span></code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
</li>
</ul>
</section>
<!-- ========== METHOD SUMMARY =========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.summary">
<!-- -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colSecond" scope="col">Method</th>
<th class="colLast" scope="col">Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#computeAverage(double,double,double,java.lang.Double)">computeAverage</a></span>&#8203;(double&nbsp;shape,
double&nbsp;scale,
double&nbsp;location,
Double&nbsp;upperBound)</code></th>
<td class="colLast">
<div class="block">See Crénin, François, Truncated Weibull Distribution Functions and Moments (October 30, 2015).</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#computeMedian(double,double,double,java.lang.Double)">computeMedian</a></span>&#8203;(double&nbsp;shape,
double&nbsp;scale,
double&nbsp;location,
Double&nbsp;upperBound)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#computeMedianWithPRemainPromille(double,double,double,double)">computeMedianWithPRemainPromille</a></span>&#8203;(double&nbsp;shape,
double&nbsp;scale,
double&nbsp;location,
double&nbsp;pRemainPromille)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#computePRemainPromille(double,double,double,double)">computePRemainPromille</a></span>&#8203;(double&nbsp;shape,
double&nbsp;scale,
double&nbsp;location,
double&nbsp;upperBound)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code>static double</code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#computeUpperBound(double,double,double,double)">computeUpperBound</a></span>&#8203;(double&nbsp;shape,
double&nbsp;scale,
double&nbsp;location,
double&nbsp;pRemainPromille)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code>static <a href="WeibullUtil.Parameters.html" title="class in org.eclipse.app4mc.amalthea.model.util">WeibullUtil.Parameters</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#findParameters(double,double,double,double)">findParameters</a></span>&#8203;(double&nbsp;lowerBound,
double&nbsp;average,
double&nbsp;upperBound,
double&nbsp;pRemainPromille)</code></th>
<td class="colLast">
<div class="block">This is a simple attempt to get a better parameter estimation for big pRemainPromille values.</div>
</td>
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code>static <a href="WeibullUtil.Parameters.html" title="class in org.eclipse.app4mc.amalthea.model.util">WeibullUtil.Parameters</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#findParametersForAverage(double,double,double,double)">findParametersForAverage</a></span>&#8203;(double&nbsp;lowerBound,
double&nbsp;average,
double&nbsp;upperBound,
double&nbsp;pRemainPromille)</code></th>
<td class="colLast">
<div class="block">The approximation from the given parameters boil down to the following problem (latex formulas):</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code>static <a href="WeibullUtil.Parameters.html" title="class in org.eclipse.app4mc.amalthea.model.util">WeibullUtil.Parameters</a></code></td>
<th class="colSecond" scope="row"><code><span class="memberNameLink"><a href="#findParametersForMedian(double,double,double,double)">findParametersForMedian</a></span>&#8203;(double&nbsp;lowerBound,
double&nbsp;median,
double&nbsp;upperBound,
double&nbsp;pRemainPromille)</code></th>
<td class="colLast">&nbsp;</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a id="methods.inherited.from.class.Object">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;Object</h3>
<code>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ METHOD DETAIL ========== -->
<section role="region">
<ul class="blockList">
<li class="blockList"><a id="method.detail">
<!-- -->
</a>
<h3>Method Detail</h3>
<a id="computeAverage(double,double,double,java.lang.Double)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computeAverage</h4>
<pre class="methodSignature">public static&nbsp;double&nbsp;computeAverage&#8203;(double&nbsp;shape,
double&nbsp;scale,
double&nbsp;location,
Double&nbsp;upperBound)</pre>
<div class="block">See Crénin, François, Truncated Weibull Distribution Functions and Moments (October 30, 2015).
Available at SSRN: https://ssrn.com/abstract=2690255 or http://dx.doi.org/10.2139/ssrn.2690255</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>shape</code> - </dd>
<dd><code>scale</code> - </dd>
<dd><code>location</code> - </dd>
<dd><code>upperBound</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
</li>
</ul>
<a id="computeMedian(double,double,double,java.lang.Double)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computeMedian</h4>
<pre class="methodSignature">public static&nbsp;double&nbsp;computeMedian&#8203;(double&nbsp;shape,
double&nbsp;scale,
double&nbsp;location,
Double&nbsp;upperBound)</pre>
</li>
</ul>
<a id="computeMedianWithPRemainPromille(double,double,double,double)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computeMedianWithPRemainPromille</h4>
<pre class="methodSignature">public static&nbsp;double&nbsp;computeMedianWithPRemainPromille&#8203;(double&nbsp;shape,
double&nbsp;scale,
double&nbsp;location,
double&nbsp;pRemainPromille)</pre>
</li>
</ul>
<a id="computePRemainPromille(double,double,double,double)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computePRemainPromille</h4>
<pre class="methodSignature">public static&nbsp;double&nbsp;computePRemainPromille&#8203;(double&nbsp;shape,
double&nbsp;scale,
double&nbsp;location,
double&nbsp;upperBound)</pre>
</li>
</ul>
<a id="computeUpperBound(double,double,double,double)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>computeUpperBound</h4>
<pre class="methodSignature">public static&nbsp;double&nbsp;computeUpperBound&#8203;(double&nbsp;shape,
double&nbsp;scale,
double&nbsp;location,
double&nbsp;pRemainPromille)</pre>
</li>
</ul>
<a id="findParameters(double,double,double,double)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>findParameters</h4>
<pre class="methodSignature">public static&nbsp;<a href="WeibullUtil.Parameters.html" title="class in org.eclipse.app4mc.amalthea.model.util">WeibullUtil.Parameters</a>&nbsp;findParameters&#8203;(double&nbsp;lowerBound,
double&nbsp;average,
double&nbsp;upperBound,
double&nbsp;pRemainPromille)</pre>
<div class="block">This is a simple attempt to get a better parameter estimation for big pRemainPromille values.
As an alternative to the regular estimation another estimation based on the median value is calculated.
The better result is selected according to the relative error of both requested values.
Better solutions are welcome !</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>lowerBound</code> - </dd>
<dd><code>average</code> - </dd>
<dd><code>upperBound</code> - </dd>
<dd><code>pRemainPromille</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
</li>
</ul>
<a id="findParametersForAverage(double,double,double,double)">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>findParametersForAverage</h4>
<pre class="methodSignature">public static&nbsp;<a href="WeibullUtil.Parameters.html" title="class in org.eclipse.app4mc.amalthea.model.util">WeibullUtil.Parameters</a>&nbsp;findParametersForAverage&#8203;(double&nbsp;lowerBound,
double&nbsp;average,
double&nbsp;upperBound,
double&nbsp;pRemainPromille)</pre>
<div class="block">The approximation from the given parameters boil down to the following problem (latex formulas):
<p>
CDF_{weibull}(upperBound) = 1 - pRemainPromille/1000
<p>
Using the Weibull CDF (1) and the Expectation Value (average) (2)
we can derive a formula for the scale dependent on shape and known values from (2)
<p>
(1) CDF_{weibull}(x) = 1 - e^{- (\frac{x}{scale})^{shape}}
<p>
(2) avg = scale \cdot \Gamma(1 + \frac{1}{shape})
<p>
(3) scale = \frac{avg}{\Gamma(1 + (1 / shape))}
<p>
with (1), (3) and pRemain = pRemainPromille/1000 follows
<p>
(4) pRemain = e^{-(\frac{upper limit}{E_{avg}} \cdot \Gamma(1 + \frac{1}{shape}))^{shape}}
<p>
from this we form a zero finding problem
<p>
(5) 0 = e^{-(\frac{upper limit}{E_{avg}}\cdot \Gamma(1 + \frac{1}{shape}))^{shape}} - pRemain
<p>
The work "Robust Scheduling of Real-Time Applications on Efficient Embedded Multicore Systems"
(https://mediatum.ub.tum.de/download/1063381/1063381.pdf) proposes an algorithm from (4) which
is basically the bisection method.</div>
</li>
</ul>
<a id="findParametersForMedian(double,double,double,double)">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>findParametersForMedian</h4>
<pre class="methodSignature">public static&nbsp;<a href="WeibullUtil.Parameters.html" title="class in org.eclipse.app4mc.amalthea.model.util">WeibullUtil.Parameters</a>&nbsp;findParametersForMedian&#8203;(double&nbsp;lowerBound,
double&nbsp;median,
double&nbsp;upperBound,
double&nbsp;pRemainPromille)</pre>
</li>
</ul>
</li>
</ul>
</section>
</li>
</ul>
</div>
</div>
</main>
<!-- ========= END OF CLASS DATA ========= -->
</body>
</html>