Mercurial > octave
comparison scripts/specfun/betai.m @ 2303:5cffc4b8de57
[project @ 1996-06-24 09:15:24 by jwe]
author | jwe |
---|---|
date | Mon, 24 Jun 1996 09:15:24 +0000 |
parents | 5d29638dd524 |
children | 2b5788792cad |
comparison
equal
deleted
inserted
replaced
2302:470c856bf55a | 2303:5cffc4b8de57 |
---|---|
1 # Copyright (C) 1996 John W. Eaton | 1 ### Copyright (C) 1996 John W. Eaton |
2 # | 2 ### |
3 # This file is part of Octave. | 3 ### This file is part of Octave. |
4 # | 4 ### |
5 # Octave is free software; you can redistribute it and/or modify it | 5 ### Octave is free software; you can redistribute it and/or modify it |
6 # under the terms of the GNU General Public License as published by the | 6 ### under the terms of the GNU General Public License as published by |
7 # Free Software Foundation; either version 2, or (at your option) any | 7 ### the Free Software Foundation; either version 2, or (at your option) |
8 # later version. | 8 ### any later version. |
9 # | 9 ### |
10 # Octave is distributed in the hope that it will be useful, but WITHOUT | 10 ### Octave is distributed in the hope that it will be useful, but |
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 11 ### WITHOUT ANY WARRANTY; without even the implied warranty of |
12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | 12 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 # for more details. | 13 ### General Public License for more details. |
14 # | 14 ### |
15 # You should have received a copy of the GNU General Public License | 15 ### You should have received a copy of the GNU General Public License |
16 # along with Octave; see the file COPYING. If not, write to the Free | 16 ### along with Octave; see the file COPYING. If not, write to the Free |
17 # Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 17 ### Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
18 ### 02111-1307, USA. | |
18 | 19 |
19 function y = betai (a, b, x) | 20 function y = betai (a, b, x) |
20 | 21 |
21 # usage: betai (a, b, x) | 22 ## usage: betai (a, b, x) |
22 # | 23 ## |
23 # Returns the incomplete beta function | 24 ## Returns the incomplete beta function |
24 # betai (a, b, x) = BETA(a,b)^(-1) INT_0^x t^(a-1) (1-t)^(b-1) dt. | 25 ## betai (a, b, x) = BETA(a,b)^(-1) INT_0^x t^(a-1) (1-t)^(b-1) dt. |
25 # If x has more than one component, both a and b must be scalars. | 26 ## If x has more than one component, both a and b must be scalars. |
26 # If x is a scalar, a and b must be of compatible dimensions. | 27 ## If x is a scalar, a and b must be of compatible dimensions. |
27 | 28 |
28 # Written by KH (Kurt.Hornik@ci.tuwien.ac.at) on Aug 2, 1994. | 29 ## Written by KH (Kurt.Hornik@ci.tuwien.ac.at) on Aug 2, 1994. |
29 | 30 |
30 # Computation is based on the series expansion | 31 ## Computation is based on the series expansion |
31 # betai(a, b, x) | 32 ## betai(a, b, x) |
32 # = \frac{1}{B(a, b)} x^a | 33 ## = \frac{1}{B(a, b)} x^a |
33 # \sum_{k=0}^\infty \frac{(1-b)\cdots(k-b)}{a+k} \frac{x^k}{k!} | 34 ## \sum_{k=0}^\infty \frac{(1-b)\cdots(k-b)}{a+k} \frac{x^k}{k!} |
34 # for x <= 1/2. For x > 1/2, betai(a, b, x) = 1 - betai(b, a, 1-x). | 35 ## for x <= 1/2. For x > 1/2, betai(a, b, x) = 1 - betai(b, a, 1-x). |
35 | 36 |
36 if (nargin <> 3) | 37 if (nargin <> 3) |
37 usage (" betai (a, b, x)"); | 38 usage (" betai (a, b, x)"); |
38 endif | 39 endif |
39 | 40 |
59 y = zeros (1, n); | 60 y = zeros (1, n); |
60 c = exp (lgamma (a+b) - lgamma (a) - lgamma (b)); | 61 c = exp (lgamma (a+b) - lgamma (a) - lgamma (b)); |
61 | 62 |
62 y (find (x == 1)) = ones (1, sum (x == 1)); | 63 y (find (x == 1)) = ones (1, sum (x == 1)); |
63 | 64 |
64 # Now do the series computation. The error when truncating at term K | 65 ## Now do the series computation. The error when truncating at term K |
65 # is always less than 2^(-K), hence the following choice of K. | 66 ## is always less than 2^(-K), hence the following choice of K. |
66 | 67 |
67 K = ceil (-log (eps) / log (2)); | 68 K = ceil (-log (eps) / log (2)); |
68 k = (1:K)'; | 69 k = (1:K)'; |
69 | 70 |
70 ind = find ((x > 0) & (x <= 1/2)); | 71 ind = find ((x > 0) & (x <= 1/2)); |