我想在Matlab中实现概率测量的密度。为此我将density
定义为函数句柄,使得区间[a,b]上的某个函数f(作为函数句柄给出)的积分可以通过
syms x
int(f(x)*density(x),x,a,b)
当谈到Dirac测量时,问题是
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所定义)?
答案 0 :(得分:1)
没有唯一的,可接受的int定义(delta,0,b)。这里的问题不是你得到错误的"答案是因为你想以某种方式对delta函数强加一个不同的约定而不是Matlab提供的约定。 (他们的选择是可辩护但不是唯一的。)例如,如果你在Wolfram Alpha中评估它,它会给你theta(0) - 它没有特别定义。这里theta是Heaviside函数。如果您想强加自己的约定,请实现自己的delta函数。
修改强>
我看到你写了一个关于这个问题的评论,而我正在写这个答案,所以......请记住,狄拉克测量或狄拉克三角函数根本不是一个函数。您遇到的问题以及下面描述的内容都与尝试将函数形式赋予本身不是函数的内容有关。你在Matlab的框架中没有很好地定义你正在做的事情。
END OF EDIT
为了在上下文中提出有关约定的观点,delta函数可以由不同的属性定义。一个是int(delta(x)f(x),a,b)= f(0)当a< 0<湾这并没有告诉你关于你想要的积分的任何信息。另一个可能导致您从Matlab获得答案的另一个问题是将其定义为限制。一个(但不是唯一的选择)是零均值高斯的极限,因为方差变为0。
如果你想使用约定int(delta(x)f(x),a,b)= f(0)当a< = 0< b,这可能不会给你带来很多麻烦,但请记住,这是一个你选择的比#34;右边的#34;要么 "错误"回答相对于你从Matlab得到的东西。
作为相关注释,在x = 0时对步进函数(Heaviside函数)有类似的选择。有些惯例是(a)未定义,(b)-1,(c)+1和(d)1/2。没有是"错误。"这可能大致对应于Dirac函数的选择,因为Heaviside(大致)是狄拉克的积分。