【问题标题】:Integrating a function on matlab在matlab上集成一个函数
【发布时间】:2017-06-22 01:00:50
【问题描述】:

我有一个密度函数f_N,定义如下(K_nu(z)是修改后的贝塞尔函数):

我想为N 的每个值计算以下积分:

以下是上述在matlab中的实现。

for N=1:100
    syms z
    f =@(z) (1/(gamma(N)*sqrt(pi))*(z/2).^(N-0.5).*besselk(0.5-N,z));
    g = @(z) f(z).*log(f(z));
    val=integral(g,0,Inf);

但是当我运行上面的代码时,它总是为 N 的各种值返回 NaN,并带有以下警告:

Warning: Infinite or Not-a-Number value encountered

有人可以建议一种简单的方法来执行此操作或避免此问题吗?

【问题讨论】:

  • ^ 替换为.^ 并告诉我们会发生什么。
  • 我收到此错误:Error using * Inner matrix dimensions must agree.
  • 您还需要将* 替换为.*。那个点使得操作是元素方面的
  • @LuisMendo:我这样做了,它评估为 NaN 值,显示此警告 Warning: Infinite or Not-a-Number value encountered
  • 我建议将您的函数 g 绘制为 N 的几个值,而不进行积分。从图中你应该可以看出它是否是你所期望的,问题是出在 g 的定义上,还是出在它的积分上。

标签: matlab numerical-integration


【解决方案1】:

我不认为你在做你认为你在做的事。您将 z 声明为符号将被函数句柄定义覆盖。这意味着积分不是符号积分,而是数字积分。因此,您只需要删除函数句柄符号“@(z)”并象征性地进行积分...

我的猜测是,在没有彻底分析的情况下,积分域 [0,inf] 中的一个点会产生一个值 f (x)=inf,这会破坏数字积分技术,但可能不是符号积分技术.

【讨论】:

  • 但我需要积分的数值而不是符号数值。
  • 是的。我明白那个。但是,在这种情况下,符号积分应该只计算为常数
  • 例如,如果我们尝试从 t =0...pi 积分 cos (t),您将得到一些数字。但是您可以通过两种方式得出该数字……您可以对它进行符号积分以获得精确解,或者通过数值积分获得近似解
猜你喜欢
  • 2020-07-27
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2017-03-09
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
相关资源
最近更新 更多