2016-04-10 1 views
0

У меня есть матрица 2X2, например A=matrix(1:4,2,2). С этой матрицей я хочу построить матрицу, диагональным элементом которой является A, как показано ниже. Этот пример имеет только три А, но я хотел бы сделать матрицу с п диагональный элемент матрицы АСоздать матрицу с диагональным элементом - это матрица в r

|A 0 0| 
|0 A 0| 
|0 0 A| 
+0

см пакет Matrix ... 'bdiag':' bdiag (респ (список (A), 3)) '' – user20650

+0

п <- 3; nr <- nrow (A); ii <- vapply (1: n, function (x) row (A) + (x - 1L) * nr, integer (nr^2)); \ '[<- \' (матрица (0, nr * n, nr * n), cbind (c (ii), sort (ii)), rep (A, n)) 'будет работать для квадратных матриц. – rawr

ответ

0

Вот рекурсивное решение:

CreateDiag<-function(n){ 
if (n==1) { 
    return(A) 
} else{ 
    A_2<-CreateDiag(n-1) 
    temp1<-cbind(A_2,matrix(0,nrow = nrow(A_2),ncol = ncol(A))) 
    temp2<-rbind(temp1,cbind(matrix(0,nrow = nrow(A),ncol = ncol(A_2)),A)) 
    return(temp2) 
} 
} 

(n это количество блоков, которые вы хотите)

+0

Как только я попытался n = 1600, я получил это сообщение об ошибке –

+0

Ошибка: оценка слишком сложна: бесконечная рекурсия/параметры (выражения =)? –

+0

Знаете ли вы, как это сделать? –

0
> DiagonalMatrix <- function(n, x) `diag<-`(matrix(0, n, n), x) 
> DiagonalMatrix(2, 10) 
    [,1] [,2] 
[1,] 10 0 
[2,] 0 10