Matlab积分中的不连续性

时间:2016-03-08 06:17:54

标签: matlab function integral

我试图在Matlab中对不连续函数进行数值积分。

fun = @(z) 1./((z+1).^2+4) * 1./(exp(-z)-1);
q = integral(fun,-Inf,Inf,'Waypoints',[0])

z=0存在不连续性,但我不确定如何使用Waypoints选项指定此项。我收到一条错误消息:

Warning: Reached the limit on the maximum number of intervals in use. Approximate bound on error is 7.4e-01. The integral may not exist, or it may be difficult to approximate numerically to the requested accuracy.

如何准确计算此积分?

2 个答案:

答案 0 :(得分:2)

从文档“使用航点指示集成区间中您希望集成商使用的任何点”。

可能是该等式中唯一的一点,你不想使用我们零......因为函数在该值处未定义(它的左边和rigth的限制是不同的,因此它不是无限的,它是未定义的)

Wolfram Alpha claims that the integral does not exists

所以,当MATLAB说

  

“积分可能不存在,或者可能难以近似   在数字上达到要求的准确度“

它是......因为它可能不存在!

我想你总是可以这样做:

q = integral(fun,-Inf,-0.001)+integral(fun,0.001,Inf);

但我不确定这是多么正确....

答案 1 :(得分:0)

在@Ander Biguri的正确答案中添加评论。

还有其他具有奇点的函数,例如: 1/((x+1)*sqrt(x))(查看improper integrals

integral(@(x) 1./((x+1).*sqrt(x)), 0, inf)

ans =

    3.1416

甚至可以收敛于奇点不在积分范围边界的函数

integral(@(x) 1./(x.^2).^(1/3), -1, 1)

ans =

    6.0000

所以MATLAB做的一切都是正确的。你的功能不会收敛。

也许您对Cauchy's principal value感兴趣,但这是另一个话题。