كيفية الإصلاح في r: النظام مفرد تمامًا
الخطأ الذي قد تواجهه في R هو:
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
يحدث هذا الخطأ عندما تحاول استخدام الدالة solve() ، لكن المصفوفة التي تعمل بها هي مصفوفة فردية لا تحتوي على معكوس مصفوفة.
يشرح هذا البرنامج التعليمي كيفية حل هذا الخطأ عمليًا.
كيفية إعادة إنتاج الخطأ
لنفترض أننا أنشأنا المصفوفة التالية في R:
#create singular matrix
mat <- matrix(c(1, 1, 1, 1), ncol= 2 , nrow= 2 )
#view matrix
mast
[,1] [,2]
[1,] 1 1
[2,] 1 1
لنفترض الآن أننا نحاول استخدام الدالة solve() لحساب معكوس المصفوفة:
#attempt to invert matrix
solve(mat)
Error in solve.default(mat):
Lapack routine dgesv: system is exactly singular: U[2,2] = 0
لقد تلقينا خطأ لأن المصفوفة التي أنشأناها لا تحتوي على مصفوفة معكوسة.
ملاحظة : راجع هذه الصفحة من Wolfram MathWorld التي تعرض 10 أمثلة مختلفة للمصفوفات التي لا تحتوي على مصفوفة معكوسة.
بحكم التعريف، تكون المصفوفة فردية إذا كان لها محدد صفري.
يمكنك استخدام الدالة det() لحساب محدد مصفوفة معينة قبل محاولة عكسها:
#calculate determinant of matrix
det(mat)
[1] 0
محدد المصفوفة لدينا هو صفر، وهو ما يفسر سبب حدوث خطأ.
كيفية اصلاح الخطأ
الطريقة الوحيدة لتصحيح هذا الخطأ هي ببساطة إنشاء مصفوفة غير مفردة.
على سبيل المثال، لنفترض أننا نستخدم الدالة solve() لعكس المصفوفة التالية في R:
#create matrix that is not singular
mat <- matrix(c(1, 7, 4, 2), ncol= 2 , nrow= 2 )
#view matrix
mast
[,1] [,2]
[1,] 1 4
[2,] 7 2
#calculate determinant of matrix
det(mat)
[1] -26
#invert matrix
solve(mat)
[,1] [,2]
[1,] -0.07692308 0.15384615
[2,] 0.26923077 -0.03846154
لا نتلقى أي أخطاء عند قلب المصفوفة لأن المصفوفة ليست مفردة.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية إصلاح الأخطاء الشائعة الأخرى في R:
كيفية الإصلاح: الشرط له طول > 1 وسيتم استخدام العنصر الأول فقط
كيفية الإصلاح: الوسيطة غير الرقمية للمشغل الثنائي
كيفية الإصلاح: يجب أن يكون لـ dim(X) طول موجب
كيفية الإصلاح: خطأ في اختيار الوسائط غير المستخدمة