Создайте симметричную матрицу в R с фиксированными диагональными значениями - PullRequest
0 голосов
/ 16 апреля 2019

Я новичок в R и изучаю. Однако я столкнулся с проблемой. Я должен создать матрицу 4 × 4 со значениями 1, 2, 3 и 4 по диагонали. Пусть значения вне диагонали будут между 0,01 и 0,2. Это просто означает, что большинство недиагональных членов на транспонированных позициях близки по значению

Я попытался создать матрицу из 16 элементов, а затем создать вектор для диагональных значений.

library(Matrix)
library(matlib)

B<-runif(16,0.01,0.02)
Sb<-matrix(B,ncol = 4)
diag(Sb)<-c(1,2,3,4)

Ib<-inv(Sb)
Ib

X<-forceSymmetric(Sb)
Y<-forceSymmetric(Ib)

PM<- Y%*%X
PM

Вывод выглядит так

Matrix created Initially Matrix Sb

Матрица создана Первоначально Matrix Sb

Inverse of Matrix Sb i.e.  Ib

Инверсия матрицы, т.е. Ib

Forced Symmetric Matrix X

Принудительная симметричная матрица X

Forced Symmetric Matrix Y

Принудительная симметричная матрица Y

Final Matrix PM

Финальная матрица PM

Чтобы проверить, является ли матрица симметричной, я пытаюсь использовать свойство, что матрица при умножении на обратную матрицу дает матрицу единства

Я создал обратную матрицу и попытался перемножить исходную матрицу, но результат не похож на матрицу единства. Прикрепление скриншотов для матрицы, которую я получаю

Может кто-нибудь сказать мне, где я делаю неправильно? Заранее спасибо,

...