【问题标题】:numerical integration of MATLAB on my function give me many numbers not a single numberMATLAB 在我的函数上的数值积分给了我很多数字而不是一个数字
【发布时间】:2015-10-16 08:08:15
【问题描述】:

MATLAB 在我的函数上的数值积分给了我很多数字而不是一个数字。我不擅长 MatLaB,所以我不知道原因。有没有人可以帮助我?

这是我的职责。

function [ y ] = SucP( l,a,P,D,r,th );

d=2./a;
Ehd=integral(@(x)x.^d.*exp(-x),0,inf);
gam=gamma(1-d);
C1=1./(1+th.*(r/D).^a);
C2=1./(1+th.*P.*(r/D).^a);
hypgeo1=hypergeom([1,2],[2-d],th.*(r./D).^a.*C1);
hypgeo2=hypergeom([1,2],[2-d],th.*P.*(r./D).^a.*C2);
y=exp(-l.*pi.*(th).^d.*r.^2.*P.^d.*Ehd.*gam-C1+C2+th./(1-d).*r.^2.*(r./D).^(a-2).*(C1.^2.*hypgeo1-P.^d.*C2.^2.*hypgeo2));

end

我想整合

fun=@(l,a,P,D,r,z)SucP(l,a,P,D,r,2.^z-1);
y=integral(@(z)fun(l,a,P,D,r,z),0,inf);

但是这种整合给了我以下结果。

Columns 1 through 6

   0.999869167524854   0.998589370430984   0.994817933624792   0.987704371328770   0.976976845412355   0.962748430805626

  Columns 7 through 12

   0.945394762911001   0.925627034788835   0.904532141053543   0.883378353636190   0.863363119639727   0.845589211136565 ....

Columns 145 through 150

             NaN                 NaN                 NaN                 NaN                 NaN                 NaN


ans =

   NaN

有没有人可以帮助我?

【问题讨论】:

  • 看起来您的输出代表了累积分布函数的值,取自随机变量的各种值。如果像我认为的那样,您正在尝试集成概率密度函数,那么您正在寻找的值就是您在输出中获得的值之一。但是,如果您不向我们提供输入数据,我无法告诉您是哪一个
  • 感谢您的友好评论。是的,函数 SucP(l,a,P,D,r,2^z-1) 是某个随机变量 X 的 Prob(X>z)。所以我想计算 X 的期望值。和 (l,a ,P,D,r) 是一个参数。我用 (0.5,3,0.2,10,2) 作为参数。
  • 好的。如果我用 f 表示与您的随机变量相关的概率密度函数,那么您正在计算从 z 到 f(x)dx 的无穷大的积分。但是,为了计算期望值,您需要计算 x*f(x)dx 从 -infinity 到 +infinity 的积分。
  • 感谢您的评论,但我的理论没有错。我的整合意味着期望,确切地说。这只是关于 matlab 的问题,而不是数学问题。

标签: matlab integral


【解决方案1】:

尝试以下方式:

1) 你必须去掉那些 NaN 值。它们出现的原因如下:

您正在尝试集成您的功能

SucP(l,a,P,D,r,2.^z-1)

z=0infinity。但是,从 z 的某个值开始,2^z-1 将大于 matlab 可以处理的最大数。

要避免这种情况,您需要做的是更改集成范围,以使 2^z-1 永远不会超过 realmax(这是 MATLAB 可以处理的最大值)。

你的积分上限是:

Upperbound=log(realmax)/log(2)-4;

2) 您必须将您声明的fun 函数声明更改为:

fun=@(z)SucP(l,a,P,D,r,2.^z-1);

然后调用:

Y=integral(fun,0,log(realmax)/log(2)-4);

【讨论】:

  • 你是对的。在我输入 100 而不是 inf 之后,matlab 给了我一个数字而不是 NaN。但是 log(realmax)/log(2)-1 不起作用。这又给了我 NaN。
  • 用 log(realmax)/log(2)-4 试试
  • 我正在使用 MATLAB R2014a。
  • 如我所说,尝试使用 -4 而不是 -1
  • (问题是函数内部的值可能会变得更大,具体取决于参数(l,alP,D,r),这意味着我们必须再次减小最大值)
猜你喜欢
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2021-04-19
  • 1970-01-01
  • 2016-05-09
  • 2015-07-23
相关资源
最近更新 更多