
- SciPy 教程
- SciPy - 首頁
- SciPy - 簡介
- SciPy - 環境搭建
- SciPy - 基本功能
- SciPy - 叢集
- SciPy - 常量
- SciPy - FFTpack
- SciPy - 積分
- SciPy - 插值
- SciPy - 輸入和輸出
- SciPy - 線性代數 (Linalg)
- SciPy - 影像處理 (Ndimage)
- SciPy - 最佳化
- SciPy - 統計
- SciPy - 壓縮稀疏圖 (CSGraph)
- SciPy - 空間
- SciPy - 正交距離迴歸 (ODR)
- SciPy - 特殊函式包
- SciPy 有用資源
- SciPy - 參考
- SciPy - 快速指南
- SciPy - 有用資源
- SciPy - 討論
SciPy - 積分
當一個函式無法進行解析積分,或者解析積分非常困難時,通常會轉向數值積分方法。SciPy 提供了許多執行數值積分的例程。大多數例程都位於同一個 **scipy.integrate** 庫中。下表列出了一些常用的函式。
序號 | 函式及描述 |
---|---|
1 | quad 單重積分 |
2 | dblquad 二重積分 |
3 | tplquad 三重積分 |
4 | nquad n 重積分 |
5 | fixed_quad 高斯求積,n 階 |
6 | quadrature 達到容差的高斯求積 |
7 | romberg 龍貝格積分 |
8 | trapz 梯形法則 |
9 | cumtrapz 梯形法則累積計算積分 |
10 | simps 辛普森法則 |
11 | romb 龍貝格積分 |
12 | polyint 解析多項式積分 (NumPy) |
13 | poly1d polyint 的輔助函式 (NumPy) |
單重積分
Quad 函式是 SciPy 積分函式的核心。數值積分有時稱為 **求積**,因此得名。它通常是執行函式 *f(x)* 在給定固定範圍 a 到 b 上的單重積分的預設選擇。
$$\int_{a}^{b} f(x)dx$$
quad 的一般形式為 **scipy.integrate.quad(f, a, b)**,其中 'f' 是要積分的函式的名稱。而 'a' 和 'b' 分別是下限和上限。讓我們來看一個高斯函式在 0 到 1 範圍內的積分示例。
我們首先需要定義函式 → *f(x) = e-x²*,這可以使用 lambda 表示式來完成,然後呼叫該函式上的 quad 方法。
import scipy.integrate from numpy import exp f= lambda x:exp(-x**2) i = scipy.integrate.quad(f, 0, 1) print i
上面的程式將生成以下輸出。
(0.7468241328124271, 8.291413475940725e-15)
quad 函式返回兩個值,第一個值是積分值,第二個值是積分值絕對誤差的估計值。
**注意** - 由於 quad 需要函式作為第一個引數,因此我們不能直接將 exp 作為引數傳遞。Quad 函式接受正負無窮大作為積分限。Quad 函式可以積分單個變數的標準預定義 NumPy 函式,例如 exp、sin 和 cos。
多重積分
二重積分和三重積分的機制已被封裝到 **dblquad、tplquad** 和 **nquad** 函式中。這些函式分別整合四個或六個引數。所有內積分的極限都需要定義為函式。
二重積分
**dblquad** 的一般形式為 scipy.integrate.dblquad(func, a, b, gfun, hfun)。其中,func 是要積分的函式的名稱,'a' 和 'b' 分別是 x 變數的下限和上限,而 gfun 和 hfun 是定義 y 變數下限和上限的函式的名稱。
例如,讓我們執行二重積分方法。
$$\int_{0}^{1/2} dy \int_{0}^{\sqrt{1-4y^2}} 16xy \:dx$$
我們使用 lambda 表示式定義函式 f、g 和 h。請注意,即使 g 和 h 是常數(在許多情況下可能如此),也必須將其定義為函式,就像我們這裡為下限所做的那樣。
import scipy.integrate from numpy import exp from math import sqrt f = lambda x, y : 16*x*y g = lambda x : 0 h = lambda y : sqrt(1-4*y**2) i = scipy.integrate.dblquad(f, 0, 0.5, g, h) print i
上面的程式將生成以下輸出。
(0.5, 1.7092350012594845e-14)
除了上面描述的例程之外,scipy.integrate 還有一些其他的積分例程,包括 nquad(執行 n 重積分),以及實現各種積分演算法的其他例程。但是,quad 和 dblquad 將滿足我們大多數數值積分的需求。