2015-12-21 102 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;