Matlab Numerical integral improvement

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 件のコメント

Niels
Niels 2017 年 2 月 4 日
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.

サインインしてコメントする。

 採用された回答

Karan Gill
Karan Gill 2017 年 2 月 13 日
編集済み: Karan Gill 2017 年 10 月 17 日

1 投票

Updated answer for R2017b. Use int and convert the symbolic solution to floating point.
>> 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 件のコメント

Walter Roberson
Walter Roberson 2017 年 2 月 14 日
編集済み: Walter Roberson 2017 年 2 月 14 日
vpaintegral() with up to 10000 MaxFunctionCalls complains it cannot reach required precision.
The ratio oscillates a lot.
Karan Gill
Karan Gill 2017 年 9 月 25 日
Updated answer with solution starting R2017b.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

質問済み:

2017 年 2 月 4 日

編集済み:

2017 年 10 月 17 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by