Mercurial > octave
annotate scripts/specfun/expint.m @ 25106:d7ad543255c5 stable
doc: Shorten very long first sentences of docstrings (bug #53388).
* bsxfun.cc (Fbsxfun), daspk.cc (Fdaspk), dasrt.cc (Fdasrt), dassl.cc (Fdassl),
gsvd.cc (Fgsvd), load-save.cc (Foctave_core_file_limit), qz.cc (Fqz), svd.cc
(Fsvd), sylvester.cc (Fsylvester), utils.cc (Ferrno), bincoeff.m, bessel.m,
krylov.m, expint.m, moment.m: Shorten very long first sentences.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 03 Apr 2018 21:37:29 -0700 |
parents | baa7e37453b1 |
children | 00f796120a6d |
rev | line source |
---|---|
24923
40ab8be7d7ec
Fixed style in specfun scripts
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24922
diff
changeset
|
1 ## Copyright (C) 2018 Michele Ginesi |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
2 ## |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
3 ## This file is part of Octave. |
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
4 ## |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
5 ## Octave is free software: you can redistribute it and/or modify it |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
6 ## under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
7 ## the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
8 ## (at your option) any later version. |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
9 ## |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
10 ## Octave is distributed in the hope that it will be useful, but |
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
13 ## GNU General Public License for more details. |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
14 ## |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
15 ## You should have received a copy of the GNU General Public License |
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
16 ## along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
17 ## <https://www.gnu.org/licenses/>. |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
18 |
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
19 ## -*- texinfo -*- |
20852
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20162
diff
changeset
|
20 ## @deftypefn {} {} expint (@var{x}) |
25106
d7ad543255c5
doc: Shorten very long first sentences of docstrings (bug #53388).
Rik <rik@octave.org>
parents:
25015
diff
changeset
|
21 ## Compute the exponential integral. |
d7ad543255c5
doc: Shorten very long first sentences of docstrings (bug #53388).
Rik <rik@octave.org>
parents:
25015
diff
changeset
|
22 ## |
d7ad543255c5
doc: Shorten very long first sentences of docstrings (bug #53388).
Rik <rik@octave.org>
parents:
25015
diff
changeset
|
23 ## The exponential integral is defined as: |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
24 ## |
16587
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
25 ## @tex |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
26 ## $$ |
17363 | 27 ## {\rm E_1} (x) = \int_x^\infty {e^{-t} \over t} dt |
16587
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
28 ## $$ |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
29 ## @end tex |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
30 ## @ifnottex |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
31 ## |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
32 ## @example |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
33 ## @group |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
34 ## +oo |
17363 | 35 ## / |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
36 ## | exp (-t) |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
37 ## E_1 (x) = | -------- dt |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
38 ## | t |
17363 | 39 ## / |
40 ## x | |
16587
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
41 ## @end group |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
42 ## @end example |
17513
fedcd3717ebc
doc: grammarcheck of documentation before 3.8 release.
Rik <rik@octave.org>
parents:
17363
diff
changeset
|
43 ## |
17363 | 44 ## @end ifnottex |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
45 ## |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
46 ## Note: For compatibility, this function uses the @sc{matlab} definition |
17363 | 47 ## of the exponential integral. Most other sources refer to this particular |
20162
2645f9ef8c88
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19593
diff
changeset
|
48 ## value as @math{E_1 (x)}, and the exponential integral as |
17363 | 49 ## @tex |
50 ## $$ | |
51 ## {\rm Ei} (x) = - \int_{-x}^\infty {e^{-t} \over t} dt. | |
52 ## $$ | |
53 ## @end tex | |
54 ## @ifnottex | |
55 ## | |
56 ## @example | |
57 ## @group | |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
58 ## +oo |
17363 | 59 ## / |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
60 ## | exp (-t) |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
61 ## Ei (x) = - | -------- dt |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
62 ## | t |
17363 | 63 ## / |
64 ## -x | |
65 ## @end group | |
66 ## @end example | |
17513
fedcd3717ebc
doc: grammarcheck of documentation before 3.8 release.
Rik <rik@octave.org>
parents:
17363
diff
changeset
|
67 ## |
17363 | 68 ## @end ifnottex |
17514
5b916efea542
doc: spellcheck of documentation before 3.8 release.
Rik <rik@octave.org>
parents:
17513
diff
changeset
|
69 ## The two definitions are related, for positive real values of @var{x}, by |
17363 | 70 ## @tex |
71 ## $ | |
72 ## E_1 (-x) = -{\rm Ei} (x) - i\pi. | |
73 ## $ | |
74 ## @end tex | |
75 ## @ifnottex | |
76 ## @w{@code{E_1 (-x) = -Ei (x) - i*pi}}. | |
16587
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
77 ## @end ifnottex |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
78 ## |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
79 ## References: |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
80 ## |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
81 ## @nospell{M. Abramowitz and I.A. Stegun}, |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
82 ## @cite{Handbook of Mathematical Functions}, 1964. |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
83 ## |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
84 ## @nospell{N. Bleistein and R.A. Handelsman}, |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
85 ## @cite{Asymptotic expansions of integrals}, 1986. |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
86 ## |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
87 ## @seealso{cosint, sinint, exp} |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
88 ## @end deftypefn |
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
89 |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
90 function E1 = expint (x) |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
91 |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
92 if (nargin != 1) |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
93 print_usage (); |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
94 endif |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
95 |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
96 if (! isnumeric (x)) |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
97 error ("expint: X must be numeric"); |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
98 endif |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
99 |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
100 ## Convert to floating point if necessary |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
101 if (isinteger (x)) |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
102 x = double (x); |
17363 | 103 endif |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
104 |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
105 orig_sparse = issparse (x); |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
106 orig_sz = size (x); |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
107 x = x(:); # convert to column vector |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
108 |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
109 ## Initialize the result |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
110 if (isreal (x) && x >= 0) |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
111 E1 = zeros (size (x), class (x)); |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
112 else |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
113 E1 = complex (zeros (size (x), class (x))); |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
114 endif |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
115 tol = eps (class (x)); |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
116 |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
117 ## Divide the input into 3 regions and apply a different algorithm for each. |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
118 ## s = series expansion, cf = continued fraction, a = asymptotic series |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
119 s_idx = (((real (x) + 19.5).^ 2 ./ (20.5^2) + ... |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
120 imag (x).^2 ./ (10^2)) <= 1) ... |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
121 | (real (x) < 0 & abs (imag (x)) <= 1e-8); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
122 cf_idx = ((((real (x) + 1).^2 ./ (38^2) + ... |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
123 imag (x).^2 ./ (40^2)) <= 1) ... |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
124 & (! s_idx)) & (real (x) <= 35); |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
125 a_idx = (! s_idx) & (! cf_idx); |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
126 x_s = x(s_idx); |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
127 x_cf = x(cf_idx); |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
128 x_a = x(a_idx); |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
129 |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
130 ## Series expansion |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
131 ## Abramowitz, Stegun, "Handbook of Mathematical Functions", |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
132 ## formula 5.1.11, p 229. |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
133 ## FIXME: Why so long? IEEE double doesn't have this much precision. |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
134 gm = 0.577215664901532860606512090082402431042159335; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
135 e1_s = -gm - log (x_s); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
136 res = -x_s; |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
137 ssum = res; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
138 k = 1; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
139 todo = true (size (res)); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
140 while (k < 1e3 && any (todo)) |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
141 res(todo) .*= (k * (- x_s(todo)) / ((k + 1) ^ 2)); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
142 ssum(todo) += res(todo); |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
143 k += 1; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
144 todo = (abs (res) > (tol * abs (ssum))); |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
145 endwhile |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
146 e1_s -= ssum; |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
147 |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
148 ## Continued fraction expansion, |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
149 ## Abramowitz, Stegun, "Handbook of Mathematical Functions", |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
150 ## formula 5.1.22, p 229. |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
151 ## Modified Lentz's algorithm, from "Numerical recipes in Fortran 77" p.165. |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
152 |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
153 e1_cf = exp (-x_cf) .* __expint__ (x_cf); |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
154 |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
155 ## Remove spurious imaginary part if needed (__expint__ works automatically |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
156 ## with complex values) |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
157 |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
158 if (isreal (x_cf) && x_cf >= 0) |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
159 e1_cf = real (e1_cf); |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
160 endif |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
161 |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
162 ## Asymptotic series, from N. Bleistein and R.A. Handelsman |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
163 ## "Asymptotic expansion of integrals", pages 1-4. |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
164 e1_a = exp (-x_a) ./ x_a; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
165 ssum = res = ones (size (x_a), class (x_a)); |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
166 k = 0; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
167 todo = true (size (x_a)); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
168 while (k < 1e3 && any (todo)) |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
169 res(todo) ./= (- x_a(todo) / (k + 1)); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
170 ssum(todo) += res(todo); |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
171 k += 1; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
172 todo = abs (x_a) > k; |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
173 endwhile |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
174 e1_a .*= ssum; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
175 |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
176 ## Combine results from each region into final output |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
177 E1(s_idx) = e1_s; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
178 E1(cf_idx) = e1_cf; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
179 E1(a_idx) = e1_a; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
180 |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
181 ## Restore shape and sparsity of input |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
182 E1 = reshape (E1, orig_sz); |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
183 if (orig_sparse) |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
184 E1 = sparse (E1); |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
185 endif |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
186 |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
187 endfunction |
16585
1a3bfb14b5da
Add and fix tests for ellipj, ellipke, and expint
Mike Miller <mtmiller@ieee.org>
parents:
16584
diff
changeset
|
188 |
17363 | 189 |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
190 ## The following values were computed with the Octave symbolic package |
16585
1a3bfb14b5da
Add and fix tests for ellipj, ellipke, and expint
Mike Miller <mtmiller@ieee.org>
parents:
16584
diff
changeset
|
191 %!test |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
192 %! X = [-50 - 50i -30 - 50i -10 - 50i 5 - 50i 15 - 50i 25 - 50i |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
193 %! -50 - 30i -30 - 30i -10 - 30i 5 - 30i 15 - 30i 25 - 30i |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
194 %! -50 - 10i -30 - 10i -10 - 10i 5 - 10i 15 - 10i 25 - 10i |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
195 %! -50 + 5i -30 + 5i -10 + 5i 5 + 5i 15 + 5i 25 + 5i |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
196 %! -50 + 15i -30 + 15i -10 + 15i 5 + 15i 15 + 15i 25 + 15i |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
197 %! -50 + 25i -30 + 25i -10 + 25i 5 + 25i 15 + 25i 25 + 25i]; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
198 %! y_exp = [ -3.61285286166493e+19 + 6.46488018613387e+19i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
199 %! -4.74939752018180e+10 + 1.78647798300364e+11i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
200 %! 3.78788822381261e+01 + 4.31742823558278e+02i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
201 %! 5.02062497548626e-05 + 1.23967883532795e-04i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
202 %! 3.16785290137650e-09 + 4.88866651583182e-09i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
203 %! 1.66999261039533e-13 + 1.81161508735941e-13i; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
204 %! 3.47121527628275e+19 + 8.33104448629260e+19i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
205 %! 1.54596484273693e+11 + 2.04179357837414e+11i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
206 %! 6.33946547999647e+02 + 3.02965459323125e+02i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
207 %! 2.19834747595065e-04 - 9.25266900230165e-06i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
208 %! 8.49515487435091e-09 - 2.95133588338825e-09i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
209 %! 2.96635342439717e-13 - 1.85401806861382e-13i; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
210 %! 9.65535916388246e+19 + 3.78654062133933e+19i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
211 %! 3.38477774418380e+11 + 8.37063899960569e+10i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
212 %! 1.57615042657685e+03 - 4.33777639047543e+02i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
213 %! 2.36176542789578e-05 - 5.75861972980636e-04i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
214 %! -6.83624588479039e-09 - 1.47230889442175e-08i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
215 %! -2.93020801760942e-13 - 4.03912221595793e-13i; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
216 %! -1.94572937469407e+19 - 1.03494929263031e+20i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
217 %! -4.22385087573180e+10 - 3.61103191095041e+11i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
218 %! 4.89771220858552e+02 - 2.09175729060712e+03i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
219 %! 7.26650666035639e-04 + 4.71027801635222e-04i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
220 %! 1.02146578536128e-08 + 1.51813977370467e-08i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
221 %! 2.41628751621686e-13 + 4.66309048729523e-13i; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
222 %! 5.42351559144068e+19 + 8.54503231614651e+19i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
223 %! 1.22886461074544e+11 + 3.03555953589323e+11i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
224 %! -2.13050339387819e+02 + 1.23853666784218e+03i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
225 %! -3.68087391884738e-04 + 1.94003994408861e-04i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
226 %! -1.39355838231763e-08 + 6.57189276453356e-10i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
227 %! -4.55133112151501e-13 - 8.46035902535333e-14i; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
228 %! -7.75482228205081e+19 - 5.36017490438329e+19i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
229 %! -1.85284579257329e+11 - 2.08761110392897e+11i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
230 %! -1.74210199269860e+02 - 8.09467914953486e+02i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
231 %! 9.40470496160143e-05 - 2.44265223110736e-04i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
232 %! 6.64487526601190e-09 - 7.87242868014498e-09i, ... |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
233 %! 3.10273337426175e-13 - 2.28030229776792e-13i]; |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
234 %! assert (expint (X), y_exp, -1e-14); |
17363 | 235 |
236 ## Exceptional values (-Inf, Inf, NaN, 0, 0.37250741078) | |
19593
446c46af4b42
strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents:
17744
diff
changeset
|
237 %!test |
17363 | 238 %! x = [-Inf; Inf; NaN; 0; -0.3725074107813668]; |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
239 %! y_exp = [-Inf - i*pi; 0; NaN; Inf; 0 - i*pi]; |
17363 | 240 %! y = expint (x); |
241 %! assert (y, y_exp, 5*eps); | |
242 | |
25015
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
243 %!test <53351> |
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
244 %! assert (expint (32.5 + 1i), |
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
245 %! 1.181108930758065e-16 - 1.966348533426658e-16i, -4*eps); |
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
246 %! assert (expint (44 + 1i), |
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
247 %! 9.018757389858152e-22 - 1.475771020004195e-21i, -4*eps); |
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
248 |
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
249 %!test <47738> |
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
250 %! assert (expint (10i), 0.0454564330044554 + 0.0875512674239774i, -4*eps); |
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
251 |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
252 ## Test preservation or conversion of the class |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
253 %!assert (class (expint (single (1))), "single") |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
254 %!assert (class (expint (int8 (1))), "double") |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
255 %!assert (class (expint (int16 (1))), "double") |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
256 %!assert (class (expint (int32 (1))), "double") |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
257 %!assert (class (expint (int64 (1))), "double") |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
258 %!assert (class (expint (uint8 (1))), "double") |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
259 %!assert (class (expint (uint16 (1))), "double") |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
260 %!assert (class (expint (uint32 (1))), "double") |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
261 %!assert (class (expint (uint64 (1))), "double") |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
262 %!assert (issparse (expint (sparse (1)))) |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
263 |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
264 ## Test on the correct Image set |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
265 %!assert (isreal (expint (linspace (0, 100)))) |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
266 %!assert (! isreal (expint (-1))) |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
267 |
17363 | 268 ## Test input validation |
16585
1a3bfb14b5da
Add and fix tests for ellipj, ellipke, and expint
Mike Miller <mtmiller@ieee.org>
parents:
16584
diff
changeset
|
269 %!error expint () |
1a3bfb14b5da
Add and fix tests for ellipj, ellipke, and expint
Mike Miller <mtmiller@ieee.org>
parents:
16584
diff
changeset
|
270 %!error expint (1,2) |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
271 %!error <X must be numeric> expint ("1") |