используйте код функции для создания матрицы × n - PullRequest
0 голосов
/ 28 февраля 2019

enter image description here Чтобы получить матрицу на рисунке, я попытался написать код функции, чтобы сделать это, но я не могу понять, что делать дальше, а также не уверен, что чтоЯ уже сделал это правильно или нет.

Matrix <- function(n){
  mat1 <- diag(x = ((1:n)-1)/((1:n)+1), n, n)[-1,]
  mat2 <- diag(x = ((1:n)-(1:n)+1)/((1:n)+1), n, n)[,-1]
  mat3 <- diag(x = 1/((1:n)+1), n, n)
}

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Опция:

library(SoDA)

n <- 4
triDiag(diagonal = rep(1/(n+1), n+1), 
        upper = (n:1)/(n+1), 
        lower = (1:n)/(n+1))
#       [,1] [,2] [,3] [,4] [,5]
# [1,]  0.2  0.8  0.0  0.0  0.0
# [2,]  0.2  0.2  0.6  0.0  0.0
# [3,]  0.0  0.4  0.2  0.4  0.0
# [4,]  0.0  0.0  0.6  0.2  0.2
# [5,]  0.0  0.0  0.0  0.8  0.2
0 голосов
/ 28 февраля 2019

Не совсем понятно, чего вы пытаетесь достичь.

Из вашего описания матрица будет иметь n+1 элементов (от 1/(n+1) до n/(n+1)), и я предполагаю, что оставшаяся матрицаразреженный.Это не простая структура для достижения с помощью векторизованных вычислений, но она может быть достигнута в одном цикле for, таким образом, построенном за O(n) время, с учетом матрицы размера n+1.В приведенном ниже коде я представляю пример такого кода.Идея состоит в том, чтобы пройти матрицу в противоположном направлении и назначить каждому только 1 значение типа.

Create_Matrix <- function(n){
  n1 = n + 1 #Last row, avoid n computations 
  n2 = n1 + 1 
  output <- diag(1/n1, nrow = n1, ncol = n1)
  for(i in seq(n)){
    output[i + 1, i] = output[n1 - i, n2 - i] = output[[1]] * i
  }
  output
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...