Создание новой вероятностной матрицы из двух существующих в соответствии с заданными правилами в MATLAB - PullRequest
2 голосов
/ 16 февраля 2012

У меня проблема с моим кодом MATLAB. Позвольте мне сначала дать вам некоторые объяснения по этому вопросу. У меня есть две матрицы, которые представляют вероятности конкретных результатов событий. Первый называется DemandProbabilityMatrix или короче DemandP. Запись (i, j) показывает вероятность того, что элемент i востребован j много раз. Точно так же у нас есть ReturnProbabilityMatrix, то есть ReturnP. Элемент типа (i, j) хранит вероятность того, что элемент i возвращается j много раз. Мы хотим вычислить вероятность чистого спроса из этих двух матриц. Для примера:

DemandP = [.4 .5 .1] ReturnP = [.2 .3 .5]

В этом случае у нас есть 1 элемент, и он может быть запрошен или возвращен 1,2 или 3 раза с заданными вероятностями. Чтобы быть более конкретным, этот предмет будет востребован только один раз с вероятностью .4.

Тогда нам нужно вычислить чистый спрос. В этом случае чистый спрос может быть -2, -1,0,1 или 2. Например, чтобы получить чистый спрос -1, мы можем либо иметь спрос 1 и возврат 2 или спрос 2 и возврат из 3. Таким образом, мы имеем

NetDemandP (1,2) = DemandP (1,1) * ReturnP (1,2) + DemandP (1,2) * ReturnP (1,3).

Таким образом, NetDemandP должен выглядеть так:

NetDemandP = [. 20 .37 .28 .13 .02]

Я могу сделать это с помощью вложенных циклов for, но я пытаюсь найти более быстрый путь. Если это помогает, у меня есть следующие решения для циклов for, где I обозначает количество строк в ReturnP и DemandP, J+1 обозначает количество столбцов в этих матрицах.

NetDemandP=zeros(I,2*J+1);
    for i=1:I
        for j=1:J+1
            for k=1:J+1
                NetDemandP(i,j-k+J+1)=NetDemandP(i,j-k+J+1)+DemandP(i,j)*ReturnP(i,k);
            end
        end
    end

Заранее спасибо

1 Ответ

2 голосов
/ 16 февраля 2012

То, что вы хотите - это свертка ваших функций плотности вероятности.Или, более конкретно, вы хотите свертку плотности спроса с обратным плотности возврата.Это легко достигается в Matlab.Например:

DemandP = [.4 .5 .1];
ReturnP = [.2 .3 .5];
NetDemandP = conv(DemandP,fliplr(ReturnP))

Если вместо векторов у вас есть матрицы, просто выполните итерации по строкам:

for i = 1:size(DemandP,1)
    NetDemandP(i,:) = conv(DemandP(i,:),fliplr(ReturnP(i,:)))
end
...