R Academy · บทเรียน

การคูณเมทริกซ์และดีเทอร์มิแนนต์

ใช้ %*% สำหรับการคูณเมทริกซ์ และ det() สำหรับคำนวณดีเทอร์มิแนนต์

บทเรียน 1 จาก 413 ขั้นตอน

การคูณเมทริกซ์และดีเทอร์มิแนนต์ เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

การสร้างเมทริกซ์ใน R

เมทริกซ์คืออาร์เรย์สองมิติที่โดยค่าเริ่มต้นจะเติมข้อมูลทีละคอลัมน์ ใช้ matrix(data, nrow, ncol) คุณสามารถตั้งชื่อแถวและคอลัมน์ด้วย rownames() และ colnames()

# Create a 3x3 matrix (filled column-wise)
A <- matrix(c(1, 2, 3,
              4, 5, 6,
              7, 8, 9), nrow = 3, ncol = 3, byrow = TRUE)
print(A)
#      [,1] [,2] [,3]
# [1,]    1    2    3
# [2,]    4    5    6
# [3,]    7    8    9

dim(A)   # 3 3
nrow(A)  # 3
ncol(A)  # 3

การคูณเมทริกซ์: %*%

ตัวดำเนินการ %*% ใช้คูณเมทริกซ์อย่างแท้จริง (ผลคูณจุดของแถวและคอลัมน์) ส่วนตัวดำเนินการ * คูณสมาชิกที่อยู่ตำแหน่งเดียวกัน ซึ่งเป็นข้อผิดพลาดที่พบบ่อย ขนาดต้องเข้ากันได้: (m×n) %*% (n×p) = (m×p)

A <- matrix(c(1, 2, 3, 4), nrow = 2)
B <- matrix(c(5, 6, 7, 8), nrow = 2)

# Element-wise multiplication (NOT matrix mult)
A * B
#      [,1] [,2]
# [1,]    5   21
# [2,]   12   32

# True matrix multiplication
A %*% B
#      [,1] [,2]
# [1,]   19   43
# [2,]   22   50

# Verify: entry [1,1] = 1*5 + 2*6 = 17... wait:
# A[1,] = c(1,3), B[,1] = c(5,6): 1*5 + 3*6 = 23

ทำความเข้าใจผลลัพธ์ของ %*%

มาลองตรวจสอบการคูณเมทริกซ์ด้วยตนเอง สมาชิกตำแหน่ง (i,j) ของ C = A %*% B คือผลคูณจุดของแถวที่ i ของ A กับคอลัมน์ที่ j ของ B: sum(A[i,] * B[,j])

A <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, byrow = TRUE)
B <- matrix(c(7, 8, 9, 10, 11, 12), nrow = 3, byrow = TRUE)
# A is 2x3, B is 3x2 -> result is 2x2
C <- A %*% B
print(C)

# Verify entry C[1,1]:
# row 1 of A: c(1,2,3), col 1 of B: c(7,9,11)
manual_11 <- sum(A[1, ] * B[, 1])
manual_11  # 1*7 + 2*9 + 3*11 = 58
C[1, 1]   # should match

ดีเทอร์มิแนนต์: det()

ดีเทอร์มิแนนต์คือค่าสเกลาร์ที่แสดงตัวประกอบการปรับขนาดของเมทริกซ์ det(A) ใช้คำนวณค่านี้ หาก det(A) == 0 เมทริกซ์จะเป็นเอกฐาน (ไม่มีเมทริกซ์ผกผัน) สำหรับเมทริกซ์ 2×2 จะได้ det = ad - bc

# 2x2 matrix: det = a*d - b*c
A <- matrix(c(3, 2, 1, 4), nrow = 2)
det(A)  # 3*4 - 2*1 = 10

# Singular matrix: det = 0
S <- matrix(c(1, 2, 2, 4), nrow = 2)
det(S)  # 0 -> not invertible

# Larger matrix
B <- matrix(c(2, -1, 0,
             -1,  2, -1,
              0, -1,  2), nrow = 3, byrow = TRUE)
det(B)  # 4

เทรซ: sum(diag())

เทรซของเมทริกซ์คือผลรวมของสมาชิกบนแนวทแยงมุม R ไม่มี trace() ในตัวสำหรับเมทริกซ์ (เป็นฟังก์ชันคนละอย่าง) ดังนั้นให้ใช้ sum(diag(A)) เทรซมีค่าเท่ากับผลรวมของค่าลักษณะเฉพาะ

A <- matrix(c(4, 2, 1,
              3, 5, 0,
              2, 1, 6), nrow = 3, byrow = TRUE)
# Extract diagonal elements
diag(A)  # c(4, 5, 6)

# Trace = sum of diagonal
trace_A <- sum(diag(A))
trace_A  # 15

# Trace = sum of eigenvalues (verify)
eigs <- eigen(A)$values
sum(Re(eigs))  # should also be approximately 15

# trace() in base R is NOT the matrix trace:
# trace(A) # this does something else

crossprod() และ tcrossprod()

crossprod(A, B) คำนวณ t(A) %*% B ได้อย่างมีประสิทธิภาพ ซึ่งเรียกว่าผลคูณไขว้ ส่วน tcrossprod(A, B) คำนวณ A %*% t(B) ทั้งสองฟังก์ชันเร็วกว่าโอเปอเรชันการทรานสโพสอย่างชัดแจ้ง เพราะหลีกเลี่ยงการสร้างเมทริกซ์ที่ทรานสโพสแล้ว

A <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 3)
B <- matrix(c(7, 8, 9, 10, 11, 12), nrow = 3)

# t(A) %*% B  (the slow way)
result1 <- t(A) %*% B

# crossprod(A, B) = t(A) %*% B (faster)
result2 <- crossprod(A, B)
all.equal(result1, result2)  # TRUE

# crossprod(A) = t(A) %*% A
ATA <- crossprod(A)
print(ATA)

# tcrossprod(A, B) = A %*% t(B)
result3 <- tcrossprod(A, B)
all.equal(A %*% t(B), result3)  # TRUE

เมทริกซ์เอกลักษณ์ด้วย diag()

diag(n) สร้างเมทริกซ์เอกลักษณ์ขนาด n×n ส่วน diag(v) เมื่อ v เป็นเวกเตอร์ จะสร้างเมทริกซ์แนวทแยงที่มี v อยู่บนแนวทแยงมุม และ diag(A) เมื่อ A เป็นเมทริกซ์ จะแยกสมาชิกบนแนวทแยงมุมออกมา

# 3x3 identity matrix
I3 <- diag(3)
print(I3)
#      [,1] [,2] [,3]
# [1,]    1    0    0
# [2,]    0    1    0
# [3,]    0    0    1

# A * I = A (identity property)
A <- matrix(c(2, 3, 4, 5), nrow = 2)
all.equal(A %*% diag(2), A)  # TRUE

# Create diagonal matrix from vector
D <- diag(c(2, 5, 10))
print(D)
det(D)  # Product of diagonal: 100

กำลังของเมทริกซ์และการคูณซ้ำ

R ไม่มีตัวดำเนินการยกกำลังเมทริกซ์ในตัว แต่คุณสามารถเขียนขึ้นเองโดยใช้ %*% ในลูป หรือใช้แพ็กเกจ expm กำลังสองของเมทริกซ์ A² = A %*% A เป็นการดำเนินการที่ใช้บ่อย

# Matrix square
A <- matrix(c(1, 1, 1, 0), nrow = 2)
A_sq <- A %*% A
print(A_sq)
# Fibonacci connection: A^n gives Fib numbers!

# Simple matrix power function
mat_pow <- function(M, n) {
  result <- diag(nrow(M))  # start with identity
  for (i in seq_len(n)) result <- result %*% M
  result
}

mat_pow(A, 5)  # A to the 5th power
# [1,]  8  5
# [2,]  5  3

ผลคูณภายนอกด้วย %o%

ผลคูณภายนอก x %o% y สร้างเมทริกซ์ที่สมาชิกตำแหน่ง (i,j) = x[i] * y[j] ซึ่งเทียบเท่ากับ outer(x, y) เหมาะสำหรับสร้างเมทริกซ์ปฏิสัมพันธ์และโครงสร้างทางคณิตศาสตร์บางประเภท

x <- c(1, 2, 3)
y <- c(10, 20)

# Outer product: 3x2 matrix
P <- x %o% y
print(P)
#      [,1] [,2]
# [1,]   10   20
# [2,]   20   40
# [3,]   30   60

# Same as outer(x, y)
identical(P, outer(x, y))  # TRUE

# Outer with custom function
outer(1:3, 1:3, FUN = '+')
#      [,1] [,2] [,3]
# [1,]    2    3    4
# [2,]    3    4    5
# [3,]    4    5    6

คุณสมบัติของดีเทอร์มิแนนต์

คุณสมบัติสำคัญ: det(A %*% B) = det(A) * det(B); det(t(A)) = det(A); det(k*A) = k^n * det(A) สำหรับเมทริกซ์ n×n; การดำเนินการกับแถวจะเปลี่ยนค่า det อย่างเป็นรูปแบบที่คาดการณ์ได้

A <- matrix(c(2, 1, 5, 3), nrow = 2)
B <- matrix(c(4, 2, 1, 6), nrow = 2)

# det(A %*% B) = det(A) * det(B)
det(A %*% B)
det(A) * det(B)

# det(t(A)) = det(A)
det(t(A)); det(A)

# det(2A) = 2^n * det(A) for n=2
det(2 * A); 2^2 * det(A)

# det of upper triangular = product of diagonal
U <- matrix(c(3, 0, 0, 4, 2, 0, 1, 5, 7), nrow = 3, byrow = TRUE)
det(U); prod(diag(U))  # both = 42

ภาคปฏิบัติ: สมการปกติ

ในการถดถอยเชิงเส้น ตัวประมาณค่า OLS แก้สมการ t(X) %*% X %*% beta = t(X) %*% y โดยใช้การคูณเมทริกซ์และเงื่อนไข det(t(X)%*%X) != 0 เพื่อให้แน่ใจว่ามีคำตอบเดียว

# Generate simple regression data
set.seed(42)
n <- 20
x <- runif(n, 0, 10)
y <- 2 + 3 * x + rnorm(n)

# Design matrix with intercept column
X <- cbind(1, x)

# Check det of X'X (should be nonzero)
XtX <- crossprod(X)  # t(X) %*% X
det(XtX)  # large positive value

# Solve normal equations: beta = solve(X'X) %*% X'y
Xty <- crossprod(X, y)  # t(X) %*% y
beta <- solve(XtX) %*% Xty
beta  # Should be close to c(2, 3)

# Compare with lm()
coef(lm(y ~ x))  # same result

ตรวจสอบอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับการดำเนินการกับเมทริกซ์ใน R

สรุป: การดำเนินการกับเมทริกซ์

ประเด็นสำคัญ: ใช้ %*% สำหรับการคูณเมทริกซ์ (ไม่ใช่ *) det(A) ให้ค่าดีเทอร์มิแนนต์ — ถ้าเป็นศูนย์ แสดงว่าเมทริกซ์เป็นเอกฐาน sum(diag(A)) คือเทรซ crossprod(A,B) คำนวณ t(A)%*%B ได้อย่างมีประสิทธิภาพ diag(n) สร้างเมทริกซ์เอกลักษณ์ ส่วน diag(v) สร้างเมทริกซ์แนวทแยง การดำเนินการเหล่านี้เป็นพื้นฐานของการถดถอย, PCA และวิธีเชิงตัวเลขอีกมากมาย

A <- matrix(c(2, 1, 1, 3), nrow = 2)
B <- matrix(c(1, 0, 0, 1), nrow = 2)  # Identity

# Core matrix operations summary:
A %*% B             # matrix multiply -> A
det(A)              # 2*3 - 1*1 = 5
sum(diag(A))        # trace = 2+3 = 5
crossprod(A)        # t(A) %*% A
tcrossprod(A)       # A %*% t(A)
diag(3)             # 3x3 identity
diag(c(1,2,3))      # diagonal matrix
A %o% c(1, 2)       # outer product
เริ่มต้นได้ฟรี

เรียนรู้ R ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
43
บทเรียน
159

คำถามที่พบบ่อย

บทเรียน “การคูณเมทริกซ์และดีเทอร์มิแนนต์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การคูณเมทริกซ์และดีเทอร์มิแนนต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การคูณเมทริกซ์และดีเทอร์มิแนนต์”

ใช้ %*% สำหรับการคูณเมทริกซ์ และ det() สำหรับคำนวณดีเทอร์มิแนนต์ คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การคูณเมทริกซ์และดีเทอร์มิแนนต์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม

ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การคูณเมทริกซ์และดีเทอร์มิแนนต์
  2. การแก้ระบบสมการเชิงเส้นด้วย solve()
  3. ค่าเอกลักษณ์และเวกเตอร์เอกลักษณ์
  4. การแยกเมทริกซ์ SVD, QR และ Cholesky
← กลับไปที่ R Academy