我有一个代表光电传感器网格的3D数据集,遗憾的是在使用过程中不稳定。我已经估算了探测器运动的pdf,我想找到每个传感器的期望值。因为我不想反映我的pdf(即我想要f(t)而不是f(t-tau))我不认为我可以使用matlab卷积函数。是否有一个功能可以完成我想要的功能,或者我应该继续使用它?我发现了movavg,但它似乎做了别的事情,或者我没有正确地遵循它。
另外,因为我对matlab很新,从C开始,我倾向于使用for循环,我知道这不是使用Matlab的方法。有没有一种简单的方法可以将我的1-D pdf转换为仅在一个轴上运行的3D矩阵(在本例中为z)。像repmat(i,j,pdf)这样的东西。
由于
答案 0 :(得分:1)
pdf的期望值是网格值与相应网格点处的pdf值的乘积的积分。
要在3D网格上集成,请使用Matlab函数triplequad
(doc)。例如,让我们计算预期的x值:
expectedx = triplequad(pdfxfun,xmin,xmax,ymin,ymax,zmin,zmax)
此调用中的 pdfxfun
必须是一个函数句柄,对于它接收的任何(x,y,z)点,它应该返回该点和x的pdf值的乘积。在您的情况下,这可能可以通过对网格数据进行插值来实现。我不知道Matlab中的3D插值函数,所以你可能需要自己解决这个问题。粗略地说,你要做的是:
function pdfvalue = pdfinterpolation(x,y,z,Xgrid,Ygrid,Zgrid,pdfdata)
% compute interpolated pdfvalue at (x,y,z) from griddata and pdfdata
然后,在pdfxfun
的调用中,上面的triplequad
可以定义为anonymous function:
pdfxfun = @(x,y,z) x*pdfinterpolation(x,y,z,myxgrid,myygrid,myzgrid,pdfdata)
expectedx = triplequad(pdfxfun,xmin,xmax,ymin,ymax,zmin,zmax)