我试图在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.
如何准确计算此积分?
答案 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感兴趣,但这是另一个话题。