comparison libs/commons-math-2.1/docs/apidocs/src-html/org/apache/commons/math/distribution/AbstractIntegerDistribution.html @ 13:cbf34dd4d7e6

commons-math-2.1 added
author dwinter
date Tue, 04 Jan 2011 10:02:07 +0100
parents
children
comparison
equal deleted inserted replaced
12:970d26a94fb7 13:cbf34dd4d7e6
1 <HTML>
2 <BODY BGCOLOR="white">
3 <PRE>
4 <FONT color="green">001</FONT> /*<a name="line.1"></a>
5 <FONT color="green">002</FONT> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
6 <FONT color="green">003</FONT> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
7 <FONT color="green">004</FONT> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
8 <FONT color="green">005</FONT> * The ASF licenses this file to You under the Apache License, Version 2.0<a name="line.5"></a>
9 <FONT color="green">006</FONT> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
10 <FONT color="green">007</FONT> * the License. You may obtain a copy of the License at<a name="line.7"></a>
11 <FONT color="green">008</FONT> *<a name="line.8"></a>
12 <FONT color="green">009</FONT> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
13 <FONT color="green">010</FONT> *<a name="line.10"></a>
14 <FONT color="green">011</FONT> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
15 <FONT color="green">012</FONT> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
16 <FONT color="green">013</FONT> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
17 <FONT color="green">014</FONT> * See the License for the specific language governing permissions and<a name="line.14"></a>
18 <FONT color="green">015</FONT> * limitations under the License.<a name="line.15"></a>
19 <FONT color="green">016</FONT> */<a name="line.16"></a>
20 <FONT color="green">017</FONT> package org.apache.commons.math.distribution;<a name="line.17"></a>
21 <FONT color="green">018</FONT> <a name="line.18"></a>
22 <FONT color="green">019</FONT> import java.io.Serializable;<a name="line.19"></a>
23 <FONT color="green">020</FONT> <a name="line.20"></a>
24 <FONT color="green">021</FONT> import org.apache.commons.math.FunctionEvaluationException;<a name="line.21"></a>
25 <FONT color="green">022</FONT> import org.apache.commons.math.MathException;<a name="line.22"></a>
26 <FONT color="green">023</FONT> import org.apache.commons.math.MathRuntimeException;<a name="line.23"></a>
27 <FONT color="green">024</FONT> <a name="line.24"></a>
28 <FONT color="green">025</FONT> <a name="line.25"></a>
29 <FONT color="green">026</FONT> /**<a name="line.26"></a>
30 <FONT color="green">027</FONT> * Base class for integer-valued discrete distributions. Default<a name="line.27"></a>
31 <FONT color="green">028</FONT> * implementations are provided for some of the methods that do not vary<a name="line.28"></a>
32 <FONT color="green">029</FONT> * from distribution to distribution.<a name="line.29"></a>
33 <FONT color="green">030</FONT> *<a name="line.30"></a>
34 <FONT color="green">031</FONT> * @version $Revision: 920558 $ $Date: 2010-03-08 17:57:32 -0500 (Mon, 08 Mar 2010) $<a name="line.31"></a>
35 <FONT color="green">032</FONT> */<a name="line.32"></a>
36 <FONT color="green">033</FONT> public abstract class AbstractIntegerDistribution extends AbstractDistribution<a name="line.33"></a>
37 <FONT color="green">034</FONT> implements IntegerDistribution, Serializable {<a name="line.34"></a>
38 <FONT color="green">035</FONT> <a name="line.35"></a>
39 <FONT color="green">036</FONT> /** Message for endpoints in wrong order. */<a name="line.36"></a>
40 <FONT color="green">037</FONT> private static final String WRONG_ORDER_ENDPOINTS_MESSAGE =<a name="line.37"></a>
41 <FONT color="green">038</FONT> "lower endpoint ({0}) must be less than or equal to upper endpoint ({1})";<a name="line.38"></a>
42 <FONT color="green">039</FONT> <a name="line.39"></a>
43 <FONT color="green">040</FONT> /** Message for out of range point. */<a name="line.40"></a>
44 <FONT color="green">041</FONT> private static final String OUT_OF_RANGE_POINT =<a name="line.41"></a>
45 <FONT color="green">042</FONT> "{0} out of [{1}, {2}] range";<a name="line.42"></a>
46 <FONT color="green">043</FONT> <a name="line.43"></a>
47 <FONT color="green">044</FONT> /** Serializable version identifier */<a name="line.44"></a>
48 <FONT color="green">045</FONT> private static final long serialVersionUID = -1146319659338487221L;<a name="line.45"></a>
49 <FONT color="green">046</FONT> <a name="line.46"></a>
50 <FONT color="green">047</FONT> /**<a name="line.47"></a>
51 <FONT color="green">048</FONT> * Default constructor.<a name="line.48"></a>
52 <FONT color="green">049</FONT> */<a name="line.49"></a>
53 <FONT color="green">050</FONT> protected AbstractIntegerDistribution() {<a name="line.50"></a>
54 <FONT color="green">051</FONT> super();<a name="line.51"></a>
55 <FONT color="green">052</FONT> }<a name="line.52"></a>
56 <FONT color="green">053</FONT> <a name="line.53"></a>
57 <FONT color="green">054</FONT> /**<a name="line.54"></a>
58 <FONT color="green">055</FONT> * For a random variable X whose values are distributed according<a name="line.55"></a>
59 <FONT color="green">056</FONT> * to this distribution, this method returns P(X &amp;le; x). In other words,<a name="line.56"></a>
60 <FONT color="green">057</FONT> * this method represents the (cumulative) distribution function, or<a name="line.57"></a>
61 <FONT color="green">058</FONT> * CDF, for this distribution.<a name="line.58"></a>
62 <FONT color="green">059</FONT> * &lt;p&gt;<a name="line.59"></a>
63 <FONT color="green">060</FONT> * If &lt;code&gt;x&lt;/code&gt; does not represent an integer value, the CDF is<a name="line.60"></a>
64 <FONT color="green">061</FONT> * evaluated at the greatest integer less than x.<a name="line.61"></a>
65 <FONT color="green">062</FONT> *<a name="line.62"></a>
66 <FONT color="green">063</FONT> * @param x the value at which the distribution function is evaluated.<a name="line.63"></a>
67 <FONT color="green">064</FONT> * @return cumulative probability that a random variable with this<a name="line.64"></a>
68 <FONT color="green">065</FONT> * distribution takes a value less than or equal to &lt;code&gt;x&lt;/code&gt;<a name="line.65"></a>
69 <FONT color="green">066</FONT> * @throws MathException if the cumulative probability can not be<a name="line.66"></a>
70 <FONT color="green">067</FONT> * computed due to convergence or other numerical errors.<a name="line.67"></a>
71 <FONT color="green">068</FONT> */<a name="line.68"></a>
72 <FONT color="green">069</FONT> public double cumulativeProbability(double x) throws MathException {<a name="line.69"></a>
73 <FONT color="green">070</FONT> return cumulativeProbability((int) Math.floor(x));<a name="line.70"></a>
74 <FONT color="green">071</FONT> }<a name="line.71"></a>
75 <FONT color="green">072</FONT> <a name="line.72"></a>
76 <FONT color="green">073</FONT> /**<a name="line.73"></a>
77 <FONT color="green">074</FONT> * For a random variable X whose values are distributed according<a name="line.74"></a>
78 <FONT color="green">075</FONT> * to this distribution, this method returns P(x0 &amp;le; X &amp;le; x1).<a name="line.75"></a>
79 <FONT color="green">076</FONT> *<a name="line.76"></a>
80 <FONT color="green">077</FONT> * @param x0 the (inclusive) lower bound<a name="line.77"></a>
81 <FONT color="green">078</FONT> * @param x1 the (inclusive) upper bound<a name="line.78"></a>
82 <FONT color="green">079</FONT> * @return the probability that a random variable with this distribution<a name="line.79"></a>
83 <FONT color="green">080</FONT> * will take a value between &lt;code&gt;x0&lt;/code&gt; and &lt;code&gt;x1&lt;/code&gt;,<a name="line.80"></a>
84 <FONT color="green">081</FONT> * including the endpoints.<a name="line.81"></a>
85 <FONT color="green">082</FONT> * @throws MathException if the cumulative probability can not be<a name="line.82"></a>
86 <FONT color="green">083</FONT> * computed due to convergence or other numerical errors.<a name="line.83"></a>
87 <FONT color="green">084</FONT> * @throws IllegalArgumentException if &lt;code&gt;x0 &gt; x1&lt;/code&gt;<a name="line.84"></a>
88 <FONT color="green">085</FONT> */<a name="line.85"></a>
89 <FONT color="green">086</FONT> @Override<a name="line.86"></a>
90 <FONT color="green">087</FONT> public double cumulativeProbability(double x0, double x1)<a name="line.87"></a>
91 <FONT color="green">088</FONT> throws MathException {<a name="line.88"></a>
92 <FONT color="green">089</FONT> if (x0 &gt; x1) {<a name="line.89"></a>
93 <FONT color="green">090</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.90"></a>
94 <FONT color="green">091</FONT> WRONG_ORDER_ENDPOINTS_MESSAGE, x0, x1);<a name="line.91"></a>
95 <FONT color="green">092</FONT> }<a name="line.92"></a>
96 <FONT color="green">093</FONT> if (Math.floor(x0) &lt; x0) {<a name="line.93"></a>
97 <FONT color="green">094</FONT> return cumulativeProbability(((int) Math.floor(x0)) + 1,<a name="line.94"></a>
98 <FONT color="green">095</FONT> (int) Math.floor(x1)); // don't want to count mass below x0<a name="line.95"></a>
99 <FONT color="green">096</FONT> } else { // x0 is mathematical integer, so use as is<a name="line.96"></a>
100 <FONT color="green">097</FONT> return cumulativeProbability((int) Math.floor(x0),<a name="line.97"></a>
101 <FONT color="green">098</FONT> (int) Math.floor(x1));<a name="line.98"></a>
102 <FONT color="green">099</FONT> }<a name="line.99"></a>
103 <FONT color="green">100</FONT> }<a name="line.100"></a>
104 <FONT color="green">101</FONT> <a name="line.101"></a>
105 <FONT color="green">102</FONT> /**<a name="line.102"></a>
106 <FONT color="green">103</FONT> * For a random variable X whose values are distributed according<a name="line.103"></a>
107 <FONT color="green">104</FONT> * to this distribution, this method returns P(X &amp;le; x). In other words,<a name="line.104"></a>
108 <FONT color="green">105</FONT> * this method represents the probability distribution function, or PDF,<a name="line.105"></a>
109 <FONT color="green">106</FONT> * for this distribution.<a name="line.106"></a>
110 <FONT color="green">107</FONT> *<a name="line.107"></a>
111 <FONT color="green">108</FONT> * @param x the value at which the PDF is evaluated.<a name="line.108"></a>
112 <FONT color="green">109</FONT> * @return PDF for this distribution.<a name="line.109"></a>
113 <FONT color="green">110</FONT> * @throws MathException if the cumulative probability can not be<a name="line.110"></a>
114 <FONT color="green">111</FONT> * computed due to convergence or other numerical errors.<a name="line.111"></a>
115 <FONT color="green">112</FONT> */<a name="line.112"></a>
116 <FONT color="green">113</FONT> public abstract double cumulativeProbability(int x) throws MathException;<a name="line.113"></a>
117 <FONT color="green">114</FONT> <a name="line.114"></a>
118 <FONT color="green">115</FONT> /**<a name="line.115"></a>
119 <FONT color="green">116</FONT> * For a random variable X whose values are distributed according<a name="line.116"></a>
120 <FONT color="green">117</FONT> * to this distribution, this method returns P(X = x). In other words, this<a name="line.117"></a>
121 <FONT color="green">118</FONT> * method represents the probability mass function, or PMF, for the distribution.<a name="line.118"></a>
122 <FONT color="green">119</FONT> * &lt;p&gt;<a name="line.119"></a>
123 <FONT color="green">120</FONT> * If &lt;code&gt;x&lt;/code&gt; does not represent an integer value, 0 is returned.<a name="line.120"></a>
124 <FONT color="green">121</FONT> *<a name="line.121"></a>
125 <FONT color="green">122</FONT> * @param x the value at which the probability density function is evaluated<a name="line.122"></a>
126 <FONT color="green">123</FONT> * @return the value of the probability density function at x<a name="line.123"></a>
127 <FONT color="green">124</FONT> */<a name="line.124"></a>
128 <FONT color="green">125</FONT> public double probability(double x) {<a name="line.125"></a>
129 <FONT color="green">126</FONT> double fl = Math.floor(x);<a name="line.126"></a>
130 <FONT color="green">127</FONT> if (fl == x) {<a name="line.127"></a>
131 <FONT color="green">128</FONT> return this.probability((int) x);<a name="line.128"></a>
132 <FONT color="green">129</FONT> } else {<a name="line.129"></a>
133 <FONT color="green">130</FONT> return 0;<a name="line.130"></a>
134 <FONT color="green">131</FONT> }<a name="line.131"></a>
135 <FONT color="green">132</FONT> }<a name="line.132"></a>
136 <FONT color="green">133</FONT> <a name="line.133"></a>
137 <FONT color="green">134</FONT> /**<a name="line.134"></a>
138 <FONT color="green">135</FONT> * For a random variable X whose values are distributed according<a name="line.135"></a>
139 <FONT color="green">136</FONT> * to this distribution, this method returns P(x0 &amp;le; X &amp;le; x1).<a name="line.136"></a>
140 <FONT color="green">137</FONT> *<a name="line.137"></a>
141 <FONT color="green">138</FONT> * @param x0 the inclusive, lower bound<a name="line.138"></a>
142 <FONT color="green">139</FONT> * @param x1 the inclusive, upper bound<a name="line.139"></a>
143 <FONT color="green">140</FONT> * @return the cumulative probability.<a name="line.140"></a>
144 <FONT color="green">141</FONT> * @throws MathException if the cumulative probability can not be<a name="line.141"></a>
145 <FONT color="green">142</FONT> * computed due to convergence or other numerical errors.<a name="line.142"></a>
146 <FONT color="green">143</FONT> * @throws IllegalArgumentException if x0 &gt; x1<a name="line.143"></a>
147 <FONT color="green">144</FONT> */<a name="line.144"></a>
148 <FONT color="green">145</FONT> public double cumulativeProbability(int x0, int x1) throws MathException {<a name="line.145"></a>
149 <FONT color="green">146</FONT> if (x0 &gt; x1) {<a name="line.146"></a>
150 <FONT color="green">147</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.147"></a>
151 <FONT color="green">148</FONT> WRONG_ORDER_ENDPOINTS_MESSAGE, x0, x1);<a name="line.148"></a>
152 <FONT color="green">149</FONT> }<a name="line.149"></a>
153 <FONT color="green">150</FONT> return cumulativeProbability(x1) - cumulativeProbability(x0 - 1);<a name="line.150"></a>
154 <FONT color="green">151</FONT> }<a name="line.151"></a>
155 <FONT color="green">152</FONT> <a name="line.152"></a>
156 <FONT color="green">153</FONT> /**<a name="line.153"></a>
157 <FONT color="green">154</FONT> * For a random variable X whose values are distributed according<a name="line.154"></a>
158 <FONT color="green">155</FONT> * to this distribution, this method returns the largest x, such<a name="line.155"></a>
159 <FONT color="green">156</FONT> * that P(X &amp;le; x) &amp;le; &lt;code&gt;p&lt;/code&gt;.<a name="line.156"></a>
160 <FONT color="green">157</FONT> *<a name="line.157"></a>
161 <FONT color="green">158</FONT> * @param p the desired probability<a name="line.158"></a>
162 <FONT color="green">159</FONT> * @return the largest x such that P(X &amp;le; x) &lt;= p<a name="line.159"></a>
163 <FONT color="green">160</FONT> * @throws MathException if the inverse cumulative probability can not be<a name="line.160"></a>
164 <FONT color="green">161</FONT> * computed due to convergence or other numerical errors.<a name="line.161"></a>
165 <FONT color="green">162</FONT> * @throws IllegalArgumentException if p &lt; 0 or p &gt; 1<a name="line.162"></a>
166 <FONT color="green">163</FONT> */<a name="line.163"></a>
167 <FONT color="green">164</FONT> public int inverseCumulativeProbability(final double p) throws MathException{<a name="line.164"></a>
168 <FONT color="green">165</FONT> if (p &lt; 0.0 || p &gt; 1.0) {<a name="line.165"></a>
169 <FONT color="green">166</FONT> throw MathRuntimeException.createIllegalArgumentException(<a name="line.166"></a>
170 <FONT color="green">167</FONT> OUT_OF_RANGE_POINT, p, 0.0, 1.0);<a name="line.167"></a>
171 <FONT color="green">168</FONT> }<a name="line.168"></a>
172 <FONT color="green">169</FONT> <a name="line.169"></a>
173 <FONT color="green">170</FONT> // by default, do simple bisection.<a name="line.170"></a>
174 <FONT color="green">171</FONT> // subclasses can override if there is a better method.<a name="line.171"></a>
175 <FONT color="green">172</FONT> int x0 = getDomainLowerBound(p);<a name="line.172"></a>
176 <FONT color="green">173</FONT> int x1 = getDomainUpperBound(p);<a name="line.173"></a>
177 <FONT color="green">174</FONT> double pm;<a name="line.174"></a>
178 <FONT color="green">175</FONT> while (x0 &lt; x1) {<a name="line.175"></a>
179 <FONT color="green">176</FONT> int xm = x0 + (x1 - x0) / 2;<a name="line.176"></a>
180 <FONT color="green">177</FONT> pm = checkedCumulativeProbability(xm);<a name="line.177"></a>
181 <FONT color="green">178</FONT> if (pm &gt; p) {<a name="line.178"></a>
182 <FONT color="green">179</FONT> // update x1<a name="line.179"></a>
183 <FONT color="green">180</FONT> if (xm == x1) {<a name="line.180"></a>
184 <FONT color="green">181</FONT> // this can happen with integer division<a name="line.181"></a>
185 <FONT color="green">182</FONT> // simply decrement x1<a name="line.182"></a>
186 <FONT color="green">183</FONT> --x1;<a name="line.183"></a>
187 <FONT color="green">184</FONT> } else {<a name="line.184"></a>
188 <FONT color="green">185</FONT> // update x1 normally<a name="line.185"></a>
189 <FONT color="green">186</FONT> x1 = xm;<a name="line.186"></a>
190 <FONT color="green">187</FONT> }<a name="line.187"></a>
191 <FONT color="green">188</FONT> } else {<a name="line.188"></a>
192 <FONT color="green">189</FONT> // update x0<a name="line.189"></a>
193 <FONT color="green">190</FONT> if (xm == x0) {<a name="line.190"></a>
194 <FONT color="green">191</FONT> // this can happen with integer division<a name="line.191"></a>
195 <FONT color="green">192</FONT> // simply increment x0<a name="line.192"></a>
196 <FONT color="green">193</FONT> ++x0;<a name="line.193"></a>
197 <FONT color="green">194</FONT> } else {<a name="line.194"></a>
198 <FONT color="green">195</FONT> // update x0 normally<a name="line.195"></a>
199 <FONT color="green">196</FONT> x0 = xm;<a name="line.196"></a>
200 <FONT color="green">197</FONT> }<a name="line.197"></a>
201 <FONT color="green">198</FONT> }<a name="line.198"></a>
202 <FONT color="green">199</FONT> }<a name="line.199"></a>
203 <FONT color="green">200</FONT> <a name="line.200"></a>
204 <FONT color="green">201</FONT> // insure x0 is the correct critical point<a name="line.201"></a>
205 <FONT color="green">202</FONT> pm = checkedCumulativeProbability(x0);<a name="line.202"></a>
206 <FONT color="green">203</FONT> while (pm &gt; p) {<a name="line.203"></a>
207 <FONT color="green">204</FONT> --x0;<a name="line.204"></a>
208 <FONT color="green">205</FONT> pm = checkedCumulativeProbability(x0);<a name="line.205"></a>
209 <FONT color="green">206</FONT> }<a name="line.206"></a>
210 <FONT color="green">207</FONT> <a name="line.207"></a>
211 <FONT color="green">208</FONT> return x0;<a name="line.208"></a>
212 <FONT color="green">209</FONT> }<a name="line.209"></a>
213 <FONT color="green">210</FONT> <a name="line.210"></a>
214 <FONT color="green">211</FONT> /**<a name="line.211"></a>
215 <FONT color="green">212</FONT> * Computes the cumulative probablity function and checks for NaN values returned.<a name="line.212"></a>
216 <FONT color="green">213</FONT> * Throws MathException if the value is NaN. Wraps and rethrows any MathException encountered<a name="line.213"></a>
217 <FONT color="green">214</FONT> * evaluating the cumulative probability function in a FunctionEvaluationException. Throws<a name="line.214"></a>
218 <FONT color="green">215</FONT> * FunctionEvaluationException of the cumulative probability function returns NaN.<a name="line.215"></a>
219 <FONT color="green">216</FONT> *<a name="line.216"></a>
220 <FONT color="green">217</FONT> * @param argument input value<a name="line.217"></a>
221 <FONT color="green">218</FONT> * @return cumulative probability<a name="line.218"></a>
222 <FONT color="green">219</FONT> * @throws FunctionEvaluationException if a MathException occurs computing the cumulative probability<a name="line.219"></a>
223 <FONT color="green">220</FONT> */<a name="line.220"></a>
224 <FONT color="green">221</FONT> private double checkedCumulativeProbability(int argument) throws FunctionEvaluationException {<a name="line.221"></a>
225 <FONT color="green">222</FONT> double result = Double.NaN;<a name="line.222"></a>
226 <FONT color="green">223</FONT> try {<a name="line.223"></a>
227 <FONT color="green">224</FONT> result = cumulativeProbability(argument);<a name="line.224"></a>
228 <FONT color="green">225</FONT> } catch (MathException ex) {<a name="line.225"></a>
229 <FONT color="green">226</FONT> throw new FunctionEvaluationException(ex, argument, ex.getPattern(), ex.getArguments());<a name="line.226"></a>
230 <FONT color="green">227</FONT> }<a name="line.227"></a>
231 <FONT color="green">228</FONT> if (Double.isNaN(result)) {<a name="line.228"></a>
232 <FONT color="green">229</FONT> throw new FunctionEvaluationException(argument,<a name="line.229"></a>
233 <FONT color="green">230</FONT> "Discrete cumulative probability function returned NaN for argument {0}", argument);<a name="line.230"></a>
234 <FONT color="green">231</FONT> }<a name="line.231"></a>
235 <FONT color="green">232</FONT> return result;<a name="line.232"></a>
236 <FONT color="green">233</FONT> }<a name="line.233"></a>
237 <FONT color="green">234</FONT> <a name="line.234"></a>
238 <FONT color="green">235</FONT> /**<a name="line.235"></a>
239 <FONT color="green">236</FONT> * Access the domain value lower bound, based on &lt;code&gt;p&lt;/code&gt;, used to<a name="line.236"></a>
240 <FONT color="green">237</FONT> * bracket a PDF root. This method is used by<a name="line.237"></a>
241 <FONT color="green">238</FONT> * {@link #inverseCumulativeProbability(double)} to find critical values.<a name="line.238"></a>
242 <FONT color="green">239</FONT> *<a name="line.239"></a>
243 <FONT color="green">240</FONT> * @param p the desired probability for the critical value<a name="line.240"></a>
244 <FONT color="green">241</FONT> * @return domain value lower bound, i.e.<a name="line.241"></a>
245 <FONT color="green">242</FONT> * P(X &amp;lt; &lt;i&gt;lower bound&lt;/i&gt;) &amp;lt; &lt;code&gt;p&lt;/code&gt;<a name="line.242"></a>
246 <FONT color="green">243</FONT> */<a name="line.243"></a>
247 <FONT color="green">244</FONT> protected abstract int getDomainLowerBound(double p);<a name="line.244"></a>
248 <FONT color="green">245</FONT> <a name="line.245"></a>
249 <FONT color="green">246</FONT> /**<a name="line.246"></a>
250 <FONT color="green">247</FONT> * Access the domain value upper bound, based on &lt;code&gt;p&lt;/code&gt;, used to<a name="line.247"></a>
251 <FONT color="green">248</FONT> * bracket a PDF root. This method is used by<a name="line.248"></a>
252 <FONT color="green">249</FONT> * {@link #inverseCumulativeProbability(double)} to find critical values.<a name="line.249"></a>
253 <FONT color="green">250</FONT> *<a name="line.250"></a>
254 <FONT color="green">251</FONT> * @param p the desired probability for the critical value<a name="line.251"></a>
255 <FONT color="green">252</FONT> * @return domain value upper bound, i.e.<a name="line.252"></a>
256 <FONT color="green">253</FONT> * P(X &amp;lt; &lt;i&gt;upper bound&lt;/i&gt;) &amp;gt; &lt;code&gt;p&lt;/code&gt;<a name="line.253"></a>
257 <FONT color="green">254</FONT> */<a name="line.254"></a>
258 <FONT color="green">255</FONT> protected abstract int getDomainUpperBound(double p);<a name="line.255"></a>
259 <FONT color="green">256</FONT> }<a name="line.256"></a>
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320 </PRE>
321 </BODY>
322 </HTML>