Построение производных нормального распределения / гауссианы в R

При компиляции шаблоны должны быть созданы экземплярами , прежде чем их компилировать в объектный код. Это создание может быть достигнуто только в том случае, если известны аргументы шаблона. Теперь представьте сценарий, в котором функция шаблона объявлена ​​в a.h, определенная в a.cpp и используемая в b.cpp. Когда компилируется a.cpp, не обязательно известно, что для предстоящей компиляции b.cpp потребуется экземпляр шаблона, не говоря уже о том, какой конкретный экземпляр это будет.

Можно утверждать, что компиляторы можно сделать умнее, чтобы «смотреть вперед» для всех применений шаблона, но я уверен, что это было бы нелегко создавать рекурсивные или другие сложные сценарии. AFAIK, компиляторы этого не делают. Как заметил Антон, некоторые компиляторы поддерживают явные декларации экспорта экземпляров шаблонов, но не все компиляторы поддерживают его (пока?).

0
задан user-2147482565 16 January 2019 в 10:31
поделиться

2 ответа

Это работает, если вы используете другую формулу, например, попробуйте это:

different_norm <- function(x, mean=2, sd=2) dnorm((x-mean)/sd, 0, 1)/sd

Если вы видите раздел General normal distribution в https://en.wikipedia.org/wiki/Normal_distribution#Alternative_parameterizations , то его повторная параметризация нормальная нормальная.

Я предполагаю, что проблема в том, что параметры mean и sd не появляются в формуле, а дополнительные аргументы из dnorm почему-то не передаются

.
0
ответ дан Jonny Phelps 16 January 2019 в 10:31
поделиться

Вы можете просто вычислить производные и записать их самостоятельно

dnorm_deriv1 <- function(x, mean = 0, sd = 1) {
  return(-((x-mean)/(sd^2))*dnorm(x, mean, sd))
} 

dnorm_deriv2 <- function(x, mean = 0, sd = 1) {
  return((((x-mean)^2) / (sd^4))*dnorm(x, mean, sd) 
          - (1/sd^2)*dnorm(x, mean, sd))
}

curve(dnorm, -4, 4, ylim = c(-0.4, 0.4), col = 'blue')
curve(dnorm_deriv1, -4, 4, add = T, col = 'red')
curve(dnorm_deriv2, -4, 4, add = T, col = ' green')
abline(v=0, h=0)

curve(dnorm(x, 2, 2), -4, 8, ylim = c(-0.1, 0.2), col = 'blue')
curve(dnorm_deriv1(x, 2, 2), -4, 8, add = T, col = 'red')
curve(dnorm_deriv2(x, 2, 2), -4, 8, add = T, col = ' green')
abline(v=2, h=0)

enter image description here

0
ответ дан user-2147482565 16 January 2019 в 10:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: