我想在Matlab中实现概率度量的密度。为此,我将density
定义为函数句柄,使得某个函数f(给定为函数句柄)在区间a,b上的积分可以通过下式计算
syms x
int(f(x)*density(x),x,a,b)
当涉及到狄拉克度量时,问题是
int(dirac(x),x,0,b)
为所有b>0提供值1/2而不是1。但是,如果我键入
int(dirac(x),x,a,b)
其中,a<0和b>0的返回值应该是1。由于这个原因,乘以2是不够的,因为我希望我的密度对所有间隔a,b都有效。我也不想在积分之前区分不同的情况,以便代码对大类密度保持有效。
有人知道如何在Matlab语言中实现狄拉克概率度量(定义为here)吗?
发布于 2017-02-10 01:58:02
int(增量,0,b)没有唯一的、公认的定义。这里的问题不是你得到了“错误”的答案,而是你想以某种方式强加一个不同于Matlab所提供的增量函数的约定。(他们的选择是有理由的,但不是独一无二的。)例如,如果你在Wolfram Alpha中计算它,它会给你theta(0) -它没有被定义为任何特定的东西。这里的theta是Heaviside函数。如果您想强加您自己的约定,请实现您自己的增量函数。
编辑
在我写这个答案的时候,我看到你对这个问题写了评论,所以....请记住,狄拉克测度或狄拉克增量函数根本不是函数。您遇到的问题,以及下面描述的问题,都与试图为本质上不是函数的东西提供函数形式有关。您正在做的事情在Matlab中的框架中没有得到很好的定义。
编辑结束
为了把关于约定的观点放在上下文中,增量函数可以由不同的属性定义。一种是int(δ(X) f(x),a,b) = f(0),当a<0< b时,这不会告诉你任何关于你想要的积分的信息。另一种方法是将其定义为一个限制,这可能会导致从Matlab得到一个答案。一个(但不是唯一的选择)是当方差变为0时零均值高斯的限制。
如果您想在<= 0< b时使用约定int(δ(X) f(x),a,b) = f(0),这可能不会给您带来太多麻烦,但请记住,相对于从Matlab中获得的答案,它是您选择的一个约定,而不是“正确”或“错误”答案。
作为相关说明,在x=0的阶跃函数(希维赛德函数)上也有类似的选择。有一些约定是(a)未定义的,(b) -1,(c) +1,和(d) 1/2。没有一个是“错误的”。这可能大致对应于狄拉克函数的选择,因为希维赛德函数(大致)是狄拉克函数的积分。
https://stackoverflow.com/questions/42142324
复制相似问题