根据MATLAB中预先规定的规则,从两个现有的概率矩阵中创建一个新的概率矩阵

时间:2012-02-16 05:44:24

标签: matlab matrix probability multiplication

我的MATLAB代码有问题。我先给大家解释一下这个问题。我有两个矩阵,代表事件特定结果的概率。第一个称为DemandProbabilityMatrix或简称DemandP。条目(i,j)表示多次要求项目i的概率。同样,我们有一个ReturnProbabilityMatrix,即ReturnP。类型(i,j)的元素存储项目i多次返回的概率。 我们想要计算这两个矩阵中的净需求概率。举个例子:

  

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

在这种情况下,我们有1个项目,可以按给定的概率要求或返回1,2或3次。更具体地说,该项目只需要一次概率.4。

然后我们需要计算净需求。在这种情况下,净需求可以是-2,-1,0,1或2.例如,为了获得-1的净需求,我们可以要求1,返回2或要求2并返回这样我们就有了

  

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表示ReturnPDemandP中的行数,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 个答案:

答案 0 :(得分:2)

您想要的是概率密度函数的卷积。或者,更具体地说,您希望将需求密度与返回密度的 reverse 进行卷积。这在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