annotate scripts/specfun/erfinv.m @ 2811:1dd37f97364a

[project @ 1997-03-12 23:06:13 by jwe]
author jwe
date Wed, 12 Mar 1997 23:06:23 +0000
parents 00b2eff19bf5
children d45d48b3dcde
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2537
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
1 ## Copyright (C) 1995, 1996 Kurt Hornik
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
2 ##
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
3 ## This program is free software; you can redistribute it and/or modify
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
4 ## it under the terms of the GNU General Public License as published by
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
5 ## the Free Software Foundation; either version 2, or (at your option)
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
6 ## any later version.
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
7 ##
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
8 ## This program is distributed in the hope that it will be useful, but
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
9 ## WITHOUT ANY WARRANTY; without even the implied warranty of
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
11 ## General Public License for more details.
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
12 ##
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
13 ## You should have received a copy of the GNU General Public License
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
14 ## along with this file. If not, write to the Free Software Foundation,
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
15 ## 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
16
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
17 ## usage: erfinv (x)
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
18 ##
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
19 ## Computes the inverse of the error function erf.
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
20
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
21 ## Author: KH <Kurt.Hornik@ci.tuwien.ac.at>
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
22 ## Created: 27 September 1994
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
23 ## Adapted-By: jwe
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
24
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
25 function y = erfinv (x)
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
26
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
27 if (nargin != 1)
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
28 usage ("erfinv (x)");
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
29 endif
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
30
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
31 [m, n] = size (x);
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
32 x = reshape (x, m * n, 1);
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
33 y = zeros (m * n, 1);
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
34
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
35 i = find ((x < -1) | (x > 1));
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
36 if any (i)
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
37 y(i) = NaN * ones (length (i), 1);
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
38 endif
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
39
2621
337a09dd1c06 [project @ 1997-01-24 21:49:41 by jwe]
jwe
parents: 2537
diff changeset
40 t = find (x == -1);
2663
00b2eff19bf5 [project @ 1997-02-08 21:58:49 by jwe]
jwe
parents: 2621
diff changeset
41 y (t) = (-Inf) * ones (size (t));
2621
337a09dd1c06 [project @ 1997-01-24 21:49:41 by jwe]
jwe
parents: 2537
diff changeset
42
337a09dd1c06 [project @ 1997-01-24 21:49:41 by jwe]
jwe
parents: 2537
diff changeset
43 t = find (x == 1);
337a09dd1c06 [project @ 1997-01-24 21:49:41 by jwe]
jwe
parents: 2537
diff changeset
44 y (t) = Inf * ones (size (t));
2537
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
45
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
46 i = find ((x > -1) & (x < 1));
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
47 if any (i)
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
48 z_old = ones (length (i), 1);
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
49 z_new = zeros (length (i), 1);
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
50 while (any (any (abs (z_new - z_old) > eps)))
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
51 z_old = z_new;
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
52 z_new = z_old - (erf (z_old) - x(i)) .* exp (z_old.^2);
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
53 endwhile
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
54 y(i) = z_new;
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
55 endif
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
56
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
57 y = reshape (y, m, n);
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
58
80b982e7f4b1 [project @ 1996-11-19 21:15:06 by jwe]
jwe
parents:
diff changeset
59 endfunction