วิธีการซ่อมแซมใน 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) ต้องมีความยาวเป็นค่าบวก
วิธีแก้ไข: ข้อผิดพลาดในการเลือกอาร์กิวเมนต์ที่ไม่ได้ใช้

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *