Matlab Numerical integral improvement
6 views (last 30 days)
Show older comments
Hi, I have the integral below:
F_A_I=@(x) besselj(1,x.*3.5).*besselj(1,x.*0.5);
A=integral(F_A_I,0,Inf,'RelTol',1e-6,'AbsTol',1e-12,'ArrayValued',true);
But Matlab said:
Warning: Reached the limit on the maximum number of intervals in use. Approximate bound on error is 1.7e+00. The integral may not exist, or it may be difficult to approximate numerically to the requested accuracy.
while Mathematica can give the answer straightforward A=0.0205664
Could you please help me to improve my code. Thanks
1 Comment
Niels
on 4 Feb 2017
probably a definition gap in your function, integral might converge to inf, in these cases matlab displays -> Reached the limit on the maximum number of intervals in use.
Accepted Answer
Karan Gill
on 13 Feb 2017
Edited: Karan Gill
on 17 Oct 2017
>> syms x
f = int(besselj(1, x/2)*besselj(1, (7*x)/2),x,0,inf)
f =
-(4*(100*ellipticE(1/49) - 99*ellipticK(1/49)))/(21*pi)
>> f_dbl = double(ans)
f_dbl =
0.0022
>> f_vpa = vpa(f)
f_vpa =
0.0022054352588140668793354496265733
OLD ANSWER from 13-Feb-2017
The convert to double using "double".
2 Comments
Walter Roberson
on 14 Feb 2017
Edited: Walter Roberson
on 14 Feb 2017
vpaintegral() with up to 10000 MaxFunctionCalls complains it cannot reach required precision.
The ratio oscillates a lot.
More Answers (0)
See Also
Categories
Find more on Calculus in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!