Mercurial > forge
changeset 2476:c13cfcaf1267 octave-forge
Errors fixed
author | sis-sou |
---|---|
date | Tue, 12 Sep 2006 20:20:50 +0000 |
parents | 8b6e46fcf4ce |
children | 48205c49a06d |
files | main/specfun/inst/expint_E1.m main/specfun/inst/expint_Ei.m |
diffstat | 2 files changed, 27 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/main/specfun/inst/expint_E1.m Tue Sep 12 20:18:53 2006 +0000 +++ b/main/specfun/inst/expint_E1.m Tue Sep 12 20:20:50 2006 +0000 @@ -18,7 +18,7 @@ ## ## infinity ## / -## expint_E1(x) = | exp(t)/t dt +## expint(x) = | exp(t)/t dt ## / ## x ## @@ -28,9 +28,13 @@ if (nargin != 1) usage ("expint_E1(x)"); endif - if(x > 0 && imag(x) == 0) + if(x > 0 && imag(x)==0) v = -expint_Ei(-x); else - v = -expint_Ei(-x) - i.*pi; + if(imag(x) > 0) + v = -expint_Ei(-x) -i.*pi; + else + v = -expint_Ei(-x) +i.*pi; + endif endif endfunction \ No newline at end of file
--- a/main/specfun/inst/expint_Ei.m Tue Sep 12 20:18:53 2006 +0000 +++ b/main/specfun/inst/expint_Ei.m Tue Sep 12 20:20:50 2006 +0000 @@ -29,18 +29,30 @@ usage ("expint_Ei(x)"); endif F = @(x) exp(-x)./x; - if(x<0) - y = -quad(F,-x,Inf); + if(x<0 && imag(x) == 0) + y = -quad(F,-x,Inf); else if(abs(x) > 2 && imag(x) == 0) y = expint_Ei(2) - quad(F,-x,-2); else - y = 0; - for i = 1:100; - y = y + x.^i./(i.*factorial(i)); - endfor - - y = 0.577215664901532860606512090082402431 + log(x) + y; + if(abs(x) >= 10) + if(imag(x) <= 0) + a1 = 4.03640; + a2 = 1.15198; + b1 = 5.03637; + b2 = 4.19160; + y = -(x.^2 - a1.*x + a2)./((x.^2-b1.*x+b2).*(-x).*exp(-x))-i.*pi; + else + y = conj(expint_Ei(conj(x))); + endif; +## Serie Expansion + else + y = 0; + for i = 1:100; + y = y + x.^i./(i.*factorial(i)); + endfor + y = 0.577215664901532860606512090082402431 + log(x) + y; + endif endif endif; endfunction; \ No newline at end of file