【发布时间】:2012-11-21 01:30:28
【问题描述】:
我正在尝试评估以下积分:
我可以找到以下多项式的面积如下:
pn =
-0.0250 0.0667 0.2500 -0.6000 0
首先使用辛普森法则积分
fn=@(x) exp(polyval(pn,x));
area=quad(fn,-10,10);
fprintf('area evaluated by Simpsons rule : %f \n',area)
结果是area evaluated by Simpsons rule : 11.483072
然后使用以下代码使用伽马函数评估上述公式中的总和
a=pn(1);b=pn(2);c=pn(3);d=pn(4);f=pn(5);
area=0;
result=0;
for n=0:40;
for m=0:40;
for p=0:40;
if(rem(n+p,2)==0)
result=result+ (b^n * c^m * d^p) / ( factorial(n)*factorial(m)*factorial(p) ) *...
gamma( (3*n+2*m+p+1)/4 ) / (-a)^( (3*n+2*m+p+1)/4 );
end
end
end
end
result=result*1/2*exp(f)
这将返回 11.4831。 quad 函数的结果或多或少相同。现在我的问题是我是否有可能摆脱这个嵌套循环,因为我将构建累积分布函数,以便我可以使用逆 CDF 变换从这个分布中获取样本。 (为了构建 cdf,我将使用 gammainc 即不完整的 gamma 函数而不是 gamma)
我需要从可能具有不同多项式系数的密度中进行采样,并且速度是我关心的问题。我已经可以使用蒙特卡洛方法从这样的密度中采样,但我想看看我是否可以使用密度中的精确采样来加快速度。 非常感谢您。
【问题讨论】:
-
请问您对这个可怕、笨拙的分发功能有何需求?
-
请注意,quad 实际上不是辛普森规则,而是其变体,使用自适应方法。此外,这些方案通常使用理查森外推法,使其比辛普森规则更准确。
-
@jerad,这是我的一个研究项目的一小部分:)
-
@woodchips,是的,它使用自适应递归辛普森规则,我只是不想在问题中详细说明。
标签: performance matlab loops integral