Scipy Double Integral

Visits:35

0. Definite Integrate ชั้นเดียว

\int_0^1 x^2 dx = \frac{1}{3}
from scipy import integrate
f = lambda x: x**2
result = integrate.quad(f, 0, 1)
print(result)

(0.33333333333333337, 3.700743415417189e-15)

\int_{-\infty}^2 e^{x} dx = e^x \Bigr |_{-\infty}^2 = e^2
from scipy import integrate
from numpy import exp, inf
f = lambda x: exp(x)
result = integrate.quad(f, -inf, 2)
print(result)

(7.3890560989306495, 4.3171351453691823e-10)

1. ค่า limit เป็นตัวเลข

ถ้าจะหา

\int_0^3 \int_0^1 xy^2 dx dy = \frac{9}{2}
from scipy import integrate
f = lambda x, y: x * y**2
result = integrate.dblquad(f, 0, 3, 0, 1)
print(result)

คำสั่ง 2 หมายความว่านิยามฟังก์ชั่น f(x, y) = xy2

ผลคือ (4.5, 4.9960036108132044e-14) ตัวหน้าเป็นคำตอบ ตัวหลังเป็นตัวเลขที่บอกว่าผลลัพท์ error แค่ไหน 10-14 น้อยมากก็ไม่ต้องสนใจ

แต่ถ้าสลับ x, y เป็น f = lambda y, x: x * y**2 จะหมายถึงต้องการหา

\int_0^3 \int_0^1 xy^2 dy dx = \frac{9}{6}= 1.5

โปรแกรมจะคำนวณเป็น (1.4999999999999998, 1.6653345369377345e-14) ผลลัพท์ไม่ได้ 1.5 ตรงเป๊ะเป็นเรื่องธรรมดาเพราะ scipy หา definte integral โดยวิธี numerical ไม่ใช่เป็นการ integrate จริงแล้วแทนค่า

2. ค่า limit เป็น function

\int_0^1\int_0^x(3-x-y)dydx = 1
from scipy import integrate
f = lambda y, x: 3-x-y
h = lambda x: x
result = integrate.dblquad(f, 0, 1, 0, h)
print(result)

คำสั่ง 2 นิยาม f(y, x) = f(x, y) = 3 – x – y

คำสั่ง 3 นิยาม h(x) = x

คำตอบคือ (0.9999999999999999, 1.665326684788394e-14)

หรืออาจเขียนเป็น (ซึ่งดูยุ่งยากไม่จำเป็นหาก limit ของอินทีกรัลเป็นค่าคงที่)

from scipy import integrate
f = lambda y, x: 3-x-y
g = lambda x: 0
h = lambda x: x
result = integrate.dblquad(f, 0, 1, g, h)
print(result)

ที่เพิ่มมาคือคำสั่งที่ 3 นิยาม g(x) = 0 แล้วใส่ g เข้าไปในคำสั่ง 5 ซึ่งผลก็เหมือนกับใส่ 0 เข้าไปตรงๆ

หรืออีกแบบหนึ่งคือย้ายเอาคำสั่ง 3 มาใส่ในคำสั่ง 5 โดยตรง

result = integrate.dblquad(f, 0, 1, lambda x:0, h)

พาราเมตเตอร์ 0, 1 สองตัวแรกต้องใส่เป็นค่าคงที่เพราะ definite integral ขั้นสุดท้ายต้องเป็นตัวเลข

คำสั่งที่ 3 ในตัวอย่างแรกสุดจึงเขียนได้อีกแบบเป็น

from scipy import integrate
f = lambda x, y: x * y**2
result = integrate.dblquad(f, 0, 3, lambda x: 0, lambda x: 1)
print(result)

ซึ่งไม่จำเป็น

อีกตัวอย่าง

\int_0^1 \int_0^{\sqrt{1-y^2}}8x\;dxdy = \int_0^1 4t^2\Bigr|_0^{\sqrt{1-y^2}}dy=\int_0^1 4(1-y^2)dy = 4[y-\frac{y^2}{3}]\Bigr|_0^1 = \frac{8}{3}
from scipy import integrate
from numpy import sqrt
f = lambda x, y: 8*x
h = lambda y: sqrt(1-y**2)
result = integrate.dblquad(f, 0, 1, 0, h)
print(result)

คำสั่ง 3 นิยาม f(x, y) = 8x

คำสั่ง 4 นิยาม $h(y)=\sqrt{1-y^2}$ คำตอบคือ

(2.6666666666666665, 4.440871159435716e-14)

Facebook Comments