【问题标题】:calculating sum of two triangular random variables (Matlab)计算两个三角随机变量的总和(Matlab)
【发布时间】:2016-03-27 07:54:36
【问题描述】:

我想计算两个三角随机变量之和,

P(x1+x2

有没有更快的方法在 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. X1+X2 的 PDF 积分远高于 1。
  2. X1+X2 的 PDF 变化很大,具体取决于 x 的范围。直观地说,如果 X1+X2 大于 210(两个独立三角形分布的上限“c”之和,100 + 110),那么 P(X1+X2

【问题讨论】:

  • 要执行元素乘法,您需要在两个 pdf 之间添加一个 .*。所以fun = @(x) pdf(pd2,x).*pdf(pd1,y-x);
  • 关于术语,您定义的概率函数取决于单个参数,因此我不会将其称为“联合”概率。
  • 因对主题的错误理解而编辑。对不起!现在问题的措辞正确。

标签: matlab statistics probability convolution probability-distribution


【解决方案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;

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 感谢您的指导。看来conv 是在 Matlab 中解决此问题的正确方法。我已经更新了我的问题以显示到目前为止的进展。
    • 看起来您已经掌握了大部分解决方案。您必须小心 pdf 的规范化,以确保 x、y 和 x + y 的 pdf 都积分为 1。另外,请注意 x + y 的支持(非零密度)是区间(min(x) + min(y), max(x) + max(y)) 您必须将其映射到来自conv 的结果。具体来说,conv 结果的第一个元素对应于 x 的第一个元素 + y 的第一个元素,同样最后一个元素对应于 x 的最后一个 + y 的最后一个元素。 conv 结果中有 length(x) + length(y) - 1 个元素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2017-03-20
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    相关资源
    最近更新 更多