alglib 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (255) hide show
  1. data/History.txt +7 -0
  2. data/Manifest.txt +253 -0
  3. data/README.txt +33 -0
  4. data/Rakefile +27 -0
  5. data/ext/Rakefile +24 -0
  6. data/ext/alglib.i +24 -0
  7. data/ext/alglib/Makefile +157 -0
  8. data/ext/alglib/airyf.cpp +372 -0
  9. data/ext/alglib/airyf.h +81 -0
  10. data/ext/alglib/alglib.cpp +8558 -0
  11. data/ext/alglib/alglib_util.cpp +19 -0
  12. data/ext/alglib/alglib_util.h +14 -0
  13. data/ext/alglib/ap.cpp +877 -0
  14. data/ext/alglib/ap.english.html +364 -0
  15. data/ext/alglib/ap.h +666 -0
  16. data/ext/alglib/ap.russian.html +442 -0
  17. data/ext/alglib/apvt.h +754 -0
  18. data/ext/alglib/bdss.cpp +1500 -0
  19. data/ext/alglib/bdss.h +251 -0
  20. data/ext/alglib/bdsvd.cpp +1339 -0
  21. data/ext/alglib/bdsvd.h +164 -0
  22. data/ext/alglib/bessel.cpp +1226 -0
  23. data/ext/alglib/bessel.h +331 -0
  24. data/ext/alglib/betaf.cpp +105 -0
  25. data/ext/alglib/betaf.h +74 -0
  26. data/ext/alglib/bidiagonal.cpp +1328 -0
  27. data/ext/alglib/bidiagonal.h +350 -0
  28. data/ext/alglib/binomialdistr.cpp +247 -0
  29. data/ext/alglib/binomialdistr.h +153 -0
  30. data/ext/alglib/blas.cpp +576 -0
  31. data/ext/alglib/blas.h +132 -0
  32. data/ext/alglib/cblas.cpp +226 -0
  33. data/ext/alglib/cblas.h +57 -0
  34. data/ext/alglib/cdet.cpp +138 -0
  35. data/ext/alglib/cdet.h +92 -0
  36. data/ext/alglib/chebyshev.cpp +216 -0
  37. data/ext/alglib/chebyshev.h +76 -0
  38. data/ext/alglib/chisquaredistr.cpp +157 -0
  39. data/ext/alglib/chisquaredistr.h +144 -0
  40. data/ext/alglib/cholesky.cpp +285 -0
  41. data/ext/alglib/cholesky.h +86 -0
  42. data/ext/alglib/cinverse.cpp +298 -0
  43. data/ext/alglib/cinverse.h +111 -0
  44. data/ext/alglib/clu.cpp +337 -0
  45. data/ext/alglib/clu.h +120 -0
  46. data/ext/alglib/correlation.cpp +280 -0
  47. data/ext/alglib/correlation.h +77 -0
  48. data/ext/alglib/correlationtests.cpp +726 -0
  49. data/ext/alglib/correlationtests.h +134 -0
  50. data/ext/alglib/crcond.cpp +826 -0
  51. data/ext/alglib/crcond.h +148 -0
  52. data/ext/alglib/creflections.cpp +310 -0
  53. data/ext/alglib/creflections.h +165 -0
  54. data/ext/alglib/csolve.cpp +312 -0
  55. data/ext/alglib/csolve.h +99 -0
  56. data/ext/alglib/ctrinverse.cpp +387 -0
  57. data/ext/alglib/ctrinverse.h +98 -0
  58. data/ext/alglib/ctrlinsolve.cpp +297 -0
  59. data/ext/alglib/ctrlinsolve.h +81 -0
  60. data/ext/alglib/dawson.cpp +234 -0
  61. data/ext/alglib/dawson.h +74 -0
  62. data/ext/alglib/descriptivestatistics.cpp +436 -0
  63. data/ext/alglib/descriptivestatistics.h +112 -0
  64. data/ext/alglib/det.cpp +140 -0
  65. data/ext/alglib/det.h +94 -0
  66. data/ext/alglib/dforest.cpp +1819 -0
  67. data/ext/alglib/dforest.h +316 -0
  68. data/ext/alglib/elliptic.cpp +497 -0
  69. data/ext/alglib/elliptic.h +217 -0
  70. data/ext/alglib/estnorm.cpp +429 -0
  71. data/ext/alglib/estnorm.h +107 -0
  72. data/ext/alglib/expintegrals.cpp +422 -0
  73. data/ext/alglib/expintegrals.h +108 -0
  74. data/ext/alglib/faq.english.html +258 -0
  75. data/ext/alglib/faq.russian.html +272 -0
  76. data/ext/alglib/fdistr.cpp +202 -0
  77. data/ext/alglib/fdistr.h +163 -0
  78. data/ext/alglib/fresnel.cpp +211 -0
  79. data/ext/alglib/fresnel.h +91 -0
  80. data/ext/alglib/gammaf.cpp +338 -0
  81. data/ext/alglib/gammaf.h +104 -0
  82. data/ext/alglib/gqgengauss.cpp +235 -0
  83. data/ext/alglib/gqgengauss.h +92 -0
  84. data/ext/alglib/gqgenhermite.cpp +268 -0
  85. data/ext/alglib/gqgenhermite.h +63 -0
  86. data/ext/alglib/gqgenjacobi.cpp +297 -0
  87. data/ext/alglib/gqgenjacobi.h +72 -0
  88. data/ext/alglib/gqgenlaguerre.cpp +265 -0
  89. data/ext/alglib/gqgenlaguerre.h +69 -0
  90. data/ext/alglib/gqgenlegendre.cpp +300 -0
  91. data/ext/alglib/gqgenlegendre.h +62 -0
  92. data/ext/alglib/gqgenlobatto.cpp +305 -0
  93. data/ext/alglib/gqgenlobatto.h +97 -0
  94. data/ext/alglib/gqgenradau.cpp +232 -0
  95. data/ext/alglib/gqgenradau.h +95 -0
  96. data/ext/alglib/hbisinv.cpp +480 -0
  97. data/ext/alglib/hbisinv.h +183 -0
  98. data/ext/alglib/hblas.cpp +228 -0
  99. data/ext/alglib/hblas.h +64 -0
  100. data/ext/alglib/hcholesky.cpp +339 -0
  101. data/ext/alglib/hcholesky.h +91 -0
  102. data/ext/alglib/hermite.cpp +114 -0
  103. data/ext/alglib/hermite.h +49 -0
  104. data/ext/alglib/hessenberg.cpp +370 -0
  105. data/ext/alglib/hessenberg.h +152 -0
  106. data/ext/alglib/hevd.cpp +247 -0
  107. data/ext/alglib/hevd.h +107 -0
  108. data/ext/alglib/hsschur.cpp +1316 -0
  109. data/ext/alglib/hsschur.h +108 -0
  110. data/ext/alglib/htridiagonal.cpp +734 -0
  111. data/ext/alglib/htridiagonal.h +180 -0
  112. data/ext/alglib/ialglib.cpp +6 -0
  113. data/ext/alglib/ialglib.h +9 -0
  114. data/ext/alglib/ibetaf.cpp +960 -0
  115. data/ext/alglib/ibetaf.h +125 -0
  116. data/ext/alglib/igammaf.cpp +430 -0
  117. data/ext/alglib/igammaf.h +157 -0
  118. data/ext/alglib/inv.cpp +274 -0
  119. data/ext/alglib/inv.h +115 -0
  120. data/ext/alglib/inverseupdate.cpp +480 -0
  121. data/ext/alglib/inverseupdate.h +185 -0
  122. data/ext/alglib/jacobianelliptic.cpp +164 -0
  123. data/ext/alglib/jacobianelliptic.h +94 -0
  124. data/ext/alglib/jarquebera.cpp +2271 -0
  125. data/ext/alglib/jarquebera.h +80 -0
  126. data/ext/alglib/kmeans.cpp +356 -0
  127. data/ext/alglib/kmeans.h +76 -0
  128. data/ext/alglib/laguerre.cpp +94 -0
  129. data/ext/alglib/laguerre.h +48 -0
  130. data/ext/alglib/lbfgs.cpp +1167 -0
  131. data/ext/alglib/lbfgs.h +218 -0
  132. data/ext/alglib/lda.cpp +434 -0
  133. data/ext/alglib/lda.h +133 -0
  134. data/ext/alglib/ldlt.cpp +1130 -0
  135. data/ext/alglib/ldlt.h +124 -0
  136. data/ext/alglib/leastsquares.cpp +1252 -0
  137. data/ext/alglib/leastsquares.h +290 -0
  138. data/ext/alglib/legendre.cpp +107 -0
  139. data/ext/alglib/legendre.h +49 -0
  140. data/ext/alglib/linreg.cpp +1185 -0
  141. data/ext/alglib/linreg.h +380 -0
  142. data/ext/alglib/logit.cpp +1523 -0
  143. data/ext/alglib/logit.h +333 -0
  144. data/ext/alglib/lq.cpp +399 -0
  145. data/ext/alglib/lq.h +160 -0
  146. data/ext/alglib/lu.cpp +462 -0
  147. data/ext/alglib/lu.h +119 -0
  148. data/ext/alglib/mannwhitneyu.cpp +4490 -0
  149. data/ext/alglib/mannwhitneyu.h +115 -0
  150. data/ext/alglib/minlm.cpp +918 -0
  151. data/ext/alglib/minlm.h +312 -0
  152. data/ext/alglib/mlpbase.cpp +3375 -0
  153. data/ext/alglib/mlpbase.h +589 -0
  154. data/ext/alglib/mlpe.cpp +1369 -0
  155. data/ext/alglib/mlpe.h +552 -0
  156. data/ext/alglib/mlptrain.cpp +1056 -0
  157. data/ext/alglib/mlptrain.h +283 -0
  158. data/ext/alglib/nearunityunit.cpp +91 -0
  159. data/ext/alglib/nearunityunit.h +17 -0
  160. data/ext/alglib/normaldistr.cpp +377 -0
  161. data/ext/alglib/normaldistr.h +175 -0
  162. data/ext/alglib/nsevd.cpp +1869 -0
  163. data/ext/alglib/nsevd.h +140 -0
  164. data/ext/alglib/pca.cpp +168 -0
  165. data/ext/alglib/pca.h +87 -0
  166. data/ext/alglib/poissondistr.cpp +143 -0
  167. data/ext/alglib/poissondistr.h +130 -0
  168. data/ext/alglib/polinterpolation.cpp +685 -0
  169. data/ext/alglib/polinterpolation.h +206 -0
  170. data/ext/alglib/psif.cpp +173 -0
  171. data/ext/alglib/psif.h +88 -0
  172. data/ext/alglib/qr.cpp +414 -0
  173. data/ext/alglib/qr.h +168 -0
  174. data/ext/alglib/ratinterpolation.cpp +134 -0
  175. data/ext/alglib/ratinterpolation.h +72 -0
  176. data/ext/alglib/rcond.cpp +705 -0
  177. data/ext/alglib/rcond.h +140 -0
  178. data/ext/alglib/reflections.cpp +504 -0
  179. data/ext/alglib/reflections.h +165 -0
  180. data/ext/alglib/rotations.cpp +473 -0
  181. data/ext/alglib/rotations.h +128 -0
  182. data/ext/alglib/rsolve.cpp +221 -0
  183. data/ext/alglib/rsolve.h +99 -0
  184. data/ext/alglib/sbisinv.cpp +217 -0
  185. data/ext/alglib/sbisinv.h +171 -0
  186. data/ext/alglib/sblas.cpp +185 -0
  187. data/ext/alglib/sblas.h +64 -0
  188. data/ext/alglib/schur.cpp +156 -0
  189. data/ext/alglib/schur.h +102 -0
  190. data/ext/alglib/sdet.cpp +193 -0
  191. data/ext/alglib/sdet.h +101 -0
  192. data/ext/alglib/sevd.cpp +116 -0
  193. data/ext/alglib/sevd.h +99 -0
  194. data/ext/alglib/sinverse.cpp +672 -0
  195. data/ext/alglib/sinverse.h +138 -0
  196. data/ext/alglib/spddet.cpp +138 -0
  197. data/ext/alglib/spddet.h +96 -0
  198. data/ext/alglib/spdgevd.cpp +842 -0
  199. data/ext/alglib/spdgevd.h +200 -0
  200. data/ext/alglib/spdinverse.cpp +509 -0
  201. data/ext/alglib/spdinverse.h +122 -0
  202. data/ext/alglib/spdrcond.cpp +421 -0
  203. data/ext/alglib/spdrcond.h +118 -0
  204. data/ext/alglib/spdsolve.cpp +275 -0
  205. data/ext/alglib/spdsolve.h +105 -0
  206. data/ext/alglib/spline2d.cpp +1192 -0
  207. data/ext/alglib/spline2d.h +301 -0
  208. data/ext/alglib/spline3.cpp +1264 -0
  209. data/ext/alglib/spline3.h +290 -0
  210. data/ext/alglib/srcond.cpp +595 -0
  211. data/ext/alglib/srcond.h +127 -0
  212. data/ext/alglib/ssolve.cpp +895 -0
  213. data/ext/alglib/ssolve.h +139 -0
  214. data/ext/alglib/stdafx.h +0 -0
  215. data/ext/alglib/stest.cpp +131 -0
  216. data/ext/alglib/stest.h +94 -0
  217. data/ext/alglib/studenttdistr.cpp +222 -0
  218. data/ext/alglib/studenttdistr.h +115 -0
  219. data/ext/alglib/studentttests.cpp +377 -0
  220. data/ext/alglib/studentttests.h +178 -0
  221. data/ext/alglib/svd.cpp +620 -0
  222. data/ext/alglib/svd.h +126 -0
  223. data/ext/alglib/tdbisinv.cpp +2608 -0
  224. data/ext/alglib/tdbisinv.h +228 -0
  225. data/ext/alglib/tdevd.cpp +1229 -0
  226. data/ext/alglib/tdevd.h +115 -0
  227. data/ext/alglib/tridiagonal.cpp +594 -0
  228. data/ext/alglib/tridiagonal.h +171 -0
  229. data/ext/alglib/trigintegrals.cpp +490 -0
  230. data/ext/alglib/trigintegrals.h +131 -0
  231. data/ext/alglib/trinverse.cpp +345 -0
  232. data/ext/alglib/trinverse.h +98 -0
  233. data/ext/alglib/trlinsolve.cpp +926 -0
  234. data/ext/alglib/trlinsolve.h +73 -0
  235. data/ext/alglib/tsort.cpp +405 -0
  236. data/ext/alglib/tsort.h +54 -0
  237. data/ext/alglib/variancetests.cpp +245 -0
  238. data/ext/alglib/variancetests.h +134 -0
  239. data/ext/alglib/wsr.cpp +6285 -0
  240. data/ext/alglib/wsr.h +96 -0
  241. data/ext/ap.i +97 -0
  242. data/ext/correlation.i +24 -0
  243. data/ext/extconf.rb +6 -0
  244. data/ext/logit.i +89 -0
  245. data/lib/alglib.rb +71 -0
  246. data/lib/alglib/correlation.rb +26 -0
  247. data/lib/alglib/linearregression.rb +63 -0
  248. data/lib/alglib/logit.rb +42 -0
  249. data/test/test_alglib.rb +52 -0
  250. data/test/test_correlation.rb +44 -0
  251. data/test/test_correlationtest.rb +45 -0
  252. data/test/test_linreg.rb +35 -0
  253. data/test/test_logit.rb +43 -0
  254. data/test/test_pca.rb +27 -0
  255. metadata +326 -0
@@ -0,0 +1,202 @@
1
+ /*************************************************************************
2
+ Cephes Math Library Release 2.8: June, 2000
3
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
4
+
5
+ Contributors:
6
+ * Sergey Bochkanov (ALGLIB project). Translation from C to
7
+ pseudocode.
8
+
9
+ See subroutines comments for additional copyrights.
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions are
13
+ met:
14
+
15
+ - Redistributions of source code must retain the above copyright
16
+ notice, this list of conditions and the following disclaimer.
17
+
18
+ - Redistributions in binary form must reproduce the above copyright
19
+ notice, this list of conditions and the following disclaimer listed
20
+ in this license in the documentation and/or other materials
21
+ provided with the distribution.
22
+
23
+ - Neither the name of the copyright holders nor the names of its
24
+ contributors may be used to endorse or promote products derived from
25
+ this software without specific prior written permission.
26
+
27
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
+ *************************************************************************/
39
+
40
+ #include <stdafx.h>
41
+ #include "fdistr.h"
42
+
43
+ /*************************************************************************
44
+ F distribution
45
+
46
+ Returns the area from zero to x under the F density
47
+ function (also known as Snedcor's density or the
48
+ variance ratio density). This is the density
49
+ of x = (u1/df1)/(u2/df2), where u1 and u2 are random
50
+ variables having Chi square distributions with df1
51
+ and df2 degrees of freedom, respectively.
52
+ The incomplete beta integral is used, according to the
53
+ formula
54
+
55
+ P(x) = incbet( df1/2, df2/2, (df1*x/(df2 + df1*x) ).
56
+
57
+
58
+ The arguments a and b are greater than zero, and x is
59
+ nonnegative.
60
+
61
+ ACCURACY:
62
+
63
+ Tested at random points (a,b,x).
64
+
65
+ x a,b Relative error:
66
+ arithmetic domain domain # trials peak rms
67
+ IEEE 0,1 0,100 100000 9.8e-15 1.7e-15
68
+ IEEE 1,5 0,100 100000 6.5e-15 3.5e-16
69
+ IEEE 0,1 1,10000 100000 2.2e-11 3.3e-12
70
+ IEEE 1,5 1,10000 100000 1.1e-11 1.7e-13
71
+
72
+ Cephes Math Library Release 2.8: June, 2000
73
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
74
+ *************************************************************************/
75
+ double fdistribution(int a, int b, double x)
76
+ {
77
+ double result;
78
+ double w;
79
+
80
+ ap::ap_error::make_assertion(a>=1&&b>=1&&x>=0, "Domain error in FDistribution");
81
+ w = a*x;
82
+ w = w/(b+w);
83
+ result = incompletebeta(0.5*a, 0.5*b, w);
84
+ return result;
85
+ }
86
+
87
+
88
+ /*************************************************************************
89
+ Complemented F distribution
90
+
91
+ Returns the area from x to infinity under the F density
92
+ function (also known as Snedcor's density or the
93
+ variance ratio density).
94
+
95
+
96
+ inf.
97
+ -
98
+ 1 | | a-1 b-1
99
+ 1-P(x) = ------ | t (1-t) dt
100
+ B(a,b) | |
101
+ -
102
+ x
103
+
104
+
105
+ The incomplete beta integral is used, according to the
106
+ formula
107
+
108
+ P(x) = incbet( df2/2, df1/2, (df2/(df2 + df1*x) ).
109
+
110
+
111
+ ACCURACY:
112
+
113
+ Tested at random points (a,b,x) in the indicated intervals.
114
+ x a,b Relative error:
115
+ arithmetic domain domain # trials peak rms
116
+ IEEE 0,1 1,100 100000 3.7e-14 5.9e-16
117
+ IEEE 1,5 1,100 100000 8.0e-15 1.6e-15
118
+ IEEE 0,1 1,10000 100000 1.8e-11 3.5e-13
119
+ IEEE 1,5 1,10000 100000 2.0e-11 3.0e-12
120
+
121
+ Cephes Math Library Release 2.8: June, 2000
122
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
123
+ *************************************************************************/
124
+ double fcdistribution(int a, int b, double x)
125
+ {
126
+ double result;
127
+ double w;
128
+
129
+ ap::ap_error::make_assertion(a>=1&&b>=1&&x>=0, "Domain error in FCDistribution");
130
+ w = b/(b+a*x);
131
+ result = incompletebeta(0.5*b, 0.5*a, w);
132
+ return result;
133
+ }
134
+
135
+
136
+ /*************************************************************************
137
+ Inverse of complemented F distribution
138
+
139
+ Finds the F density argument x such that the integral
140
+ from x to infinity of the F density is equal to the
141
+ given probability p.
142
+
143
+ This is accomplished using the inverse beta integral
144
+ function and the relations
145
+
146
+ z = incbi( df2/2, df1/2, p )
147
+ x = df2 (1-z) / (df1 z).
148
+
149
+ Note: the following relations hold for the inverse of
150
+ the uncomplemented F distribution:
151
+
152
+ z = incbi( df1/2, df2/2, p )
153
+ x = df2 z / (df1 (1-z)).
154
+
155
+ ACCURACY:
156
+
157
+ Tested at random points (a,b,p).
158
+
159
+ a,b Relative error:
160
+ arithmetic domain # trials peak rms
161
+ For p between .001 and 1:
162
+ IEEE 1,100 100000 8.3e-15 4.7e-16
163
+ IEEE 1,10000 100000 2.1e-11 1.4e-13
164
+ For p between 10^-6 and 10^-3:
165
+ IEEE 1,100 50000 1.3e-12 8.4e-15
166
+ IEEE 1,10000 50000 3.0e-12 4.8e-14
167
+
168
+ Cephes Math Library Release 2.8: June, 2000
169
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
170
+ *************************************************************************/
171
+ double invfdistribution(int a, int b, double y)
172
+ {
173
+ double result;
174
+ double w;
175
+ double x;
176
+
177
+ ap::ap_error::make_assertion(a>=1&&b>=1&&y>0&&y<=1, "Domain error in InvFDistribution");
178
+
179
+ //
180
+ // Compute probability for x = 0.5
181
+ //
182
+ w = incompletebeta(0.5*b, 0.5*a, 0.5);
183
+
184
+ //
185
+ // If that is greater than y, then the solution w < .5
186
+ // Otherwise, solve at 1-y to remove cancellation in (b - b*w)
187
+ //
188
+ if( w>y||y<0.001 )
189
+ {
190
+ w = invincompletebeta(0.5*b, 0.5*a, y);
191
+ result = (b-b*w)/(a*w);
192
+ }
193
+ else
194
+ {
195
+ w = invincompletebeta(0.5*a, 0.5*b, 1.0-y);
196
+ result = b*w/(a*(1.0-w));
197
+ }
198
+ return result;
199
+ }
200
+
201
+
202
+
@@ -0,0 +1,163 @@
1
+ /*************************************************************************
2
+ Cephes Math Library Release 2.8: June, 2000
3
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
4
+
5
+ Contributors:
6
+ * Sergey Bochkanov (ALGLIB project). Translation from C to
7
+ pseudocode.
8
+
9
+ See subroutines comments for additional copyrights.
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions are
13
+ met:
14
+
15
+ - Redistributions of source code must retain the above copyright
16
+ notice, this list of conditions and the following disclaimer.
17
+
18
+ - Redistributions in binary form must reproduce the above copyright
19
+ notice, this list of conditions and the following disclaimer listed
20
+ in this license in the documentation and/or other materials
21
+ provided with the distribution.
22
+
23
+ - Neither the name of the copyright holders nor the names of its
24
+ contributors may be used to endorse or promote products derived from
25
+ this software without specific prior written permission.
26
+
27
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
+ *************************************************************************/
39
+
40
+ #ifndef _fdistr_h
41
+ #define _fdistr_h
42
+
43
+ #include "ap.h"
44
+ #include "ialglib.h"
45
+
46
+ #include "gammaf.h"
47
+ #include "normaldistr.h"
48
+ #include "ibetaf.h"
49
+
50
+
51
+ /*************************************************************************
52
+ F distribution
53
+
54
+ Returns the area from zero to x under the F density
55
+ function (also known as Snedcor's density or the
56
+ variance ratio density). This is the density
57
+ of x = (u1/df1)/(u2/df2), where u1 and u2 are random
58
+ variables having Chi square distributions with df1
59
+ and df2 degrees of freedom, respectively.
60
+ The incomplete beta integral is used, according to the
61
+ formula
62
+
63
+ P(x) = incbet( df1/2, df2/2, (df1*x/(df2 + df1*x) ).
64
+
65
+
66
+ The arguments a and b are greater than zero, and x is
67
+ nonnegative.
68
+
69
+ ACCURACY:
70
+
71
+ Tested at random points (a,b,x).
72
+
73
+ x a,b Relative error:
74
+ arithmetic domain domain # trials peak rms
75
+ IEEE 0,1 0,100 100000 9.8e-15 1.7e-15
76
+ IEEE 1,5 0,100 100000 6.5e-15 3.5e-16
77
+ IEEE 0,1 1,10000 100000 2.2e-11 3.3e-12
78
+ IEEE 1,5 1,10000 100000 1.1e-11 1.7e-13
79
+
80
+ Cephes Math Library Release 2.8: June, 2000
81
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
82
+ *************************************************************************/
83
+ double fdistribution(int a, int b, double x);
84
+
85
+
86
+ /*************************************************************************
87
+ Complemented F distribution
88
+
89
+ Returns the area from x to infinity under the F density
90
+ function (also known as Snedcor's density or the
91
+ variance ratio density).
92
+
93
+
94
+ inf.
95
+ -
96
+ 1 | | a-1 b-1
97
+ 1-P(x) = ------ | t (1-t) dt
98
+ B(a,b) | |
99
+ -
100
+ x
101
+
102
+
103
+ The incomplete beta integral is used, according to the
104
+ formula
105
+
106
+ P(x) = incbet( df2/2, df1/2, (df2/(df2 + df1*x) ).
107
+
108
+
109
+ ACCURACY:
110
+
111
+ Tested at random points (a,b,x) in the indicated intervals.
112
+ x a,b Relative error:
113
+ arithmetic domain domain # trials peak rms
114
+ IEEE 0,1 1,100 100000 3.7e-14 5.9e-16
115
+ IEEE 1,5 1,100 100000 8.0e-15 1.6e-15
116
+ IEEE 0,1 1,10000 100000 1.8e-11 3.5e-13
117
+ IEEE 1,5 1,10000 100000 2.0e-11 3.0e-12
118
+
119
+ Cephes Math Library Release 2.8: June, 2000
120
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
121
+ *************************************************************************/
122
+ double fcdistribution(int a, int b, double x);
123
+
124
+
125
+ /*************************************************************************
126
+ Inverse of complemented F distribution
127
+
128
+ Finds the F density argument x such that the integral
129
+ from x to infinity of the F density is equal to the
130
+ given probability p.
131
+
132
+ This is accomplished using the inverse beta integral
133
+ function and the relations
134
+
135
+ z = incbi( df2/2, df1/2, p )
136
+ x = df2 (1-z) / (df1 z).
137
+
138
+ Note: the following relations hold for the inverse of
139
+ the uncomplemented F distribution:
140
+
141
+ z = incbi( df1/2, df2/2, p )
142
+ x = df2 z / (df1 (1-z)).
143
+
144
+ ACCURACY:
145
+
146
+ Tested at random points (a,b,p).
147
+
148
+ a,b Relative error:
149
+ arithmetic domain # trials peak rms
150
+ For p between .001 and 1:
151
+ IEEE 1,100 100000 8.3e-15 4.7e-16
152
+ IEEE 1,10000 100000 2.1e-11 1.4e-13
153
+ For p between 10^-6 and 10^-3:
154
+ IEEE 1,100 50000 1.3e-12 8.4e-15
155
+ IEEE 1,10000 50000 3.0e-12 4.8e-14
156
+
157
+ Cephes Math Library Release 2.8: June, 2000
158
+ Copyright 1984, 1987, 1995, 2000 by Stephen L. Moshier
159
+ *************************************************************************/
160
+ double invfdistribution(int a, int b, double y);
161
+
162
+
163
+ #endif
@@ -0,0 +1,211 @@
1
+ /*************************************************************************
2
+ Cephes Math Library Release 2.8: June, 2000
3
+ Copyright by Stephen L. Moshier
4
+
5
+ Contributors:
6
+ * Sergey Bochkanov (ALGLIB project). Translation from C to
7
+ pseudocode.
8
+
9
+ See subroutines comments for additional copyrights.
10
+
11
+ Redistribution and use in source and binary forms, with or without
12
+ modification, are permitted provided that the following conditions are
13
+ met:
14
+
15
+ - Redistributions of source code must retain the above copyright
16
+ notice, this list of conditions and the following disclaimer.
17
+
18
+ - Redistributions in binary form must reproduce the above copyright
19
+ notice, this list of conditions and the following disclaimer listed
20
+ in this license in the documentation and/or other materials
21
+ provided with the distribution.
22
+
23
+ - Neither the name of the copyright holders nor the names of its
24
+ contributors may be used to endorse or promote products derived from
25
+ this software without specific prior written permission.
26
+
27
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
+ *************************************************************************/
39
+
40
+ #include <stdafx.h>
41
+ #include "fresnel.h"
42
+
43
+ /*************************************************************************
44
+ Fresnel integral
45
+
46
+ Evaluates the Fresnel integrals
47
+
48
+ x
49
+ -
50
+ | |
51
+ C(x) = | cos(pi/2 t**2) dt,
52
+ | |
53
+ -
54
+ 0
55
+
56
+ x
57
+ -
58
+ | |
59
+ S(x) = | sin(pi/2 t**2) dt.
60
+ | |
61
+ -
62
+ 0
63
+
64
+
65
+ The integrals are evaluated by a power series for x < 1.
66
+ For x >= 1 auxiliary functions f(x) and g(x) are employed
67
+ such that
68
+
69
+ C(x) = 0.5 + f(x) sin( pi/2 x**2 ) - g(x) cos( pi/2 x**2 )
70
+ S(x) = 0.5 - f(x) cos( pi/2 x**2 ) - g(x) sin( pi/2 x**2 )
71
+
72
+
73
+
74
+ ACCURACY:
75
+
76
+ Relative error.
77
+
78
+ Arithmetic function domain # trials peak rms
79
+ IEEE S(x) 0, 10 10000 2.0e-15 3.2e-16
80
+ IEEE C(x) 0, 10 10000 1.8e-15 3.3e-16
81
+
82
+ Cephes Math Library Release 2.8: June, 2000
83
+ Copyright 1984, 1987, 1989, 2000 by Stephen L. Moshier
84
+ *************************************************************************/
85
+ void fresnelintegral(double x, double& c, double& s)
86
+ {
87
+ double xxa;
88
+ double f;
89
+ double g;
90
+ double cc;
91
+ double ss;
92
+ double t;
93
+ double u;
94
+ double x2;
95
+ double sn;
96
+ double sd;
97
+ double cn;
98
+ double cd;
99
+ double fn;
100
+ double fd;
101
+ double gn;
102
+ double gd;
103
+ double mpi;
104
+ double mpio2;
105
+
106
+ mpi = 3.14159265358979323846;
107
+ mpio2 = 1.57079632679489661923;
108
+ xxa = x;
109
+ x = fabs(xxa);
110
+ x2 = x*x;
111
+ if( x2<2.5625 )
112
+ {
113
+ t = x2*x2;
114
+ sn = -2.99181919401019853726E3;
115
+ sn = sn*t+7.08840045257738576863E5;
116
+ sn = sn*t-6.29741486205862506537E7;
117
+ sn = sn*t+2.54890880573376359104E9;
118
+ sn = sn*t-4.42979518059697779103E10;
119
+ sn = sn*t+3.18016297876567817986E11;
120
+ sd = 1.00000000000000000000E0;
121
+ sd = sd*t+2.81376268889994315696E2;
122
+ sd = sd*t+4.55847810806532581675E4;
123
+ sd = sd*t+5.17343888770096400730E6;
124
+ sd = sd*t+4.19320245898111231129E8;
125
+ sd = sd*t+2.24411795645340920940E10;
126
+ sd = sd*t+6.07366389490084639049E11;
127
+ cn = -4.98843114573573548651E-8;
128
+ cn = cn*t+9.50428062829859605134E-6;
129
+ cn = cn*t-6.45191435683965050962E-4;
130
+ cn = cn*t+1.88843319396703850064E-2;
131
+ cn = cn*t-2.05525900955013891793E-1;
132
+ cn = cn*t+9.99999999999999998822E-1;
133
+ cd = 3.99982968972495980367E-12;
134
+ cd = cd*t+9.15439215774657478799E-10;
135
+ cd = cd*t+1.25001862479598821474E-7;
136
+ cd = cd*t+1.22262789024179030997E-5;
137
+ cd = cd*t+8.68029542941784300606E-4;
138
+ cd = cd*t+4.12142090722199792936E-2;
139
+ cd = cd*t+1.00000000000000000118E0;
140
+ s = ap::sign(xxa)*x*x2*sn/sd;
141
+ c = ap::sign(xxa)*x*cn/cd;
142
+ return;
143
+ }
144
+ if( x>36974.0 )
145
+ {
146
+ c = ap::sign(xxa)*0.5;
147
+ s = ap::sign(xxa)*0.5;
148
+ return;
149
+ }
150
+ x2 = x*x;
151
+ t = mpi*x2;
152
+ u = 1/(t*t);
153
+ t = 1/t;
154
+ fn = 4.21543555043677546506E-1;
155
+ fn = fn*u+1.43407919780758885261E-1;
156
+ fn = fn*u+1.15220955073585758835E-2;
157
+ fn = fn*u+3.45017939782574027900E-4;
158
+ fn = fn*u+4.63613749287867322088E-6;
159
+ fn = fn*u+3.05568983790257605827E-8;
160
+ fn = fn*u+1.02304514164907233465E-10;
161
+ fn = fn*u+1.72010743268161828879E-13;
162
+ fn = fn*u+1.34283276233062758925E-16;
163
+ fn = fn*u+3.76329711269987889006E-20;
164
+ fd = 1.00000000000000000000E0;
165
+ fd = fd*u+7.51586398353378947175E-1;
166
+ fd = fd*u+1.16888925859191382142E-1;
167
+ fd = fd*u+6.44051526508858611005E-3;
168
+ fd = fd*u+1.55934409164153020873E-4;
169
+ fd = fd*u+1.84627567348930545870E-6;
170
+ fd = fd*u+1.12699224763999035261E-8;
171
+ fd = fd*u+3.60140029589371370404E-11;
172
+ fd = fd*u+5.88754533621578410010E-14;
173
+ fd = fd*u+4.52001434074129701496E-17;
174
+ fd = fd*u+1.25443237090011264384E-20;
175
+ gn = 5.04442073643383265887E-1;
176
+ gn = gn*u+1.97102833525523411709E-1;
177
+ gn = gn*u+1.87648584092575249293E-2;
178
+ gn = gn*u+6.84079380915393090172E-4;
179
+ gn = gn*u+1.15138826111884280931E-5;
180
+ gn = gn*u+9.82852443688422223854E-8;
181
+ gn = gn*u+4.45344415861750144738E-10;
182
+ gn = gn*u+1.08268041139020870318E-12;
183
+ gn = gn*u+1.37555460633261799868E-15;
184
+ gn = gn*u+8.36354435630677421531E-19;
185
+ gn = gn*u+1.86958710162783235106E-22;
186
+ gd = 1.00000000000000000000E0;
187
+ gd = gd*u+1.47495759925128324529E0;
188
+ gd = gd*u+3.37748989120019970451E-1;
189
+ gd = gd*u+2.53603741420338795122E-2;
190
+ gd = gd*u+8.14679107184306179049E-4;
191
+ gd = gd*u+1.27545075667729118702E-5;
192
+ gd = gd*u+1.04314589657571990585E-7;
193
+ gd = gd*u+4.60680728146520428211E-10;
194
+ gd = gd*u+1.10273215066240270757E-12;
195
+ gd = gd*u+1.38796531259578871258E-15;
196
+ gd = gd*u+8.39158816283118707363E-19;
197
+ gd = gd*u+1.86958710162783236342E-22;
198
+ f = 1-u*fn/fd;
199
+ g = t*gn/gd;
200
+ t = mpio2*x2;
201
+ cc = cos(t);
202
+ ss = sin(t);
203
+ t = mpi*x;
204
+ c = 0.5+(f*ss-g*cc)/t;
205
+ s = 0.5-(f*cc+g*ss)/t;
206
+ c = c*ap::sign(xxa);
207
+ s = s*ap::sign(xxa);
208
+ }
209
+
210
+
211
+