создать матрицу Вандермонда в R - PullRequest
1 голос
/ 14 апреля 2020

Я новичок в R и все еще учусь этому. Я хочу m-by-n матрицу Вандермонда

enter image description here

Я знаю, что это можно сделать с помощью циклов for, чтобы присвоить значения соответствующим индексам в пределах матрица, но она кажется неэффективной, когда m или n велико. Мне нужно несколько советов, чтобы иметь более простой и эффективный способ генерации матрицы Вандермонда? Заранее спасибо за помощь!

Ответы [ 2 ]

3 голосов
/ 14 апреля 2020

Используйте outer как это:

n <- 6; alpha <- 1:5 # test data

outer(alpha, seq(0, n-1), `^`)
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    1    1    1    1    1
## [2,]    1    2    4    8   16   32
## [3,]    1    3    9   27   81  243
## [4,]    1    4   16   64  256 1024
## [5,]    1    5   25  125  625 3125
2 голосов
/ 14 апреля 2020
  • Базовым решением R является определение вашей пользовательской функции vander, где используются sapply + cumprod
vander <- function(alpha,n) t(sapply(alpha, function(k) c(1,cumprod(rep(k,n-1)))))
vm1 <- vander(alpha,n)
  • Другая опция из пакета matrixcalc, в котором vandermonde.matrix может сделать это
vm2 <- matrixcalc::vandermonde.matrix(alpha,n)

Пример

Дано alpha и n, как показано ниже

alpha <- 1:4
n <- 5

тогда вы получите

> vm1
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    1    2    4    8   16
[3,]    1    3    9   27   81
[4,]    1    4   16   64  256
> vm2
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    1    1
[2,]    1    2    4    8   16
[3,]    1    3    9   27   81
[4,]    1    4   16   64  256
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...