ในบทนี้ผู้อ่านจะได้เรียนรู้การประยุกต์ใช้การคำนวณเชิงสัญลักษณ์ เพื่อแก้ปัญหาที่เกี่ยวข้องกับการอินทิกรัลในทางเศรษฐศาสตร์ ก่อนผู้อ่านศึกษาเนื้อหาบทนี้ ผู้เขียนมีสมมุติฐานว่าผู้อ่านมีความรู้และความเข้าใจเกี่ยวกับการอินทิกรัลมาบ้างแล้ว
นิยามของอินทิกรัล (Definition of Integral)
แนวคิดทั่วไป
อินทิกรัลคือ ผลรวมของปริมาณเล็ก ๆ (“ผลรวมจำกัด” หรือ limit of sums )
เมื่อเราแบ่งช่วงออกเป็นชิ้นเล็ก ๆ มาก ๆ แล้วเอาพื้นที่ของแต่ละชิ้นมาบวกกัน
นิยามอย่างเป็นทางการ (Riemann Integral)
ให้ \(f(x)\) เป็นฟังก์ชันที่กำหนดบนช่วงปิด \([a,b]\)
แบ่งช่วง \([a,b]\) ออกเป็น \(n\) ส่วนย่อย โดยให้ \(a = x_0 < x_1 < \dots < x_n = b\)
แต่ละช่วงย่อยมีความกว้าง \(\Delta x_i = x_i - x_{i-1}\)
เลือกจุดหนึ่งในแต่ละช่วง เรียกว่า sample point \(c_i \in [x_{i-1}, x_i]\)
สร้าง ผลรวมรีมันน์ (Riemann Sum) :
\[
S_n = \sum_{i=1}^n f(c_i)\, \Delta x_i
\]
แล้วทำลิมิต เมื่อจำนวนช่วงเพิ่มขึ้น (\(n \to \infty\) ) และความกว้างของช่วงเล็กลง (\(\max \Delta x_i \to 0\) )
ถ้าลิมิตนี้มีอยู่และเป็นจำนวนจริงเดียวกันไม่ว่าเลือก \(c_i\) อย่างไร
เรานิยามว่า \[
\int_a^b f(x)\, dx = \lim_{||P|| \to 0} \sum_{i=1}^n f(c_i)\, \Delta x_i
\] โดย \(||P||\) คือความยาวของช่วงย่อยที่ยาวที่สุด
ถ้า \(f(x)\) ต่อเนื่องบน \([a,b]\) \(\rightarrow\) อินทิเกรตได้แน่นอน
ถ้า \(f(x)\) มีจุดโดดน้อย ๆ (finite discontinuities) \(\rightarrow\) ยังอินทิเกรตได้ (เรียกว่า Riemann integrable )
ทฤษฎีบทมูลฐานของแคลคูลัส (Fundamental Theorem of Calculus)
คือทฤษฏีแสดงความเกี่ยวข้องกันระหว่างอนุพันธ์และอินทิกรัล โดยมี 2 ส่วนที่สำคัญคือ
ส่วนที่ 1 (First Fundamental Theorem)
ถ้า \(f\) เป็นฟังก์ชันต่อเนื่องบนช่วง \([a, b]\) และนิยาม \[
F(x) = \int_a^x f(t)\, dt
\]
สำหรับ \(x\) ใน \([a,b]\) แล้ว
ฟังก์ชัน \(F(x)\) จะมีอนุพันธ์ และ
\[
F'(x) = f(x)
\] สรุป: การอินทิเกรตแล้วทำอนุพันธ์ได้ฟังก์ชันเดิม
ส่วนที่ 2 (Second Fundamental Theorem)
ถ้า \(f\) เป็นฟังก์ชันต่อเนื่องบนช่วง \([a,b]\) และ \(F\) เป็นฟังก์ชันปริมิทีฟ (antiderivative) ของ \(f\) (คือ \(F'(x) = f(x)\) )
จะได้ว่า
\[
\int_a^b f(x)\, dx = F(b) - F(a)
\]
สรุป: การอินทิเกรตจำกัดเขต คือ ค่า \(F(b)\) ลบด้วย \(F(a)\)
การหาอินทิกรัลด้วย caracas ใน R
ติดตั้งและโหลดแพ็กเกจ
กำหนดตัวแปรสัญลักษณ์ (symbolic variables)
x <- symbol ("x" )
y <- symbol ("y" )
t <- symbol ("t" )
(เราต้องสร้างตัวแปรก่อน เช่น \(x\) , \(y\) ือ \(s\) )
สร้างฟังก์ชันที่ต้องการอินทิเกรต
ตัวอย่าง
f <- sin (x) # f(x) = sin(x)
g <- exp (- x)
h <- t^ 3 + t^ 2 + 4
ใช้คำสั่ง int()
จาก caracas สำหรับการอินทิกรัลไม่จำกัดเขต
\[- \cos{\left(x \right)}\]
\[\frac{t^{4}}{4} + \frac{t^{3}}{3} + 4 t\]
การอินทิกรัลไม่จำกัดเขต โดยปกติจะบวกค่าคงที่เข้าไปด้วย แต่การอินทิกรัลโดย caracas จะไม่มีการใส่ค่าคงที่
สำหรับการอินทิกรัลจำกัดเขตด้วย caracas ก็ยังใช้คำสั่ง int()
เช่นแต่ต้องคำสั่งถายในไปอีก 2 ตัว คือ - lower
ค่าที่ใส่ได้ คือ ตัวเลข ตัวแปรจาก caracas และค่าลบอนันต์ (\(-\infty\) ในอาร์ใช้ -Inf
upper
ค่าที่ใส่ได้ คือ ตัวเลข ตัวแปรจาก caracas และค่าอนันต์ (\(\infty\) ในอาร์ใช้ Inf
ตัวอย่างเช่น
แนะนำให้ให้วาดกราฟก่อนทำการหาค่า อินกรัลจำกัดเขต
\[\int_{\text{lower}}^{\text{upper}}e^{-s}ds\]
# เปลี่ยนตัวแปร caracas เป็นฟังก์ชันด้วยคำสั่ง as_func()
gs <- as_func (g)
# วาดกราฟด้วยฟังก์ชัน curve เลือกช่วงที่ต้องการ
curve (gs, from = 0 , to = 10 , col = "red" , ylab = "g(s)" , xlab = "s" )
# สร้างจุดสำหรับวาดพื้นใต้กราฟ
s <- seq (0 , 10 , length.out = 500 )
y <- gs (s)
# แรเงาพื้นที่ใต้เส้น
polygon (c (s, rev (s)), c (rep (0 , length (s)), rev (y)),
col = "lightblue" , border = NA )
grid ()
\[\int_{0}^{\infty}e^{-x}dx=1\]
int (g, x, lower = 0 , upper = Inf )
\[1\]
\[\int_{0}^{t/2}e^{-x}dx=1-e^{- t/2}\]
int (g, x, lower = 0 , upper = t/ 2 )
\[1 - e^{- \frac{t}{2}}\]
\[\int_{t/2}^{\infty}e^{x}dx=e^{-t/2}\]
int (g, x, lower = t/ 2 , upper = Inf )
\[e^{- \frac{t}{2}}\]
ตัวอย่างการประยุกต์ใช้อินทิกรัลในทางเศรษฐศาสตร์
ตัวอย่าง
ถ้า marginal revenue (รายได้ส่วนเพิ่ม) คือ \(MR(q) = 100 - 2q\)
รายได้รวม \(TR(q)\) คือ \[
TR(q) = \int MR(q)\, dq = \int (100 - 2q)\, dq = 100q - q^2 + C
\] (\(C\) คือค่าคงที่ แต่ถ้ากำหนด \(TR(0) = 0\) ก็จะได้ \(C = 0\) )
การคำนวณเชิงสัญลักษณ์ด้วย caracas
# สร้างตัวแปร q
q <- symbol ("q" )
# สร้างฟังก์ชัน MR(q)
MR <- 100 - 2 * q
MR
\[100 - 2 q\]
ทำการอินทิกรัลด้วย inv()
อย่าลืม การอินทิกรัลใน caracas จะไม่มีการบวกค่าคงที่
ส่วนเกินผู้บริโภค (Consumer Surplus) และ ส่วนเกินผู้ผลิต (Producer Surplus)
คำนวณจากพื้นที่ใต้กราฟอุปสงค์และอุปทาน
ตัวอย่าง
ถ้าเส้นอุปสงค์คือ \(P = 120 - 2Q\) และราคาตลาดอยู่ที่ \(P=60\)
ส่วนเกินผู้บริโภค (CS) คือพื้นที่ใต้เส้นอุปสงค์จาก \(Q=0\) ถึงปริมาณที่สมดุล \(Q^*\) :
\[
CS = \int_0^{Q^*} (120 - 2Q) dQ - (60 \times Q^*)
\]
แก้สมการหาค่า \(Q*\) ด้วย caracas แม้ว่าจะเป็นสมการง่ายๆ ก็ตาม
# สร้างตัวแปร Q
Q <- symbol ("Q" )
# ที่ P = 60 จะได้
f <- 60-120 + 2 * Q
solve_sys (f,Q)
ดังนั้น ที่ \(P=60\) จะได้ \(Q*=30\) ดังนั้น การอินทิกรัลด้วย caracas จะได้
วาดกราฟเพื่อดูการอินทิกรัล
Pq <- as_func (120-2 * Q)
#วาดกราฟ P =120-2Q
curve (Pq, from = 0 , to = 60 , ylab = "P" , xlab = "Q" , col = "blue" )
#เพิ่มกราฟ P = 60
curve (60 + 0 * x,from = 0 , to = 60 , col = "red" , add = TRUE )
# สร้างจุดสำหรับวาดพื้นใต้กราฟ
s <- seq (0 , 30 , length.out = 500 )
y <- Pq (s)
# แรเงาพื้นที่ใต้เส้น
polygon (c (s, rev (s)), c (rep (60 , length (s)), rev (y)),
col = "lightblue" , border = NA )
legend ("bottomleft" ,c ("P=120-2Q" ,"P=60" ), col= c ("blue" ,"red" ), lty = 1 )
grid ()
ทำการหาพื้นที่ใต้กราฟ
# สร้างตัวแปร q
q <- symbol ("q" )
f <- (120-2 * q)- 60
int (f,q,0 ,30 )
\[900\]
จะได้ค่า consumer surplus เท่ากับ 900
การวิเคราะห์การลงทุน เมื่อ กระแสเงินสด เปลี่ยนแปลงอย่างต่อเนื่องตามเวลา \(t\)
ใช้ การอินทิเกรต เพื่อหามูลค่าปัจจุบันรวม
ตัวอย่าง
ถ้ากระแสเงินสด \(C(t) = 100e^{0.05t}\) ต่อปี, อัตราดอกเบี้ย \(r = 0.08\) ต่อปี
มูลค่าปัจจุบันสุทธิจากปี \(0\) ถึง \(10\) ปี คือ
\[
NPV = \int_0^{10} \frac{C(t)}{(1+r)^t}\, dt
\]
การคำนวณเชิงสัญลักษณ์ด้วย caracas
# สร้างตัวแปร t, C และ r
t <- symbol ("t" )
r <- symbol ("r" )
C <- 100 * exp (0.05 * t)
PV <- C/ (1 + r)^ t
PV
\[100 \left(r + 1\right)^{- t} e^{0.05 t}\]
แทนค่า \(r=0.08\) ลงไปฟังก์ชัน PV
\[100 {1.08}^{- t} e^{0.05 t}\]
วาดกราฟ
PVx <- as_func (PV)
#วาดกราฟ P =120-2Q
curve (PVx, from = 0 , to = 100 , ylab = "PV" , xlab = "t" , col = "blue" )
s <- seq (0 , 10 , length.out = 500 )
y <- PVx (s)
# แรเงาพื้นที่ใต้เส้น
polygon (c (s, rev (s)), c (rep (0 , length (s)), rev (y)),
col = "lightblue" , border = NA )
grid ()
หมายเหตุ เลือกวาดกราฟ ให้ \(t\) มีขนาดยาวเพื่อให้เห็นเส้นโค้งชัดเจน
แสดงสมการอินทิกรัล
int (PV,t, lower = 0 , upper = 10 , doit = FALSE )
\[\int\limits_{0}^{10} 100 {1.08}^{- t} e^{0.05 t}\, dt\]
หาค่า NPV
int (PV,t, lower = 0 , upper = 10 )
\[876.535303483947\]
ในเศรษฐศาสตร์การเงิน การหาความน่าจะเป็นสะสม (CDF) จากฟังก์ชันความหนาแน่นของความน่าจะเป็น (PDF)
ต้องใช้ การอินทิเกรต ฟังก์ชัน PDF
ตัวอย่าง
ถ้าอัตราผลตอบแทนสุทธิ \(r\) มีการกระจายแบบปกติ \(f(r)\)
แล้วต้องการหาความน่าจะเป็นที่ผลตอบแทนมากกว่าค่าเฉลี่ย ก็อินทิเกรต \(f(r)\) จากค่าเฉลี่ยขึ้นไป
\[
P(r > \mu) = \int_{\mu}^{\infty} f(r)\, dr
\]
ฟังก์ชันการแจกแจงแบบปกติคือ \[
f(x)=\frac{1}{\sigma \sqrt{2 \pi}} \exp \left(-\frac{(x-\mu)^2}{2 \sigma^2}\right), \mu\in R,\sigma^2 >0
\]
อินทิกรัลเชิงสัญลักษณ์ด้วยไม่ ใส่ตัวเลขใดๆ จะได้
mu <- symbol ("mu" )
sigma <- symbol ("sigma" )
pi <- symbol ("pi" )
x <- symbol ("x" )
f <- (1 / (sigma* sqrt (2 * pi))) * exp (- ((x - mu)^ 2 ) / (2 * sigma^ 2 ))
f
\[\frac{\sqrt{2} e^{- \frac{\left(- \mu + x\right)^{2}}{2 \sigma^{2}}}}{2 \sqrt{\pi} \sigma}\]
int (f,x, lower = mu, upper = Inf )
\[\frac{\sqrt{2} e^{- \frac{\mu^{2}}{2 \sigma^{2}}} \int\limits_{\mu}^{\infty} e^{- \frac{x^{2}}{2 \sigma^{2}}} e^{\frac{\mu x}{\sigma^{2}}}\, dx}{2 \sqrt{\pi} \sigma}\]
เมื่อทดลองแทนค่า \(\mu =0.1\) \(\sigma =0.05\) และ \(\pi\) = pi
f <- subs (f, list (mu = 0.01 , sigma = 0.05 ))
f
\[\frac{10.0 \sqrt{2} e^{- 200.0 \left(x - 0.01\right)^{2}}}{\sqrt{\pi}}\]
เนื่องจากภาษาอาร์ pi คือตัวแปรของค่าคงของค่าพาย แต่เนื่องจากมีกำหนดให้ pi คือแปรใหม่ที่สร้างจาก caracas ดังนั้นต้องดึงค่าคงพายจากชุดคำสั่ง base มาใช้ด้วยคำสั่ง base::pi
<ชุดคำสั่ง::ฟังก์ชัน/ค่าคงที่ที่ต้องการใช้>
ทำการอินทิกรัลจะได้
int (f,x, lower = 0.01 , upper = Inf )
\[\frac{0.353553390593274 \sqrt{2} \sqrt{\pi}}{\sqrt{\pi}}\]
ถ์้าต้องการเป็นตัวเลขจะได้
N (subs (int (f,x, lower = 0.01 , upper = Inf ), pi, base:: pi))
\[0.5\]
ซึ่งเป็นค่าที่ถูกต้องตามทฤษฏี
Andersen, M. M., & Højsgaard, S. (2023).
caracas: Computer Algebra .
https://github.com/r-cas/caracas
Berkelaar, M. (2024).
lpSolve: Interface to ’Lp_solve’ v. 5.5 to Solve Linear/Integer Programs .
https://doi.org/10.32614/CRAN.package.lpSolve
Meurer, A., Smith, C. P., Paprocki, M., Čertı́k, O., Kirpichev, S. B., Rocklin, M., Kumar, A., Ivanov, S., Moore, J. K., Singh, S., และคณะ. (2017). SymPy: symbolic computing in Python.
PeerJ Computer Science ,
3 , e103.
https://doi.org/10.7717/peerj-cs.103
Sievert, C. (2020).
Interactive Web-Based Data Visualization with R, plotly, and shiny . Chapman; Hall/CRC.
https://plotly-r.com
Ushey, K., Allaire, J., & Tang, Y. (2025).
reticulate: Interface to ’Python’ .
https://doi.org/10.32614/CRAN.package.reticulate
Wickham, H. (2016).
ggplot2: Elegant Graphics for Data Analysis . Springer-Verlag New York.
https://ggplot2.tidyverse.org