Files
ailearning/docs/da/058.md
2020-10-19 21:08:55 +08:00

1824 lines
96 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 积分
## 符号积分
积分与求导的关系:
$$\frac{d}{dx} F(x) = f(x) \Rightarrow F(x) = \int f(x) dx$$
符号运算可以用 `sympy` 模块完成。
先导入 `init_printing` 模块方便其显示:
In [1]:
```py
from sympy import init_printing
init_printing()
```
In [2]:
```py
from sympy import symbols, integrate
import sympy
```
产生 x 和 y 两个符号变量,并进行运算:
In [3]:
```py
x, y = symbols('x y')
sympy.sqrt(x ** 2 + y ** 2)
```
Out[3]:$$\sqrt{x^{2} + y^{2}}$$
对于生成的符号变量 `z`,我们将其中的 `x` 利用 `subs` 方法替换为 `3`
In [4]:
```py
z = sympy.sqrt(x ** 2 + y ** 2)
z.subs(x, 3)
```
Out[4]:$$\sqrt{y^{2} + 9}$$
再替换 `y`
In [5]:
```py
z.subs(x, 3).subs(y, 4)
```
Out[5]:$$5$$
还可以从 `sympy.abc` 中导入现成的符号变量:
In [6]:
```py
from sympy.abc import theta
y = sympy.sin(theta) ** 2
y
```
Out[6]:$$\sin^{2}{\left (\theta \right )}$$
对 y 进行积分:
In [7]:
```py
Y = integrate(y)
Y
```
Out[7]:$$\frac{\theta}{2} - \frac{1}{2} \sin{\left (\theta \right )} \cos{\left (\theta \right )}$$
计算 $Y(\pi) - Y(0)$
In [8]:
```py
import numpy as np
np.set_printoptions(precision=3)
Y.subs(theta, np.pi) - Y.subs(theta, 0)
```
Out[8]:$$1.5707963267949$$
计算 $\int_0^\pi y d\theta$
In [9]:
```py
integrate(y, (theta, 0, sympy.pi))
```
Out[9]:$$\frac{\pi}{2}$$
显示的是字符表达式,查看具体数值可以使用 `evalf()` 方法,或者传入 `numpy.pi`,而不是 `sympy.pi`
In [10]:
```py
integrate(y, (theta, 0, sympy.pi)).evalf()
```
Out[10]:$$1.5707963267949$$In [11]:
```py
integrate(y, (theta, 0, np.pi))
```
Out[11]:$$1.5707963267949$$
根据牛顿莱布尼兹公式,这两个数值应该相等。
产生不定积分对象:
In [12]:
```py
Y_indef = sympy.Integral(y)
Y_indef
```
Out[12]:$$\int \sin^{2}{\left (\theta \right )}\, d\theta$$In [13]:
```py
print type(Y_indef)
```
```py
<class 'sympy.integrals.integrals.Integral'>
```
定积分:
In [14]:
```py
Y_def = sympy.Integral(y, (theta, 0, sympy.pi))
Y_def
```
Out[14]:$$\int_{0}^{\pi} \sin^{2}{\left (\theta \right )}\, d\theta$$
产生函数 $Y(x) = \int_0^x sin^2(\theta) d\theta$,并将其向量化:
In [15]:
```py
Y_raw = lambda x: integrate(y, (theta, 0, x))
Y = np.vectorize(Y_raw)
```
In [16]:
```py
%matplotlib inline
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi)
p = plt.plot(x, Y(x))
t = plt.title(r'$Y(x) = \int_0^x sin^2(\theta) d\theta$')
```
![](data:image/png;base64,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
gg==
)
## 数值积分
数值积分:
$$F(x) = \lim_{n \rightarrow \infty} \sum_{i=0}^{n-1} f(x_i)(x_{i+1}-x_i) \Rightarrow F(x) = \int_{x_0}^{x_n} f(x) dx$$
导入贝塞尔函数:
In [17]:
```py
from scipy.special import jv
```
In [18]:
```py
def f(x):
return jv(2.5, x)
```
In [19]:
```py
x = np.linspace(0, 10)
p = plt.plot(x, f(x), 'k-')
```
![](data:image/png;base64,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
Un7k/wDY8//eOSbGSgAAAABJRU5ErkJggg==
)
### `quad` 函数
Quadrature 积分的原理参见:
[http://en.wikipedia.org/wiki/Numerical_integration#Quadrature_rules_based_on_interpolating_functions](http://en.wikipedia.org/wiki/Numerical_integration#Quadrature_rules_based_on_interpolating_functions)
quad 返回一个 (积分值,误差) 组成的元组:
In [20]:
```py
from scipy.integrate import quad
interval = [0, 6.5]
value, max_err = quad(f, *interval)
```
积分值:
In [21]:
```py
print value
```
```py
1.28474297234
```
最大误差:
In [22]:
```py
print max_err
```
```py
2.34181853668e-09
```
积分区间图示,蓝色为正,红色为负:
In [23]:
```py
print "integral = {:.9f}".format(value)
print "upper bound on error: {:.2e}".format(max_err)
x = np.linspace(0, 10, 100)
p = plt.plot(x, f(x), 'k-')
x = np.linspace(0, 6.5, 45)
p = plt.fill_between(x, f(x), where=f(x)>0, color="blue")
p = plt.fill_between(x, f(x), where=f(x)<0, color="red", interpolate=True)
```
```py
integral = 1.284742972
upper bound on error: 2.34e-09
```
![](data:image/png;base64,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
)
### 积分到无穷
In [24]:
```py
from numpy import inf
interval = [0., inf]
def g(x):
return np.exp(-x ** 1/2)
```
In [25]:
```py
value, max_err = quad(g, *interval)
x = np.linspace(0, 10, 50)
fig = plt.figure(figsize=(10,3))
p = plt.plot(x, g(x), 'k-')
p = plt.fill_between(x, g(x))
plt.annotate(r"$\int_0^{\infty}e^{-x^1/2}dx = $" + "{}".format(value), (4, 0.6),
fontsize=16)
print "upper bound on error: {:.1e}".format(max_err)
```
```py
upper bound on error: 7.2e-11
```
![](data:image/png;base64,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
fz8JCQnk5eWxe/duunbtGnTpIiIxUdZAVdLCnlXEOOALzjqrL1999SVZWVlBFyRSaU2ePJk33niD
iRMnMnLkSLKysjj33HMBaN26NZMmTeLkk09mzpw5JCREfoVkZ2czffr0IMsWEQlUFZ5DVZxzbxAO
t6Fjx85s37496HJEKq1x48bx61//GoD69evTokUL1q07cAeqRYsWccstt3DZZZexadMmAL777rvC
cCUiUh1VkyG//fbieW2oW/cn1q5dTUpKSsD1iFQuq1atIjs7m48//phTTjml8Pibb77JN998w/bt
2+ncuTODBg3inXfe4ZFHHqFNmza0bt2am2++OcDKRURiS3OoSpSP57WiUaNEVq/+ksTExKALEqk0
nnjiCe666y527NiBWal/j4iIVDlah6pEKfj+F2zatJsTT8yhoKAg6IJEKo3c3Fx69uypMCUiUkbV
MFABpOP7y/j660106XIyvu8HXZBIpfDhhx8WG+oTEZHSqaaBCqARvr+EZcvyOPXU04MuRiRwK1eu
ZMuWLXTp0iXoUkq0ZcsWxo8fz1//+tegSxERAap1oAJojnOfMn/+Qvr3HxR0MSKBmjt3LgAnnXRS
wJWULDMzk+zsbA3Zi0ilUc0DFUA7nPuIWbNyGTbswqCLEQnM3LlzSUpKom3btkGXElMLFy4MugQR
qQYUqADognOzmDx5MqNGXR50MSKBmDdvHu3atcPzqtavhXfeeafw+YQJE3j22WcZNmwYixYtCrAq
EalqtBJfod449zYvvDCYOnXq8Ne/Phl0QSIVZteuXSxbtozhw4cHXUqplWbJl82bN9OoUSMA3n77
bbp3706nTp3IzMxk1KhRClUiEjNV60/R4zYQeJW//e1vjBlzR9DFiFSYBQsW4Jyjffv2QZdSKlu3
bmXq1KnMmTOH1atXH7HdlClTGDZsGAB5eXk8/fTTALRp04Y1a9ZURKkiUk2oh+oQFwITeeihy0lN
TWXMmNuDLkik3H388ccAnHjiiQFXUtzrr7+OmbFw4UJycnJ45513mDBhAhkZGTz88MMlvn/r1q2k
paUBcM0117B7924A5syZw5AhQ8q19uMxadIkXnzxRRYuXMiWLVto1qwZF1xwAXfccQe1a9cu8f3r
1q3jpptu4t1338U5x4ABA3jsscdo2rRpBVQvUj2ph+qwRgF/4Y477uDBBx8KuhiRcjd//nwAOnbs
GHAlByxfvpwzzjiDQYMGMXv2bM4777wyDUmuXr2aVq1aFe4nJCSQnp7O9u3befXVV3nyyZKH9Tdu
3MiIESPwPI/Fixcf089xLB555BFq1KjBQw89xLRp0/jNb37DU089xcCBA0sc6szPz6dfv36sXLmS
559/nhdeeIG8vDz69u1Lfn5+Bf0EItWPeqiO6BoA7rjjOnbu3MmDD/4h4HpEys+CBQuoUaNGhX7D
z/d9nnjiCcLh8CGvtW7dmqFDhwKRuU/9+vUjJSWFQYNKv7zJm2++yZVXXlnsWDgc5v777+eFF16g
fv36JZ6jcePG3HzzzUybNo3OnTuX+trHa+rUqdSrV69w/8wzzyQjI4Nf/vKX5Obm0rdv3yO+95ln
nmH16tWsXLmyMFB27tyZ7Oxsnn76aW666aZyr1+kOlKgOqprgFQeeuiX7Nixg7/9TYsIStWzdetW
1q5dS4cOHQiFQhV2Xc/zuPHGG4/4+pIlS0hKSuLdd9/l7LPPBuDdd99lwIABpTr/nj17qFmzZrFj
//M//8Ott95Ko0aNeOmllxgxYkSJ55k9ezZnnXVWqa4ZK0XD1H77V7DfuHHjUd87ZcoUTj311GK9
cy1atKB3795MnjxZgUqknGjIr0QjgX/x1FP/w4gRI4MuRiTmPvvsMwBycnICrqS4t99+m7fffptm
zZqxZMkSXnzxRXr27Fmq9y5ZsoROnToVO/baa69x++2306lTJ+rXr8+LL75YqnPNnj2bPn36lLX8
mHv//fcBSvziwNKlSw/7WXbo0IFly5aVS20ioh6qUjofmME//3k227fv4M03/x10QSIxs3/hy/IK
VCtWrOCFF14gKyuLLVu20KBBA6666qoS3/f//t//O+ZrzpgxgxtuuKHYsYsvvpiLL764xPfOnz+f
iRMn0r59e3zfZ86cOdx3332Fr+/Zs4cnn3ySpKQk5s+fz9VXX81HH33EvHnzuO++++jQocMx130k
GzZs4O6772bgwIF069btqG23bdtG3bp1DzmekZHBtm3bYl6biEQoUJVaP5yby9tvn84ZZ/Th/fdn
VrkFEKV62t9DVR5zhD755BNuvvlm3nrrLWrVqsWqVavK/f57zjnC4fAxDV/Onz+fSy+9lLlz59Kg
QQMmTJiA7/vFeruefPJJrr/+epKTkxk6dChPP/00EyZM4L777mP06NHFAlVBQQHXXHMN+/btK/Ha
w4cPLxzaLGr37t2cf/75JCYmMnHixDL/TCJSMRSoyqQ7zi1kzpxT6NatBwsXfqxQJXFv8eLFmBld
u3aN+bl/9atf0bt3b1566SV27dpFw4YN+dOf/hTz6xS1cOFCTj/92G54fsUVV3DVVVfRoEEDINLb
U3S4zzlH7969SU5OBiK9b48++igJCQns2LHjkPMlJCTw97///ZhqgUhv2LnnnsuaNWt4//33ady4
cYnvqVu37mF7orZu3UpGRsYx1yIiR2clfQXXzAYDjwEhYLxzbtxh2vQB/gzUALY45/ocpo2Dklc2
jg+r8bxOtGrVlKVLF5GYmBh0QSLHZN++fdSqVYu0tDS+++67mJ575cqVnHjiiWzatKkwoFRmCxYs
oEePHixfvpx27doBcM455zBkyBCuu+66Q9pv2LCBli1bsm3bNmrVqhXzevbt28fQoUP58MMPmTFj
Bj169CjV+/r378/evXv54IMPih3v06cPZsasWbNiXqtIVWRmOOestO2P2kNlZiHgL8AAYAMw38ym
OOeWF2mTDvwVONs5t97MMo+t9HjSEt9fyVdfdaRVq7asXLmMlJSUoIsSKbMVK1ZQUFDAySefHPNz
b9++HeCQMLV69WpatmwZ8+sdr1WrVpGWllYYpgoKCvjwww8ZN24cH374YWGvl+/7eJ7He++9x8kn
n1wYpubMmUPv3r2LnXPfvn1ce+21ZR7y832fESNGkJuby9SpU0sdpgDOO+88br311mL/ndesWcPc
uXMZN+6Qv4dFJFacc0fcgFOBaUX2bwduP6jNNcB9RztPtJ0DV8W2753nNXCZmY3ctm3bnEi8efXV
V52ZuTFjxsT83Hv27HH169d3eXl5hccWLFjgxo0bF/NrxcKSJUtcvXr1Cvcfe+wxV6tWLeecc3/4
wx+cc8699tprrmHDhs4554YNG+ZGjRrlnHNu165d7o9//GPMarn66qudmbm77rrLzZs3r9i2fv36
wna5ubkuFAq5559/vvDYDz/84Nq0aeM6derkJk+e7CZPnuw6d+7sWrdu7X744YeY1ShS1UUi0tGz
TdGtpDlUTYB1RfbXAwd/bzkbqGFms4A6wOPOuReOL+bFiwx8fxVbt3agefNWrFixrPBGrCLxYPny
SGdzecyfSkpK4rXXXuP++++nV69e7N27lyZNmhzXt/fKU05ODjfffDP33XcfqampdO3alb59+/LH
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
TkSuQmCC
)
### 双重积分
假设我们要进行如下的积分:
$$ I_n = \int \limits_0^{\infty} \int \limits_1^{\infty} \frac{e^{-xt}}{t^n}dt dx = \frac{1}{n}$$In [26]:
```py
def h(x, t, n):
"""core function, takes x, t, n"""
return np.exp(-x * t) / (t ** n)
```
一种方式是调用两次 `quad` 函数,不过这里 `quad` 的返回值不能向量化,所以使用了修饰符 `vectorize` 将其向量化:
In [27]:
```py
from numpy import vectorize
@vectorize
def int_h_dx(t, n):
"""Time integrand of h(x)."""
return quad(h, 0, np.inf, args=(t, n))[0]
```
In [28]:
```py
@vectorize
def I_n(n):
return quad(int_h_dx, 1, np.inf, args=(n))
```
In [29]:
```py
I_n([0.5, 1.0, 2.0, 5])
```
Out[29]:
```py
(array([ 1.97, 1\. , 0.5 , 0.2 ]),
array([ 9.804e-13, 1.110e-14, 5.551e-15, 2.220e-15]))
```
或者直接调用 `dblquad` 函数,并将积分参数传入,传入方式有多种,后传入的先进行积分:
In [30]:
```py
from scipy.integrate import dblquad
@vectorize
def I(n):
"""Same as I_n, but using the built-in dblquad"""
x_lower = 0
x_upper = np.inf
return dblquad(h,
lambda t_lower: 1, lambda t_upper: np.inf,
x_lower, x_upper, args=(n,))
```
In [31]:
```py
I_n([0.5, 1.0, 2.0, 5])
```
Out[31]:
```py
(array([ 1.97, 1\. , 0.5 , 0.2 ]),
array([ 9.804e-13, 1.110e-14, 5.551e-15, 2.220e-15]))
```
## 采样点积分
### trapz 方法 和 simps 方法
In [32]:
```py
from scipy.integrate import trapz, simps
```
`sin` 函数, `100` 个采样点和 `5` 个采样点:
In [33]:
```py
x_s = np.linspace(0, np.pi, 5)
y_s = np.sin(x_s)
x = np.linspace(0, np.pi, 100)
y = np.sin(x)
```
In [34]:
```py
p = plt.plot(x, y, 'k:')
p = plt.plot(x_s, y_s, 'k+-')
p = plt.fill_between(x_s, y_s, color="gray")
```
![](data:image/png;base64,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
QmCC
)
采用 [trapezoidal 方法](https://en.wikipedia.org/wiki/Trapezoidal_rule) 和 [simpson 方法](https://en.wikipedia.org/wiki/Simpson%27s_rule) 对这些采样点进行积分(函数积分为 2
In [35]:
```py
result_s = trapz(y_s, x_s)
result_s_s = simps(y_s, x_s)
result = trapz(y, x)
print "Trapezoidal Integration over 5 points : {:.3f}".format(result_s)
print "Simpson Integration over 5 points : {:.3f}".format(result_s_s)
print "Trapezoidal Integration over 100 points : {:.3f}".format(result)
```
```py
Trapezoidal Integration over 5 points : 1.896
Simpson Integration over 5 points : 2.005
Trapezoidal Integration over 100 points : 2.000
```
### 使用 ufunc 进行积分
`Numpy` 中有很多 `ufunc` 对象:
In [36]:
```py
type(np.add)
```
Out[36]:
```py
numpy.ufunc
```
In [37]:
```py
np.info(np.add.accumulate)
```
```py
accumulate(array, axis=0, dtype=None, out=None)
Accumulate the result of applying the operator to all elements.
For a one-dimensional array, accumulate produces results equivalent to::
r = np.empty(len(A))
t = op.identity # op = the ufunc being applied to A's elements
for i in range(len(A)):
t = op(t, A[i])
r[i] = t
return r
For example, add.accumulate() is equivalent to np.cumsum().
For a multi-dimensional array, accumulate is applied along only one
axis (axis zero by default; see Examples below) so repeated use is
necessary if one wants to accumulate over multiple axes.
Parameters
----------
array : array_like
The array to act on.
axis : int, optional
The axis along which to apply the accumulation; default is zero.
dtype : data-type code, optional
The data-type used to represent the intermediate results. Defaults
to the data-type of the output array if such is provided, or the
the data-type of the input array if no output array is provided.
out : ndarray, optional
A location into which the result is stored. If not provided a
freshly-allocated array is returned.
Returns
-------
r : ndarray
The accumulated values. If `out` was supplied, `r` is a reference to
`out`.
Examples
--------
1-D array examples:
>>> np.add.accumulate([2, 3, 5])
array([ 2, 5, 10])
>>> np.multiply.accumulate([2, 3, 5])
array([ 2, 6, 30])
2-D array examples:
>>> I = np.eye(2)
>>> I
array([[ 1., 0.],
[ 0., 1.]])
Accumulate along axis 0 (rows), down columns:
>>> np.add.accumulate(I, 0)
array([[ 1., 0.],
[ 1., 1.]])
>>> np.add.accumulate(I) # no axis specified = axis zero
array([[ 1., 0.],
[ 1., 1.]])
Accumulate along axis 1 (columns), through rows:
>>> np.add.accumulate(I, 1)
array([[ 1., 1.],
[ 0., 1.]])
```
`np.add.accumulate` 相当于 `cumsum`
In [38]:
```py
result_np = np.add.accumulate(y) * (x[1] - x[0]) - (x[1] - x[0]) / 2
```
In [39]:
```py
p = plt.plot(x, - np.cos(x) + np.cos(0), 'rx')
p = plt.plot(x, result_np)
```
![](data:image/png;base64,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
)
### 速度比较
计算积分:$$\int_0^x sin \theta d\theta$$
In [40]:
```py
import sympy
from sympy.abc import x, theta
sympy_x = x
```
In [41]:
```py
x = np.linspace(0, 20 * np.pi, 1e+4)
y = np.sin(x)
sympy_y = vectorize(lambda x: sympy.integrate(sympy.sin(theta), (theta, 0, x)))
```
`numpy` 方法:
In [42]:
```py
%timeit np.add.accumulate(y) * (x[1] - x[0])
y0 = np.add.accumulate(y) * (x[1] - x[0])
print y0[-1]
```
```py
The slowest run took 4.32 times longer than the fastest. This could mean that an intermediate result is being cached
10000 loops, best of 3: 56.2 µs per loop
-2.34138044756e-17
```
`quad` 方法:
In [43]:
```py
%timeit quad(np.sin, 0, 20 * np.pi)
y2 = quad(np.sin, 0, 20 * np.pi, full_output=True)
print "result = ", y2[0]
print "number of evaluations", y2[-1]['neval']
```
```py
10000 loops, best of 3: 40.5 µs per loop
result = 3.43781337153e-15
number of evaluations 21
```
`trapz` 方法:
In [44]:
```py
%timeit trapz(y, x)
y1 = trapz(y, x)
print y1
```
```py
10000 loops, best of 3: 105 µs per loop
-4.4408920985e-16
```
`simps` 方法:
In [45]:
```py
%timeit simps(y, x)
y3 = simps(y, x)
print y3
```
```py
1000 loops, best of 3: 801 µs per loop
3.28428554968e-16
```
`sympy` 积分方法:
In [46]:
```py
%timeit sympy_y(20 * np.pi)
y4 = sympy_y(20 * np.pi)
print y4
```
```py
100 loops, best of 3: 6.86 ms per loop
0
```