<- symbol("P")
P <- 100 -2*P
Qd Qd
\[100 - 2 P\]
พีชคณิต (Algebra) เป็นรากฐานทางคณิตศาสตร์ที่มีความสำคัญอย่างยิ่งต่อการศึกษาวิชาเศรษฐศาสตร์ โดยเฉพาะเมื่อนักเศรษฐศาสตร์ต้องการ วิเคราะห์ ปรับเปลี่ยน หรือพยากรณ์พฤติกรรมทางเศรษฐกิจ ผ่านการตั้งสมมุติฐานและแบบจำลองทางปริมาณ
ในทางเศรษฐศาสตร์ สมการไม่เชิงเส้น (Nonlinear Equations) พบได้บ่อยมาก โดยเฉพาะเมื่อพฤติกรรมเศรษฐกิจมีลักษณะซับซ้อน เช่น ดุลยภาพที่เปลี่ยนตามกำลังสอง, สมการอรรถประโยชน์, ฟังก์ชันการผลิตแบบ Cobb-Douglas, ฯลฯ
เมตริกซ์ (Matrix) คือ การจัดเรียงตัวเลขหรือตัวแปรในรูปแบบตารางที่มี แถว (rows) และ คอลัมน์ (columns) โดยใช้สำหรับคำนวณทางคณิตศาสตร์ วิศวกรรม เศรษฐศาสตร์ และวิทยาศาสตร์ข้อมูล
เมตริกซ์ \(A\) ขนาด \(m \times n\) (m แถว, n คอลัมน์) เขียนได้เป็น:
\[ A = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \]
โดยที่ \(a_{ij}\) หมายถึงสมาชิกของเมตริกซ์ที่อยู่ใน แถวที่ i คอลัมน์ที่ j
ตัวอย่างเมตริกซ์
\[ B = \begin{bmatrix} 4 & 7 \\ 2 & 6 \end{bmatrix} \] เป็นเมตริกซ์ \(B\) ขนาด \(2 \times 2\)
หรือ
\[ A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \]
เมตริกซ์ \(A\) นี้มี 2 แถว และ 3 คอลัมน์
หรือเมตริกซ์ขนาด \(2 \times 3\)
คำศัพท์ | ความหมาย |
---|---|
Elements | ตัวเลขหรือพจน์ที่อยู่ในเมตริกซ์ |
Order หรือ Size | ขนาดของเมตริกซ์: แถว × คอลัมน์ |
Square Matrix | เมตริกซ์ที่มีจำนวนแถว = คอลัมน์ |
Row Vector | เมตริกซ์ที่มีเพียง 1 แถว |
Column Vector | เมตริกซ์ที่มีเพียง 1 คอลัมน์ |
Zero Matrix | เมตริกซ์ที่ทุกองค์ประกอบเป็น 0 |
Identity Matrix | เมตริกซ์หน่วย เช่น \(\begin{bmatrix}1 & 0 \\ 0 & 1\end{bmatrix}\) |
แน่นอนครับ! ต่อไปนี้คือวิธีการทำ การดำเนินการทางคณิตศาสตร์ (arithmetic operations) สำหรับ เมตริกซ์ (matrix) ด้วยแพ็กเกจ caracas
ใน R ซึ่งรองรับทั้งเมตริกซ์เชิงสัญลักษณ์ (symbolic matrix) และเชิงตัวเลข (numeric matrix)
# สร้างเมตริกซ์ A เชิงสัญลักษณ์ด้วย caracas
<- matrix(c("a11", "a12", "a21", "a22"), nrow = 2, byrow = TRUE)
A <- as_sym(A)
A A
\[\left[\begin{matrix}a_{11} & a_{12}\\a_{21} & a_{22}\end{matrix}\right]\]
# สร้างเมตริกซ์ B เชิงตัวเลขด้วย caracas
<- matrix(c(1, 2, 3, 4), nrow = 2, byrow = TRUE)
B <- as_sym(B)
B B
\[\left[\begin{matrix}1 & 2\\3 & 4\end{matrix}\right]\]
# บวก
<- A + B
A_plus_B A_plus_B
\[\left[\begin{matrix}a_{11} + 1 & a_{12} + 2\\a_{21} + 3 & a_{22} + 4\end{matrix}\right]\]
# ลบ
<- A - B
A_minus_B A_minus_B
\[\left[\begin{matrix}a_{11} - 1 & a_{12} - 2\\a_{21} - 3 & a_{22} - 4\end{matrix}\right]\]
# คูณ A ด้วย 3
<- 3 * A
A_scaled A_scaled
\[\left[\begin{matrix}3 a_{11} & 3 a_{12}\\3 a_{21} & 3 a_{22}\end{matrix}\right]\]
# A %*% B: เมตริกซ์คูณกันแบบมาตรฐาน
<- A %*% B
AB AB
\[\left[\begin{matrix}a_{11} + 3 a_{12} & 2 a_{11} + 4 a_{12}\\a_{21} + 3 a_{22} & 2 a_{21} + 4 a_{22}\end{matrix}\right]\]
ใช้ %*%
สำหรับ matrix multiplication แบบ linear algebra
# หาค่า A^2
<- mat_pow(A, pow = 2)
A2 A2
\[\left[\begin{matrix}a_{11}^{2} + a_{12} a_{21} & a_{11} a_{12} + a_{12} a_{22}\\a_{11} a_{21} + a_{21} a_{22} & a_{12} a_{21} + a_{22}^{2}\end{matrix}\right]\]
<- t(A)
A_t A_t
\[\left[\begin{matrix}a_{11} & a_{21}\\a_{12} & a_{22}\end{matrix}\right]\]
คำสั่ง t()
สามารถใช้ได้กับ เมตริกซ์เชิงตัวเลขปกติจาก R
# หาดีเทอร์มิแนนต์
<- det(A)
det_A det_A
\[a_{11} a_{22} - a_{12} a_{21}\]
# หาตัวผกผัน (ถ้า det ≠ 0)
<- inv(A)
inv_A inv_A
\[\left[\begin{matrix}\frac{a_{22}}{a_{11} a_{22} - a_{12} a_{21}} & - \frac{a_{12}}{a_{11} a_{22} - a_{12} a_{21}}\\- \frac{a_{21}}{a_{11} a_{22} - a_{12} a_{21}} & \frac{a_{11}}{a_{11} a_{22} - a_{12} a_{21}}\end{matrix}\right]\]
คำสั่ง det()
เป็นคำสั่งมาตราฐานสำหรับตัวแปรแบบเมตริกซ์ใน R สำหรับการหาเมตริกซ์ผกผันสำหรับตัวแปรแบบเมตริกซ์ใน R คือคำสั่ง solve()
ในหนังสือเล่มนี้สนใจเมทริกซ์ ที่มีจำนวนแถวเท่ากับจำนวนคอลัมน์ เพราะเป็นเมตริกซ์ที่สามารถใช้แก้ระบบสมการเชิงเส้นได้ (Linear Systems of Equations)
คุณสมบัติของเมตริกซ์ที่สำคัญ สำหรับการใช้ในการแก้ ระบบสมการเชิงเส้น (Linear Systems of Equations) ซึ่งเป็นพื้นฐานสำคัญในคณิตศาสตร์และเศรษฐศาสตร์
สมมติให้ระบบสมการเชิงเส้นมีรูปแบบ \[ A \cdot \mathbf{x} = \mathbf{b} \] โดยที่
\(A\) คือเมตริกซ์สัมประสิทธิ์ขนาด \(n \times n\)
\(\mathbf{x}\) คือเวกเตอร์ของตัวแปร
\(\mathbf{b}\) คือเวกเตอร์คำตอบ
คุณสมบัติ | อธิบาย | เหตุผลที่สำคัญ |
---|---|---|
เป็นเมตริกซ์สี่เหลี่ยมจัตุรัส (Square Matrix) | \(A\) มีจำนวนแถว = จำนวนคอลัมน์ | เพื่อให้สามารถหาตัวผกผัน (Inverse) ได้ |
ดีเทอร์มิแนนต์ไม่เป็นศูนย์ (Non-singular / \(\det(A) \neq 0\)) | เมตริกซ์ \(A\) ต้องมีดีเทอร์มิแนนต์ \(\neq\) 0 | บอกว่า \(A\) มีตัวผกผัน \(\rightarrow\) มีคำตอบที่แน่นอนเพียงหนึ่งชุด |
มีอันดับ (Rank) เท่ากับจำนวนตัวแปร | Rank(\(A\)) = จำนวนตัวแปร | บอกว่าระบบมีคำตอบเฉพาะเจาะจง |
สามารถหาเมตริกซ์ผกผันได้ (Invertible Matrix) | \(A^{-1}\) มีอยู่จริง | ใช้แก้สมการด้วยสูตร \(\mathbf{x} = A^{-1} \cdot \mathbf{b}\) |
ไม่เกิดความสัมพันธ์เชิงเส้นระหว่างแถวหรือคอลัมน์ (Linearly Independent) | แถวหรือคอลัมน์ของ \(A\) ต้องไม่ซ้ำซ้อน | ป้องกันระบบสมการไม่สมบูรณ์หรือไม่มีคำตอบแน่นอน |
ตัวอย่าง เมตริกซ์ที่สามารถใช้แก้สมการได้
\[ A = \begin{bmatrix} 2 & 1 \\ 5 & 3 \end{bmatrix}, \quad \det(A) = 2(3) - 5(1) = 1 \neq 0 \]
เป็นเมตริกซ์ \(2 \times 2\)
มีดีเทอร์มิแนนต์ \(\neq\) 0 \(\rightarrow\) มีตัวผกผัน \(\rightarrow\) ใช้แก้สมการได้
สามารถใช้การแทนค่าด้วยคำสั่ง subs() เช่น ต้องการแทนค่า \(a_{11}\) ด้วย 0 ดังนั้น
1,1] <- 0
A[ A
\[\left[\begin{matrix}0 & a_{12}\\a_{21} & a_{22}\end{matrix}\right]\]
คำนวณค่า det(A) อีกครั้งจะได้
det(A)
\[- a_{12} a_{21}\]
ถ้า แทนค่า \(a_{22}\) ด้วยตัวแปร z จะได้
2,2] <- symbol("z")
A[ A
\[\left[\begin{matrix}0 & a_{12}\\a_{21} & z\end{matrix}\right]\]
det(A)
\[- a_{12} a_{21}\]
solve_lin()
สามารถทำได้โดย
ตัวอย่าง \[ \begin{aligned} 3x + 2y =&~ 16 \\ x - y =&~ 4 \end{aligned} \]
เขียนในรูป \(A \cdot X = B\) คือ
\[ A = \begin{bmatrix} 3 & 2 \\ 1 & -1 \end{bmatrix}, \quad X = \begin{bmatrix} x \\ y \end{bmatrix}, \quad B = \begin{bmatrix} 16 \\ 4 \end{bmatrix} \]
# เมทริกซ์สัมประสิทธิ์
<- matrix(c(3, 1, 2, -1), nrow = 2)
A <- as_sym(A)
A A
\[\left[\begin{matrix}3 & 2\\1 & -1\end{matrix}\right]\]
# เวกเตอร์คำตอบ
<-matrix(c(16, 4), nrow = 2)
B <- as_sym(B)
B B
\[\left[\begin{matrix}16\\4\end{matrix}\right]\]
# แก้สมการ: A %*% X = B
<- solve_lin(A, B)
X X
\[\left[\begin{matrix}\frac{24}{5}\\\frac{4}{5}\end{matrix}\right]\]
คำตอบคือเมตริกซ์ 2×1 ที่แสดง \(x\) และ \(y\) ในรูปสัญลักษณ์
ถ้าต้องการผลลัพธ์ออกมาเป็นตัวเลข สามารถใช้คำสั่ง N()
N(X, digits = 3)
\[\left[\begin{matrix}4.8\\0.8\end{matrix}\right]\]
digits
คือจำนวนทศนิยมสูงที่ต้องการแสดง แต่ในตัวอย่างเป็นตัวเลขทศนิยมลงตัวแสดงผลแค่เพียง ทศนิยม 1 ตำแหน่ง
มี 2 ปัจจัยการผลิต (แรงงาน \(L\), ทุน \(K\)) ที่ต้องใช้ในการผลิตสินค้า 2 ชนิด (X, Y) โดยต้องการให้ใช้ทรัพยากรทั้งหมด:
\(3X + 2Y = 18\) (ใช้แรงงานทั้งหมด)
\(4X + Y = 16\) (ใช้ทุนทั้งหมด)
จัดสมการอยู่ในรูปเมทริกซ์คือ
\[ \begin{bmatrix} 3&2\\4&1 \end{bmatrix} \begin{bmatrix} X\\Y \end{bmatrix} = \begin{bmatrix} 18\\16 \end{bmatrix}\rightarrow Ax=b \]
<- matrix(c(3,2,4,1), nrow = 2, byrow = TRUE)
A <- as_sym(A)
A A
\[\left[\begin{matrix}3 & 2\\4 & 1\end{matrix}\right]\]
<- matrix(c(18,16), nrow = 2, byrow = TRUE)
b <- as_sym(b)
b b
\[\left[\begin{matrix}18\\16\end{matrix}\right]\]
solve_lin(A, b)
\[\left[\begin{matrix}\frac{14}{5}\\\frac{24}{5}\end{matrix}\right]\]
กำหนเให้มี 2 สินค้า \(A\) และ \(B\) ที่ราคาของกันและกันมีผลต่ออุปสงค์
\[ \begin{cases} Q^d_A = 100 - 2P_A + P_B \\ Q^d_B = 80 - P_B + 0.5P_A \\ Q^s_A = -20 + 3P_A \\ Q^s_B = -10 + 2P_B \end{cases} \]
เงื่อนไขดุลยภาพ: \(Q^d_A = Q^s_A\), \(Q^d_B = Q^s_B\)
\[ \begin{aligned} 100 - 2P_A + P_B &= -20 + 3P_A \\ 80 - P_B + 0.5P_A &= -10 + 2P_B \end{aligned} \]
รูปเมตริกซ์ \[ \begin{bmatrix} -5 & 1 \\ 0.5 & -3 \end{bmatrix} \begin{bmatrix} P_A \\ P_B \end{bmatrix} = \begin{bmatrix} -120 \\ -90 \end{bmatrix} \]
ดังนั้น \[ \begin{bmatrix} P_A \\ P_B \end{bmatrix} = \begin{bmatrix} -5 & 1 \\ 0.5 & -3 \end{bmatrix}^{-1} \begin{bmatrix} -120 \\ -90 \end{bmatrix} \]
สามารถใช้ caracas สร้างเมตริกซ์เชิงสัญลักษณ์ แล้วหาเมตริกซ์ผกผัน เพื่อหาคำตอบได้่ดังนี้
<- matrix(c(-5,1,0.5,-3),nrow = 2, byrow = TRUE)
A <- as_sym(A)
A A
\[\left[\begin{matrix}-5 & 1\\0.5 & -3\end{matrix}\right]\]
<- matrix(c(-120,-90),nrow = 2, byrow = TRUE)
B <- as_sym(B)
B B
\[\left[\begin{matrix}-120\\-90\end{matrix}\right]\]
ดังนั้น
solve_lin(A, B)
\[\left[\begin{matrix}31.0344827586207\\35.1724137931035\end{matrix}\right]\]
หรือจะใช้
inv(A)%*%B
\[\left[\begin{matrix}31.0344827586207\\35.1724137931035\end{matrix}\right]\]
โดยตรงก็ได้
ตัวอย่างเศรษฐกิจ 3 ภาค
การเกษตร, อุตสาหกรรม, บริการ
สมมุติว่าเมตริกซ์เทคโนโลยี \(A\) และเวกเตอร์ผลผลิตขั้นสุดท้าย \(\mathbf{d}\) เป็น: \[ A = \begin{bmatrix} 0.2 & 0.1 & 0.1 \\ 0.4 & 0.3 & 0.2 \\ 0.1 & 0.2 & 0.2 \end{bmatrix}, \quad \mathbf{d} = \begin{bmatrix} 100 \\ 200 \\ 150 \end{bmatrix} \]
ต้องการหาผลผลิตรวม \(\mathbf{x}\) โดยใช้ \[ (I - A)\mathbf{x} = \mathbf{d} \] ดังนั้น
\[ \mathbf{x} = (I - A)^{-1}\mathbf{d} \]
เราสามารถใช้ caracas สร้าง เมตริกซ์ \(I\) ขนาด \(3\times 3\) ได้ด้วย คำสั่ง diag()
ใน R แบบปกติ ร่วมกับคำสั่ง as_sym()
<- as_sym(diag(3))
I I
\[\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]\]
ดังนั้น
<- matrix(c(0.2,0.1,0.1,0.4,0.3,0.2,0.1,0.2,0.2),nrow = 3,byrow = TRUE)
A <- as_sym(A)
A A
\[\left[\begin{matrix}0.2 & 0.1 & 0.1\\0.4 & 0.3 & 0.2\\0.1 & 0.2 & 0.2\end{matrix}\right]\]
<- matrix(c(100,200,150),nrow = 3,byrow = TRUE)
d <- as_sym(d)
d d
\[\left[\begin{matrix}100\\200\\150\end{matrix}\right]\]
solve_lin(I-A,d)
\[\left[\begin{matrix}232.970027247957\\517.711171662127\\346.049046321526\end{matrix}\right]\]
สมมุติ รัฐมี 3 ประเภทการใช้จ่าย: ด้านสาธารณสุข \(G_1\), การศึกษา \(G_2\), โครงสร้างพื้นฐาน \(G_3\) มีข้อจำกัดงบประมาณ และข้อกำหนดนโยบาย เช่น
\(G_1 + G_2 + G_3 = 1000\)
\(G_1 = 1.5G_2\)
\(G_3 = 2G_2\)
เขียนในรูปสมการ \[ \begin{cases} G_1 + G_2 + G_3 = 1000 \\ G_1 - 1.5G_2 = 0 \\ G_3 - 2G_2 = 0 \end{cases} \quad \Rightarrow \quad \text{ระบบสมการ 3x3} \]
้น** คือ:
\[ A \cdot \mathbf{G} = \mathbf{b} \] รูปสมการเชิงเมตริกซ์:
\[ \underbrace{ \begin{bmatrix} 1 & 1 & 1 \\ 1 & -1.5 & 0 \\ 0 & -2 & 1 \end{bmatrix} }_{A} \cdot \underbrace{ \begin{bmatrix} G_1 \\ G_2 \\ G_3 \end{bmatrix} }_{\mathbf{G}} = \underbrace{ \begin{bmatrix} 1000 \\ 0 \\ 0 \end{bmatrix} }_{\mathbf{b}} \]
# สร้างเมตริกซ์ A
<- matrix(c(1, 1, 1, 1, -1.5, 0, 0, -2, 1), nrow = 3, byrow = TRUE)
A <- as_sym(A)
A A
\[\left[\begin{matrix}1 & 1 & 1\\1 & -1.5 & 0\\0 & -2 & 1\end{matrix}\right]\]
# เวกเตอร์ b
<- matrix(c(1000, 0, 0), nrow = 3)
b <- as_sym(b)
b b
\[\left[\begin{matrix}1000\\0\\0\end{matrix}\right]\]
# แก้สมการ A * G = b
solve_lin(A, b)
\[\left[\begin{matrix}333.333333333333\\222.222222222222\\444.444444444444\end{matrix}\right]\]
จะได้ค่าของ \(G_1, G_2, G_3\) ที่สอดคล้องกับเงื่อนไขงบประมาณและสัดส่วนการใช้จ่าย
แม้โดยทั่วไป IS-LM เป็นสมการไม่เชิงเส้น แต่สามารถ linearize ได้รอบจุดดุลยภาพ เช่น:
\[ \begin{cases} Y = C_0 + cY - bR + G \\ M/P = kY - hR \end{cases} \Rightarrow \text{จัดให้อยู่ในรูป } AX = B \]
แปลงให้อยู่ในรูปเชิงเส้น (linearized) ได้รอบจุดดุลยภาพ โดยใช้แบบจำลองง่าย คือรูปแบบ IS-LM แบบเชิงเส้น:
\[ \begin{cases} Y = C_0 + cY - bR + G \quad \text{(IS)} \\ \frac{M}{P} = kY - hR \quad \text{(LM)} \end{cases} \]
ซึ่งเป็นระบบสมการ 2 ตัวแปร: \(Y\) (รายได้), \(R\) (อัตราดอกเบี้ย) มีขั้นตอนการจัดรูปเป็นเมตริกซ์คือ
1. จัดสมการ IS: \[ Y = C_0 + cY - bR + G \Rightarrow (1 - c)Y + bR = C_0 + G \] 2. สมการ LM: \[ \frac{M}{P} = kY - hR \Rightarrow -kY + hR = -\frac{M}{P} \]
เขียนในรูปเมตริกซ์ \(A \cdot \begin{bmatrix} Y \\ R \end{bmatrix} = \mathbf{b}\)
\[ \underbrace{ \begin{bmatrix} 1 - c & b \\ -k & h \end{bmatrix} }_{A} \cdot \begin{bmatrix} Y \\ R \end{bmatrix} = \underbrace{ \begin{bmatrix} C_0 + G \\ \frac{M}{P} \end{bmatrix} }_{\mathbf{b}} \]
# สร้างเมตริกซ์ A
<- 0.6; b <- 5; k <- 0.5; h <- 4
c <- matrix(c(1 - c, b, -k, h), nrow = 2, byrow = TRUE)
A <- as_sym(A)
A A
\[\left[\begin{matrix}0.4 & 5\\-0.5 & 4\end{matrix}\right]\]
# สร้างเวกเตอร์ b
<- 200; G <- 300; MP <- 800
C0 <- matrix(c(C0 + G, MP), nrow = 2)
B <- as_sym(B)
B B
\[\left[\begin{matrix}500\\800\end{matrix}\right]\]
# แก้ระบบสมการ
solve_lin(A, B)
\[\left[\begin{matrix}-487.80487804878\\139.024390243902\end{matrix}\right]\]
เราจะได้คำตอบของ \(Y\) และ \(R\) ที่เป็นจุดดุลยภาพของระบบ IS-LM ภายใต้พารามิเตอร์ที่กำหนด
ประกอบไปด้วย 1. สมการไม่เชิงเส้น (Nonlinear Equation) คือ สมการที่ความสัมพันธ์ของตัวแปรไม่เป็นเส้นตรง เช่น
ตัวแปรถูกยกกำลัง (ยกกำลังมากกว่า 1 หรือเป็นทศนิยม)
ตัวแปรคูณกันเอง
มีฟังก์ชันไม่เชิงเส้น เช่น \(\sin\), \(\log\), \(e^x\)
2. ระบบสมการไม่เชิงเส้น (Nonlinear System of Equations) คือ กลุ่มของสมการตั้งแต่ 2 สมการขึ้นไป ที่มีตัวแปรร่วมกัน และ อย่างน้อย 1 สมการเป็นสมการไม่เชิงเส้น
ลักษณะของระบบสมการไม่เชิงเส้น
มีตัวแปรตั้งแต่ 2 ตัวขึ้นไป
มีสมการตั้งแต่ 2 สมการขึ้นไป
ความสัมพันธ์ระหว่างตัวแปรมีลักษณะโค้งหรือซับซ้อน
การแก้สมการอาจมีคำตอบมากกว่า 1 คำตอบ หรือไม่มีเลย
ต้องใช้วิธีทางเชิงสัญลักษณ์หรือเชิงตัวเลขในการแก้
การคำนวณเชิงสัญลักษณ์ด้วย caracas
ตัวอย่าง
โจทย์:
หาค่า eigenvalues และ eigenvectors ของเมทริกซ์ \[A = \begin{bmatrix}
2 & 1 \\
1 & 2
\end{bmatrix}\]
# สร้างเมทริกซ์ A
<- matrix(c(2, 1,1, 2), nrow = 2, byrow = TRUE)
A # ถ้าไม่กำหนด A เป็นตัวแปรจะไม่สามารถ คำนวณด้วยcaracas ได้
<- as_sym(A)
A A
\[\left[\begin{matrix}2 & 1\\1 & 2\end{matrix}\right]\]
# นิยาม lambda (ค่าเฉพาะ)
<- symbol("lambda_")
lambda# หา Determinant ของ (A - lambda * I)
<- diag(1, 2) # I คือ Identity Matrix 2x2
I <- as_sym(I) I
\[\left[\begin{matrix}1 & 0\\0 & 1\end{matrix}\right]\]
<-det(A - lambda* I)
char_eq char_eq
\[\lambda_{}^{2} - 4 \lambda_{} + 3\]
# แก้สมการ characteristic equation เพิ่อหา eigenvalues
<- solve_sys(char_eq, lambda)
eigenvals 1]]$lambda eigenvals[[
\[1\]
2]]$lambda eigenvals[[
\[3\]
# สมมติเอาค่าเฉพาะค่าแรกมาแทนหา eigenvector
<- eigenvals[[1]]$lambda # ดึงค่าแรก
lambda # สร้างระบบสมการ (A - lambda1 * I) * v = 0
<- as_sym(c("v1", "v2"))
V # สมการคือ (A - lambda1*I) %*% v = 0
<- (A - lambda*I) %*% V
eqs # แก้สมการหาเวกเตอร์เฉพาะ
<- solve_sys(eqs, V)
eigenvec1 1]]$v1 eigenvec1[[
\[- v_{2}\]
ความหมายของคำตอบคือ ที่ค่าเฉพาะ \(\lambda=1\) จะได้ค่าเวคเตอร์คือ \[\begin{bmatrix}v_1\\v_2\end{bmatrix}=\begin{bmatrix}-v_2\\v_2\end{bmatrix}\] ถ้าให้ \(v_2=1\) คือ \[\begin{bmatrix}v_1\\v_2\end{bmatrix}=\begin{bmatrix}-1\\1\end{bmatrix}\]
# สมมติเอาค่าเฉพาะค่าที่สองมาแทนหา eigenvector
<- eigenvals[[2]]$lambda # ดึงค่าแรก
lambda # สร้างระบบสมการ (A - lambda1 * I) * v = 0
<- as_sym(c("v1", "v2"))
V # สมการคือ (A - lambda1*I) %*% v = 0
<- (A - lambda*I) %*% V
eqs # แก้สมการหาเวกเตอร์เฉพาะ
<- solve_sys(eqs, V)
eigenvec2 1]]$v1 eigenvec2[[
\[v_{2}\]
ความหมายของคำตอบคือ ที่ค่าเฉพาะ \(\lambda=1\) จะได้ค่าเวคเตอร์คือ \[\begin{bmatrix}v_1\\v_2\end{bmatrix}=\begin{bmatrix}v_2\\v_2\end{bmatrix}\] ถ้าให้ \(v_2=1\) คือ \[\begin{bmatrix}v_1\\v_2\end{bmatrix}=\begin{bmatrix}1\\1\end{bmatrix}\]
การคำนวณค่าเฉพาะและเวคเตอร์เจาะจงในตัวอย่างที่ผ่านมา จะการทดแทนการทำควณด้วยมือ เมื่อให้เกิดความเข้าใจในขั้นตอนการคำนวณ ถ้าเชี่ยวชาญดีแล้วสามารถใช้คำสั่งของ caracas โดยตรงเพื่อให้ได้ค่าเฉพาะและเวคเตอร์เจาะจงได้เลย คือ
eigenval()
สำหรับหาค่าเฉพาะ
eigenvec()
สำหรับหาค่าเวคเตอร์เจาะจง
เช่น จากตัวอย่างเมตริกซ์ A ที่ผ่านมา
eigenval(A)
[[1]]
[[1]]$eigval
c: 3
[[1]]$eigmult
[1] 1
[[2]]
[[2]]$eigval
c: 1
[[2]]$eigmult
[1] 1
ความหมายของผลลัพธ์
[[1]]$eigval
: Eigenvalue ตัวแรกคือ 3
[[1]]$eigmult
: Eigenvalue ตัวนี้มีความซ้ำ (multiplicity) เท่ากับ 1
[[2]]$eigval
: Eigenvalue ตัวที่สองคือ 1
[[2]]$eigmult
: ตัวนี้ก็มี multiplicity = 1 เช่นกัน
eigenvec(A)
[[1]]
[[1]]$eigval
c: 1
[[1]]$eigmult
[1] 1
[[1]]$eigvec
c: [-1 1]ᵀ
[[2]]
[[2]]$eigval
c: 3
[[2]]$eigmult
[1] 1
[[2]]$eigvec
c: [1 1]ᵀ
ความหมายของผลลัพธจากคำสั่ง eigenvec()
ลำดับ | Eigenvalue (\(\lambda\)) | Eigenvector (\(v\)) | Multiplicity |
---|---|---|---|
1 | 1 | \([-1,\ 1]^T\) | 1 |
2 | 3 | \([1,\ 1]^T\) | 1 |
ตัวอย่างการคำนวณเชิงสัญลักษณ์ กำหนดเมทริกซ์เทคนิคการผลิต: \[A = \begin{bmatrix} 0.3 & 0.2 \\ 0.4 & 0.1 \end{bmatrix}\]
ตรวจสอบว่าเศรษฐกิจนี้เสถียรหรือไม่ โดยดูจาก largest eigenvalue ของ A
# สร้างเมตริกซ์ A
<- matrix(c(0.3, 0.2,
A 0.4, 0.1), nrow = 2, byrow = TRUE)
# เปลี่ยนเป็นตัวแปรเชิงสัญลักษณ์
<- as_sym(A)
A A
\[\left[\begin{matrix}0.3 & 0.2\\0.4 & 0.1\end{matrix}\right]\]
# สร้างแปร lambda
<- symbol("lambda_")
lambda# สร้างเมตริกซ์เอกลักษณ์ I แบบสัญลักษณ์
<- diag(1, 2)
I <- as_sym(I)
I I
\[\left[\begin{matrix}1 & 0\\0 & 1\end{matrix}\right]\]
# สร้างสมการ (A-lambda*I) เชิงสัญลักษณ์
<- det(A - lambda*I)
char_eq char_eq
\[\lambda_{}^{2} - 0.4 \lambda_{} - 0.05\]
## คำตอบมีแค่ 2 ค่า
factor_(char_eq)
\[1.0 \left(1.0 \lambda_{} - 0.5\right) \left(1.0 \lambda_{} + 0.1\right)\]
# แก้สมการ
<- solve_sys(char_eq, lambda)
eigenvals 1]]$lambda eigenvals[[
\[-0.1\]
2]]$lambda eigenvals[[
\[0.5\]
ถ้า largest eigenvalue \(\lambda_{max} < 1\) \(\rightarrow\) ระบบผลิตมีเสถียรภาพ
ถ้า \(\lambda_{max} \geq 1\) \(\rightarrow\) ระบบจะขยายตัวไม่สิ้นสุด (ไม่เสถียร)
จากสมการ ค่า \(\lambda_{max} =.5 <0 1\) ดังนั้น ระบบผลิตมีเสถียรภาพ
ตัวอย่างการคำนวณ พิจารณาเมทริกซ์การเปลี่ยนผ่านของระดับรายได้ \[P = \begin{bmatrix} 0.8 & 0.2 \\ 0.4 & 0.6 \end{bmatrix}\]
หาค่าสถานะสมดุล (stationary distribution) โดยแก้ \(\pi P = \pi\) ภายใต้เงื่อนไข \(\pi_1 + \pi_2 = 1\)
# สร้างตัวแปรเชิงสัญลักษณ์
<- matrix(c(0.8, 0.2, 0.4, 0.6), nrow = 2, byrow = TRUE)
P <- as_sym(P)
P P
\[\left[\begin{matrix}0.8 & 0.2\\0.4 & 0.6\end{matrix}\right]\]
<- as_sym(c("pi1", "pi2"))
pi pi
\[\left[\begin{matrix}\pi_{1}\\\pi_{2}\end{matrix}\right]\]
หมายเหตุ ตัวแปร \(pi\) ได้แทนที่ ค่าคงที่ pi=3.14....
ในอาร์แล้ว
# สมการ: pi * P = pi $\rightarrow$ transpose ทั้งสองข้าง
<- t(P) %*% pi - pi
eqs eqs
\[\left[\begin{matrix}- 0.2 \pi_{1} + 0.4 \pi_{2}\\0.2 \pi_{1} - 0.4 \pi_{2}\end{matrix}\right]\]
<-solve_sys(eqs, pi)
sol 1]]$pi1 sol[[
\[2.0 \pi_{2}\]
แทนค่า \(\pi_1 =2\pi_2\)
subs(pi,pi[1], 2*pi[2])
\[\left[\begin{matrix}2 \pi_{2}\\\pi_{2}\end{matrix}\right]\]
จากเงื่อนไข \(\pi_1+\pi_2 =1\) ดังนั้น
sum(subs(pi,pi[1], 2*pi[2]))-1
\[3 \pi_{2} - 1\]
<- solve_sys(sum(subs(pi,pi[1], 2*pi[2]))-1, pi[2])
sol 1]]$pi2 sol[[
\[\frac{1}{3}\]
จาก \(\pi_2=1/3\) ดังนั้น \(\pi_1 = 2/3\)
คำตอบคือ stationary distribution หรือความน่าจะเป็นของแต่ละสถานะในระยะยาว
หมายเหตุต้องจัดตัวแปร pi
ออกจากระบบ เพื่อให้สามารถใช้ค่าคงที่ pi
ของอาร์ได้โดยคำสั่ง rm()
rm(pi)
ตรวจสอบ
pi
[1] 3.141593
ตัวอย่างการคำนวณ ระบบเศรษฐกิจที่มีการเปลี่ยนแปลงแบบ: \[\frac{d}{dt} \begin{bmatrix} K \\ L \end{bmatrix} = \begin{bmatrix} 0.1 & 0.05 \\ 0.02 & 0.08 \end{bmatrix} \begin{bmatrix} K \\ L \end{bmatrix}\]
วิเคราะห์เสถียรภาพด้วย eigenvalue
# สร้างเมตริกซฺสัญลักษณ์ A
<- matrix(c(0.1, 0.05, 0.02, 0.08), nrow = 2, byrow = TRUE)
A <- as_sym(A)
A A
\[\left[\begin{matrix}0.1 & 0.05\\0.02 & 0.08\end{matrix}\right]\]
# สร้างเมตริกซฺสัญลักษณ์ lambda
<- symbol("lambda_")
lambda# สร้างเมตริกซ์เอกลักษณ์
<- diag(1, 2) |> as_sym()
I <- as_sym(I)
I I
\[\left[\begin{matrix}1 & 0\\0 & 1\end{matrix}\right]\]
# สร้างสมการ det(A)-lambda*I =0
<- det(A - lambda* I)
char_eq char_eq
\[\lambda_{}^{2} - 0.18 \lambda_{} + 0.007\]
## คำตอบมีแค่ 2 ค่า
factor_(char_eq)
\[1.0 \left(1.0 \lambda_{}^{2} - 0.18 \lambda_{} + 0.007\right)\]
<- solve_sys(char_eq, lambda)
eigenvals 1]]$lambda eigenvals[[
\[0.056833752096446\]
2]]$lambda eigenvals[[
\[0.123166247903554\]
ถ้า eigenvalues มีค่าบวก \(\rightarrow\) การเติบโตแบบ “unstable” (exponential growth)
ถ้าค่าลบ \(\rightarrow\) ระบบกลับสู่ดุลยภาพได้
ไม่มีค่าเฉพาะที่เป็นลบ แสดงว่า “unstable”
ตัวอย่างการคำนวณ พิจารณาเกมแบบ 2 ผู้เล่นที่มีเมทริกซ์ผลตอบแทน (payoff matrix): \[A = \begin{bmatrix} 2 & -1 \\ -1 & 2\end{bmatrix}\]
ต้องการวิเคราะห์ว่า กลยุทธ์เสถียร (stable strategy) อยู่ตรงไหน โดยพิจารณาทิศทางที่ระบบมีแนวโน้มจะเคลื่อนที่เข้าไปหาในระยะยาว
# สร้างเมตริกซ์สัญลักษณ์ A
<- matrix(c(2, -1, -1, 2), nrow = 2, byrow = TRUE)
A <- as_sym(A)
A A
\[\left[\begin{matrix}2 & -1\\-1 & 2\end{matrix}\right]\]
# สร้างตัวแปร lambdaและเมติกซ์เอกลักษณ์
<- symbol("lambda_")
lambda<- diag(1, 2) |> as_sym()
I <- as_sym(I)
I I
\[\left[\begin{matrix}1 & 0\\0 & 1\end{matrix}\right]\]
# สร้างสมการ det(A-lambda*I) =0
<- det(A - lambda* I)
char_eq char_eq
\[\lambda_{}^{2} - 4 \lambda_{} + 3\]
## คำตอบมีแค่ 2 ค่า
factor_(char_eq)
\[\left(\lambda_{} - 3\right) \left(\lambda_{} - 1\right)\]
<- solve_sys(char_eq, lambda)
eigenvals 1]]$lambda eigenvals[[
\[1\]
2]]$lambda eigenvals[[
\[3\]
จากการคำนวณได้ eigenvalues คือ \(\lambda_1 = 3\), \(\lambda_2 = 1\)
ผลการวิเคราะห์:
\(\lambda_1 = 3 > 0\) \(\rightarrow\) บวก
\(\lambda_2 = 1 > 0\) \(\rightarrow\) บวก
ดังนั้น ระบบไม่เสถียร (Unstable)
แปลว่า: ถ้ามี perturbation เล็กๆ (การเบี่ยงเบนเล็กน้อย) ระบบจะเคลื่อน หนีออกจากดุลยภาพ ไม่ได้เคลื่อนกลับเข้าไปหาเอง
ตัวอย่างการคำนวณ พิจารณา network ของประเทศ 3 ประเทศที่มีความเชื่อมโยงทางการค้า (Trade Influence): สมมติความสัมพันธ์การค้า (Trade Influence)
ประเทศ A ส่งออก ไปยัง B และ C
ประเทศ B ส่งออก ไปยัง A และ C
ประเทศ C ส่งออก ไปยัง A และ B
ตารางแสดงการเชื่อมโยง
A | B | C | |
---|---|---|---|
A | 0 | 1 | 1 |
B | 1 | 0 | 1 |
C | 1 | 1 | 0 |
เขียนเป็นเมทริกซ์ \(C\)
\[ C = \begin{bmatrix} 0 & 1 & 1 \\ 1 & 0 & 1 \\ 1 & 1 & 0 \end{bmatrix} \]
โดยที่
แถว 1 คือ ประเทศ A
แถว 2 คือ ประเทศ B
แถว 3 คือ ประเทศ C
และ
คอลัมน์ 1 คือ ประเทศ A
คอลัมน์ 2 คือ ประเทศ B
คอลัมน์ 3 คือ ประเทศ C
ต้องการหาว่า ประเทศใดมีความสำคัญที่สุด ในเครือข่าย โดยใช้ eigenvector centrality
# สร้างเมตริกซสัญลักษณ์ C
<- matrix(c(0, 1, 1,
C 1, 0, 1,
1, 1, 0), nrow = 3, byrow = TRUE)
<- as_sym(C)
C C
\[\left[\begin{matrix}0 & 1 & 1\\1 & 0 & 1\\1 & 1 & 0\end{matrix}\right]\]
# สร้างสัญลักษณ์ lambda และเมตริกซ์เอกลักษณ์ 3x3
<- symbol("lambda_")
lambda<- diag(1, 3)
I <- as_sym(I)
I I
\[\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]\]
# สร้างสมการ det(C)- lambda*I =0
<- det(C - lambda* I)
char_eq char_eq
\[- \lambda_{}^{3} + 3 \lambda_{} + 2\]
## คำตอบมีแค่ 2 ค่า
factor_(char_eq)
c: 2
-(λ - 2)⋅(λ + 1)
# หาค่า eigenvector
<- solve_sys(char_eq, lambda)
eigenvals 1]]$lambda eigenvals[[
\[-1\]
2]]$lambda eigenvals[[
\[2\]
# เลือกค่า eigenvalue ใหญ่สุดมาหา eigenvector
<- as_sym(paste0("v",1:3))
V <- (C - eigenvals[[2]]$lambda*I) %*% V
eqs eqs
\[\left[\begin{matrix}- 2 v_{1} + v_{2} + v_{3}\\v_{1} - 2 v_{2} + v_{3}\\v_{1} + v_{2} - 2 v_{3}\end{matrix}\right]\]
# แก้สมการหาค่า V
<- solve_sys(eqs, V)
sol1]]$v1 sol[[
\[v_{3}\]
1]]$v2 sol[[
\[v_{3}\]
จากผลการคำนวณพบว่า \(v_1=v_2=v_3\) แสดงว่าไม่มีใครมีอิพธิพลเหนือใคร