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