القيم الذاتية والمتجهات الذاتية
احسب التحليل إلى قيم ذاتية باستخدام eigen() وفسّر النتائج
القيم الذاتية والمتجهات الذاتية درس مجاني في R Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.
ما القيم الذاتية؟
المتجه الذاتي v للمصفوفة A هو متجه غير صفري لا يتغير إلا مقياسه (ولا يدور) عند ضربه في A: Av = λv. أما العدد λ فهو القيمة الذاتية. وتكشف هذه القيم اتجاهات التمدد الجوهرية للمصفوفة.
# Intuition: A simple scaling matrix
A <- matrix(c(3, 0,
0, 2), nrow = 2, byrow = TRUE)
# The eigenvectors are the standard basis vectors
# A * c(1,0) = 3 * c(1,0) -> eigenvalue 3
# A * c(0,1) = 2 * c(0,1) -> eigenvalue 2
v1 <- c(1, 0)
A %*% v1 # c(3, 0) = 3 * v1
v2 <- c(0, 1)
A %*% v2 # c(0, 2) = 2 * v2
cat('Eigenvalues of a diagonal matrix are its diagonal entries')eigen(): حساب القيم الذاتية
تعيد eigen(A) قائمةً تتضمن $values (القيم الذاتية مرتبة تنازليًا حسب المقدار) و$vectors (مصفوفة المتجهات الذاتية بوصفها أعمدة). وتُطبَّع المتجهات الذاتية بحيث يكون طولها واحدًا.
A <- matrix(c(4, 1,
2, 3), nrow = 2, byrow = TRUE)
# Compute eigendecomposition
eig <- eigen(A)
# Eigenvalues
eig$values
# [1] 5 2 (descending order)
# Eigenvectors (columns)
eig$vectors
# [,1] [,2]
# [1,] 0.7071068 -0.4472136
# [2,] 0.7071068 0.8944272
cat('Each column is one eigenvector (unit length)')التحقّق من Av = lambda * v
للتحقّق، افحص أن A %*% v - lambda * v يساوي الصفر تقريبًا. وبسبب الحساب بالفاصلة العائمة، استخدم max(abs(...)) وتحقّق من قربه من إبسيلون الآلة بدلًا من اختبار المساواة التامة.
A <- matrix(c(4, 1,
2, 3), nrow = 2, byrow = TRUE)
eig <- eigen(A)
lambda1 <- eig$values[1] # 5
v1 <- eig$vectors[, 1]
# Verify: Av - lambda*v should be ~0
residual <- A %*% v1 - lambda1 * v1
max(abs(residual)) # ~ 1e-16
# Check all eigenpairs at once
# A V = V diag(lambda) where V = eigenvectors matrix
V <- eig$vectors
Lambda <- diag(eig$values)
err <- A %*% V - V %*% Lambda
max(abs(err)) # near zeroالمصفوفات المتماثلة: قيم ذاتية حقيقية
تمتلك المصفوفات المتماثلة (A = t(A)) دائمًا قيمًا ذاتية حقيقية ومتجهات ذاتية متعامدة. وهذه هي مبرهنة الطيف، وهي أساسية في الإحصاء (فمصفوفات التغاير متماثلة وموجبة شبه معرّفة).
# Symmetric matrix
S <- matrix(c(4, 2, 2,
2, 3, 1,
2, 1, 5), nrow = 3, byrow = TRUE)
# All symmetric: A = t(A)
all.equal(S, t(S)) # TRUE
# Eigenvalues are real
eig <- eigen(S)
eig$values # All real numbers
Im(eig$values) # All zero
# Eigenvectors are orthogonal: V'V = I
V <- eig$vectors
round(t(V) %*% V, 10) # Identity matrix
cat('Symmetric -> real eigenvalues, orthogonal eigenvectors')المصفوفات غير المتماثلة: قيم ذاتية مركبة
قد تمتلك المصفوفات غير المتماثلة قيمًا ذاتية مركبة (في أزواج من المرافق المركب). وتعيدها R كأعداد مركبة. ويتحكم الجزء الحقيقي في النمو أو الاضمحلال، بينما يتحكم الجزء التخيلي في الدوران أو التذبذب.
# Rotation-like matrix -> complex eigenvalues
A <- matrix(c(0, -1,
1, 0), nrow = 2, byrow = TRUE)
# This is a 90-degree rotation matrix
eig <- eigen(A)
eig$values
# [1] 0+1i 0-1i (pure imaginary!)
# Real part: zero -> neither grows nor decays
Re(eig$values) # 0 0
# Imaginary part: indicates rotation
Im(eig$values) # 1 -1
# Another example: stable spiral
B <- matrix(c(-1, -2,
2, -1), nrow = 2, byrow = TRUE)
eigen(B)$values # -1 +/- 2iتحليل القيم الذاتية A = VLV^-1
يمكن كتابة المصفوفة القابلة للتحليل قطريًا A على الصورة A = V Λ V⁻¹، حيث إن V مصفوفة المتجهات الذاتية وΛ = diag(eigenvalues). ويتيح هذا التحليل حساب قوى المصفوفة: A^n = V Λ^n V⁻¹.
A <- matrix(c(4, 1,
2, 3), nrow = 2, byrow = TRUE)
eig <- eigen(A)
V <- eig$vectors
Lambda <- diag(eig$values)
# Reconstruct A = V %*% Lambda %*% solve(V)
A_reconstructed <- V %*% Lambda %*% solve(V)
all.equal(A, A_reconstructed) # TRUE
# Matrix power A^3 using eigendecomposition
A_cubed_eig <- V %*% diag(eig$values^3) %*% solve(V)
A_cubed_direct <- A %*% A %*% A
all.equal(Re(A_cubed_eig), A_cubed_direct) # TRUEمفهوم PCA عبر قيم مصفوفة التغاير الذاتية
يستخدم تحليل المكوّنات الرئيسية (PCA) التحليل الذاتي لمصفوفة التغاير. وتعطي المتجهات الذاتية اتجاهات التباين الأقصى (المكوّنات الرئيسية)، بينما تعطي القيم الذاتية مقدار التباين على كل اتجاه.
set.seed(42)
# Correlated 2D data
x1 <- rnorm(100)
x2 <- 0.8 * x1 + 0.6 * rnorm(100)
X <- cbind(x1, x2)
# Covariance matrix
C <- cov(X)
print(round(C, 3))
# Eigendecomposition of covariance matrix
eig <- eigen(C)
cat('Eigenvalues (variance explained):\n')
print(eig$values)
cat('PC1 direction:\n')
print(eig$vectors[, 1])
# Variance explained by PC1
prop_var <- eig$values[1] / sum(eig$values)
cat('PC1 explains:', round(100 * prop_var, 1), '%')نصف القطر الطيفي
نصف القطر الطيفي ρ(A) = max|λᵢ| هو أكبر قيمة ذاتية مطلقة. ويحدد الاستقرار في الخوارزميات التكرارية: فإذا كان ρ < 1 تقاربت التكرارات، وإذا كان ρ > 1 تباعدت.
spectral_radius <- function(A) {
max(Mod(eigen(A)$values))
}
# Convergent matrix: spectral radius < 1
A_conv <- matrix(c(0.5, 0.2,
0.1, 0.3), nrow = 2, byrow = TRUE)
spectral_radius(A_conv) # < 1 -> iterations converge
# Divergent matrix: spectral radius > 1
A_div <- matrix(c(2, 0.5,
0.3, 1.5), nrow = 2, byrow = TRUE)
spectral_radius(A_div) # > 1 -> iterations diverge
# For positive definite A, spectral radius = max eigenvalue
cat('Spectral radius determines iterative stability')المحدِّد والأثر عبر القيم الذاتية
يساوي المحدِّد حاصل ضرب القيم الذاتية، بينما يساوي الأثر مجموعها. وتربط هذه العلاقات الخصائص الجبرية بالقيم الذاتية، كما توفر اختبارات معقولية لنتائج eigen() التي تحصل عليها.
A <- matrix(c(5, 2,
1, 4), nrow = 2, byrow = TRUE)
eig_vals <- eigen(A)$values
# det(A) = product of eigenvalues
det(A)
prod(eig_vals) # Same!
# trace = sum of eigenvalues
sum(diag(A))
sum(eig_vals) # Same!
# For numeric precision, use Re() on complex
A2 <- matrix(c(3, -1, 2, 5), nrow = 2, byrow = TRUE)
ev <- eigen(A2)$values
all.equal(det(A2), prod(Re(ev)), tolerance = 1e-10)
all.equal(sum(diag(A2)), sum(Re(ev)), tolerance = 1e-10)المصفوفات الموجبة التعيين
تكون المصفوفة المتماثلة موجبة التعيين (PD) إذا كانت جميع قيمها الذاتية موجبة. أما مصفوفات التغاير فهي موجبة شبه التعيين (القيم الذاتية ≥ 0). والمصفوفات موجبة التعيين قابلة للعكس ولها تحليلات تشولسكي.
# Check positive definiteness
is_positive_definite <- function(A) {
# Symmetric check
if (!isTRUE(all.equal(A, t(A)))) return(FALSE)
all(eigen(A)$values > 0)
}
# Positive definite covariance matrix
S <- matrix(c(4, 2,
2, 3), nrow = 2, byrow = TRUE)
is_positive_definite(S) # TRUE
eigen(S)$values # Both positive
# Not PD (one negative eigenvalue)
Q <- matrix(c(1, 3,
3, 2), nrow = 2, byrow = TRUE)
is_positive_definite(Q) # FALSE
eigen(Q)$values # One negativeتكرار القوة لإيجاد القيمة الذاتية الغالبة
يكون حساب جميع القيم الذاتية مكلفًا للمصفوفات الكبيرة. ويجد تكرار القوة أكبر قيمة ذاتية تكراريًا، وهو أساس خوارزمية PageRank من Google. اضرب في A مرارًا، ثم طبّع الناتج.
# Power iteration: finds dominant eigenvalue
power_iteration <- function(A, tol = 1e-10, max_iter = 1000) {
n <- nrow(A)
v <- rnorm(n); v <- v / sqrt(sum(v^2)) # random unit vector
lambda_old <- 0
for (i in seq_len(max_iter)) {
w <- A %*% v
lambda <- max(abs(w))
v <- w / lambda
if (abs(lambda - lambda_old) < tol) break
lambda_old <- lambda
}
list(value = lambda, vector = v)
}
A <- matrix(c(4, 1, 2, 3), nrow = 2, byrow = TRUE)
result <- power_iteration(A)
result$value # Should be ~5 (dominant eigenvalue)
eigen(A)$values[1] # Compareتحقّق سريع
اختبر مدى فهمك للقيم والمتجهات الذاتية في R.
مراجعة: القيم والمتجهات الذاتية
أهم النقاط: تعيد eigen(A) كلًا من $values و$vectors. تحقّق باستخدام A %*% v - lambda*v ≈ 0. للمصفوفات المتماثلة قيم ذاتية حقيقية ومتجهات ذاتية متعامدة. وقد تمتلك المصفوفات غير المتماثلة قيمًا ذاتية مركبة. det(A) = حاصل ضرب القيم الذاتية، والأثر = مجموعها. يحلل PCA مصفوفة التغاير. المصفوفة موجبة التعيين ↔ جميع القيم الذاتية > 0.
A <- matrix(c(6, 2, 2, 3), nrow = 2)
eig <- eigen(A)
# Key eigen operations:
eig$values # eigenvalues
eig$vectors # eigenvectors (columns)
# Verify Av = lambda*v
v1 <- eig$vectors[, 1]
max(abs(A %*% v1 - eig$values[1] * v1)) # ~0
# Properties
all.equal(det(A), prod(eig$values)) # TRUE
all.equal(sum(diag(A)), sum(eig$values)) # TRUE
# Reconstruct A = V Lambda V^{-1}
V <- eig$vectors
all.equal(A, Re(V %*% diag(eig$values) %*% solve(V)))الأسئلة الشائعة
هل درس «القيم الذاتية والمتجهات الذاتية» مجاني؟
نعم — نص درس «القيم الذاتية والمتجهات الذاتية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «القيم الذاتية والمتجهات الذاتية»؟
احسب التحليل إلى قيم ذاتية باستخدام eigen() وفسّر النتائج تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «القيم الذاتية والمتجهات الذاتية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- ضرب المصفوفات والمحددات
- حل الأنظمة الخطية باستخدام solve()
- القيم الذاتية والمتجهات الذاتية
- تحليلات SVD وQR وتشولسكي