Как с помощью WinBUGS вычислить произведение всех значений в одном векторе?

Я пробовал использовать цикл for для того же вектора.

Например:

В R, если A <- [1,2,3,4], prod (A) = 24.

Однако,

В ОШИБКАх, если a <- 2, и для (i in 1: n) {a <- a * A [i]}, этот цикл не может работать, потому что 'a' определено дважды.

1
emperorgoose 4 Окт 2018 в 22:10

1 ответ

Лучший ответ

Привет и добро пожаловать на сайт!

Помните, что BUGS - это декларативный синтаксис, а не язык программирования, поэтому вы не можете перезаписывать значения переменных, как вы ожидаете, на таком языке, как R. Итак, вам нужно создать несколько промежуточных узлов, чтобы делать то, что вы вычисляете.

Если у вас есть следующие данные:

A <- [1,2,3,4]
nA <- 4

Затем вы можете включить в свою модель:

sumlogA[1] <- 0
for(i in 1:nA){
    sumlogA[i+1] <- sumlogA[i] + log(A[i])
}
prodA <- exp(sumlogA[nA+1])

Обратите внимание, что я работаю с логарифмической шкалой, а затем беру экспоненту суммы - это математически эквивалентно произведению, но является гораздо более стабильным в вычислительном отношении вычислением.

Надеюсь, это поможет,

Matt

1
Matt Denwood 9 Окт 2018 в 11:26