Как векторизовать функцию, которая уже принимает вектор? - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь построить контур функции Растригин в R.

Для этого я создаю столбик с тремя столбцами, x, y и value.Однако, поскольку сигнатура функции TF_rastrigin(x), где x - входной вектор, у меня возникают проблемы с правильным вычислением значений.Я хочу тиббл, который выглядит так:

x        y       value
-5.12    5.12    57.84943
-5.11    5.11    56.81394
...

Чтобы передать его в ggplot.Мой текущий код выглядит так:

install.packages("TestFunctions")
require(TestFunctions)
dim <- 100
mw <- tibble(x = seq(0, pi, length.out = dim), y = seq(0, pi, length.out = dim), value = TF_rastrigin(c(x,y)))
ggplot(mw, aes(x = x, y = y ,z = value)) + 
  geom_raster(aes(fill = value)) + 
  geom_contour()

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

1 Ответ

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

Во-первых, вы хотите, чтобы x и y определялись по-разному: в настоящее время столбцы x и y совпадают, в то время как вам нужны все возможные комбинации их значений.Для этого мы можем использовать expand.grid.Что касается функции Растригина, мы можем просто использовать apply для перехода строка за строкой и получать значение функции в каждой точке отдельно:

dim <- 100
mw <- expand.grid(x = seq(0, pi, length.out = dim),
                  y = seq(0, pi, length.out = dim))
mw$value <- apply(mw, 1, TF_rastrigin)
ggplot(mw, aes(x = x, y = y ,z = value)) + 
  geom_raster(aes(fill = value)) + geom_contour()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...