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

根据MATLAB中预先指定的规则,从现有的两个概率矩阵中创建一个新的概率矩阵,matlab,matrix,probability,multiplication,Matlab,Matrix,Probability,Multiplication,我的MATLAB代码中有一个问题。让我先给你解释一下这个问题。我有两个矩阵,它们代表事件特定结果的概率。第一种称为DemandProbabilityMatrix,简称DemandDP。条目(i,j)表示项目i被要求j多次的概率。类似地,我们有一个ReturnProbabilityMatrix,即ReturnP。类型(i,j)的元素存储项目i多次返回j的概率。 我们想用这两个矩阵来计算净需求概率。例如: DemandP=[4.5.1] ReturnP=[.2.3.5] 在这种情况下,我们有一个项目

我的MATLAB代码中有一个问题。让我先给你解释一下这个问题。我有两个矩阵,它们代表事件特定结果的概率。第一种称为DemandProbabilityMatrix,简称DemandDP。条目(i,j)表示项目i被要求j多次的概率。类似地,我们有一个ReturnProbabilityMatrix,即ReturnP。类型(i,j)的元素存储项目i多次返回j的概率。 我们想用这两个矩阵来计算净需求概率。例如:

DemandP=[4.5.1] ReturnP=[.2.3.5]

在这种情况下,我们有一个项目,它可以被要求或返回1,2或3次与给定的概率。更具体地说,该商品很可能只需要一次

然后我们需要计算净需求。在这种情况下,净需求可以是-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
提前感谢

您需要的是概率密度函数的卷积。或者,更具体地说,您需要需求密度与回报密度的相反方向的卷积。这在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

我认为这是一个完美的答案!工作相当快,而且写得非常整洁!谢谢克里斯,谢谢你。