3. Scipy Tutorial- 特殊函数

在scipy里scipy的special子包和numpy的polynomial提供了一些数学上的著名的公式的生成函数,例如scipy.special里的log1p、exp10等函数;numpy.polynomial里的Chebyshev、Laguerre等模块。

3.1 scipy.special里的函数

在scipy.special里提供了很多数学公式的函数,例如:

  • 求$10^x$
from scipy.special import exp10
a = exp10(-1)
print a
  • 再比如赫尔维茨$ \zeta $函数公式:
scipy.special.zeta(x, q)

$$ \zeta(x, q) = \sum_{n=0}^{\infty} \frac{1} { (n+q)^x}\quad (x > 1 , q > 0) $$ 可以使用scipy.special.zeta来获得。

from scipy.special import zeta
c = zeta(2, 1)
print "c", c
  • 黎曼ζ函数可以使用scipy.special.zetac函数来实现。
scipy.special.zetac(x)

$$ \zeta(x) = \sum_{k = 2}^{\infty}\frac{1}{k^x} $$

from scipy.special import zeta, zetac
c = zeta(2, 1)
print "c", c
d = zetac(2)
print "d", d

程序执行结果:

c 1.6449340668482266
d 0.6449340668482264

3.2 numpy.polynomial里的函数

import numpy.polynomial.chebyshev as chebyshev
import numpy as np
import numpy.linalg as linalg
x = np.array([1, 2, 3, 4])
y = np.array([1, 3, 5, 4])
deg = len(x) - 1
A = chebyshev.chebvander(x, deg)
print A, "# A"
c = linalg.solve(A, y) 
print c,"# c"

执行结果:

[[  1.   1.   1.   1.]
 [  1.   2.   7.  26.]
 [  1.   3.  17.  99.]
 [  1.   4.  31. 244.]] # A
[ 3.5   -3.875  1.5   -0.125] # c

3.3 Numpy.poly1d里的函数

  • poly1d可以构造一元多项式、求导、求积分以及求根等。
import numpy as np
p = np.poly1d([1, 2, 1])
print p
print np.polyder(p)
print np.polyint(p)
print np.roots([1, 2, 1])
print np.polyval([1, 2, 1], 3)

执行结果:

   2
1 x + 2 x + 1

2 x + 2
        3     2
0.3333 x + 1 x + 1 x
[-1. -1.]
16