2015-12-21 99 views
1

我想计算两个三角形随机变量之和,计算两个三角形的随机变量(Matlab的)

P(X1 + X2 < Y)的总和

image

是否有一个在Matlab中快速实现两个三角形随机变量的总和?提前致谢!

编辑:它似乎有可能是一个更简单的方法,如此minitab示范中所示。所以这不是不可能的。它不能解释PDF是如何计算的,遗憾的是。仍在研究如何在matlab中做到这一点。

EDIT2:以下建议,我使用Matlab中conv功能开发两个随机变量之和的PDF:

clear all; 
clc; 


pd1 = makedist('Triangular','a',85,'b',90,'c',100); 
pd2 = makedist('Triangular','a',90,'b',100,'c',110); 

x = linspace(85,290,200); 
x1 = linspace(85,100,200); 
x2 = linspace(90,110,200); 
pdf1 = pdf(pd1,x1); 
pdf2 = pdf(pd2,x2); 

z = median(diff(x))*conv(pdf1,pdf2,'same'); 

p1 = trapz(x1,pdf1) %probability P(x1<y) 
p2 = trapz(x2,pdf2) %probability P(x2<y) 
p12 = trapz(x,z)  %probability P(x1+x2 <y) 

hold on; 
plot(x1,pdf1) %plot pdf of dist. x1 
plot(x2,pdf2) %plot pdf of dist. x2 
plot(x,z)  %plot pdf of x1+x2 
hold off; 

然而这段代码有两个问题:

  1. PDF X1 + X2的积分远高于1.
  2. X1 + X2的PDF根据x的范围而变化很大。直观地说,如果X1 + X2大于210(两个独立三角分布的上限“c”之和,100 + 110),则不应该P(X1 + X2 < 210)等于1?此外,由于下限“a”是85和90,所以P(X1 + X2 <85)= 0?
+0

要执行元素明智乘法,您需要在两个pdf之间使用'。*'。所以'fun = @(x)pdf(pd2,x)。* pdf(pd1,yx);' – schvaba986

+0

关于术语,您定义的概率函数取决于一个参数,所以我不会称之为'联合'可能性。 –

+0

因主题错误理解而编辑。抱歉!这个问题现在恰当地表达了。 –

回答

1

自变量总和的pdf是变量pdf的卷积。所以你需要计算两个变量与trianular pdf的卷积。三角形是分段线性的,所以卷积将是分段二次的。

有几种方法可以解决这个问题。如果数值结果是可接受的:离散化pdf并计算离散化pdf的卷积。我相信在Matlab中有一个函数conv。如果没有,你可以进行快速傅里叶变换(通过fft),逐点计算产品,然后进行逆变换(如果我没有记错,则为ifft),因为fft(卷积(f,g))= fft(f)fft (G)。如果您使用convfft,则需要注意标准化。

如果你必须有一个确切的结果,卷积只是一个积分,如果你小心集成的限制,你可以手工计算出来。我不知道Matlab符号工具箱是否可用,如果是这样,我不知道它是否可以处理分段定义的函数的积分。

+0

感谢您的指导。看起来'conv'是在Matlab中去解决这个问题的正确方法。我已更新我的问题以显示迄今为止的进展情况。 –

+0

看起来你已经获得了大部分解决方案。为了确保x,y和x + y的pdf全部集成到1,您必须小心pdf的规范化。此外,请注意x + y的支持(非零密度)是间隔(min(x)+ min(y),max(x)+ max(y)),你必须映射到'conv'的结果。具体来说,'conv'结果的第一个元素对应于y的x + first元素的第一个元素,同样最后一个元素对应于y的x + last的最后一个元素。长度(x)+长度(y) - “conv”结果中有1个元素。 –

1

下面是未来用户的正确实施。非常感谢Robert Dodier的指导。

clear all; 
clc; 

min1 = 85; 
max1 = 100; 
min2 = 90; 
max2 = 110; 
y = 210; 

pd1 = makedist('Triangular','a',min1,'b',90,'c',max1); 
pd2 = makedist('Triangular','a',min2,'b',100,'c',max2); 

dx = 0.01; % to ensure constant spacing 
x1 = min1:dx:max1; % Could include some of the region where 
x2 = min2:dx:max2; % the pdf is 0, but we don't have to. 

x12 = linspace(... 
    x1(1) + x2(1) , ... 
    x1(end) + x2(end) , ... 
    length(x1)+length(x2)-1); 
[c,index] = min(abs(x12-y)); 
x_short = linspace(min1+min2,x12(index),index); 

pdf1 = pdf(pd1,x1); 
pdf2 = pdf(pd2,x2); 
pdf12 = conv(pdf1,pdf2)*dx; 

zz = pdf12(1:index); 
zz(index) = 0; 

p1 = trapz(x1,pdf1) 
p2 = trapz(x2,pdf2) 
p12 = trapz(x_short,zz) 

plot(x1,pdf1,x2,pdf2,x12,pdf12) 
hold on; 
fill(x_short,zz,'blue')  % plot x1+x2 
hold off;