Як відремонтувати в 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) має мати додатну довжину
Як виправити: помилка під час вибору невикористаних аргументів

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *