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里的函数
- 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