# 1. เรียกใช้านชุดคำสั่งที่จำเป็น
library(reticulate)
# 2. นำเข้า SymPy
<- import("sympy") sympy
7 สมการเชิงอนุพันธ์เบื้องต้นและการประยุกต์ในทางเศรษฐศาสตร์
การที่นักเศรษฐศาสตร์ต้องศึกษาสมการเชิงอนุพันธ์ (Ordinary Differential Equations: ODEs) เป็นเรื่องที่ สำคัญมาก โดยเฉพาะในสายงานเศรษฐศาสตร์ที่เกี่ยวข้องกับ พลวัตของระบบ (dynamic systems) เช่น การเจริญเติบโตทางเศรษฐกิจ, พฤติกรรมการบริโภคในระยะเวลา, หรือแม้แต่การเงินระหว่างประเทศ
7.1 ทำไมนักเศรษฐศาสตร์ต้องศึกษาสมการเชิงอนุพันธ์?
เพื่อเข้าใจพลวัตของระบบเศรษฐกิจ เศรษฐกิจเป็นระบบที่เปลี่ยนแปลงตามเวลา เช่น GDP, เงินเฟ้อ, การลงทุน ฯลฯ สมการ ODE ช่วยอธิบายว่า “ตัวแปรหนึ่งเปลี่ยนแปลงตามเวลาอย่างไร” เช่น Solow growth model: การเปลี่ยนแปลงของทุน K \[ \frac{dK(t)}{dt} = sY(t) - \delta K(t)\]
ใช้สร้างแบบจำลองเศรษฐศาสตร์จุลภาคและมหภาค
Consumption models เช่น Ramsey–Cass–Koopmans model ใช้ ODE อธิบายการบริโภคระยะยาว
IS-LM dynamic model ใช้ ODE แสดงการปรับตัวของตลาดเงินและตลาดสินค้า
Overlapping Generation Model (OLG) อาศัย ODE เพื่อวิเคราะห์พฤติกรรมของรุ่นประชากรในอนาคต
ใช้ในเศรษฐศาสตร์การเงิน (Financial Economics)
การกำหนดราคาสินทรัพย์ (เช่น bond, stock)
Black-Scholes Equation เป็นสมการเชิงอนุพันธ์บางส่วน (PDE) ที่มีรากฐานจาก ODE
Interest Rate Models เช่น Vasicek model
เข้าใจพฤติกรรมสมดุลและเสถียรภาพ
การวิเคราะห์จุดสมดุล (steady state)
การดูว่าเศรษฐกิจมีแนวโน้มเข้าสู่ภาวะสมดุดลหรือไม่ โดยใช้ eigenvalue analysis จากระบบ ODE
7.1.1 ตัวอย่างสมการที่นักเศรษฐศาสตร์ควรรู้
แบบจำลอง | รูปแบบสมการ | คำอธิบาย |
---|---|---|
Solow Model | \(\frac{dk}{dt} = sf(k) - \delta k\) | การเติบโตของทุนต่อหัว |
Ramsey Model | \(\frac{dc}{dt} = \frac{1}{\theta}(f'(k) - \rho - \delta) \cdot c\) | พฤติกรรมบริโภคที่เหมาะสม |
IS-LM dynamic | \(\frac{dY}{dt} = \alpha (C(Y) + I(r) + G - Y)\) | การปรับตัวของรายได้ |
Predator-Prey (ในเศรษฐกิจพลังงาน/สิ่งแวดล้อม) | \(\frac{dx}{dt} = ax - bxy\),\(\frac{dy}{dt} = -cy + dxy\) | ทรัพยากร vs การบริโภค |
7.2 สมการเชิงอนุพันธ์ (Ordinary Differential Equation: ODE)
สมการเชิงอนุพันธ์ คือสมการที่เกี่ยวข้องกับฟังก์ชัน \(y(t)\) และอนุพันธ์ของมัน (เช่น \(\frac{dy}{dt}\), \(\frac{d^2y}{dt^2}\), ฯลฯ)
การแก้สมการเชิงอนุพันธ์
เป้าหมายคือ: หา ฟังก์ชัน \(y(t)\) ที่เป็นคำตอบของสมการนั้น
ตัวอย่าง:
\[
\frac{dy}{dt} = 3y
\]
วิธีแก้:
- แยกตัวแปร (Separation of Variables): \[\frac{1}{y} \, dy = 3 \, dt\]
- อินทิเกรตทั้งสองข้าง: \[\ln|y| = 3t + C\]
- ยกกำลัง: \[y = Ce^{3t}\]
คำตอบทั่วไป (General Solution): ฟังก์ชันที่ขึ้นกับค่าคงที่ \(C\)
คำตอบเฉพาะ (Particular Solution): เมื่อกำหนดเงื่อนไขเริ่มต้น เช่น \(y(0) = 2\) แล้วแทนหา \(C\)
7.3 การแก้สมการเชิงอนุพันธ์ด้วย caracas และ SymPy
แม้ caracas
จะไม่สามารถแก้ ODE ได้โดยตรงเหมือนใน SymPy (Python) แต่เราสามารถใช้ caracas
ร่วมกับ reticulate
เพื่อเรียก SymPy
มาใช้งานได้เต็มรูปแบบในอาร์
การใช้ SymPy ด้วยอาร์มีความยุ่งยากเพิ่มขึ้นเล็กน้อย ดังนั้นในเนื้อหา ODE มีหมายถึงฟังก์ชัน ที่จะถูกใช้งานบ่อยๆ เราสามารถเปลี่ยนเป็นฟังก์ชัน ที่ช่วยให้เขียนได้สั้น และกระชับลงได้มาก ดังนี้
7.4 ฟังก์ชันที่ใช้บ่อยในการแก้ ODE ด้วย sympy
:
symbols()
– กำหนดตัวแปรFunction()
– สร้างฟังก์ชัน \(y(t)\)diff()
– หาอนุพันธ์Eq()
– นิยามสมการdsolve()
– แก้สมการเชิงอนุพันธ์
7.5 การสร้างฟังก์ชันในอาร์เพื่อใช้ SymPy แก้สมการเชิงอนุพันธ์
# โหลด SymPy
library(reticulate)
<- import("sympy")
sympy # กำหนด helper ฟังก์ชัน
# สร้างตัวแปร
<- sympy$symbols
syms # สร้างฟังก์ชัน
<- sympy$Function
func # หาอนุพันธ์
<- sympy$diff
diff_ # สร้างสมการ
<- sympy$Eq
Eq # แก้สมการเชิงอนุพันธ์
<- sympy$dsolve dsolve
ตัวอย่างการใช้งาน:
- ไม่มีเงื่อนไขเริ่มต้น:
<- syms("t")
t <- syms("k")
k <- func("y")
y <- Eq(diff_(y(t),t), k*y(t))
ode ode
Eq(Derivative(y(t), t), k*y(t))
dsolve(ode)
Eq(y(t), C1*exp(k*t))
- มีเงื่อนไขเริ่มต้น \(y(0) = y_0\):
<- make_ics(list("y(0)" = "y0"))
ics dsolve(ode, ics = ics)
Eq(y(t), y0*exp(k*t))
7.6 ตัวอย่างสมการเชิงอนุพันธ์ในทางเศรษฐศาสตร์
7.6.1 Consumption Growth Equation (Euler Equation)
วิธีทำ ใช้ SymPy ในการหาคำตอบ
# สร้างตัวแปร
<- syms("t")
t <- syms("theta", positive = TRUE)
theta <- syms("r", positive = TRUE)
r <- syms("rho", positive = TRUE)
rho # สร้างฟังก์ชัน
<- func("C") # ห้ามตั้งชื่อด้วย c เพราะจะไปตรงกับ c( ) ของ R
C <- Eq(sympy$diff(C(t), t), (r - rho) * C(t)/theta)
ode ode
Eq(Derivative(C(t), t), (r - rho)*C(t)/theta)
จัดเป็นสมการให้สวยงาม
latex_render(ode)
\[ \frac{d}{d t} C{\left(t \right)} = \frac{\left(r - \rho\right) C{\left(t \right)}}{\theta} \]
dsolve(ode)
Eq(C(t), C1*exp(t*(r - rho)/theta))
- มีเงื่อนไขเริ่มต้น \(C(0) = C_0\):
<- make_ics(list("C(0)" = "C0"), funcname = "C")
ics latex_render(dsolve(ode, ics = ics))
\[ C{\left(t \right)} = C_{0} e^{\frac{t \left(r - \rho\right)}{\theta}} \]
7.6.2 Solow Growth Equation (Capital Accumulation)
วิธีทำ ใช้ SymPy ในการหาคำตอบ
# สร้างตัวแปร
<- syms("s", positive = TRUE)
s <- syms("delta", positive = TRUE)
delta <- syms("alpha", positive = TRUE)
alpha
# สร้างฟังก์ชัน
<- func("k")
k <- s*k(t)^alpha-delta*k(t)
rhs <- Eq(sympy$diff(k(t), t), rhs)
ode ode
Eq(Derivative(k(t), t), -delta*k(t) + s*k(t)**alpha)
จัดเป็นสมการให้สวยงาม
latex_render(ode)
\[ \frac{d}{d t} k{\left(t \right)} = - \delta k{\left(t \right)} + s k^{\alpha}{\left(t \right)} \]
ถ้าไม่กำหนดค่า \(\alpha\) เท่ากับค่าเป็นตัวเลขในช่วง (0,1) จะไม่สามารถแก้สมการ ดังนั้น สมมุติให้ \(\alpha = 0.5\) จะได้
# แทนค่า theta = 0.5
<- ode$subs(alpha, 0.5)
ode_sub ode_sub
Eq(Derivative(k(t), t), -delta*k(t) + s*k(t)**0.5)
latex_render(dsolve(ode_sub))
\[ k{\left(t \right)} = e^{\delta \left(C_{1} - t\right)} + \frac{2 s e^{\frac{\delta \left(C_{1} - t\right)}{2}}}{\delta} + \frac{s^{2}}{\delta^{2}} \]
7.6.3 Price Adjustment Model (Adaptive Expectations)
วิธีทำ ใช้ SymPy ในการหาคำตอบ และกำหนด \(p^e\) คือค่าคงที่โดยใช้ \(p_e\) แทน
# สร้างตัวแปร
<- syms("t")
t <- syms("lambda_", positive = TRUE)
lambda <- syms("p_e", positive = TRUE)
pe # สร้างฟังก์ชัน
<- func("p")
p <- Eq(sympy$diff(p(t), t), lambda*(pe-p(t)))
ode latex_render(ode)
\[ \frac{d}{d t} p{\left(t \right)} = \lambda_{} \left(p_{e} - p{\left(t \right)}\right) \]
แก้สมการ
latex_render(dsolve(ode))
\[ p{\left(t \right)} = C_{1} e^{- \lambda_{} t} + p_{e} \]
- มีเงื่อนไขเริ่มต้น \(p(0) = p_0\):
<- make_ics(list("p(0)" = "p0"), funcname = "p")
ics latex_render(dsolve(ode, ics = ics))
\[ p{\left(t \right)} = p_{e} + \left(p_{0} - p_{e}\right) e^{- \lambda_{} t} \]
7.6.4 Exponential Capital Depreciation
วิธีทำ ใช้ SymPy ในการหาคำตอบ
# สร้างตัวแปร
<- syms("t")
t <- syms("delta", positive = TRUE)
delta # สร้างฟังก์ชัน
<- func("K")
K <- Eq(sympy$diff(K(t), t), -delta*K(t))
ode latex_render(ode)
\[ \frac{d}{d t} K{\left(t \right)} = - \delta K{\left(t \right)} \]
แก้สมการ
latex_render(dsolve(ode))
\[ K{\left(t \right)} = C_{1} e^{- \delta t} \]
- มีเงื่อนไขเริ่มต้น \(K(0) = K_0\):
<- make_ics(list("K(0)" = "K0"), funcname = "K")
ics latex_render(dsolve(ode, ics = ics))
\[ K{\left(t \right)} = K_{0} e^{- \delta t} \]
พฤติกรรม:
เมื่อ \(t \to \infty\), \(K(t) \to 0\)
ยิ่ง \(\delta\) มาก \(\rightarrow\) ทุนลดเร็ว
ใช้ในโมเดลการเจริญเติบโต (Growth Models) เช่น Solow, Ramsey เพื่อคำนวณทุนสุทธิ:
\[ \frac{dK}{dt} = I(t) - \delta K(t) \] โดย \(I(t)\) คือการลงทุนแบบจำลองนี้แสดงให้เห็นว่าหากไม่มีการลงทุนเพิ่ม ทุนจะลดลงตามเวลาอย่างต่อเนื่อง
ใช้ได้ทั้งกับทุนกายภาพ (เครื่องจักร อาคาร) และทุนมนุษย์ (ในบางบริบท)
7.6.5 Solow Growth Model (simplified)
วิธีทำ ใช้ SymPy ในการหาคำตอบ แต่ถ้ามีค่าของตัวแปรที่ไม่ทราบค่ามากเกินไปอาจจะไม่ได้คำตอบ หรือเกิดข้อผิดพลาดได้ กำหนดให้ \(\alpha =0.5\)
# ตัวแปร
<- syms("s", positive = TRUE)
s <- syms("delta", positive = TRUE)
delta <- syms("t")
t # ฟังก์ชัน
<- func("K")
K # สร้างสมการ
<- Eq(diff_(K(t),t),s * K(t)^0.5 - delta * K(t))
ode latex_render(ode)
\[ \frac{d}{d t} K{\left(t \right)} = - \delta K{\left(t \right)} + s K^{0.5}{\left(t \right)} \]
แก้สมการ
latex_render(dsolve(ode))
\[ K{\left(t \right)} = e^{\delta \left(C_{1} - t\right)} + \frac{2 s e^{\frac{\delta \left(C_{1} - t\right)}{2}}}{\delta} + \frac{s^{2}}{\delta^{2}} \]
7.7 แบบฝึกหัดสมการเชิงอนุพันธ์ในเศรษฐศาสตร์
7.7.1 สมการเชิงอนุพันธ์พื้นฐาน (Basic ODEs)
แก้สมการเชิงอนุพันธ์ \(\frac{dy}{dt} = 4y\) โดยกำหนดเงื่อนไขเริ่มต้น \(y(0) = 2\)
จงหา general solution ของ \(\frac{dK}{dt} = sY - \delta K\), เมื่อ \(Y = K^{0.5}\)
ให้ \(\frac{dP}{dt} = aP(1 - \frac{P}{K})\), logistic model จงหา solution ทั่วไปของสมการนี้
จงแก้สมการ \(\frac{dC}{dt} = rC - \theta\) แล้วหาค่า \(C(t)\) เมื่อ \(C(0) = 5\)
แก้ \(\frac{dy}{dt} = ky(1 - y)\) แล้ววิเคราะห์พฤติกรรมของ \(y(t)\) เมื่อ \(t \to \infty\)
7.7.2 ระบบสมการเชิงอนุพันธ์ 2 ตัวแปร
พิจารณาระบบ \[\begin{cases} \frac{dx}{dt} = 2x + 3y \\ \frac{dy}{dt} = x - y \end{cases}\] จงหาจุดดุลยภาพและตรวจสอบเสถียรภาพ
จงหาค่า eigenvalue ของระบบ \[ \frac{d}{dt} \begin{bmatrix} K \\ L \end{bmatrix} = \begin{bmatrix} 1 & 2 \\ -1 & 4 \end{bmatrix} \begin{bmatrix} K \\ L \end{bmatrix} \]
พิจารณาระบบ \[ \begin{cases} \frac{dA}{dt} = A(1 - B) \\ \frac{dB}{dt} = B(A - 1) \end{cases} \]
จงหาเส้นเสถียร (nullclines)
เขียน flow field ของระบบ \[ \frac{dx}{dt} = x(3 - x - y), \quad \frac{dy}{dt} = y(2 - x - y) \]
ระบบการเปลี่ยนผ่านทุน-แรงงาน: \[ \frac{dK}{dt} = sK^{0.5}L^{0.5} - \delta K, \quad \frac{dL}{dt} = nL \] จงเขียนสมการ normalized ด้วย \(k = \frac{K}{L}\)
7.7.3 แบบจำลองพลวัตทางเศรษฐศาสตร์
พิจารณา IS curve แบบพลวัต: \(\frac{dY}{dt} = \alpha (C + I + G - Y)\) เมื่อ \(C = cY\), \(I = I_0\), \(G\) คงที่ จงหาสมการ \(\frac{dY}{dt}\) ที่เป็นรูปชัดเจน
แบบจำลอง Solow: \(\frac{dk}{dt} = sf(k) - (\delta + n)k\) เมื่อ \(f(k) = k^{1/2}\), \(s = 0.2\), \(\delta = 0.05\), \(n = 0.02\) จงวาดกราฟ \(\frac{dk}{dt}\) เทียบกับ \(k\)
ในโมเดล Ramsey, สมการของ \(\frac{dc}{dt} = \frac{1}{\theta}(r - \rho)c\) ให้ \(c(0) = 10\), \(r = 0.05\), \(\rho = 0.03\), \(\theta = 2\) จงหา \(c(t)\)
โมเดลการแพร่ระบาด: \[ \frac{dS}{dt} = -\beta SI, \quad \frac{dI}{dt} = \beta SI - \gamma I \] จงหาเส้น Nullcline และจุดสมดุล
พิจารณาระบบราคาสินค้า: \[ \frac{dp}{dt} = \lambda(p^e - p), \quad \frac{dp^e}{dt} = \gamma(p - p^e) \] จงเขียนระบบให้อยู่ในรูปเมทริกซ์ และหาค่า eigenvalues
7.7.4 แบบฝึกหัดเพิ่มโจทย์เชิงเศรษฐศาสตร์
ถ้าอัตราการเปลี่ยนแปลงของการออมคือ \(\frac{ds}{dt} = \alpha(Y - C - G)\) โดย \(C = cY\), \(G\) คงที่ จงแสดงสมการ \(\frac{ds}{dt}\) ในรูปของ \(Y\)
แบบจำลองการบริโภคมีพฤติกรรมแบบปรับตัว \(\frac{dC}{dt} = \lambda(Y - C)\), \(\lambda > 0\) จงแก้ \(C(t)\) เมื่อ \(C(0) = 50\), \(Y = 100\)
แบบจำลองจ้างงาน: \(\frac{dN}{dt} = \eta(N_d - N)\) เมื่อ \(N_d = a - bW\) จงแทนสมการให้เหลือเพียง \(N\) และ \(W\)
สมการการเติบโตของอุตสาหกรรม \(\frac{dI}{dt} = I(f - \lambda A)\) ให้ \(A = A_0e^{rt}\) จงแทนค่าลงในสมการ \(\frac{dI}{dt}\)
โมเดลการสะสมทุนแบบมีความหน่วง: \(\frac{dK}{dt} = sY(t-\tau) - \delta K(t)\) จงตั้งคำถามเกี่ยวกับ stability ของระบบนี้ (ไม่ต้องแก้)
แ