# scipy.special.sici#

scipy.special.sici(x, out=None) = <ufunc 'sici'>#

Sine and cosine integrals.

The sine integral is

$\int_0^x \frac{\sin{t}}{t}dt$

and the cosine integral is

$\gamma + \log(x) + \int_0^x \frac{\cos{t} - 1}{t}dt$

where $$\gamma$$ is Euler’s constant and $$\log$$ is the principal branch of the logarithm [1].

Parameters:
xarray_like

Real or complex points at which to compute the sine and cosine integrals.

outtuple of ndarray, optional

Optional output arrays for the function results

Returns:
siscalar or ndarray

Sine integral at x

ciscalar or ndarray

Cosine integral at x

shichi

Hyperbolic sine and cosine integrals.

exp1

Exponential integral E1.

expi

Exponential integral Ei.

Notes

For real arguments with x < 0, ci is the real part of the cosine integral. For such points ci(x) and ci(x + 0j) differ by a factor of 1j*pi.

For real arguments the function is computed by calling Cephes’ [2] sici routine. For complex arguments the algorithm is based on Mpmath’s [3] si and ci routines.

References

[1] (1,2)

Milton Abramowitz and Irene A. Stegun, eds. Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables. New York: Dover, 1972. (See Section 5.2.)

[2]

Cephes Mathematical Functions Library, http://www.netlib.org/cephes/

[3]

Fredrik Johansson and others. “mpmath: a Python library for arbitrary-precision floating-point arithmetic” (Version 0.19) http://mpmath.org/

Examples

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from scipy.special import sici, exp1


sici accepts real or complex input:

>>> sici(2.5)
(1.7785201734438267, 0.2858711963653835)
>>> sici(2.5 + 3j)
((4.505735874563953+0.06863305018999577j),
(0.0793644206906966-2.935510262937543j))


For z in the right half plane, the sine and cosine integrals are related to the exponential integral E1 (implemented in SciPy as scipy.special.exp1) by

• Si(z) = (E1(i*z) - E1(-i*z))/2i + pi/2

• Ci(z) = -(E1(i*z) + E1(-i*z))/2

See [1] (equations 5.2.21 and 5.2.23).

We can verify these relations:

>>> z = 2 - 3j
>>> sici(z)
((4.54751388956229-1.3991965806460565j),
(1.408292501520851+2.9836177420296055j))

>>> (exp1(1j*z) - exp1(-1j*z))/2j + np.pi/2  # Same as sine integral
(4.54751388956229-1.3991965806460565j)

>>> -(exp1(1j*z) + exp1(-1j*z))/2            # Same as cosine integral
(1.408292501520851+2.9836177420296055j)


Plot the functions evaluated on the real axis; the dotted horizontal lines are at pi/2 and -pi/2:

>>> x = np.linspace(-16, 16, 150)
>>> si, ci = sici(x)

>>> fig, ax = plt.subplots()
>>> ax.plot(x, si, label='Si(x)')
>>> ax.plot(x, ci, '--', label='Ci(x)')