Mercurial > octave
annotate scripts/specfun/expint.m @ 30875:5d3faba0342e
doc: Ensure documentation lists output argument when it exists for all m-files.
For new users of Octave it is best to show explicit calling forms
in the documentation and to show a return argument when it exists.
* bp-table.cc, shift.m, accumarray.m, accumdim.m, bincoeff.m, bitcmp.m,
bitget.m, bitset.m, blkdiag.m, celldisp.m, cplxpair.m, dblquad.m, flip.m,
fliplr.m, flipud.m, idivide.m, int2str.m, interpft.m, logspace.m, num2str.m,
polyarea.m, postpad.m, prepad.m, randi.m, repmat.m, rng.m, rot90.m, rotdim.m,
structfun.m, triplequad.m, uibuttongroup.m, uicontrol.m, uipanel.m,
uipushtool.m, uitoggletool.m, uitoolbar.m, waitforbuttonpress.m, help.m,
__additional_help_message__.m, hsv.m, im2double.m, im2frame.m, javachk.m,
usejava.m, argnames.m, char.m, formula.m, inline.m, __vectorize__.m, findstr.m,
flipdim.m, strmatch.m, vectorize.m, commutation_matrix.m, cond.m, cross.m,
duplication_matrix.m, expm.m, orth.m, rank.m, rref.m, trace.m, vech.m, cast.m,
compare_versions.m, delete.m, dir.m, fileattrib.m, grabcode.m, gunzip.m,
inputname.m, license.m, list_primes.m, ls.m, mexext.m, movefile.m,
namelengthmax.m, nargoutchk.m, nthargout.m, substruct.m, swapbytes.m, ver.m,
verLessThan.m, what.m, fminunc.m, fsolve.m, fzero.m, optimget.m, __fdjac__.m,
matlabroot.m, savepath.m, campos.m, camroll.m, camtarget.m, camup.m, camva.m,
camzoom.m, clabel.m, diffuse.m, legend.m, orient.m, rticks.m, specular.m,
thetaticks.m, xlim.m, xtickangle.m, xticklabels.m, xticks.m, ylim.m,
ytickangle.m, yticklabels.m, yticks.m, zlim.m, ztickangle.m, zticklabels.m,
zticks.m, ellipsoid.m, isocolors.m, isonormals.m, stairs.m, surfnorm.m,
__actual_axis_position__.m, __pltopt__.m, close.m, graphics_toolkit.m, pan.m,
print.m, printd.m, __ghostscript__.m, __gnuplot_print__.m, __opengl_print__.m,
rotate3d.m, subplot.m, zoom.m, compan.m, conv.m, poly.m, polyaffine.m,
polyder.m, polyint.m, polyout.m, polyreduce.m, polyvalm.m, roots.m, prefdir.m,
prefsfile.m, profexplore.m, profexport.m, profshow.m, powerset.m, unique.m,
arch_rnd.m, arma_rnd.m, autoreg_matrix.m, bartlett.m, blackman.m, detrend.m,
durbinlevinson.m, fftconv.m, fftfilt.m, fftshift.m, fractdiff.m, hamming.m,
hanning.m, hurst.m, ifftshift.m, rectangle_lw.m, rectangle_sw.m, triangle_lw.m,
sinc.m, sinetone.m, sinewave.m, spectral_adf.m, spectral_xdf.m, spencer.m,
ilu.m, __sprand__.m, sprand.m, sprandn.m, sprandsym.m, treelayout.m, beta.m,
betainc.m, betaincinv.m, betaln.m, cosint.m, expint.m, factorial.m, gammainc.m,
gammaincinv.m, lcm.m, nthroot.m, perms.m, reallog.m, realpow.m, realsqrt.m,
sinint.m, hadamard.m, hankel.m, hilb.m, invhilb.m, magic.m, pascal.m, rosser.m,
toeplitz.m, vander.m, wilkinson.m, center.m, corr.m, cov.m, discrete_cdf.m,
discrete_inv.m, discrete_pdf.m, discrete_rnd.m, empirical_cdf.m,
empirical_inv.m, empirical_pdf.m, empirical_rnd.m, kendall.m, kurtosis.m,
mad.m, mean.m, meansq.m, median.m, mode.m, moment.m, range.m, ranks.m,
run_count.m, skewness.m, spearman.m, statistics.m, std.m, base2dec.m,
bin2dec.m, blanks.m, cstrcat.m, deblank.m, dec2base.m, dec2bin.m, dec2hex.m,
hex2dec.m, index.m, regexptranslate.m, rindex.m, strcat.m, strjust.m,
strtrim.m, strtrunc.m, substr.m, untabify.m, __have_feature__.m,
__prog_output_assert__.m, __run_test_suite__.m, example.m, fail.m, asctime.m,
calendar.m, ctime.m, date.m, etime.m:
Add return arguments to @deftypefn macros where they were missing. Rename
variables in functions (particularly generic "retval") to match documentation.
Rename some return variables for (hopefully) better clarity (e.g., 'ax' to 'hax'
to indicate it is a graphics handle to an axes object).
author | Rik <rik@octave.org> |
---|---|
date | Wed, 30 Mar 2022 20:40:27 -0700 |
parents | 796f54d4ddbf |
children | 597f3ee61a48 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 ######################################################################## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 ## |
30564
796f54d4ddbf
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
29791
diff
changeset
|
3 ## Copyright (C) 2018-2022 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
26946
diff
changeset
|
4 ## |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 ## See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 ## distribution or <https://octave.org/copyright/>. |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
7 ## |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
8 ## 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
|
9 ## |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
10 ## 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
|
11 ## 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
|
12 ## 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
|
13 ## (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
|
14 ## |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
15 ## 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
|
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22323
diff
changeset
|
18 ## 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
|
19 ## |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
20 ## 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
|
21 ## 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
|
22 ## <https://www.gnu.org/licenses/>. |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 ## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 ######################################################################## |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
25 |
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
26 ## -*- texinfo -*- |
30875
5d3faba0342e
doc: Ensure documentation lists output argument when it exists for all m-files.
Rik <rik@octave.org>
parents:
30564
diff
changeset
|
27 ## @deftypefn {} {@var{y} =} expint (@var{x}) |
25106
d7ad543255c5
doc: Shorten very long first sentences of docstrings (bug #53388).
Rik <rik@octave.org>
parents:
25015
diff
changeset
|
28 ## Compute the exponential integral. |
d7ad543255c5
doc: Shorten very long first sentences of docstrings (bug #53388).
Rik <rik@octave.org>
parents:
25015
diff
changeset
|
29 ## |
d7ad543255c5
doc: Shorten very long first sentences of docstrings (bug #53388).
Rik <rik@octave.org>
parents:
25015
diff
changeset
|
30 ## The exponential integral is defined as: |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
31 ## |
16587
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
32 ## @tex |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
33 ## $$ |
17363 | 34 ## {\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
|
35 ## $$ |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
36 ## @end tex |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
37 ## @ifnottex |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
38 ## |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
39 ## @example |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
40 ## @group |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
41 ## +oo |
17363 | 42 ## / |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
43 ## | exp (-t) |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
44 ## 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
|
45 ## | t |
17363 | 46 ## / |
47 ## x | |
16587
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
48 ## @end group |
a3fdd6041e64
Fix ellipj, ellipke, and expint docstrings
Mike Miller <mtmiller@ieee.org>
parents:
16586
diff
changeset
|
49 ## @end example |
17513
fedcd3717ebc
doc: grammarcheck of documentation before 3.8 release.
Rik <rik@octave.org>
parents:
17363
diff
changeset
|
50 ## |
17363 | 51 ## @end ifnottex |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
52 ## |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
53 ## Note: For compatibility, this function uses the @sc{matlab} definition |
17363 | 54 ## 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
|
55 ## value as @math{E_1 (x)}, and the exponential integral as |
17363 | 56 ## @tex |
57 ## $$ | |
58 ## {\rm Ei} (x) = - \int_{-x}^\infty {e^{-t} \over t} dt. | |
59 ## $$ | |
60 ## @end tex | |
61 ## @ifnottex | |
62 ## | |
63 ## @example | |
64 ## @group | |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
65 ## +oo |
17363 | 66 ## / |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
67 ## | exp (-t) |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
68 ## 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
|
69 ## | t |
17363 | 70 ## / |
71 ## -x | |
72 ## @end group | |
73 ## @end example | |
17513
fedcd3717ebc
doc: grammarcheck of documentation before 3.8 release.
Rik <rik@octave.org>
parents:
17363
diff
changeset
|
74 ## |
17363 | 75 ## @end ifnottex |
17514
5b916efea542
doc: spellcheck of documentation before 3.8 release.
Rik <rik@octave.org>
parents:
17513
diff
changeset
|
76 ## The two definitions are related, for positive real values of @var{x}, by |
17363 | 77 ## @tex |
78 ## $ | |
79 ## E_1 (-x) = -{\rm Ei} (x) - i\pi. | |
80 ## $ | |
81 ## @end tex | |
82 ## @ifnottex | |
83 ## @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
|
84 ## @end ifnottex |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
85 ## |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
86 ## References: |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
87 ## |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
88 ## @nospell{M. Abramowitz and I.A. Stegun}, |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
89 ## @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
|
90 ## |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
91 ## @nospell{N. Bleistein and R.A. Handelsman}, |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
92 ## @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
|
93 ## |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
94 ## @seealso{cosint, sinint, exp} |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
95 ## @end deftypefn |
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
96 |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
97 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
|
98 |
28891
de5f2f9a64ff
maint: Use same coding style when checking for a minimum of 1 input.
Rik <rik@octave.org>
parents:
28886
diff
changeset
|
99 if (nargin < 1) |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
100 print_usage (); |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
101 endif |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
102 |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
103 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
|
104 error ("expint: X must be numeric"); |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
105 endif |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
106 |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
107 ## Convert to floating point if necessary |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
108 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
|
109 x = double (x); |
17363 | 110 endif |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
111 |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
112 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
|
113 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
|
114 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
|
115 |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
116 ## Initialize the result |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
117 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
|
118 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
|
119 else |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
120 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
|
121 endif |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
122 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
|
123 |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
124 ## 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
|
125 ## 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
|
126 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
|
127 imag (x).^2 ./ (10^2)) <= 1) ... |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
128 | (real (x) < 0 & abs (imag (x)) <= 1e-8); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
129 cf_idx = ((((real (x) + 1).^2 ./ (38^2) + ... |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
130 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
|
131 & (! s_idx)) & (real (x) <= 35); |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
132 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
|
133 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
|
134 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
|
135 x_a = x(a_idx); |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
136 |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
137 ## Series expansion |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
138 ## 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
|
139 ## 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
|
140 ## 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
|
141 gm = 0.577215664901532860606512090082402431042159335; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
142 e1_s = -gm - log (x_s); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
143 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
|
144 ssum = res; |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
145 k = 1; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
146 todo = true (size (res)); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
147 while (k < 1e3 && any (todo)) |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
148 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
|
149 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
|
150 k += 1; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
151 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
|
152 endwhile |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
153 e1_s -= ssum; |
16586
f423873d3275
Style fixes for ellipj.cc, ellipke.m, and expint.m
Mike Miller <mtmiller@ieee.org>
parents:
16585
diff
changeset
|
154 |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
155 ## 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
|
156 ## 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
|
157 ## formula 5.1.22, p 229. |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
158 ## 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
|
159 |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
160 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
|
161 |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
162 ## 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
|
163 ## with complex values) |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
164 |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
165 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
|
166 e1_cf = real (e1_cf); |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
167 endif |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
168 |
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
169 ## 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
|
170 ## "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
|
171 e1_a = exp (-x_a) ./ x_a; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
172 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
|
173 k = 0; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
174 todo = true (size (x_a)); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
175 while (k < 1e3 && any (todo)) |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
176 res(todo) ./= (- x_a(todo) / (k + 1)); |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
177 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
|
178 k += 1; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
179 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
|
180 endwhile |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
181 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
|
182 |
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
183 ## 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
|
184 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
|
185 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
|
186 E1(a_idx) = e1_a; |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
187 |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
188 ## 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
|
189 E1 = reshape (E1, orig_sz); |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
190 if (orig_sparse) |
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
191 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
|
192 endif |
21758
ffad2baa90f7
maint: Use newlines to make code more readable.
Rik <rik@octave.org>
parents:
20852
diff
changeset
|
193 |
16584
2f766ceeb03e
Add ellipj, ellipke, and expint functions from Octave Forge
Mike Miller <mtmiller@ieee.org>
parents:
diff
changeset
|
194 endfunction |
16585
1a3bfb14b5da
Add and fix tests for ellipj, ellipke, and expint
Mike Miller <mtmiller@ieee.org>
parents:
16584
diff
changeset
|
195 |
17363 | 196 |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
197 ## 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
|
198 %!test |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
199 %! 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
|
200 %! -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
|
201 %! -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
|
202 %! -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
|
203 %! -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
|
204 %! -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
|
205 %! 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
|
206 %! -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
|
207 %! 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
|
208 %! 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
|
209 %! 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
|
210 %! 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
|
211 %! 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
|
212 %! 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
|
213 %! 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
|
214 %! 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
|
215 %! 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
|
216 %! 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
|
217 %! 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
|
218 %! 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
|
219 %! 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
|
220 %! 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
|
221 %! -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
|
222 %! -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
|
223 %! -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
|
224 %! -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
|
225 %! 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
|
226 %! 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
|
227 %! 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
|
228 %! 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
|
229 %! 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
|
230 %! 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
|
231 %! -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
|
232 %! -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
|
233 %! -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
|
234 %! -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
|
235 %! -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
|
236 %! -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
|
237 %! -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
|
238 %! 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
|
239 %! 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
|
240 %! 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
|
241 %! assert (expint (X), y_exp, -1e-14); |
17363 | 242 |
243 ## 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
|
244 %!test |
17363 | 245 %! 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
|
246 %! y_exp = [-Inf - i*pi; 0; NaN; Inf; 0 - i*pi]; |
17363 | 247 %! y = expint (x); |
248 %! assert (y, y_exp, 5*eps); | |
249 | |
26946
04e5cb5e2cb3
update bug status in tests
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
250 %!test <*53351> |
25015
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
251 %! assert (expint (32.5 + 1i), |
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
252 %! 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
|
253 %! assert (expint (44 + 1i), |
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
254 %! 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
|
255 |
26946
04e5cb5e2cb3
update bug status in tests
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
256 %!test <*47738> |
29789
c8585732ce08
tests: Relax tolerance for tests on macOS.
Markus Mützel <markus.muetzel@gmx.de>
parents:
29358
diff
changeset
|
257 %! assert (expint (10i), 0.0454564330044554 + 0.0875512674239774i, -5*eps); |
25015
baa7e37453b1
Added more tests for betainc and expint.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24927
diff
changeset
|
258 |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
259 ## 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
|
260 %!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
|
261 %!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
|
262 %!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
|
263 %!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
|
264 %!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
|
265 %!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
|
266 %!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
|
267 %!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
|
268 %!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
|
269 %!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
|
270 |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
271 ## 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
|
272 %!assert (isreal (expint (linspace (0, 100)))) |
24927
c280560d9c96
Overhaul special functions modified by GSOC2018 project.
Rik <rik@octave.org>
parents:
24923
diff
changeset
|
273 %!assert (! isreal (expint (-1))) |
24908
6c082a43abd8
expint: moved the Lentz algorithm to .cc function.
Michele Ginesi <michele.ginesi@gmail.com>
parents:
24534
diff
changeset
|
274 |
17363 | 275 ## Test input validation |
28886
d8318c12d903
test: remove unnecessary BIST tests in m-files checking for excessive number of inputs.
Rik <rik@octave.org>
parents:
27923
diff
changeset
|
276 %!error <Invalid call> expint () |
23080
c56d30ea6cd4
expint.m: new strategies to compute the exponential integral (bug #47738).
Michele Ginesi <michele.ginesi@gmail.com>
parents:
22755
diff
changeset
|
277 %!error <X must be numeric> expint ("1") |