Hướng dẫn how to do double integration in python - cách thực hiện tích hợp kép trong python

scipy.integrate.dblquad (func, a, b, gfun, hfun, args = (), epsabs = 1.49e-08, epsrel = 1.49E-08) [Nguồn]#dblquad(func, a, b, gfun, hfun, args=(), epsabs=1.49e-08, epsrel=1.49e-08)[source]#

Tính toán tích phân kép.

Trả về tích phân đôi (xác định) của func(y, x) từ x = a..by = gfun(x)..hfun(x).

Tham sốfunccallablefunccallable

Hàm Python hoặc phương pháp của ít nhất hai biến: y phải là đối số đầu tiên và x đối số thứ hai.

a, bfloatfloat

Giới hạn tích hợp trong x: a gfuncallable hoặc floatcallable or float

Đường cong ranh giới dưới trong y là một hàm lấy một đối số điểm nổi (x) và trả về kết quả điểm nổi hoặc phao cho thấy đường cong ranh giới không đổi.

hfuncallable hoặc floatcallable or float

Đường cong ranh giới trên trong y (cùng yêu cầu với GFUN).

args sau, tùy chọnsequence, optional

Các đối số bổ sung để chuyển đến func.

epsabsfloat, tùy chọnfloat, optional

Dung sai tuyệt đối được truyền trực tiếp đến tích hợp qua hai chiều bên trong. Mặc định là 1.49e-8. dblquad cố gắng đạt được độ chính xác của abs(i-result) <= max(epsabs, epsrel*abs(i)) trong đó i = tích phân bên trong của func(y, x) từ

>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)
0 đến
>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)
1 và
>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)
2 là xấp xỉ bằng số. Xem EPSREL bên dưới.

epsrelfloat, tùy chọnfloat, optional

Dung sai tương đối của các tích phân 1-D bên trong. Mặc định là 1.49e-8. Nếu

>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)
3, EPSREL phải lớn hơn cả 5E-29 và
>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)
4. Xem epsab ở trên.

ReturnSyFloatyfloat

Các tích phân kết quả.

abserrfloatfloat

Một ước tính của lỗi.

Ghi chú

Chi tiết về các thói quen cấp quadpack

>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)
5 gọi các thói quen từ thư viện Fortran QuadPack. Phần này cung cấp chi tiết về các điều kiện cho mỗi thói quen được gọi và một mô tả ngắn về từng thói quen. Đối với mỗi cấp độ tích hợp,
>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)
6 được sử dụng cho các giới hạn hữu hạn hoặc
>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)
7 được sử dụng nếu giới hạn (hoặc cả hai!) Là vô hạn. Sau đây cung cấp một mô tả ngắn từ [1] cho mỗi thói quen.

Qagse

là một nhà tích hợp dựa trên phân khu khoảng thời gian thích ứng toàn cầu liên quan đến phép ngoại suy, sẽ loại bỏ các tác động của các điểm kỳ tích của một số loại.

qagie

Xử lý tích hợp trong các khoảng thời gian vô hạn. Phạm vi vô hạn được ánh xạ vào một khoảng thời gian hữu hạn và sau đó chiến lược tương tự như trong

>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)
8 được áp dụng.

Người giới thiệu

1

Piessens, Robert; De Doncker-Kapenga, Elise; Überhuber, Christoph W .; Kahaner, David (1983). QuadPack: Gói chương trình con để tích hợp tự động. Springer-Verlag. ISBN 980-3-540-12553-2.

Ví dụ

Tính toán tích phân kép của

>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)
9 trên hộp
>>> f = lambda y, x, a: a*x*y
>>> integrate.dblquad(f, 0, 1, lambda x: x, lambda x: 2-x, args=(1,))
    (0.33333333333333337, 5.551115123125783e-15)
>>> integrate.dblquad(f, 0, 1, lambda x: x, lambda x: 2-x, args=(3,))
    (0.9999999999999999, 1.6653345369377348e-14)
0 từ 0 đến 2 và
>>> f = lambda y, x, a: a*x*y
>>> integrate.dblquad(f, 0, 1, lambda x: x, lambda x: 2-x, args=(1,))
    (0.33333333333333337, 5.551115123125783e-15)
>>> integrate.dblquad(f, 0, 1, lambda x: x, lambda x: 2-x, args=(3,))
    (0.9999999999999999, 1.6653345369377348e-14)
1 từ 0 đến 1. nghĩa là, \ (\ int^{x = 2} _ {x = 0} \ int^{y = 1} _ {y = 0} x y^2 \, dy \, dx \).\(\int^{x=2}_{x=0} \int^{y=1}_{y=0} x y^2 \,dy \,dx\).

>>> from scipy import integrate
>>> f = lambda y, x: x*y**2
>>> integrate.dblquad(f, 0, 2, 0, 1)
    (0.6666666666666667, 7.401486830834377e-15)

Tính toán \ (\ int^{x = \ pi/4} _ {x = 0} \ int^{y = \ cos (x)} _ {y = \ sin (x)} 1 ​​\, dy \, dx \ ).\(\int^{x=\pi/4}_{x=0} \int^{y=\cos(x)}_{y=\sin(x)} 1 \,dy \,dx\).

>>> f = lambda y, x: 1
>>> integrate.dblquad(f, 0, np.pi/4, np.sin, np.cos)
    (0.41421356237309503, 1.1083280054755938e-14)

Tính toán \ (\ int^{x = 1} _ {x = 0} \ int^{y = x} _ {y = 2-x} a x y \, dy \, dx \) cho \ (a = 1, 3 \).\(\int^{x=1}_{x=0} \int^{y=x}_{y=2-x} a x y \,dy \,dx\) for \(a=1, 3\).

>>> f = lambda y, x, a: a*x*y
>>> integrate.dblquad(f, 0, 1, lambda x: x, lambda x: 2-x, args=(1,))
    (0.33333333333333337, 5.551115123125783e-15)
>>> integrate.dblquad(f, 0, 1, lambda x: x, lambda x: 2-x, args=(3,))
    (0.9999999999999999, 1.6653345369377348e-14)

Làm thế nào để bạn thực hiện tích hợp kép?

Tích hợp kép là một tích phân của hàm hai biến f (x, y) trên vùng R. nếu r = [a, b] × [c, d], thì tích phân kép có thể được thực hiện bằng cách tích hợp lặp (tích hợpĐầu tiên đối với y, và sau đó tích hợp liên quan đến x).Các ký hiệu cho tích phân kép được hiển thị lại bên dưới.iterated integration (integrate first with respect to y, and then integrate with respect to x). The notations for double integrals are shown again below.