2017-02-09 227 views
0

我想在Matlab中实现概率测度的密度。对于我定义density作为功能句柄使得一些函数f(给定为一个功能句柄)在区间[A,B]可以通过Matlab中的狄拉克概率测度

syms x 
int(f(x)*density(x),x,a,b) 

来计算的积分当谈到狄拉克量度问题是

int(dirac(x),x,0,b) 

为所有b> 0提供值1/2而不是1。然而,如果I型

int(dirac(x),x,a,b) 

其中< 0且b> 0,返回值是1,因为它应该的。出于这个原因,乘以2将不够,因为我希望我的密度对所有间隔[a,b]有效。我还不想在集成之前区分不同的情况,以便代码对于大量密度类型保持有效。

有人知道如何在Matlab中实现狄拉克概率测量(定义为here)吗?

+0

狄拉克分布的所有权重集中在'0'。所以我不确定如何在积分下限恰好为0时定义积分。你不能用'-inf'作为较低的积分限制吗?或者可能使用一个限制:'limit(int(dirac(x),x,a,b),a,0,'left')'does give'1' –

+0

@Luis Mendo在我的问题中,我指定了集成被关闭。因此,dirac的积分可以很好地定义(只有当0被包含在intervall中时才计数)。极限解决方案很好,但由于我想计算不同密度的积分,我不想总是计算极限(如果没有人提出更好的方案,我可能会采用这种解决方案)。 –

+1

让我略微撤退并采取不同的方法。 int(delta,0,b)没有唯一的,可接受的定义。这里的问题并不在于你得到了“错误的”答案,因为你希望以某种方式对δ函数施加不同的约定而不是由Matlab提供的。 (他们的选择是可以防御的,但并不是唯一的。)例如,如果你在Wolfram Alpha中评估它,它会给你theta(0) - 这不是特别定义的。这里theta是Heaviside函数。如果你想在这里施加你自己的约定,实现你自己的delta函数。 – Brick

回答

1

int(delta,0,b)没有唯一的,可接受的定义。这里的问题并不在于你得到了“错误的”答案,因为你希望以某种方式对δ函数施加不同的约定而不是由Matlab提供的。 (他们的选择是可以防御的,但并不是唯一的。)例如,如果你在Wolfram Alpha中评估它,它会给你theta(0) - 这不是特别定义的。这里theta是Heaviside函数。如果你想强加你自己的约定,实现你自己的delta函数。

编辑

我看你写的关于这个问题的评论,而我在写这个答案,所以....记住,狄拉克措施或狄拉克函数不是一个函数在所有。您遇到的问题以及下面所述的问题都涉及尝试将功能表单赋予某种本质上不是功能的东西。你正在做的事情在Matlab中没有很好的定义。 EDIT

作者

END为了把有关在上下文约定点,增量功能可以通过不同的属性来定义。一个是int(delta(x)f(x),a,b)= f(0),当b为0时。这并没有告诉你任何关于你想要的积分。另一个可能会导致从Matlab获得答案的另一个问题是将其定义为极限。一个(但不是唯一的选择)是当方差变为0时零均值高斯的极限。

如果你想使用一个约定int(delta(x)f(x),a,b) = f(0)当一个< = 0 < b,这可能不会给你带来太多麻烦,但是请记住,这是一个你选择的不仅仅是“正确”或者“错误”答案相关的约定到你从Matlab获得的东西。

如相关说明,在x = 0时对阶跃函数(Heaviside函数)也有类似的选择。 (a)未定义,(b)-1,(c)+1和(d)1/2的约定。没有一个是“错误的”。这大概对应于Dirac函数的选择,因为Heaviside(大致)是Dirac的积分。

+0

这不是我的问题(它代表最后一行)的答案。用概率度量的dirac度量是唯一定义的([here](https://en.wikipedia.org/wiki/Dirac_measure))。我编辑了我的问题,使其更加精确。 –

+1

@ Vincent.W。我再试一次,然后我出去了。您所引用的定义根本不提供函数的定义。它是* something *数学的唯一定义,但某件事不是函数。 Matlab中的框架需要一个函数。你想要的东西不存在。 – Brick

+2

@ Vincent.W。也许我可以用下面的语句来重新说明布鲁克的评论:你想要的是与狄拉克测量相关的积分。 Matlab只考虑Lebesgue测度。除非考虑分布(而不仅仅是函数),否则狄拉克三角洲相对于勒贝格测度的积分不存在。所以你必须能够处理分布或任意度量,这些现成的Matlab函数都不可能实现这些。 –